Решения
Квантование LLM: INT4/INT8, AWQ, GPTQ и FP8
Задача страницы. Показать, как снижать VRAM/стоимость и повышать TPS на инференсе LLM с помощью квантования весов и активаций: INT4/INT8 (AWQ, GPTQ), 4‑битные загрузки через BitsAndBytes, а также вычисления в FP8 на Hopper. Даём практические формулы, профили, примеры запуска и чек‑лист.
TL;DR
- Weight‑only INT8/INT4 (AWQ, GPTQ, NF4/4‑bit load) дают ×2–×4 экономию памяти весов при умеренной потере качества.
- FP8/BF16 (TensorRT‑LLM) — ускорение матриц и низкая p95‑латентность на H100 при почти неизменном качестве.
- Отдельно квантуется KV‑кэш (INT8/FP8), что увеличивает одновременность и снижает OOM.
- Для лучшей цены за 1M токенов комбинируйте: INT4/INT8 веса + квантизованный KV + стриминг + жёсткие лимиты длины.
Связанные страницы:
/solutions/llm-inference/ • /solutions/llm-inference/vllm/ • /solutions/llm-inference/tensorrt-llm/ • /solutions/llm-inference/tgi/ • /solutions/llm-inference/llama-cpp/ • /solutions/llm-inference/sglang/ • /solutions/llm-inference/costs/ • /solutions/cost-planner/ • /solutions/llm-training/eval/
Когда квантовать (и что это даёт)
Сигналы «пора квантовать»:
- Модель не помещается в VRAM целиком (или мешает KV‑кэш).
- Нужны больше одновременных сессий без роста числа GPU.
- Требуется снизить цену за 1M токенов.
Ориентиры по экономии памяти весов (порядок величин):
- FP16/BF16 → ~2 байта/параметр (7B ≈ 14 ГБ на одни веса).
- INT8 → ~1 байт/параметр (7B ≈ 7 ГБ).
- INT4 → ~0.5 байта/параметр (7B ≈ 3.5 ГБ).
Фактическая память больше из‑за эмбеддингов, лоадеров, KV‑кэша и метаданных.
Виды квантования
A) Weight‑only INT8/INT4
- GPTQ — пост‑тренировочное квантование с оптимизацией ошибки на матрицах весов.
- AWQ — калибровка на реальных активациях, «важные» каналы хранятся точнее.
- 4‑битная загрузка (NF4/FP4) — быстрый путь через лоадер (BitsAndBytes) без отдельного конверта.
Где применять: vLLM/TGI/SGLang/LightLLM (поддержка форматов зависит от сборки/версии), llama.cpp (через GGUF‑кванты). Для сервера под INT4/INT8 на CPU/GPU с минимальным оверхедом — см. /solutions/llm-inference/llama-cpp/.
B) Квантование активаций / KV‑кэша
KV‑кэш INT8/FP8 снижает VRAM на длинных контекстах и при высокой одновременности. Поддержка и режимы зависят от используемого сервера.
C) FP8‑вычисления (Hopper)
TensorRT‑LLM + FP8: веса/активации в FP8 с аккумулированием в BF16/FP16. Даёт ускорение decode/prefill и низкую p95‑латентность. См. /solutions/llm-inference/tensorrt-llm/.
Методика выбора схемы

- Жёстко ограничите длины (max_tokens, max context) и включите стриминг.
- Если цель — минимальная цена/1M → weight‑only INT4/INT8 (AWQ/GPTQ или 4‑битный лоад).
- Если цель — минимальная p95 → TensorRT‑LLM с FP8/BF16.
- Если железо тонкое/edge → GGUF‑кванты и /solutions/llm-inference/llama-cpp/.
- Для сложных доменов — измерьте качество на ваших метриках и при необходимости поднимите разрядность (INT4→INT8, Q4→Q5), либо примените лёгкий LoRA‑дотюнинг поверх квантизованной базы. См. /solutions/llm-training/finetune-lora/ и /solutions/llm-training/eval/.
Практические формулы (VRAM и стоимость)
Память весов (грубо):
if model=="llama3-8b-ru" and estimated_total_tokens<=4096 -> short-pool
elif model=="llama3-8b-ru" -> long-pool
elif model=="code-7b" -> code-pool
else -> default-pool
Память KV‑кэша (упрощённо):
KV_bytes ≈ 2 × L_layers × (L_in + L_out_avg) × H_heads × d_head × bytes_per_elem
Цена за 1M токенов:
Tokens_per_hour ≈ TPS_decode × 3600
Cost_per_1M ≈ (GPU_hour_price × Num_GPU) / (Tokens_per_hour / 1e6)
Для планирования см. /solutions/llm-inference/costs/ и /solutions/cost-planner/.
Примеры: как запустить квантизованные модели
A) 4‑битная загрузка (NF4) в Transformers
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
bnb = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True, # меньше память, иногда медленнее
bnb_4bit_quant_type="nf4" # 4-битная квантизация с нормировкой
)
tok = AutoTokenizer.from_pretrained("./ckpt")
model = AutoModelForCausalLM.from_pretrained("./ckpt", quantization_config=bnb, device_map="auto")
Дальше запускайте через vLLM/TGI/SGLang, если сборка поддерживает 4‑битный рантайм.
B) GPTQ (пост‑тренировочное INT4)
# Калибровка и квантование (примерная CLI)
python gptq_quantize.py \
--model ./ckpt \
--wbits 4 --groupsize 128 --act-order \
--calib ./calib.jsonl \
--save ./ckpt-gptq-int4
Полученную папку с весами используйте в выбранном сервере. Для некоторых стеков потребуется конвертация формата.
C) AWQ (активационно‑осознанное INT4/INT8)
python awq_calibrate.py --model ./ckpt --calib ./calib.jsonl --bits 4 --save ./ckpt-awq-int4
AWQ обычно даёт более стабильное качество на задачах с «сложными» активациями, чем чистый PTQ без калибровок.
D) FP8 в TensorRT‑LLM (H100)
trtllm-build \
--checkpoint-dir ./ckpt \
--output-dir ./engines/llm-fp8 \
--dtype bfloat16 \
--fp8 \
--max-seq-len 8192
trtllm-server --engine-dir ./engines/llm-fp8 --http-port 8000
Для низкой p95 соберите раздельные движки на короткий/длинный контекст. См. /solutions/llm-inference/tensorrt-llm/.
E) GGUF‑кванты для llama.cpp
# Конверт в GGUF и квантизация
python3 convert-hf-to-gguf.py ./ckpt --outfile ./llm-f16.gguf
./quantize ./llm-f16.gguf ./llm-q4_k_m.gguf Q4_K_M
# Лёгкий сервер
./server -m ./llm-q4_k_m.gguf -c 4096 -ngl 20 -t 12 --port 8081
Подробнее — /solutions/llm-inference/llama-cpp/.

