GGUF

gguf — формат весов и метаданных для запуска моделей

Раздел
Инструменты
Сокращ.
GPT-Generated Unified Format
Обновлено
05.09.26

GGUF — переносимый формат тензоров и метаданных, тесно связанный с llama.cpp и совместимыми приложениями. Файл может содержать квантизированные веса, сведения об архитектуре, токенизатор и шаблон чата. Запуск возможен на CPU, GPU или в смешанном режиме, если точная модель поддерживается выбранным программой.

Коротко

GGUF — формат файла с весами модели и данными о том, как её запускать. Веса могут быть квантизованы — записаны компактнее с некоторой потерей точности. Программа, которая читает файл, распределяет вычисления между процессором и видеокартой, если поддерживает такой режим. Степень сжатия, качество и возможность запуска определяются конкретными весами и программой, а не одним расширением.

Что это такое

Допустим, хочется запустить языковую модель на ноутбуке, но исходные веса не помещаются в память. Один из вариантов — найти совместимую GGUF-сборку с квантизацией и открыть её в программе для локальных моделей.

Модель стала компактнее не из-за расширения файла, а из-за выбранного представления весов. Скорость ответа при этом зависит от архитектуры, размера контекста, квантизации и оборудования.

GGUF появился как преемник форматов семейства GGML в экосистеме llama.cpp. Он хранит тензоры вместе с метаданными об архитектуре и токенизаторе, а некоторые файлы включают шаблон чата. Это упрощает перенос, но программа всё равно должна поддерживать конкретную архитектуру, тип квантования и нужные внешние ресурсы.

С GGUF часто связывают квантизацию: часть весов хранится с пониженной точностью и дополнительными параметрами масштаба. Это уменьшает файл и требования к памяти, но степень сжатия и потеря качества зависят от схемы, модели и задачи.

Как это работает

Внутри GGUF есть заголовок, метаданные, описания тензоров и область с их значениями.

  1. Заголовок и метаданные сообщают версию формата и сведения о содержимом. В зависимости от модели здесь могут быть архитектура, параметры контекста, словарь токенизатора и шаблон чата. Наличие нужных полей всё равно проверяет загрузчик.
  2. Описания тензоров задают имена, размеры, типы чисел и положение данных в файле.
  3. Данные тензоров содержат сами значения. Они могут храниться с разной точностью; в блочных схемах квантизации группы значений дополняются масштабами и другими параметрами.

Большую модель также можно разделить на несколько GGUF-файлов. В мультимодальной системе отдельные компоненты могут поставляться отдельно: одно расширение не обещает, что внутри уже есть всё нужное.

Названия вроде Q4_K_M или Q8_0 обозначают конкретные схемы квантизации. Цифра помогает ориентироваться в классе точности, но фактическое среднее число бит на вес включает служебные данные и зависит от формата блоков. Суффиксы различают варианты обработки тензоров.

Распределением работы занимается программа, а не формат. В llama.cpp и некоторых обёртках можно задать число слоёв для видеокарты; в программных интерфейсах встречается имя n_gpu_layers. Остальные слои остаются на процессоре. Так можно запустить модель, которая целиком не помещается в видеопамять, если хватает обычной оперативной памяти. Скорость смешанного режима зависит от обмена данными и оборудования.

Пример на практике

Представим монтажёра, которому нужна локальная модель для описаний роликов и редактирования готовой расшифровки. Он хочет обойтись без оплаты API и отправки рабочих текстов в облако.

Он выбирает модель, обученную отвечать на инструкции, — instruct-модель — в GGUF и несколько вариантов квантизации из одного источника. Сначала проверяет, помещаются ли веса вместе с KV-кэшем, затем сравнивает качество на одинаковых описаниях. Часть слоёв можно передать видеокарте, а остальные оставить в оперативной памяти; скорость зависит от модели, контекста и конкретного оборудования.

GGUF встречается и в некоторых пайплайнах изображений и мультимодальных моделей. Квантизированные веса уменьшают требования к памяти, но совместимость зависит от загрузчика, архитектуры и набора поддерживаемых операций. Результат может отличаться от полной точности, поэтому его проверяют на одном seed и одинаковых настройках.

