Заметки

GGUF и квантизация: как локальные модели сжимаются в 4 бита

M
Markabus
·
Штангенциркуль и деревянная линейка рядом с накопителем GGUF — метафора разной точности представления весов модели. Таблички «16 бит» и «4 бита»; компактная пометка «Иллюстрация · сгенерировано ИИ».

При скачивании локальной нейросети легко встретить десяток похожих файлов: Q4_K_M, Q5_K_M, Q8_0, F16. Название модели одинаковое, но размер различается в несколько раз. Возникает вопрос: какой GGUF скачать, чтобы модель запустилась и не потеряла слишком много в качестве?

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

Что такое GGUF и зачем он нужен

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

Представьте контейнер с моделью и её описанием. Расширение .gguf указывает на устройство этого контейнера. Оно не сообщает само по себе, насколько хороша модель, сколько памяти ей требуется и умеет ли её запускать установленная версия программы.

Для работы можно использовать llama.cpp, LM Studio или импорт в Ollama. Но поддержка GGUF не равна поддержке любой архитектуры внутри файла. Если модель недавно вышла, понадобится совместимая версия движка. У некоторых мультимодальных моделей для обработки изображений нужны дополнительные файлы — одного расширения GGUF недостаточно, чтобы обещать полный набор возможностей.

Базовый запуск разобран в заметках про LM Studio и про локальные модели в Ollama. Здесь сосредоточимся на выборе весов.

Квантизация моделей простыми словами

Во время обучения модель получает числовые параметры — веса. Для хранения каждого числа требуется определённое количество бит. Квантизация заменяет исходные значения более компактным приближённым представлением. Так уменьшаются объём файла и потребность в памяти для весов.

Бытовая аналогия — измерение линейкой с более крупными делениями. Положение предмета остаётся примерно понятным, но часть точности теряется. В нейросети всё сложнее: значения обрабатывают блоками, сохраняют масштабы и используют разные схемы для разных групп весов. Поэтому «4 бита» не означает простое округление каждого числа до одинакового количества знаков после запятой.

При обычной квантизации весов число параметров не уменьшается. Модель на 8 миллиардов параметров не становится моделью на 4 миллиарда: меняется способ хранения чисел. Удаление параметров и слоёв — другие операции.

Это также не ZIP-архив. После распаковки архива исходный файл восстанавливается точно, а после квантизации часть информации уже потеряна. Преобразование Q4 обратно в F16 не вернёт исходную точность весов.

Как читать Q4_K_M, Q5_K_M и другие обозначения

Возьмём условное имя Demo-8B-Instruct-Q4_K_M.gguf. Это пример структуры названия, а не ссылка на существующий релиз:

  • Demo — название семейства или модели;
  • 8B — ориентир по числу параметров: около 8 миллиардов, а не 8 гигабайт;
  • Instruct — вариант, настроенный на следование инструкциям; точное назначение смотрят в карточке модели;
  • Q4_K_M — выбранная схема квантизации;
  • .gguf — формат файла.

В обозначении Q4_K_M число 4 задаёт основной класс точности, K относится к семейству блочных K-квантов, а M отличает вариант пресета. Пресет может смешивать типы хранения для разных тензоров. Это не обещание ровно четырёх бит на каждый параметр: место занимают и служебные величины, а часть весов может храниться точнее.

ОбозначениеКак пониматьКогда сравнивать
F16 / BF1616-битные числовые форматы; большой объём весовКогда нужен менее сжатый исходник или достаточно памяти
Q8_08-битная схема со служебными даннымиКак менее агрессивно сжатый вариант для сравнения
Q6_K / Q5_K_MБольше места под точность, чем у вариантов класса Q4Когда память позволяет проверить качество более крупного файла
Q4_K_MКомпактный смешанный пресет класса Q4Как отправную точку, если он доступен и поддерживается движком
Q3 / Q2 и другие низкобитные вариантыБолее жёсткий компромисс по размеру и точностиПри сильном дефиците памяти и обязательной проверке результата

В каталогах встречаются и семейства IQ, и другие схемы. Их нельзя ранжировать одной цифрой из имени: различаются алгоритмы, поддержка оборудования и способ подготовки файла. Сначала имеет смысл освоить несколько вариантов одной модели, а не скачивать все существующие форматы.

Сколько памяти нужно: расчёт и реальные ограничения

Для грубой оценки объёма самих весов можно использовать формулу:

число параметров × число бит на параметр / 8 = объём в байтах

Для условной модели ровно на 8 миллиардов параметров получаются такие значения при идеальной упаковке только чисел:

Условная точностьРасчётный объём весов
16 бит16 ГБ
8 бит8 ГБ
4 бита4 ГБ

Здесь ГБ — десятичные миллиарды байтов. Это не размеры реальных файлов Q4_K_M и не требования к видеопамяти. Учитывайте фактический размер скачивания, метаданные, параметры блоков и смешанную точность. Например, для самого типа Q4_K документация указывает 4,5 бита на вес с учётом служебных значений; пресет Q4_K_M дополнительно может использовать другие типы тензоров.

