Блог AST-SoftPro
Квантование больших языковых моделей: полное руководство по методам, потере точности и практическим рекомендациям
Введение
Запуск больших языковых моделей (LLM) в продакшене — это не просто вопрос выбора модели. Это вопрос того, сколько VRAM она займёт, сколько токенов в секунду выдаст, и сколько денег вы потратите на инфраструктуру. Квантование — ключевая технология, которая позволяет запускать модели в 2–4 раза быстрее и в 2–4 раза дешевле, сохраняя при этом подавляющую часть качества.
В этой статье мы разберём, что такое квантование, какие методы существуют, сколько точности теряется на каждом шаге, и как выбрать правильный подход для вашего проекта.
Что такое квантование и зачем оно нужно
Квантование — это процесс снижения разрядности весов нейронной сети. Вместо хранения каждого веса в формате FP16 (16-битное число с плавающей запятой), мы представляем его в INT8 (8-битное целое), INT4 (4-битное целое) или даже ещё более компактных форматах.
Практическая выгода очевидна:
-
FP16 → INT8: модель занимает вдвое меньше памяти, инференс ускоряется примерно в 1.5 раза
-
FP16 → INT4: модель занимает вчетверо меньше памяти, инференс ускоряется примерно в 2 раза
-
FP16 → FP8: модель занимает вдвое меньше памяти, при этом качество практически не теряется
💡 Для бизнеса: квантование позволяет запускать 70-миллиардную модель на одном GPU вместо восьми — это экономия десятков тысяч долларов в месяц на инфраструктуре.
Основные форматы квантования
FP8 — золотой стандарт для продакшена
FP8 (8-битное число с плавающей запятой) — это формат, который набирает популярность благодаря нативной аппаратной поддержке на GPU NVIDIA Hopper (H100) и Blackwell (B200).
Качество: ~99% от BF16 на бенчмарках MMLU-Pro и HumanEval.
Плюсы:
-
Практически без потери точности (0.4 пункта на MMLU-Pro против FP16)
-
Нативная аппаратная поддержка на современных GPU
-
Идеально для high-throughput continuous batching
Минусы:
-
Требует GPU с поддержкой FP8 (Hopper/Blackwell)
-
На старых GPU (Ampere) не даёт преимущества
INT8 — универсальный выбор
INT8 (8-битное целое число) — проверенный формат, поддерживаемый практически на любом железе.
Качество: ~97–98% от BF16.
Плюсы:
-
Широкая поддержка (bitsandbytes, TensorRT, llama.cpp)
-
Работает на Ampere (A100) и старше
-
Простая калибровка через
llm.int8()
Минусы:
-
Потеря точности 1–3% на некоторых задачах
-
Требует калибровки для outlier-активаций
AWQ (Activation-aware Weight Quantization)
AWQ — это метод квантования весов с учётом активаций. Алгоритм анализирует, какие веса влияют на активации больше всего, и защищает их от агрессивного квантования.
Качество: ~94–96% от BF16 при INT4.
Плюсы:
-
Лучшее качество среди INT4-методов
-
Marlin-AWQ — самый быстрый вариант для продакшена
-
Работает на любом GPU
Минусы:
-
Требует калибровочного датасета (обычно 128 примеров)
-
Квантование занимает время (минуты для 70B модели)
GPTQ (Generative Pretrained Tokenizer Quantization)
GPTQ — один из самых популярных методов INT4-квантования, появившийся в 2022 году и остающийся самым цитируемым по состоянию на 2026 год.
Качество: ~94–96% от BF16 при INT4 (чуть ниже AWQ).
Плюсы:
-
Широкая поддержка (GGUF, Marlin)
-
Много готовых квантованных моделей на HuggingFace
-
Marlin-GPTQ быстрее, чем Marlin-AWQ
Минусы:
-
Чуть ниже качество, чем AWQ (1.9 пункта на MMLU-Pro против FP16)
-
Чувствителен к выбору калибровочного датасета
GGUF — формат для локального запуска
GGUF — это не метод квантования, а формат файла, который поддерживает множество уровней квантования и используется в llama.cpp. Внутри GGUF реализованы как классические методы (Q4_0, Q8_0), так и современные K-quants и IQ-quants.
Качество: зависит от уровня (Q8_0 ≈ INT8, Q4_K ≈ AWQ/GPTQ).
Плюсы:
-
Работает на CPU (не только GPU)
-
Идеален для edge-устройств и ноутбуков
-
Поддержка на macOS, Linux, Windows
Минусы:
-
Медленнее, чем GPU-оптимизированные форматы (Marlin)
-
Меньше контроля над качеством
K-quants: Q4_K, Q5_K, Q6_K
K-quants — это семейство методов, которые используют смешанную разрядность: часть весов квантуется сильнее, часть слабее. Это позволяет сохранить качество на критичных слоях при общем уменьшении размера.
-
Q4_K — 4-битное квантование с K-стратегией. Баланс между размером и качеством. Модель 149B занимает ~90 GB.
-
Q5_K — 5-битное квантование. Лучше качество, чем Q4_K, при умеренном росте размера. Модель 149B занимает ~106 GB.
-
Q6_K — 6-битное квантование. Качество близко к Q8_0, но модель меньше. Модель 149B занимает ~123 GB.
💡 Практический совет: Q6_K часто даёт лучшее соотношение качество/размер — качество почти как у Q8_0, но модель на 20–25% меньше.
IQ-quants: IQ1, IQ2, IQ3, IQ4
IQ-quants — это семейство методов от llama.cpp, которые используют более агрессивное квантование с адаптивным выбором групп. Каждый уровень имеет несколько вариантов с суффиксами M, S, XS, XXS:
-
M (Medium) — наименьшая компрессия в рамках уровня, лучшее качество
-
S (Small) — средняя компрессия
-
XS (Extra Small) — высокая компрессия
-
XXS (Extra Extra Small) — максимальная компрессия, наименьшее качество
Разница в размерах на примере модели 149B (Cerebras Step-3.5-Flash-REAP):
| Формат | Размер | Качество (относительно) |
|---|---|---|
| IQ1_M | 33.4 GB | ~75–80% от BF16 |
| IQ1_S | 30 GB | ~70–75% от BF16 |
| IQ2_XXS | 39.1 GB | ~80–85% от BF16 |
| IQ2_XS | 43.7 GB | ~82–87% от BF16 |
| IQ2_S | 44.1 GB | ~83–88% от BF16 |
| IQ2_M | 48.7 GB | ~85–90% от BF16 |
| IQ3_XXS | 57.5 GB | ~88–92% от BF16 |
| IQ3_XS | 60.8 GB | ~89–93% от BF16 |
| IQ3_S | 64.6 GB | ~90–94% от BF16 |
| IQ3_M | 65.2 GB | ~91–95% от BF16 |
| IQ4_XS | 79.7 GB | ~93–96% от BF16 |
| IQ4_NL | 84.3 GB | ~94–97% от BF16 |
| Q4_K | 89.9 GB | ~94–96% от BF16 |
| Q5_K | 106 GB | ~96–98% от BF16 |
| Q6_K | 123 GB | ~97–99% от BF16 |
⚠️ Важно: суффиксы M/S/XS/XXS влияют не только на размер, но и на качество. IQ2_M (48.7 GB) заметно лучше IQ2_XXS (39.1 GB) — разница в качестве может быть 5–10%. Если VRAM позволяет, всегда выбирайте M или S.
IQ4_NL vs IQ4_XS vs Q4_K
IQ4_NL (No Layers) — это вариант, где некоторые слои не квантуются так агрессивно. IQ4_NL (84.3 GB) чуть больше IQ4_XS (79.7 GB), но качество выше. Q4_K (89.9 GB) — самый большой из 4-битных вариантов, но и самый стабильный по качеству.
💡 Рекомендация: если нужно 4-битное квантование и VRAM позволяет — Q4_K. Если нужно ужать ещё сильнее — IQ4_NL, а не IQ4_XS.
Сравнительная таблица методов квантования
| Формат | Качество vs BF16 | VRAM (70B) | Скорость | Лучшее применение |
|---|---|---|---|---|
| FP8 | ~99% | ~35 GB | Высокая | Production на Hopper/Blackwell |
| INT8 | ~97–98% | ~35 GB | Высокая | Production на Ampere |
| AWQ INT4 | ~94–96% | ~18 GB | Очень высокая | VRAM-constrained, latency-bound |
| GPTQ INT4 | ~94–96% | ~18 GB | Очень высокая | Быстрый инференс, много готовых моделей |
| GGUF Q6_K | ~97–99% | ~25 GB | Средняя | Локальный запуск, баланс качество/размер |
| GGUF Q5_K | ~96–98% | ~21 GB | Средняя | Локальный запуск, хорошее качество |
| GGUF Q4_K | ~90–94% | ~18 GB | Средняя | Локальный запуск, CPU |
| GGUF Q8_0 | ~97–98% | ~35 GB | Средняя | Локальный запуск, CPU |
Потеря точности: что говорят бенчмарки
На основе данных по шести 70B-моделям (Llama 4 70B, Qwen 3 72B, DeepSeek V4-Flash, Mistral Large 2, Command-R+, Yi 2) картина выглядит так:
-
FP8: 0.4 пункта на MMLU-Pro и HumanEval+ против FP16
-
INT8: 0.7 пункта на MMLU-Pro и HumanEval+ против FP16
-
AWQ-4: 1.6 пункта на MMLU-Pro и HumanEval+ против FP16
-
GPTQ-4: 1.9 пункта на MMLU-Pro и HumanEval+ против FP16
⚠️ Важно: потеря точности не линейна. На простых задачах (общий диалог, суммаризация) квантование практически незаметно. На сложных задачах (математика, код) разница может быть существенной.
Примеры потери точности у конкретных моделей
Qwen 2.5 7B:
-
Q8_0: стабильная производительность на всех пяти задачах
-
Q5_K: стабильная производительность
-
Q4_K: значительное снижение точности
Llama 3 8B:
-
Q8_0: стабильная производительность
-
Q5_K: стабильная производительность
-
Q4_K: значительное снижение точности
Llama 3.1 8B (HumanEval):
-
FP16: 43.05%
-
FP8: 41.69%
-
INT8: 43.78%
-
INT4: 40.60%
💡 Практический вывод: для задач, где точность критична (медицина, юриспруденция, финансы), рекомендуется FP8 или INT8. Для общих задач (чат-боты, суммаризация, генерация контента) INT4 через AWQ — отличный выбор.
Sub-4-bit квантование: новое поколение
Появились методы квантования ниже 4 бит — IQ1, IQ2, IQ3. Эти форматы позволяют запускать огромные модели на потребительском железе. На примере модели 149B (Cerebras Step-3.5-Flash-REAP-149B-A11B):
IQ1 (1 бит):
-
IQ1_M: 33.4 GB, IQ1_S: 30 GB
-
Качество: ~70–80% от BF16
-
Применяется для edge-устройств и мобильных телефонов
-
Модель 149B помещается в 30 GB — это в 5 раз меньше оригинала
IQ2 (2 бита):
-
IQ2_XXS: 39.1 GB, IQ2_XS: 43.7 GB, IQ2_S: 44.1 GB, IQ2_M: 48.7 GB
-
Качество: ~80–90% от BF16 (зависит от варианта)
-
Модель 149B помещается в 39–49 GB
-
IQ2_M заметно лучше IQ2_XXS — разница в качестве может быть 5–10%
IQ3 (3 бита):
-
IQ3_XXS: 57.5 GB, IQ3_XS: 60.8 GB, IQ3_S: 64.6 GB, IQ3_M: 65.2 GB
-
Качество: ~88–95% от BF16 (зависит от варианта)
-
Модель 149B помещается в 57–65 GB
-
Компромисс между размером и качеством
⚠️ Предупреждение: sub-4-bit квантование теряет значительную часть качества. Используйте только когда нет другого выбора — например, для запуска на ноутбуке без GPU. Всегда выбирайте вариант M или S, если VRAM позволяет.
Как выбрать метод квантования для вашего проекта
Сценарий 1: Production на GPU-кластере
Если у вас есть H100/B200 — используйте FP8. Это практически без потери точности и с максимальной скоростью. Если GPU старше (A100) — INT8 через bitsandbytes.
Сценарий 2: Один GPU, ограниченная VRAM
Для 70B модели на одном GPU с 24 GB VRAM — AWQ INT4 через Marlin. Это даст лучшую комбинацию скорости и качества.
Сценарий 3: Локальный запуск на ноутбуке
GGUF Q4_K через llama.cpp — самый простой вариант. Если качество не устраивает — Q5_K или Q6_K. Q6_K часто даёт лучшее соотношение качество/размер — качество почти как у Q8_0, но модель на 20–25% меньше.
Сценарий 4: Мобильные устройства
IQ2/IQ3 через llama.cpp или ExecuTorch. Качество будет ниже, но модель запустится. Всегда выбирайте вариант M или S, если VRAM позволяет — IQ2_M заметно лучше IQ2_XXS.
Сценарий 5: Максимальная компрессия при минимальной потере
Если нужно ужать модель как можно сильнее, но сохранить качество — IQ4_NL или Q4_K. IQ4_NL (84.3 GB для 149B) чуть больше IQ4_XS (79.7 GB), но качество выше. Q4_K (89.9 GB для 149B) — самый стабильный по качеству из 4-битных вариантов.
⚠️ Типичная ошибка: выбор квантования без тестирования на реальных данных. Всегда тестируйте квантованную модель на своём датасете перед продакшеном.
Практические рекомендации
1. Всегда тестируйте на реальных данных
Квантование может по-разному влиять на разные задачи. Модель, которая отлично работает на MMLU, может потерять качество на вашем специфическом датасете.
2. Используйте Marlin для GPU-инференса
Marlin — это оптимизированный kernel для быстрого INT4-инференса. Marlin-AWQ быстрее Marlin-GPTQ и при этом даёт лучшее качество.
3. Не квантуйте KV-cache без необходимости
Квантование KV-cache (кэша ключей и значений) даёт дополнительную экономию памяти, но может значительно снизить качество. Используйте только если VRAM критически ограничен.
4. Калибровочный датасет имеет значение
Для AWQ и GPTQ качество квантования зависит от калибровочного датасета. Используйте данные, похожие на ваши реальные запросы — не просто случайные тексты из Wikipedia.
5. Мониторьте качество после квантования
После квантования обязательно запустите бенчмарки на реальных данных. Если качество упало ниже допустимого — попробуйте другой метод или более высокий уровень квантования.
💡 Для бизнеса: квантование — это не просто техническая оптимизация. Это способ сделать AI-решения экономически viable. Компания, которая запускает 70B модель на одном GPU вместо восьми, экономит десятки тысяч долларов в месяц.
Риски самостоятельного внедрения
Квантование кажется простым: скачал квантованную модель, запустил, готово. Но на практике есть множество подводных камней:
-
Неправильный выбор метода: AWQ может быть хуже GPTQ для вашей конкретной модели и задачи
-
Неправильный калибровочный датасет: качество квантования сильно зависит от данных
-
Скрытая потеря качества: модель может работать хорошо на бенчмарках, но плохо на реальных запросах
-
Проблемы с производительностью: квантование не всегда даёт ожидаемое ускорение без правильной настройки инференс-движка
-
Совместимость: не все квантованные форматы работают со всеми инференс-движками
⚠️ Важно: поверхностное копирование решений из интернета может привести к скрытым проблемам с качеством и производительностью. Для продакшн-решений рекомендуется привлечение специалистов с опытом — это снижает риски ошибок и экономит время на исправление проблем, которые могли быть предотвращены на этапе проектирования.
Заключение
Квантование — это не компромисс, а инструмент. Правильно выбранное квантование позволяет запускать модели в 2–4 раза быстрее и дешевле, теряя при этом 1–6% точности. Ключевые выводы:
-
FP8 — лучший выбор для production на современных GPU (Hopper/Blackwell)
-
AWQ INT4 — лучший выбор для VRAM-constrained сред
-
GPTQ INT4 — хороший выбор, если нужно больше готовых моделей
-
GGUF — лучший выбор для локального запуска на CPU
-
Всегда тестируйте на реальных данных перед продакшеном
Если ваш проект требует глубокой экспертизы — от выбора модели и метода квантования до настройки инференс-движка и мониторинга качества — стоит рассмотреть профессиональную помощь. Это инвестиция, которая окупается снижением рисков и ускорением выхода на рынок.