Инференс и оптимизация
30 просмотров
Квантизация
Quantization
Квантизация — метод сжатия нейронных сетей путём уменьшения точности представления весов (FP16 → INT8 → INT4). Уменьшает VRAM в 2-4× и ускоряет инференс с минимальной потерей качества.
Что такое квантизация
Квантизация — процесс преобразования весов модели из формата с плавающей точкой (FP16/FP32) в целочисленный формат с меньшей битностью (INT8, INT4, INT2).
Типы квантизации
По моменту применения
- PTQ (Post-Training Quantization) — после обучения, без дообучения
- QAT (Quantization-Aware Training) — в процессе обучения
По методу
| Метод | Битность | Тип | Скорость | Качество |
|---|---|---|---|---|
| GPTQ | 4-bit | PTQ | Быстрый | Хорошее |
| AWQ | 4-bit | PTQ | Быстрый | Лучше GPTQ |
| GGUF | 2-8 bit | PTQ | CPU/GPU | Хорошее |
| bitsandbytes | 4/8-bit | PTQ | Средний | Хорошее |
| SmoothQuant | 8-bit | PTQ | Быстрый | Отличное |
Экономия VRAM
LLaMA 3 70B:
FP16: 140 GB → 2× A100 80GB
INT8: 70 GB → 1× A100 80GB
INT4: 35 GB → 1× A100 40GB или RTX 4090 24GB (с offload)
Практическое применение
# bitsandbytes 4-bit (NF4)
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3-70B",
quantization_config=bnb_config,
device_map="auto",
)
Влияние на качество
INT8: потеря < 0.5% на бенчмарках
INT4 (GPTQ/AWQ): потеря 1-3%
INT2: заметная деградация (5-10%+)
Рекомендация: для инференса используйте AWQ INT4 — лучший баланс качества и скорости.