Quantization Matematiği: Symmetric/Asymmetric, Per-Tensor/Per-Channel/Per-Group, QAT vs PTQ
Quantization'ın matematiksel temeli: floating-point → integer mapping formülü, symmetric vs asymmetric quantization, per-tensor vs per-channel vs per-group granularity, QAT (Quantization-Aware Training) vs PTQ (Post-Training Quantization), bit-width seçimi. RTX 4090'da Llama 8B'nin 32 layer'ında her tensor'ün quantization karakteristiği.
Şükrü Yusuf KAYA
32 dakikalık okuma
İleri1. Niye Quantization?#
| Format | Bit/weight | 8B model size | RTX 4090 fit? | Quality loss |
|---|---|---|---|---|
| fp32 | 32 | 32 GB | ❌ | reference |
| bf16 | 16 | 16 GB | ⚠️ borderline | <%0.1 |
| int8 | 8 | 8 GB | ✅ | %0.5-1 |
| int4 (NF4) | 4 | 4 GB | ✅ rahat | %1-3 |
| int2 (HQQ/AQLM) | 2 | 2 GB | ✅ | %5-10 |
Quantization = memory tasarrufu + inference throughput artışı + bazen training-time tasarruf.
2. Quantization Formülü#
Q(x) = round(x / scale) + zero_point deQ(q) = (q - zero_point) × scale
Iki ana parametre:
- scale () — fp range / int range
s - zero_point () — fp 0'ın hangi int'e karşılık geldiği
z
Symmetric quantization (z = 0):#
z = 0s = max(|x|) / (2^(b-1) - 1)
- Range simetrik: [-x_max, +x_max] → [-128, +127] (int8 örnek)
- yok → daha az compute
zero_point - Kullanım: weights (genelde simetrik dağılım)
Asymmetric quantization (z ≠ 0):#
z ≠ 0s = (x_max - x_min) / (2^b - 1) z = round(-x_min / s)
- Range asimetrik: [x_min, x_max] → [0, 255] (uint8 örnek)
- var → biraz fazla compute
zero_point - Kullanım: activations (ReLU sonrası ≥ 0 asimetrik)
3. Granularity — Quantization Hangi Eksende?#
| Granularity | Scale tensor shape | Trade-off |
|---|---|---|
| Per-tensor | scalar | en az parametre, en kötü kalite |
| Per-channel (per-row) | [out_channels] | LLM weights için klasik |
| Per-group (block-wise) | [out_channels, n_groups] | en iyi kalite, en fazla parametre |
| Per-token (activations) | [batch, seq] | activation runtime |
Cookbook'un standardı: weights için per-channel + per-group=64-128 (GPTQ/AWQ default).
# Per-tensor — scale tek bir sayı W_q = round(W / s) # s.shape == () # Per-channel — her output channel için ayrı scale s = max(|W|, dim=-1) / 127 # s.shape == (out,) W_q = round(W / s[:, None]) # Per-group (block-wise) — her 64 elemanlık blok için ayrı scale W_grouped = W.reshape(out, in_features // 64, 64) s = max(|W_grouped|, dim=-1) / 7 # 4-bit → -7..7 W_q = round(W_grouped / s[..., None])
4. QAT (Quantization-Aware Training) vs PTQ (Post-Training Quantization)#
PTQ (cookbook'un default'u)#
- Train edilmiş model'i quantize et
- Calibration set ile scale/zero_point hesapla
- Cost: dakikalar (örneğin GPTQ Llama 8B → 12 dk RTX 4090)
- Quality loss: %1-3
QAT#
- Training sırasında "fake quantize" işlemleri ekle
- Forward'da quantized weights kullan, backward'da gradient akıt
- Cost: saatler (training kadar pahalı)
- Quality loss: %0-1 (PTQ'dan daha iyi ama az)
Cookbook'un kuralı:
- LLM fine-tuning → QLoRA (NF4) ≈ PTQ on weights + FP backward, en pragmatic
- Production serving → PTQ (AWQ/GPTQ) for inference speed
- Mission-critical → QAT araştırma yatırımı (akademi + Meta/Google)
5. Llama 3.1 8B Tensor Karakteristikleri#
Quantization stratejisi seçmek için her tensor tipinin dağılımı önemli:
| Tensor | Dağılım | Önerilen scheme |
|---|---|---|
embed_tokens | sparse-ish | per-token (kept fp16) |
q_projk_projv_proj | Gaussian-like | per-channel int4, group=128 |
o_proj | broader tail | per-channel int4, group=64 |
gate_projup_projdown_proj | SwiGLU FFN, daha geniş | per-channel int4, group=128 |
lm_head | quasi-Gaussian | per-channel int8 ya da bf16 |
| RMSNorm weights | very narrow | fp16/bf16 kept |
| Activations (mid-FFN) | outlier-heavy (4-6x mean) | AWQ scaling gerekli |
Bu yüzden GPTQ ve AWQ farklı yöntemler — bu özellikleri ayrı ele alıyorlar (Ders 10.2 + 10.3).
✅ Teslim
- Llama 3.1 8B'nin bir layer'ının weight histogram'larını çıkar (matplotlib). 2) Per-tensor vs per-channel vs per-group quantization noise'u ölç. 3) Sonraki ders: 10.2 — GPTQ Algoritması.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
Part 0 — Engineering Foundations
Fine-Tuning Cookbook'a Hoş Geldin: Sistematik, Stage Taksonomisi ve Reproducibility Kontratı
Öğrenmeye BaşlaPart 0 — Engineering Foundations
Reproducibility Stack: Seeds, cuDNN Flags ve Deterministic CUDA — 'Sende Niye Çalışıyor Bende Çalışmıyor' Sorununu Bitir
Öğrenmeye BaşlaPart 0 — Engineering Foundations