Во время работы память нужна ещё и под контекст, KV-кеш — сохранённое состояние обработки предыдущих токенов — и вычислительные буферы. Для нескольких параллельных диалогов и длинного контекста расход может существенно отличаться. Поэтому файл на 5 ГБ не гарантирует успешную загрузку целиком в видеокарту с 6 ГБ.

Если часть вычислений идёт на CPU, а часть на GPU, нагрузка распределяется между оперативной и видеопамятью. Их нельзя просто сложить и считать единой быстрой видеопамятью. На системах с общей памятью устройство другое, но место всё равно требуется операционной системе и приложениям.

Количество параметров, которое активно в одном шаге у MoE-модели, также не заменяет объём всех необходимых весов. Перед загрузкой смотрите размер конкретной сборки и требования движка. А длина контекста измеряется в токенах, а не в гигабайтах.

Как выбрать GGUF под свой компьютер

  1. Выберите саму модель. Проверьте язык, назначение, лицензию и поддержку архитектуры в вашей программе.
  2. Найдите варианты одной и той же версии. Q4 и Q5 разных моделей ничего не говорят о влиянии квантизации.
  3. Посмотрите фактический размер файлов. Для первой проверки можно взять Q4_K_M, а при запасе памяти — сравнить с Q5_K_M.
  4. Задайте рабочий контекст. Не выставляйте максимальное окно только потому, что оно указано в карточке.
  5. Оцените память и запустите свои задания. Проверьте короткий запрос, длинный документ и типичную задачу с кодом.

В LM Studio есть предварительная оценка памяти через CLI — командную строку программы. После скачивания модели выполните:

lms ls
lms load --estimate-only MODEL_KEY --context-length 4096

Вместо MODEL_KEY подставьте ключ нужной локальной модели из lms ls. Число 4096 здесь — пример для оценки, а не универсальная рекомендация. Команда с --estimate-only показывает оценку без загрузки модели; в ней учитываются настройки контекста и другие параметры. Это полезный ориентир, который затем проверяют реальным запуском.

Если модель не помещается, можно сократить контекст, изменить выгрузку на GPU или выбрать меньшую модель. Более сильное сжатие большой модели — лишь один из вариантов. Иногда меньшая модель с менее агрессивной квантизацией оказывается удобнее, но это надо проверять на своей задаче.

Насколько квантизация ухудшает ответы

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

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

Записывайте не только скорость выдачи токенов, но и время до первого ответа, пиковую память, число корректно выполненных задач. Если выбранная сборка не позволяет использовать рабочий контекст или чаще ломает формат, экономия на размере может не оправдаться.

Надпись imatrix в описании сборки означает использование матрицы важности при подготовке квантизации. Её получают на калибровочных данных, чтобы учитывать чувствительность весов. Это не гарантия лучшего результата в любой предметной области; полезно смотреть, какие данные использовал автор сборки.

Что проверить перед скачиванием и импортом

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

В Ollama одиночный GGUF можно импортировать через файл Modelfile со строкой FROM ./model.gguf, затем выполнить ollama create my-local-model -f Modelfile. Подставьте путь к своему файлу и проверьте поддержку модели. По текущей документации Ollama не квантизирует GGUF при импорте: степень сжатия выбирается заранее.

Самостоятельно пережимать Q4 в другой квант для первого запуска обычно не нужно. Документация llama.cpp предупреждает, что повторная квантизация уже сжатых весов способна заметно ухудшить качество по сравнению с подготовкой из 16- или 32-битного источника. Лучше скачать нужную сборку либо квантизировать подходящий исходник по инструкции инструмента.

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

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

Q.GGUF — это обязательно модель в 4 битах?

Нет. GGUF — формат хранения тензоров и метаданных. В нём могут находиться веса F16, BF16 и различные квантизованные варианты. Степень сжатия смотрят отдельно в названии файла, карточке и метаданных.

Q.Что выбрать для первого запуска: Q4_K_M или Q5_K_M?

Если оба варианта относятся к одной версии модели и поддерживаются программой, Q4_K_M можно взять как компактную отправную точку, а Q5_K_M — для сравнения при запасе памяти. Окончательный выбор делают по качеству своих задач и расходу памяти с рабочим контекстом.

Q.Почему для GGUF-файла на 5 ГБ может не хватить 6 ГБ видеопамяти?

Во время работы место занимают не только веса: нужны KV-кеш, вычислительные буферы и другие данные. Потребление зависит от контекста, параллельных запросов, движка и распределения слоёв между CPU и GPU.

Q.Можно ли вернуть исходную точность, преобразовав Q4 в F16?

Нет. Обычная квантизация хранит приближённые значения и теряет часть информации. Увеличение разрядности уже квантизованных весов не восстановит исходные числа; для менее сжатой сборки нужен подходящий исходник.

Источники

Поделиться:OKVK