Quantization Derinlemesine: INT4'ten FP8'e — Modelinizi 4× Küçültmek, 2× Hızlandırmak
LLM quantization'ın matematiksel ve mühendislik anatomi: INT8, INT4, FP8 formatları, GPTQ (Frantar 2022) vs AWQ (Lin 2023) vs GGUF (Gerganov) algoritmaları, kalite-boyut-hız trade-off'ları. Llama-3-8B Türkçe DPO model'ini 4-bit AWQ ile quantize etme, kalite kaybı ölçümü, RTX 4090'da Llama-3-70B çalıştırma, mobil cihaz deployment'ı.
Şükrü Yusuf KAYA
80 dakikalık okuma
İleri🗜️ 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)#
- Quantization niye gerekli — memory + speed + cost
- Matematik temel — float → int dönüşüm
- Quantization formatları — INT8, INT4, FP8, NF4
- Kalibrasyon — outliers ve scale factors
- GPTQ (Frantar 2022) — gradient-based quantization
- AWQ (Lin 2023) — activation-aware quantization
- GGUF (Gerganov / llama.cpp) — mobile-friendly format
- Karşılaştırmalı analiz — hız, boyut, kalite
- Türkçe Llama-3 quantization — pratik uygulama
- Edge deployment — Mac M2/M3, telefonlar
- 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#
| Özellik | GPTQ | AWQ | GGUF |
|---|---|---|---|
| Quantization hızı | Yavaş (30dk/8B) | Orta (5dk) | Hızlı (3dk) |
| Inference hızı | Yüksek | Çok yüksek | CPU iyi, GPU orta |
| Kalite (INT4) | %95 | %96 | %94 (Q4_K_M) |
| Mobile support | Sınırlı | Yok | Mükemmel |
| GPU framework | vLLM, TGI | vLLM, TGI | llama.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 AutoAWQForCausalLMfrom transformers import AutoTokenizerimport json MODEL_INPUT = 'sukruyusufkaya/llama-3-8b-tr-dpo-instruct'MODEL_OUTPUT = './llama-3-8b-tr-dpo-awq' # 1. Modeli yüklemodel = 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 configquant_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. Kaydetmodel.save_quantized(MODEL_OUTPUT)tokenizer.save_pretrained(MODEL_OUTPUT) # Boyut karşılaştırmaimport osoriginal_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.
Sık Sorulan Sorular
Kayıp **görev tipine göre değişir**:
**Az etkilenen**:
- Basit sohbet, soru-cevap (%1-2)
- Özetleme, paraphrasing (%2-3)
- Genel bilgi (%2-3)
**Çok etkilenen**:
- Matematik, sayısal hesaplama (%5-10)
- Long-form reasoning (%5-8)
- Code generation (%4-7)
- Edge case'ler ve nüanslı semantik (%6-10)
**Türkçe-spesifik**: Türkçe gramer + morfoloji quantization'a hassas. Karmaşık cümle yapılarında kalite biraz daha düşebilir.
**Empirik öneri**: production'a almadan önce **kendi test setinde** kalite ölç. Generic benchmark (MMLU) yanıltıcı olabilir.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
Modül 0: Kurs Çerçevesi ve Atölye Kurulumu
LLM Engineer Kimdir? Junior'dan Staff'a Yapay Zekâ Mühendisliği Kariyer Haritası
Öğrenmeye BaşlaModül 0: Kurs Çerçevesi ve Atölye Kurulumu
Kurs Felsefesi: Neden Bu Yol, Neden Bu Sıra — 8 Aylık Müfredatın İskeleti
Öğrenmeye BaşlaModül 0: Kurs Çerçevesi ve Atölye Kurulumu