AWQ Algorithm: Activation-Aware Salient Channel Scaling — Respecting Outliers
AWQ (Lin et al. 2023) — activation-aware alternative to GPTQ. 'Salient channel scaling' technique that protects activation outliers. Quantize Llama 3.1 8B in 8 min on RTX 4090 via autoawq, slightly better WikiText-2 PPL than GPTQ + easier vLLM serving.
Şükrü Yusuf KAYA
30 min read
Advanced1. AWQ'nun İçgörüsü#
LLM activation'larında outlier channels var — birkaç channel mean'in 4-6x'i değerinde. Bu channel'lar:
- Tüm output'un %1'ini (channel sayısı) oluşturur
- Output'un %~30'una katkı yapar (signal)
Klasik quantization bu outlier'ları "feda eder" (yuvarlayarak hassasiyet kaybeder) → büyük perplexity artışı.
AWQ'nun trick'i:
- Calibration data ile her channel'ın activation magnitude'unu ölç
- "Salient" (önemli) channel'ları belirle
- Bu channel'lara karşılık gelen weights'i faktörüyle scale et
s - Quantize et — scale sayesinde precision korunur
- Inference'ta scale'i tersine al
2. AWQ Matematik#
W' = W × diag(s) (scale uygula) W_q = quantize(W') (artık daha yüksek precision için) output = (W_q × diag(s)^-1) × x (scale'i geri al)
ss_i = avg(|activation_i|)^α / mean^αSonuç: salient channel'lar yüksek scale → daha küçük value'lar (range içinde) → quantization daha hassas.
Cookbook'un kuralı: AWQ ve GPTQ kalite olarak çok yakın; AWQ vLLM serving'inde daha uyumlu (default support varies).
python
# === AWQ ile Llama 3.1 8B int4 quantization ===from awq import AutoAWQForCausalLMfrom transformers import AutoTokenizer model_path = "meta-llama/Meta-Llama-3.1-8B-Instruct"quant_path = "llama-3.1-8b-int4-awq" # 1. Loadmodel = AutoAWQForCausalLM.from_pretrained(model_path, device_map="cuda", torch_dtype="bfloat16")tok = AutoTokenizer.from_pretrained(model_path) # 2. Quantization configquant_config = { "zero_point": True, # asymmetric quant "q_group_size": 128, "w_bit": 4, "version": "GEMM", # vLLM compat (GEMM kernel)} # 3. Quantize — ~8 dakika RTX 4090model.quantize(tok, quant_config=quant_config)model.save_quantized(quant_path)tok.save_pretrained(quant_path) # Bench (vs bf16):# - Size: 16 GB → 4.4 GB (-73%)# - WikiText-2 PPL: 5.93 → 5.99 (+1.0%) ← GPTQ'dan ~%1 iyi# - vLLM tok/s (single, batch=1): 95 → 175 (+84%)# - vLLM tok/s (batch=16): 540 → 920 (+70%)AWQ ile Llama 8B int4 quantization
3. GPTQ vs AWQ Karşılaştırma#
| Kriter | GPTQ | AWQ |
|---|---|---|
| Quantization süresi (8B, 4090) | 12 dk | 8 dk |
| WikiText-2 PPL delta | +1.9% | +1.0% |
| vLLM uyumu | iyi (auto-gptq + vllm-flash-attn) | mükemmel (native) |
| Inference throughput (vLLM) | +%74 | +%84 |
| Marlin kernel desteği | evet (vLLM auto) | evet |
| Multi-modal support | sınırlı | büyüyen |
| Cookbook tercihi (2026) | yedek | default |
Cookbook'un yeni Lab'ları AWQ tercih ediyor.
✅ Teslim
- Llama 3.1 8B'yi AWQ ile quantize et. 2) Aynı modeli GPTQ ile de quantize et. 3) WikiText-2 + TR-MMLU karşılaştır. 4) Sonraki ders: 10.4 — GGUF K-Quants.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
Related Content
Part 0 — Engineering Foundations
Welcome to the Fine-Tuning Cookbook: System, Stage Taxonomy, and the Reproducibility Contract
Start LearningPart 0 — Engineering Foundations
Reproducibility Stack: Seeds, cuDNN Flags, and Deterministic CUDA — End the 'Works on My Machine' Problem
Start LearningPart 0 — Engineering Foundations