GEO

Квантизация

Квантизация - это процесс преобразования весов LLM из чисел с плавающей точкой высокой точности (обычно 16-битный bfloat или float) в целые числа или числа с плавающей точкой более низкой точности (8-бит, 4-бит, иногда 2-бит), уменьшающий объём памяти и ускоряющий инференс лишь при небольшом ущербе качеству. Современное развёртывание с открытым исходным кодом - llama.cpp, Ollama, vLLM, GPTQ, AWQ - работает почти полностью на квантизированных моделях.

Квантизация - это процесс преобразования весов LLM из чисел с плавающей точкой высокой точности (обычно 16-битный bfloat или float) в целые числа или числа с плавающей точкой более низкой точности (8-бит, 4-бит, иногда 2-бит), уменьшающий объём памяти и ускоряющий инференс лишь при небольшом ущербе качеству. Современное развёртывание с открытым исходным кодом - llama.cpp, Ollama, vLLM, GPTQ, AWQ - работает почти полностью на квантизированных моделях.

Почему это важно

Модель на 70 млрд параметров в нативном 16-битном формате требует ~140 ГБ памяти GPU - вне досягаемости для одной потребительской карты. Та же модель в 4-битной квантизации занимает ~35 ГБ и помещается на двух потребительских GPU, или одной рабочей станции, или даже на Mac Studio. Квантизация - это то, что сделало локальные LLM практичными: Llama 3 70B, Mixtral 8×22B и DeepSeek-V3 все работают на оборудовании за 3000 долларов именно благодаря квантизации. Для разработчиков это разница между "мы не можем позволить себе self-hosting" и "мы можем обслуживать собственные модели".

Как это работает

Уровни точности:

  • FP32 (32-битный float): По умолчанию при обучении. 4 байта на вес. Редко используется для инференса.
  • FP16 / BF16 (16-бит): По умолчанию при инференсе. 2 байта на вес.
  • INT8 (8-битное целое): Вдвое меньше памяти, почти идентичное качество.
  • INT4 / FP4 (4-бит): Вчетверо меньше памяти, небольшой ущерб качеству (обычно 1-3% на бенчмарках).
  • INT2 (2-бит): Память в восемь раз меньше, заметная потеря качества на большинстве задач.

Процесс квантизации:

  1. Калибровка: Модель прогоняется на небольшом наборе данных для наблюдения за диапазонами активаций.
  2. Расчёт масштаба и нулевой точки: Для каждого тензора весов вычисляются масштабирующие коэффициенты, отображающие исходный диапазон на целочисленный диапазон.
  3. Преобразование весов: Каждый вес квантизируется, сохраняется как целое число плюс масштабирующие коэффициенты по группам или по каналам.
  4. Деквантизация при инференсе: Во время вычислений веса разворачиваются обратно в числа с плавающей точкой прямо перед матричным умножением.

Методы квантизации

RTN (округление до ближайшего): Самый тупой метод. Просто округлить веса до ближайшего квантизированного значения. Быстро, низкое качество.

GPTQ: Погрупповая постобучающая квантизация, минимизирующая ошибку реконструкции. Стандарт с открытым исходным кодом для 4-бит.

AWQ (квантизация весов с учётом активаций): Сохраняет веса, обрабатывающие большие активации; остальные квантизирует более агрессивно. Очень популярна для 4-битных LLM.

GGUF (Q4_K_M, Q5_K_M и т. д.): Семейство форматов поблочной квантизации от llama.cpp. Варианты K_M балансируют размер и точность. Q4_K_M - формат локального инференса по умолчанию.

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

QAT (обучение с учётом квантизации): Обучает модель с квантизацией в цикле. Лучшее качество, но требует переобучения.

FP8: Аппаратно нативный 8-битный формат float, поддерживаемый GPU H100/H200. Быстрее INT8 для обучения и инференса.

Компромиссы

Качество против сжатия: Чем ниже точность, тем сильнее деградирует модель. 8-бит почти бесплатно; 4-бит - хороший выбор по умолчанию; 2-бит ощутимо вредит.

Чувствительность к задаче: Математика, код и длинные рассуждения страдают от квантизации сильнее, чем чат или суммирование.

Скорость против памяти: Квантизация экономит память, но не всегда ускоряет инференс на GPU с избытком вычислительной мощности. На оборудовании, ограниченном памятью (потребительские GPU, Apple Silicon), это огромное ускорение.

Качество калибровочных данных: Плохая калибровка может незаметно испортить квантизированные модели. Используйте репрезентативные промпты.

Что и когда использовать

Запуск на потребительском GPU (8-24 ГБ): 4-битный GGUF (Q4_K_M) или AWQ.

Запуск на H100/H200: FP8 или INT8 со SmoothQuant.

Edge / мобильные устройства: Агрессивный 4-битный или 2-битный GGUF; примите потерю качества.

Исследовательский бенчмаркинг: Держите FP16/BF16 как эталон; квантизируйте только для сравнения при развёртывании.

Высокорисковый продакшн: 8-бит или 16-бит. Предельная стоимость стоит гарантии качества.

Распространённые ошибки

Сравнение бенчмарков между уровнями точности без оговорки: Оценка MMLU квантизированной модели не сравнима напрямую с оценкой FP16 той же модели.

Игнорирование дрейфа перплексии: Даже если бенчмарки выглядят нормально, квантизация может деградировать конкретные навыки (особенно математику). Тестируйте на своей реальной нагрузке.

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

Использование устаревших калибровочных данных: Модель, откалиброванная только на английском, потеряет качество на корейских промптах.

Отсутствие измерения сквозной задержки: Квантизация влияет и на загрузку памяти, и на вычисления. Иногда пропускная способность не улучшается, потому что узкое место было в другом месте.

Источники: