Skip to content

Quantization in Depth: From INT4 to FP8 — Shrinking Your Model 4×, Speeding 2×

Mathematical and engineering anatomy of LLM quantization: INT8, INT4, FP8 formats, GPTQ (Frantar 2022) vs AWQ (Lin 2023) vs GGUF (Gerganov) algorithms, quality-size-speed trade-offs. Quantizing Llama-3-8B Turkish DPO model with 4-bit AWQ, measuring quality loss, running Llama-3-70B on RTX 4090, mobile device deployment.

Şükrü Yusuf KAYA
80 min read
Advanced
Quantization Derinlemesine: INT4'ten FP8'e — Modelinizi 4× Küçültmek, 2× Hızlandırmak
🗜️ Quantization — Modelinizi 4× Küçültün, Cebinize Sokun
Llama-3-8B bf16 ağırlıkları: 16 GB. Llama-3-8B AWQ 4-bit: 4 GB. Aynı model, %4'lük kalite kaybıyla. Üstelik: 2× daha hızlı inference. Mucize? Hayır, matematik. 1990'lardan beri sinyal işlemede kullanılan 'quantization' tekniği, 2022-2023'te LLM dünyasına geldi. Sonuç: RTX 4090 24GB ile Llama-3-70B çalıştırabiliyorsun. Telefonunda Llama-3-1B çalışıyor. Bu dersin hedefi: quantization matematiğini sıfırdan kurmak, 3 modern algoritmayı (GPTQ, AWQ, GGUF) derinlemesine karşılaştırmak, Türkçe Llama-3 modelimizi 4-bit'e dönüştürmek. Sonunda kendi telefonunda Türkçe LLM koşturma yeteneğine sahip olacaksın. 80 dakika sonra: quantization sanatkârı.

Bu Derste Neler Var? (11 Bölüm)#

  1. Quantization niye gerekli — memory + speed + cost
  2. Matematik temel — float → int dönüşüm
  3. Quantization formatları — INT8, INT4, FP8, NF4
  4. Kalibrasyon — outliers ve scale factors
  5. GPTQ (Frantar 2022) — gradient-based quantization
  6. AWQ (Lin 2023) — activation-aware quantization
  7. GGUF (Gerganov / llama.cpp) — mobile-friendly format
  8. Karşılaştırmalı analiz — hız, boyut, kalite
  9. Türkçe Llama-3 quantization — pratik uygulama
  10. Edge deployment — Mac M2/M3, telefonlar
  11. Egzersizler

1-4. Quantization Matematik#

1.1 Niye quantization?#

3 fayda, hepsi ilişkili:
(1) Memory: bf16 (2 byte/param) → INT4 (0.5 byte/param) → 4× küçük. Llama-3-8B 16GB → 4GB.
(2) Speed: INT operations FP operations'tan 2-3× hızlı. Tensor cores INT4'te peak throughput'a ulaşıyor.
(3) Cost: küçük model → ucuz GPU → düşük cloud maliyet.

1.2 Temel fikir#

LLM ağırlıkları (W): float32 değerler. Çoğu -1 ile +1 arasında, ortalama 0.
Quantization: bu floatları küçük tamsayı kümesiyle temsil et.
Float: -0.42, 0.87, -0.13, ... INT4 (16 değer, -8 ile +7 arası): -3, 6, -1, ...

1.3 Math formülü#

W_quantized = round((W - zero_point) / scale) W_restored = W_quantized × scale + zero_point
  • scale: float aralığı → int aralığı oranı
  • zero_point: float 0'ı int hangi değere map eder
Örnek: ağırlıklar -2 ile +6 arasında, INT4 -8 ile +7 arasında.
  • scale = (6 - (-2)) / (7 - (-8)) = 8/15 ≈ 0.53
  • zero_point = -8 - (-2/0.53) = -8 + 3.77 ≈ -4

2.1 Quantization granülaritesi#

Her ağırlığa aynı scale mi versek, gruplandırılmış mı?
  • Per-tensor: tüm matris için tek scale. Basit, kalite düşük.
  • Per-channel: her column için scale. Daha iyi.
  • Per-group: 128'er ağırlık grupları için scale (modern standart). En iyi.
