Квантизация LLM: 8 бит, 4 бита, GGUF и потеря качества
Продвинутое4 минРедакция Innovialabs
Коротко
Квантизация хранит веса модели меньшим числом бит, экономя память и часто ускоряя работу; 8 бит обычно близки к оригиналу, 4 бита — практичный компромисс, а надёжно проверить качество можно только на своих данных.
Что делает квантизация
Языковая модель — это в основном огромный набор чисел, весов. По умолчанию они хранятся как 16-битные числа с плавающей точкой (FP16 или BF16). Квантизация хранит их меньшим числом бит: 8, 4 или ещё меньше.
Эффект — простая арифметика. Модели на 7B параметров нужно около 14 ГБ в 16 битах, около 7 ГБ в 8 битах и примерно 3,5-4 ГБ в 4 битах (плюс накладные расходы). Это позволяет:
- запускать модель на меньшей или более дешёвой GPU, даже на CPU или ноутбуке;
- уместить более крупную модель на том же железе;
- освободить память под KV-кэш и обслуживать больше параллельных запросов;
- часто ускорить генерацию, потому что через память проходит меньше данных.
Цена — точность. Меньше бит — больше ошибок округления, и модель может стать немного менее точной.
Как это работает в двух словах
Диапазон реальных значений отображается на небольшой набор целочисленных уровней. В 4 битах всего 16 уровней, поэтому методы различаются тем, насколько умно их выбирают:
- Масштаб по группам — веса делятся на маленькие группы со своим масштабом, чтобы выбросы не портили всю матрицу.
- Калибровка — часть методов прогоняет через модель примеры данных, чтобы понять, какие веса важнее.
- Смешанная точность — чувствительные слои получают больше бит, остальные меньше.
Сравнение форматов и методов
| Метод / формат | Где используется | Главная идея |
|---|---|---|
| 8 бит (INT8, FP8) | GPU-серверы, vLLM, TensorRT-LLM | Минимальная потеря качества, примерно вдвое меньше памяти |
| GPTQ | инференс на GPU | 4 бита, калибровочные данные минимизируют ошибку слой за слоем |
| AWQ | инференс на GPU | 4 бита, защищает веса, важные для активаций |
| bitsandbytes (NF4) | Hugging Face, дообучение QLoRA | Квантизация при загрузке, удобно для экспериментов и обучения |
| GGUF | llama.cpp, Ollama, LM Studio | Формат файла для CPU и смешанного CPU/GPU, уровни вроде Q8_0, Q5_K_M, Q4_K_M |
GGUF — это формат-контейнер, а не один метод. Уровень зашит в название: Q8_0 — 8 бит, Q4_K_M — популярный 4-битный вариант «K-quant». Больше число — больше бит и выше качество, меньше число — меньше файл.
Сколько качества теряется
Общие закономерности, а не гарантии:
- 8 бит обычно очень близки к оригиналу на большинстве задач.
- 5-6 бит — безопасная середина.
- 4 бита — распространённый компромисс: заметно меньше, часто достаточно хорошо, но потери проявляются на сложных рассуждениях, математике, коде и менее распространённых языках.
- 3 бита и ниже быстро деградируют, особенно у маленьких моделей.
Крупные модели обычно переносят квантизацию лучше маленьких. Квантизованная крупная модель может обойти маленькую модель в полной точности при сопоставимом объёме памяти.
Как измерить потерю для своей задачи
Публичные бенчмарки не покажут, как модель ведёт себя на ваших данных. Проверьте сами:
- Соберите eval-набор — 50-200 реальных запросов из вашей области с ожидаемыми ответами или критериями оценки.
- Запустите базовую версию — ту же модель в 16 или 8 битах.
- Запустите квантизованные варианты — например Q8, Q5, Q4 — с теми же промптами и temperature 0.
- Оцените ответы — точное совпадение для структурированных задач, LLM-as-judge или ручная проверка для свободного текста.
- Проверьте ошибки формата — сломанный JSON или неудачные tool calls часто появляются раньше общего падения качества.
- Замерьте скорость и память под реалистичной нагрузкой.
Perplexity — полезный быстрый сигнал при сравнении квантизаций одной модели, но он не заменяет тестов на ваших задачах.
Как выбрать
- Памяти GPU хватает? Берите 16 или 8 бит и не рискуйте.
- Бюджет на GPU ограничен? Попробуйте AWQ или GPTQ в 4 битах и проверьте на своём eval-наборе.
- CPU, ноутбук или edge-устройство? GGUF с llama.cpp или Ollama; начните с Q4_K_M или Q5_K_M.
- Дообучение на небольшой GPU? Стандартный путь — QLoRA с 4-битным bitsandbytes.
Частые ошибки
- Выбирать самый маленький файл, не проверив реальные задачи.
- Сравнивать сразу разные модели и разные квантизации — непонятно, что дало разницу.
- Забывать, что KV-кэшу тоже нужна память — веса не вся картина.
- Считать, что квантизованная модель на другом языке ведёт себя так же, как на английском.