Квантование: сколько бит на самом деле нужно модели
Почему модель на 7 миллиардов параметров занимает 14 гигабайт, как ужать её вчетверо и чем за это приходится платить.
Размер модели в памяти считается почти арифметически: число параметров умножаем на количество байт, которое занимает один параметр. Модель на 7 миллиардов параметров в формате FP16 требует около 14 ГБ только под веса — по два байта на каждый.
Квантование уменьшает второй множитель. Вместо 16-битных чисел с плавающей точкой веса хранят в 8, 4 или ещё меньшем числе бит.
Сколько это в гигабайтах #
| Формат | Байт на параметр | Веса модели 7B |
|---|---|---|
| FP32 | 4 | ≈ 28 ГБ |
| FP16 / BF16 | 2 | ≈ 14 ГБ |
| INT8 | 1 | ≈ 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 бит — качество падает заметно, особенно у небольших моделей.
Крупные модели обычно переносят агрессивное квантование лучше маленьких. Поэтому квантованная большая модель нередко оказывается полезнее неквантованной маленькой, занимающей столько же памяти.