Grup boyutu 128 yaygın. Daha küçük (32) = daha iyi kalite, daha çok metadata.

3.1 Quantization formatları#

INT8: 8-bit signed integer. -128 ile +127. Düşük kalite kaybı (%1-2), ama sadece 2× küçültür.
INT4: 4-bit, 16 değer. Daha agresif (%3-5 kalite kaybı), ama 4× küçültür.
FP8 (E4M3, E5M2): 8-bit float. 'Tensor cores'ta native, dynamic range INT8'den geniş. Modern (2024+).
NF4 (NormalFloat 4): QLoRA'da Dettmers 2023 önerdi. INT4 yerine 'normal distribution'a optimized 4-bit. Llama ağırlıkları normal dağılımlı olduğu için INT4'ten daha iyi.
Endüstri trend: AWQ INT4, GGUF Q4_K_M (mixed precision), FP8 yükselişte (H100 native support).

5-7. GPTQ vs AWQ vs GGUF#

5.1 GPTQ (Frantar 2022)#

'GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers' Elias Frantar, Saleh Ashkboos, Torsten Hoefler, Dan Alistarh Ekim 2022, ICLR 2023
Fikir: ağırlıkları tek tek quantize ederken, henüz quantize edilmemiş ağırlıkları telafi et.
Matematik: Hessian (ikinci türev) yaklaşımıyla 'hangi ağırlık quantization'ı en az hasar verir' hesaplanır. Sıralı quantization yapılır.
Avantaj: yüksek kalite, kalibration data ile %2-3 kayıp. Dezavantaj: yavaş quantization süreci (1 GB model ~30 dakika), kompleks implementation.

6.1 AWQ (Lin 2023)#

'AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration' Ji Lin, Jiaming Tang, Haotian Tang, Shang Yang, Wei-Ming Chen, Wei-Chen Wang, Guangxuan Xiao, Xingyu Dang, Chuang Gan, Song Han Haziran 2023, MIT
Fikir: bazı ağırlıklar çok kritik (activation outliers'a karşılık). Bunları koru, gerisini agresif quantize et.
Matematik: 'salient channels' identify, scale ile koru (bf16'da tut). Geri kalan INT4.
Avantaj: GPTQ'dan daha hızlı quantization (~5 dakika), benzer kalite, daha iyi throughput. Dezavantaj: kalibration data gerekli, biraz daha karmaşık.

7.1 GGUF (Gerganov / llama.cpp)#

Georgi Gerganov'un llama.cpp projesi (Bulgar mühendis, viral 2023). Açık kaynak C++ implementation.
GGUF format: mobile-friendly, CPU + GPU mix, Mac M1/M2/M3 GPU (Metal API) native.
Quantization seviyeleri:
  • Q2_K: 2-bit, en küçük, kalite düşük
  • Q4_K_M: 4-bit mixed, sweet spot (önerilen)
  • Q5_K_M: 5-bit mixed, kalite yüksek
  • Q6_K: 6-bit, neredeyse loseless
  • Q8_0: 8-bit, %99+ kalite
Avantaj: GPU'suz cihazlarda çalışır (Mac, Telefonlar, Raspberry Pi). llama.cpp ekosistemi devasa. Dezavantaj: H100 inference'ta vLLM'den yavaş (Linux GPU optimization daha iyi).

8.1 Karşılaştırma matrisi#

ÖzellikGPTQAWQGGUF
Quantization hızıYavaş (30dk/8B)Orta (5dk)Hızlı (3dk)
Inference hızıYüksekÇok yüksekCPU iyi, GPU orta
Kalite (INT4)%95%96%94 (Q4_K_M)
Mobile supportSınırlıYokMükemmel
GPU frameworkvLLM, TGIvLLM, TGIllama.cpp
Endüstri kullanım%20%50%30
TR SaaS production (GPU): AWQ tercih. Mac M2/M3 deployment: GGUF (llama.cpp). Mobile/Edge: GGUF tek seçenek.
python
# Türkçe Llama-3 DPO modelini AWQ 4-bit ile quantize
# Modül 15.6 capstone modelini production-ready hale getiriyoruz
 
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer
import json
 
MODEL_INPUT = 'sukruyusufkaya/llama-3-8b-tr-dpo-instruct'
MODEL_OUTPUT = './llama-3-8b-tr-dpo-awq'
 
# 1. Modeli yükle
model = AutoAWQForCausalLM.from_pretrained(
MODEL_INPUT,
safetensors=True,
device_map='auto',
)
tokenizer = AutoTokenizer.from_pretrained(MODEL_INPUT, trust_remote_code=True)
 
# 2. Kalibration data — Türkçe örnek metinler
# Önemli: kalibration data Türkçe olmalı (model davranışı bu dilde)
calibration_data = [
'İstanbul Boğazı, Karadeniz ile Marmara Denizi\'ni birleştiren doğal su yoludur.',
'Türk kahvesi, UNESCO Somut Olmayan Kültürel Miras listesinde yer alır.',
'Anadolu, dünya tarihinin en eski yerleşim alanlarından biridir.',
# ... 100+ örnek için Wikipedia Türkçe'den çek
]
 
# 3. Quantization config
quant_config = {
'zero_point': True, # asymmetric quantization
'q_group_size': 128, # 128'lik gruplar
'w_bit': 4, # 4-bit
'version': 'GEMM', # GEMM kernel (en hızlı)
}
 
# 4. Quantize et (~5-10 dakika H100'de)
model.quantize(
tokenizer,
quant_config=quant_config,
calib_data=calibration_data,
)
 
# 5. Kaydet
model.save_quantized(MODEL_OUTPUT)
tokenizer.save_pretrained(MODEL_OUTPUT)
 
# Boyut karşılaştırma
import os
original_size_gb = sum(
os.path.getsize(os.path.join(MODEL_INPUT, f))
for f in os.listdir(MODEL_INPUT)
if f.endswith('.safetensors')
) / (1024**3)
quantized_size_gb = sum(
os.path.getsize(os.path.join(MODEL_OUTPUT, f))
for f in os.listdir(MODEL_OUTPUT)
if f.endswith('.safetensors')
) / (1024**3)
 
print(f'Orijinal: {original_size_gb:.2f} GB')
print(f'Quantized: {quantized_size_gb:.2f} GB')
print(f'Sıkıştırma: {original_size_gb / quantized_size_gb:.1f}x')
# Beklenen: ~16 GB -> ~4 GB (4×)
 
# 6. vLLM ile production kullanım
# vllm serve ./llama-3-8b-tr-dpo-awq --quantization awq
 
Türkçe Llama-3 AWQ 4-bit Quantization
✅ Ders 16.3 Özeti — Quantization Derinlemesine
Quantization = LLM mühendisliğinin ekonomik motoru. 4 fayda: memory 4× azalır, speed 2× artar, cost düşer, edge deployment mümkün. Algoritma seçenekleri: GPTQ (Frantar 2022, kaliteli ama yavaş), AWQ (Lin 2023, sweet spot, production önerilen), GGUF (Gerganov, mobile + Mac champion). Türkçe Llama-3 AWQ ile 4-bit: 16 GB → 4 GB, kalite kaybı %2-4, vLLM ile production-ready. Mac M2/M3 / Mobile: GGUF Q4_K_M format, llama.cpp ile native çalışır. Sonraki ders: monitoring & observability — production'da modelin ne yapıyor.

Sonraki Ders: Monitoring & Observability#

Ders 16.4'te kurduğun TR LLM serving'i izle: Prometheus metrikleri, Grafana dashboard, OpenTelemetry tracing, alert kurallar. Halıcı kullanıcı sayısı, p95 latency, error rate, KV cache utilization, hallucination tespit. Sentry ile Türkçe error tracking.

Frequently Asked Questions

Loss **varies by task type**: **Little affected**: - Simple chat, Q&A (%1-2) - Summarization, paraphrasing (%2-3) - General knowledge (%2-3) **Heavily affected**: - Math, numerical calculation (%5-10) - Long-form reasoning (%5-8) - Code generation (%4-7) - Edge cases and nuanced semantics (%6-10) **Turkish-specific**: Turkish grammar + morphology sensitive to quantization. Quality may drop slightly more in complex sentence structures. **Empirical recommendation**: measure quality on **your own test set** before production. Generic benchmarks (MMLU) can be misleading.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

Related Content