Квантизация позволяет запускать большие модели на доступном оборудовании. Вместо хранения каждого веса в 16-битном формате мы представляем его меньшим количеством бит — например, восемью, шестью или четырьмя. Файл становится компактнее, модель требует меньше памяти и нередко работает быстрее.
Из этого легко сделать слишком удобный вывод: если итоговый бенчмарк изменился незначительно, значит качество сохранилось. На практике ошибки часто проявляются не в среднем балле, а в редких фактах, форматировании кода, tool calling и длинных цепочках рассуждений.
Что именно делает квантизация
Веса нейросети — это числа с плавающей точкой. В BF16 на один вес приходится 16 бит. При квантизации множество близких значений отображается на меньшее количество дискретных уровней. Вместе с блоком весов хранятся коэффициенты масштаба, с помощью которых движок приблизительно восстанавливает значения во время вычисления.
Поэтому Q4 не означает, что каждый параметр занимает ровно половину байта и больше ничего. В формате есть масштабы, минимумы, метаданные, а чувствительные тензоры могут сохраняться в более высокой точности. Современные схемы Q4_K_M, Q5_K_M и importance-aware quantization распределяют точность умнее старых Q4_0.
Как меняется размер
Для плотной модели 70B грубый порядок выглядит так:
- BF16: около 140 ГБ весов;
- Q8: около 70–80 ГБ;
- Q6: около 55–65 ГБ;
- Q5: около 45–55 ГБ;
- Q4: около 35–45 ГБ.
Это ориентиры, а не обещание совместимости. Отдельно нужны память под контекст, KV-cache и движок. Мультимодальные модели могут иметь дополнительный vision- или audio-проектор.
Почему бенчмарк может не заметить проблему
Alex Ziskind последовательно уменьшал точность одной модели и сравнивал perplexity, MMLU, математические и кодовые тесты. На ранних ступенях графики почти не двигались. При этом в ответах уже менялись факты: модель путала участников лунных миссий, придумывала прозвища и добавляла правдоподобные, но несуществующие детали.
В отдельном тесте полный и 4-битный варианты модели дали похожий результат по смыслу, но по-разному расставляли отступы в коде. Автоматический тест сначала интерпретировал это как разницу в знаниях. Это важное наблюдение: оценка модели может одновременно скрывать реальную деградацию и преувеличивать несущественное различие.
Что обычно теряется первым
- Редкие знания: популярные факты сохраняются, а малочастотные детали начинают смешиваться.
- Точность формата: JSON, XML, таблицы и исходный код могут получить незаметные структурные ошибки.
- Длинные рассуждения: маленькая ошибка на раннем шаге распространяется на всю цепочку.
- Tool calling: модель знает, какой инструмент нужен, но ошибается в имени поля или типе аргумента.
- Устойчивость: ответ может быть правильным девять раз и неожиданно сломаться на десятый.
Как читать обозначения GGUF
Q8_0 — высокоточная 8-битная схема. Q4_0 — ранний простой 4-битный формат, который сегодня редко является лучшим выбором. Суффиксы _K указывают на более современные блочные схемы, а _M обычно означает смешанное распределение типов для сохранения важных тензоров. IQ-форматы используют другие методы представления и могут дать меньший размер, но требуют проверки поддержки на конкретном backend.
Нельзя сравнивать кванты только по цифре в названии. Q4 разных семейств могут заметно отличаться по размеру, скорости и качеству.
Практический выбор точности
- Q4_K_M: разумная отправная точка для общего чата, черновиков и RAG, где ответ подтверждается найденными источниками.
- Q5 или Q6: предпочтительнее для программирования, аналитики, русского языка, длинных документов и инструментальных агентов.
- Q8: полезен, когда памяти достаточно, а важны стабильность формата и минимальная деградация относительно исходной модели.
- BF16/FP16: нужен как контрольный профиль, для дообучения или задач, где даже небольшое изменение поведения критично.
Для юридических, медицинских, инженерных и финансовых документов одной высокой точности всё равно недостаточно. Требуются RAG, цитирование источников, правила отказа и проверка человеком.
Почему не стоит повторно квантизировать готовый квант
Проект llama.cpp отдельно предупреждает: повторная квантизация уже сжатой модели способна заметно ухудшить качество. Правильный процесс начинается с исходного F16 или BF16 checkpoint, после чего создаётся нужный формат. Если происхождение файла неизвестно, красивое имя Q6 не гарантирует качество.
Как BunkerAI выбирает квантование
- Берём исходную модель и несколько кандидатов Q8, Q6, Q5 и Q4.
- Проверяем их на типовых открытых тестах, но не останавливаемся на среднем балле.
- Добавляем реальные документы, русский язык, длинный контекст, JSON и вызовы инструментов.
- Измеряем долю полностью завершённых задач, а не только скорость генерации.
- Фиксируем модель, движок и параметры как воспроизводимый профиль комплектации.
Итог: квантизация — не ухудшенная копия модели по определению, а инженерный компромисс. Хороший Q5 может быть практически неотличим от BF16 в нужном сценарии, а слишком агрессивный Q4 — уверенно ошибаться там, где общий бенчмарк ничего не заметил. Выбирать нужно по задачам организации, а не по минимальному размеру файла.