Quantization
quantization — снижение точности чисел ради скорости и памяти
Quantization (квантизация) — техника снижения точности чисел в модели для экономии памяти и ускорения работы. Стандартные веса FP16 (16 бит) можно сжать до INT8 (8 бит) и даже FP4 (4 бита), уменьшив размер модели в 2–4 раза. Llama 70B в FP16 требует 140 ГБ VRAM, а в Q4 — всего 40 ГБ и запускается на одной RTX 4090. Цена — небольшая потеря качества, на нижних битах заметная.
Коротко
Коротко. Quantization — сжатие весов модели за счёт точности чисел. Вместо 16-битного FP16 хранят 8-битный INT8 или даже 4-битный FP4. Модель в Q4 занимает в 4 раза меньше памяти и работает в 2–3 раза быстрее. Качество немного падает, но обычно незаметно для конечного пользователя. Главный сценарий — запуск больших LLM (70B+) на одной потребительской видеокарте.
Что это такое
Llama 3 70B в полной точности — это 140 ГБ файл. Чтобы загрузить его, нужно два сервера A100 по 80 ГБ. Доступно примерно никому.
А ту же модель в формате Q4_K_M (4 бита на параметр, с улучшениями) — 40 ГБ. Помещается в одну RTX 4090 (24 ГБ VRAM) с offload части слоёв в RAM. И отвечает почти так же, как полная.
Квантизация — это и есть переход от «дорогих» FP16-чисел к «дешёвым» INT8/FP8/FP4. Главная идея: точность весов нейросети на самом деле не нужна вся целиком. Большинство значений лежат в узком диапазоне, и их можно записать меньшим количеством бит без существенной потери.
К 2026-му квантизация используется везде:
- LLM: GGUF-формат с уровнями Q2–Q8, Llama-Cpp, Ollama, LM Studio.
- Stable Diffusion: FP8-checkpoints в ComfyUI, NF4-варианты для FLUX.
- Облачный инференс: TensorRT-LLM, vLLM используют INT8/FP8 по умолчанию.
Как это работает
Каждый вес модели — это число с плавающей запятой. В FP16 на один параметр уходит 2 байта (16 бит). В INT8 — 1 байт. В FP4 — полбайта.
Простейшая квантизация INT8:
- Найти диапазон значений — например, веса слоя лежат от
-0.95до+1.03. - Поделить на 256 равных уровней (8 бит = 256 значений).
- Каждый вес заменить ближайшим уровнем.
- Сохранить scale — коэффициент, по которому потом восстанавливать.
В момент инференса:
real_weight = quantized_weight × scale
Этот пересчёт делается на лету и работает быстрее, чем хранение полной точности.
Уровни в GGUF (формат для llama.cpp):
- Q8_0 — 8 бит, потеря качества <0.1%, размер в 2 раза меньше FP16.
- Q6_K — 6 бит, потеря ~0.3%, ×2.7.
- Q5_K_M — 5 бит, потеря ~0.8%, ×3.2.
- Q4_K_M — 4 бита, потеря ~2%, ×4. Самый популярный.
- Q3_K_M — 3 бита, потеря ~5%, ×5.3.
- Q2_K — 2 бита, потеря 10%+, ×6.5. Только для очень больших моделей.
Пример на практике
Видеомонтажёр хочет запустить локально LLM для написания YouTube-описаний. Бюджет железа — RTX 4070 12 ГБ VRAM. Выбирает между моделями:
Вариант 1: Llama 3 8B FP16. Размер 16 ГБ — не помещается, нужна квантизация.
Вариант 2: Llama 3 8B Q5_K_M. Размер 5,7 ГБ. Запускается с большим контекстом, быстро.
Вариант 3: Llama 3 70B Q4_K_M. Размер 42 ГБ. Часть на VRAM, часть на RAM (offload). Скорость — 2–4 токена в секунду, медленно, но качество выше 8B-модели.
Скачивает llama-3.1-70b-instruct-Q4_K_M.gguf с Hugging Face. Кладёт в LM Studio. Запускает с настройкой n_gpu_layers: 40 (40 слоёв в VRAM, остальные в RAM).
Первый ответ — 12 секунд. Дальше идёт стабильно ~3 токена в секунду. Не быстро, но качество ответов сильно лучше, чем у любой 8B-модели. Для написания YouTube-описаний скорость подходит.
Для Stable Diffusion: FP16 — стандарт, FP8 — у FLUX и SDXL.lightning экономит 50% VRAM и почти не теряет качество. NF4 для FLUX (4 бита) запускает модель на видеокартах с 6 ГБ — недостижимо без квантизации.
С чем часто путают
- Quantization и Pruning — pruning удаляет «ненужные» веса целиком (часто 30–50% становятся нулями). Quantization сохраняет все веса, но в меньшей точности. Это разные техники.
- Quantization и Compression — общее сжатие (gzip) уменьшает файл без потери данных, но при загрузке всё разворачивается обратно. Quantization меняет сами числа.
- Quantization и Distillation — distillation это тренировка меньшей модели «учиться у» большой. Quantization не тренирует, просто сжимает.
- GGUF Q4 и LoRA — это разные слои оптимизации. LoRA можно ставить поверх квантизованной модели (например, Llama-3 Q4 + LoRA).
- INT8 и FP8 — у INT8 равномерные уровни (целые числа). У FP8 неравномерные (как у FP16/FP32, с порядком величины). FP8 точнее для нейросетей, но требует поддержки от GPU.
Частые ошибки и заблуждения
- «Q4-модель — это полная модель, которая просто меньше». Не совсем. Это та же модель с округлёнными весами. Качество чуть хуже, на сложных задачах разница заметна.
- «Чем меньше бит, тем лучше — главное помещается». До определённого предела. Ниже Q3 для маленьких моделей (<13B) качество падает сильно, иногда катастрофически.
- «Квантизация навсегда — обратно не восстановить». Верно. Когда веса упакованы в 4 бита, исходная точность потеряна. Поэтому всегда сохраняйте FP16-исходник, если планируете тренировать дальше.
- «Все Q4 одинаковые». Нет.
Q4_0,Q4_K_S,Q4_K_M,Q4_K_L,IQ4_XS,AWQ-4— это разные методы.K_M-варианты обычно лучшие по качеству,IQ-варианты лучшие по сжатию. - «Квантизованная модель медленнее». Часто наоборот быстрее: меньше байт читается из памяти. На современных GPU INT8 умножение в 2 раза быстрее FP16.
Связанные термины
- GGUF — формат для квантизованных LLM, главный носитель квантизации.
- FP16 / BF16 / FP8 — форматы полной и частичной точности.
- VRAM — главный ресурс, который экономит quantization.
- Llama.cpp / Ollama / LM Studio — главные инструменты запуска квантизованных моделей локально.
- Safetensors — формат, в котором также бывают квантизованные веса.
- Distillation — альтернативный путь уменьшения модели через тренировку.
- Pruning — другой способ ужать модель, удалением весов.
Частые вопросы
Какая квантизация лучше для домашнего ПК? Для большинства задач — Q4_K_M или Q5_K_M в формате GGUF. Q4 балансирует размер и качество, Q5 чуть качественнее за ~25% больше памяти.
Сколько RAM/VRAM нужно для Q4 70B-модели? ~42 ГБ. На RTX 4090 (24 ГБ) поместится примерно половина слоёв; остальные в системной RAM. Нужно минимум 32 ГБ системной RAM.
Можно ли квантизовать модель самому?
Да. Для LLM: llama.cpp имеет утилиту quantize. Для Stable Diffusion: ComfyUI и kohya-ss поддерживают конвертацию в FP8. Занимает 10–30 минут на CPU.
Что такое «динамическая квантизация»? Веса хранятся в Q4/Q8, но активации (промежуточные значения внутри слоёв) считаются в FP16/FP32. Это компромисс: быстрая загрузка + точное вычисление.
Квантизация ломает мультимодальные модели? Сильно меньше, чем чисто текстовые. Vision-encoder и cross-attention часто оставляют в FP16, квантизуют только text-decoder. Это типичная схема в Llama-3.2-Vision Q4.
Влияет ли квантизация на ComfyUI-workflow? Да. FP8-чекпоинты грузятся в ~2 раза быстрее, занимают вдвое меньше VRAM. Negative prompt и CFG работают так же. Иногда нужно ставить отдельную FP8-ноду в workflow.
Главное
Quantization — это способ запустить большую модель на маленьком железе. Сжимает веса до 4–8 бит вместо 16, что даёт ×2–×4 экономии памяти и ×1.5–3 ускорения. Стандарт для локальных LLM (GGUF Q4_K_M), всё чаще встречается и в Stable Diffusion (FP8, NF4). Качество падает мало — обычно 1–3% на стандартных тестах. Главная оговорка: если планируете тренировать модель дальше, исходную FP16-версию нужно сохранить — обратной дороги нет.