Квантование: сколько бит на самом деле нужно модели

Почему модель на 7 миллиардов параметров занимает 14 гигабайт, как ужать её вчетверо и чем за это приходится платить.

2 минуты чтения≈ 750 токенов#инференс#квантование

Размер модели в памяти считается почти арифметически: число параметров умножаем на количество байт, которое занимает один параметр. Модель на 7 миллиардов параметров в формате FP16 требует около 14 ГБ только под веса — по два байта на каждый.

Квантование уменьшает второй множитель. Вместо 16-битных чисел с плавающей точкой веса хранят в 8, 4 или ещё меньшем числе бит.

Сколько это в гигабайтах #

ФорматБайт на параметрВеса модели 7B
FP324≈ 28 ГБ
FP16 / BF162≈ 14 ГБ
INT81≈ 7 ГБ
4 бита0,5≈ 3,5 ГБ + служебные данные

Цифры в таблице — только веса. Во время работы память нужна ещё под KV-кэш, который растёт вместе с длиной контекста и числом одновременных запросов. На длинных диалогах он может занимать объём, сопоставимый с весами.

Как уложить число в четыре бита #

Четыре бита — это всего 16 возможных значений. Чтобы уместить в них веса без катастрофической потери точности, их делят на небольшие группы, например по 32 или 128 чисел. Для каждой группы хранится свой масштаб, а иногда и смещение, и значения внутри группы отображаются на эти 16 уровней относительно него.

Отсюда «служебные данные» в таблице: масштабы групп тоже занимают место, поэтому реальный размер 4-битной модели всегда немного больше половины байта на параметр.

Более продвинутые методы учитывают, какие веса важнее. GPTQ подбирает округление так, чтобы минимизировать ошибку на выходе слоя, а AWQ защищает веса, связанные с самыми большими активациями. В экосистеме llama.cpp распространён формат GGUF с несколькими схемами квантования разной точности:

# из модели в GGUF с весами FP16 получаем 4-битную версию
./llama-quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M

Чем за это платят #

  • 8 бит — как правило, почти без заметной потери качества.
  • 4–5 бит — разумный компромисс для локального запуска. Потери обычно небольшие, но на задачах с точными рассуждениями, кодом или редкими языками они могут проявиться.
  • Меньше 4 бит — качество падает заметно, особенно у небольших моделей.

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