С чем часто путают

  • GGUF и Safetensors — оба формата хранят тензоры и метаданные, но ориентированы на разные экосистемы. Safetensors может содержать веса разной точности, а GGUF тесно связан с переносимым инференсом и его схемами квантизации.
  • GGUF и GGML — GGML прежде всего библиотека для вычислений. В её экосистеме были и старые форматы хранения моделей, преемником которых стал GGUF. Расширение .bin само по себе ничего не доказывает: так называют разные двоичные файлы.
  • GGUF и квантизация — квантизация уменьшает точность представления чисел, а GGUF хранит результат. При этом GGUF может содержать и неквантованные веса, например FP16.
  • GGUF и AWQ/EXL2 — понятия разного уровня. GGUF — контейнер, AWQ — метод квантизации весов, EXL2 — квантованное представление из экосистемы ExLlamaV2. Поддержку каждого варианта определяет выбранная программа.

Частые ошибки и заблуждения

  • «GGUF работает только на процессоре». Не так. Совместимые программы могут выполнять операции на видеокарте и распределять слои между CPU и GPU.
  • «Больше битов всегда заметно лучше». Потеря зависит от модели и задачи. Иногда соседние варианты почти неразличимы, а иногда сильное сжатие портит код, редкие языки или следование формату.
  • «Любой GGUF сильно режет качество». Квантизация создаёт компромисс, но его размер нельзя выразить одной универсальной цифрой. Сравнение проводят на одинаковом наборе запросов.
  • «Расширение файла определяет весь процесс обучения». Дообучение обычно идёт в форматах, которые поддерживает выбранный фреймворк, после чего результат конвертируют. Возможности конкретного инструмента стоит проверять отдельно.
  • «GGUF — это только про текст». Формат применяется и для некоторых мультимодальных и генеративных архитектур, если их поддерживает конкретная программа.

Связанные термины

  • Safetensors — другой формат хранения тензоров; из него часто экспортируют исходные веса.
  • Quantization — квантизация, которую часто используют в GGUF-сборках, но она не обязательна.
  • FP16/BF16/FP8 — форматы чисел с разным диапазоном и точностью.
  • VRAM — видеопамять, дефицит которой GGUF и помогает обойти.
  • LLM — главный тип моделей, которые раздают в GGUF.
  • ComfyUI — среда, где совместимые загрузчики могут читать GGUF-веса моделей изображений.

Частые вопросы

Чем открыть файл GGUF? Программой с поддержкой нужной архитектуры и схемы квантизации: например, llama.cpp или совместимым локальным приложением. Для модели изображений нужен её загрузчик, например подходящие GGUF-ноды в ComfyUI. Файл для одной архитектуры не становится совместимым с другой только из-за расширения.

Нужна ли видеокарта? Для многих языковых моделей возможен запуск на CPU, если хватает памяти и устраивает скорость. Видеокарта может ускорить работу, но это зависит от поддержки операций и распределения вычислений.

Какой квант скачивать? Сначала считают память под веса и нужный контекст, затем сравнивают несколько уровней квантизации на реальных запросах. Более крупный файл обычно сохраняет больше точности, но величина разницы зависит от модели и сценария.

Где брать готовые GGUF? В официальном репозитории модели или у автора конвертации, например на Hugging Face. Полезно проверить исходную модель, лицензию, метод квантизации и требования к загрузчику. Ссылка из карточки разработчика надёжнее случайного файла с подходящим названием.

Можно ли сделать GGUF самому? Если архитектура поддерживается конвертером, да. В llama.cpp скрипт convert_hf_to_gguf.py переносит модель из поддерживаемого исходного представления в GGUF. Для многих схем затем отдельно запускают llama-quantize. Конвертеру нужны не только веса, но и соответствующие сведения об архитектуре и токенизаторе.

Главное

GGUF — формат для хранения модели и метаданных, особенно распространённый в экосистеме llama.cpp. Он удобен для локального запуска и смешанного размещения вычислений между CPU и GPU, если программа поддерживает архитектуру. Вариант квантизации выбирают по доступной памяти и проверяют на своих запросах: универсальной точки, одинаково удачной для всех моделей и задач, нет.

Источники