Перейти к основному содержимому
  1. Теория на русском языке/
  2. Начало работы/

LLM квантование (quantization)

·749 слов·4 минут
Оглавление

Квантование — это техника, позволяющая уменьшить требования к памяти и вычислениям для моделей за счёт перевода весов и активаций из высокоточных форматов (например, FP32) в низкоразрядные форматы, такие как int8, int4 или даже int2.

Чем меньше бит используется, тем меньше памяти требуется модели. Например:

  • 7B-модель в формате FP32 очень точная, но только веса занимают 28 ГБ памяти.
  • Та же модель в FP16 использует вдвое меньше памяти.
  • Ещё более низкие форматы (int8, int4) ещё сильнее сжимают модель, значительно уменьшая размер.

Эти цифры касаются только весов. Во время работы также требуется память для attention-кэшей, активаций и накладных расходов фреймворка.

Зачем нужно квантование
#

Квантование широко применяется, потому что:

  • Снижает использование памяти — позволяет запускать большие модели на меньших GPU, уменьшает размер KV-кэша на токен. Это увеличивает пропускную способность: больше токенов помещается в ту же память.
  • Ускоряет инференс, особенно на edge-устройствах и при пакетной обработке.
  • Снижает требования к вычислениям, что уменьшает стоимость и энергопотребление.

Этот компромисс между точностью и размером сопровождается некоторым снижением точности. Для многих задач это не критично, особенно при использовании современных методов квантования.

Форматы квантования
#

Разные форматы квантования позволяют балансировать между экономией памяти и точностью. Краткая таблица:

ФорматРазмер относительно FP32Потеря точностиСценарийПамятьПримечания
FP32100%НетОбучениеВысокаяПолная точность, но медленно
FP1650%МинимальнаяОбучение и инференсСредняяСтандарт для большинства LLM
FP825%НизкаяОбучение и инференсНизкаяНовый формат
int825%НизкаяИнференсНизкаяХороший компромисс
int412.5%СредняяИнференсОчень низкаяТребует методов GPTQ/AWQ
int26.25%ВысокаяРедко/экспериментальноКрошечнаяТочность часто низкая

Что квантовать
#

Обычно стоит фокусироваться на том, что больше всего потребляет память, но не сильно влияет на качество.

  • Чаще всего квантуют веса модели — они стабильны и занимают основную часть памяти.
  • Активации тоже можно квантовать, но это сложнее и может сильнее снижать точность.

Когда использовать квантование
#

Квантование — хороший выбор, если:

  • Вы разворачиваете модель на железе с ограниченной памятью GPU (например, 24 ГБ и меньше).
  • Вам нужна низкая задержка инференса.
  • Нужно снизить стоимость обслуживания.
  • Требуется высокая параллельность (уменьшение KV-кэша на токен позволяет обслуживать больше запросов одновременно).
  • Вы готовы мириться с небольшой потерей точности.

Квантование не подходит, если:

  • Требуется максимальная точность (например, для критичных задач).
  • Модель и так маленькая (выгода от квантования минимальна).
  • Ваше железо не поддерживает квантованные форматы.

Методы квантования
#

Разработано множество современных методов квантования, позволяющих сделать LLM эффективнее без значительной потери качества.

Вот самые популярные подходы:

AWQ
#

Activation-aware Weight Quantization (AWQ) — метод для запуска LLM на edge-устройствах и в условиях ограниченных ресурсов. Ключевая идея: не все веса одинаково важны для качества. Разработчики считают, что только ~1% весов «значимы» и требуют особого подхода при квантовании. Поэтому AWQ избирательно защищает наиболее важные веса на основе распределения активаций, а не только самих весов.

В целом, AWQ масштабирует важные каналы весов на основе статистики активаций, собранной офлайн.

Метод отлично подходит для низкоразрядного квантования моделей, развёрнутых на edge или в задачах с низкой задержкой.

SmoothQuant
#

SmoothQuant — универсальный метод post-training quantization (PTQ), не требующий дообучения, позволяющий эффективно квантовать и веса, и активации в 8 бит (W8A8).

Квантовать веса относительно просто, а вот активации — сложнее из-за выбросов, которые могут сильно снижать точность. SmoothQuant «сглаживает» выбросы активаций, математически переводя сложность квантования с активаций на веса. В результате достигается до 2× экономии памяти и до 1.56× ускорения для LLM.

SmoothQuant отлично подходит, если нужно:

  • Полное INT8-квантование (веса и активации)
  • Высокая эффективность без дообучения
  • Минимальная потеря точности
  • Совместимость с большинством трансформеров

Это готовое решение для продакшн-сценариев, где важны эффективность и простота.

GPTQ
#

GPTQ — быстрый post-training метод, позволяющий сжимать большие трансформеры до 3–4 бит на вес с минимальной потерей точности. Разработан для масштабирования на сотни миллиардов параметров без дообучения.

Преимущества:

  • Эффективен на больших моделях: квантует OPT-175B или BLOOM-176B за ~4 GPU-часа.
  • Минимальная потеря точности даже при сильном сжатии.
  • Поддержка экстремального квантования: 2 бита и тернарное квантование.
  • Позволяет запускать огромные модели на одной A100 или двух A6000.
  • Пользовательские GPU-ядра дают ускорение ~3.25× по сравнению с FP16.

GPTQ широко используется в open-source пайплайнах, особенно с AutoGPTQ. Это один из лучших вариантов для быстрого и экономного инференса больших моделей.


Вместо самостоятельного квантования часто можно взять уже готовую квантованную модель на Hugging Face. Там есть множество 8- и 4-битных моделей, готовых к инференсу и оптимизированных для низкой памяти и быстрой работы. Также доступны полноточные базовые модели, если вы хотите применить свою стратегию квантования.

Дополнительные ресурсы
#