Качество: как не «уронить» метрики
- Готовьте калибровочный набор (несколько тысяч реальных промптов из вашего домена).
- Мерьте не только перплексию, но и продуктовые метрики (точность, полнота, удовлетворённость).
- При падении: увеличьте разрядность (INT4→INT8, Q4→Q5), сократите max_tokens, используйте LoRA‑дотюнинг под домен.
См. /solutions/llm-training/eval/ и /solutions/llm-training/finetune-lora/.
Совместимость со стеками сервинга
- vLLM — высокий TPS; хорошо сочетается с weight‑only INT4/INT8 и кэшированием префиксов (см. /solutions/llm-inference/vllm/).
- TensorRT‑LLM — минимальная p95; основной путь — BF16/FP8, частичная поддержка других квантов зависит от сборки (см. соответствующую страницу).
- TGI — универсальный REST; удобно держать несколько пулов под разные модели/кванты (см. /solutions/llm-inference/tgi/).
- SGLang/LightLLM — лёгкий стек с высоким TPS; проверьте поддержку вашего формата (см. /solutions/llm-inference/sglang/).
- llama.cpp — компактный сервер для GGUF‑квантов (см. /solutions/llm-inference/llama-cpp/).
Профили конфигураций (ориентиры)
A) Минимальная цена/1M (массовый TPS)
- INT4 (AWQ/GPTQ/NF4), квантизованный KV (если доступно), max_tokens 128–256, высокий пул одновременности.
- Сервер: vLLM / SGLang / TGI (short‑pool).
B) Сбалансированный
- INT8 на весах, BF16 на активациях, умеренные длины, раздельные пулы short/long.
- Сервер: vLLM / TGI / LightLLM.
C) Низкая p95
- TensorRT‑LLM + FP8/BF16, короткий контекст, отдельный пул для длинных.
- Сервер: TensorRT‑LLM.
D) Тонкие инстансы / edge
- GGUF Q4/Q5 (llama.cpp), гибрид CPU↔GPU (-ngl), -c ≤ 4K, несколько лёгких реплик за балансировщиком.
Наблюдаемость и эксплуатация
Минимум метрик:
- Latency p50/p95/p99; TPS_decode/prefill_rate; доля timeouts/errors.
- GPU/память: HBM, доля KV‑кэша, эвикции; CPU для токенизации.
- Качество: регрессы по вашим задачам (nightly), дельта к эталонной модели.
См. /solutions/llm-inference/observability/ и /solutions/monitoring-logging/.
Траблшутинг
- Сильное падение качества. Поднимите разрядность (INT4→INT8 / Q4→Q5), уменьшите max_tokens, проведите LoRA‑дотюнинг под домен.
- GPU‑OOM. Сократите max context, включите/усильте квантование KV‑кэша, используйте INT4 на весах, разделите трафик на short/long.
- Низкий TPS. Увеличьте одновременность, унифицируйте префиксы (prefill), используйте стек с continuous batching (vLLM/SGLang).
- Долгие «холодные» старты. Держите модели «горячими», храните веса на локальном NVMe, прогревайте сервер.
- Несовместимость форматов. Конвертируйте веса в ожидаемый формат сервера (HF, GGUF, GPTQ/AWQ‑папка) и фиксируйте версии.
Чек‑лист перед продом
- Определены SLA (p95, QPS/TPS) и лимиты max_tokens/max context.
- Выбрана схема: INT4/INT8 (AWQ/GPTQ/NF4) или FP8 (TensorRT‑LLM).
- Подготовлены веса (конверт/калибровка), проверена совместимость со стеком.
- Замерены prefill_rate/TPS_decode, рассчитана цена за 1M.
- Включены метрики/логи/алерты; nightly‑регрессы качества.
- Прописан план деградации (фоллбек‑модель, снижение лимитов, переключение пулы).
Навигация по разделу «Инференс LLM»
→ /solutions/llm-inference/
→ Платформы: /solutions/llm-inference/vllm/ • /solutions/llm-inference/tensorrt-llm/ • /solutions/llm-inference/tgi/ • /solutions/llm-inference/sglang/ • /solutions/llm-inference/llama-cpp/
→ Экономика и эксплуатация: /solutions/llm-inference/costs/ • /solutions/cost-planner/ • /solutions/llm-inference/observability/ • /solutions/monitoring-logging/