Квантование языковой модели снижает разрядность хранения весов — чисел, которые задают поведение сети. Архитектура и количество параметров остаются прежними, но каждый вес занимает меньше бит: например, 4 вместо 16. В результате модель требует меньше видеопамяти и часто генерирует токены быстрее, однако точность вычислений падает. Выбор формата сводится к компромиссу между доступной памятью, скоростью и допустимой деградацией на ваших задачах.
Что технически меняется при квантовании: веса, память, вычисления
Квантование не трогает архитектуру: число слоёв, размерность скрытых состояний и механизм внимания остаются такими же, как у исходной модели. Меняется только представление весов и иногда активаций — промежуточных результатов вычислений. Если модель хранится в FP16, каждый вес занимает 2 байта. В INT8 — 1 байт, в 4-битном формате — 0,5 байта. Отсюда простое правило для оценки памяти под веса: число параметров умножить на размер одного числа в байтах. К результату добавьте запас на кэш ключей и значений, промежуточные буферы и оверхед фреймворка — обычно это ещё 10–30% в зависимости от длины контекста и реализации.
Различайте два подхода. При weight-only квантовании (только веса) активации остаются в FP16, а веса хранятся в низкой разрядности и распаковываются при умножении. Так работают GPTQ и AWQ. При weight+activation квантовании снижают разрядность и весов, и активаций — это сложнее и требует поддержки в ядрах. Для большинства практических задач на потребительских GPU достаточно первого варианта.
Не путайте квантование с дистилляцией (обучение меньшей модели по выходам большой) и прунингом (удаление части весов). Квантование сохраняет все параметры, просто огрубляет их значения. Поэтому модель после квантования ведёт себя иначе не из-за «забывания» знаний, а из-за накопления ошибок округления по слоям.
Пример на конкретной модели: сколько VRAM и токенов в секунду даёт переход на 4 бита
Возьмём модель класса 7B (7 млрд параметров). В FP16 её веса занимают около 14 ГБ (7e9 × 2 байта). В 8-битном формате — около 7 ГБ, в 4-битном — около 3,5 ГБ. Это только веса. Для генерации с контекстом 4096 токенов добавьте кэш ключей и значений: для 7B-модели он может занимать от 1 до 2 ГБ и больше в зависимости от реализации. Поэтому на видеокарте с 8 ГБ памяти 4-битная модель с запасом помещается, а 8-битная — впритык и может не оставить места под контекст.
Скорость генерации на потребительской GPU (например, RTX 3060 12 ГБ или RTX 4070) для 4-битной модели обычно выше, чем для FP16, потому что узкое место — чтение весов из памяти, а не арифметика. На практике прирост может составлять от 20 до 80% в токенах в секунду, но зависит от бэкенда и оптимизации ядер. Чтобы получить воспроизводимый замер, зафиксируйте промпт, температуру 0 и seed, прогрейте модель и замерьте время генерации 100–200 токенов. Сравнивайте только на одном и том же железе и одной версии фреймворка.
| Формат | Память под веса 7B | Ориентир по скорости | Когда выбирать |
|---|---|---|---|
| FP16 | ~14 ГБ | Базовая | Максимальное качество, есть 24+ ГБ VRAM |
| INT8 | ~7 ГБ | Выше FP16 | Компромисс, если хватает памяти |
| 4-бит (GPTQ/AWQ/GGUF Q4) | ~3,5–4,5 ГБ | Обычно выше INT8 | Ограниченная VRAM, допустима небольшая деградация |
Цифры в таблице — оценка только для весов. Реальное потребление памяти зависит от длины контекста и реализации. Всегда проверяйте на своей конфигурации.
Что теряется в качестве: как измерять деградацию, а не верить на слово
Потери качества при квантовании нелинейны. Переход с FP16 на 8 бит большинство моделей переносят почти незаметно на общих вопросах. Переход на 4 бита может дать заметное снижение на задачах, где важна точность: арифметика, редкие факты, длинный контекст, кодирование. Причина — ошибка округления каждого веса накапливается по глубине сети, и на редких путях активации она проявляется сильнее.
Самый доступный показатель — перплексия (perplexity): мера того, насколько модель удивляется тексту. Рост перплексии на 2–5% относительно FP16 часто не заметен в чате, но может быть критичен для генерации кода или извлечения фактов. Публичные бенчмарки (MMLU, GSM8K) дают общую картину, но не отражают вашу предметную область. Соберите мини-набор из 30–50 реальных задач, которые модель должна решать, и прогоните его на FP16 и на квантованной версии. Сравнивайте ответы вручную или автоматической метрикой, если она у вас есть.
Типичные провалы 4-битных схем: задачи с длинным контекстом (модель теряет детали в середине), редкие языки, точные вычисления. Если ваша задача попадает в эту зону, сначала проверьте 5- или 6-битный формат — часто он даёт приемлемый баланс.
Схемы квантования и форматы: GPTQ, AWQ, GGUF, bitsandbytes — что выбирать
GPTQ — пост-тренировочный метод, который подбирает квантованные веса с учётом калибровочных данных. Хорошо работает для GPU-инференса, поддерживается во многих фреймворках. AWQ (активационно-осведомлённое квантование) учитывает важность весов по активациям и обычно даёт более мягкую деградацию при той же разрядности. GGUF — формат для llama.cpp, удобен для CPU и смешанного инференса, имеет градации от Q2 до Q8. bitsandbytes предлагает INT8 и NF4 для быстрого старта и обучения QLoRA.
Выбирайте по железу и фреймворку. Если у вас NVIDIA GPU и вы используете Hugging Face Transformers, начните с AWQ или GPTQ 4-bit. Если нужен запуск на CPU или Apple Silicon, смотрите в сторону GGUF. Для экспериментов с дообучением подойдёт bitsandbytes NF4. Критерий простой: формат должен поддерживаться вашим бэкендом без распаковки в FP16 на каждом шаге, иначе выигрыш в скорости исчезнет.
Квантование и дообучение: QLoRA и подводные камни
QLoRA использует 4-битную квантованную базовую модель и обучает небольшие LoRA-адаптеры в FP16. Это позволяет дообучать 7B-модели на одной GPU с 12–16 ГБ. Важно понимать: квантовать уже дообученную модель и дообучать квантованную — не одно и то же. В первом случае вы теряете точность весов после обучения. Во втором — обучаете адаптеры поверх огрублённой базы, и итоговое качество зависит от того, насколько база сохранила знания.
Практика: храните мастер-веса в FP16 или BF16, а квантуйте только для деплоя. Если квантуете повторно (например, с 8 на 4 бита), ошибки округления накапливаются. Старайтесь не делать цепочку из нескольких квантований без необходимости.
Чек-лист внедрения: как выбрать битность под задачу
- Зафиксируйте бюджет видеопамяти и целевую скорость генерации. Без этого выбор формата превращается в угадывание.
- Определите минимальную битность, которая проходит ваш собственный набор задач. Начните с 8 бит, затем проверьте 4 бита.
- Сравните Q4, Q5 и Q8 на одних и тех же промптах. Оцените не только правильность, но и стабильность формата ответа.
- Замерьте задержку на токен и стоимость генерации на вашем железе. Пересчитайте на предполагаемую нагрузку.
- Зафиксируйте версию кванта и бэкенда в реестре моделей. При обновлении фреймворка повторите замеры.
Квантование не всегда нужно. Для моделей меньше 3B параметров выигрыш в памяти может быть незначительным, а на устройствах с достаточной VRAM проще оставить FP16. Если задача требует максимальной точности — например, финансовые расчёты или медицинские рекомендации — используйте 8-битный формат или оригинальные веса.
Можно ли квантовать модель без потери качества?
Полностью без потери — нет, потому что округление весов вносит ошибку. Но при переходе на 8 бит потеря часто находится в пределах шума на общих задачах. При 4 битах потеря заметнее на точных вычислениях и редких фактах. Проверяйте на своих данных.
Влияет ли квантование на скорость обучения?
При QLoRA базовая модель заморожена в 4-битном виде, обучаются только адаптеры. Это ускоряет обучение за счёт меньшего объёма памяти, но может замедлить шаг из-за распаковки весов. На практике QLoRA позволяет обучать большие модели на малых GPU, жертвуя небольшой скоростью по сравнению с полным дообучением в FP16.
Какой формат выбрать для запуска на CPU?
GGUF с градацией Q4_K_M или Q5_K_M — распространённый выбор для CPU. Он хорошо сбалансирован по размеру и качеству. Для максимальной точности на CPU можно взять Q8_0, но скорость будет ниже.
Может ли квантование ухудшить следование инструкциям?
Да, при агрессивном сжатии (2–3 бита) модель может хуже удерживать формат ответа и следовать сложным инструкциям. На 4 битах большинство моделей сохраняют базовое следование инструкциям, но проверка на ваших промптах обязательна.