GPU'da model inference'ını nasıl optimize edersiniz? Throughput ve latency arasındaki trade-off'u açıklayın.
Cevap
GPU inference optimizasyonu, aynı donanımdan daha fazla istek (throughput) veya daha hızlı cevap (latency) almaktır. İkisi çoğu zaman çelişir: daha büyük batch GPU'yu daha verimli kullanır ve throughput'u artırır, ama her isteğin bekleme süresini uzatır.
Model seviyesi
- Düşük hassasiyet: FP32 yerine BF16/FP16 neredeyse her zaman serbest bir kazançtır. INT8/FP8/INT4 quantization bellek ve bant genişliğini daha da azaltır.
- Derleme ve graf optimizasyonu:
torch.compile, ONNX Runtime, TensorRT. Kernel fusion ile bellek erişimlerini azaltır. - Optimize edilmiş kernel'ler: FlashAttention, fused LayerNorm.
- Daha küçük model: Distillation, pruning.
Serving seviyesi
- Dynamic batching: Kısa bir zaman penceresinde gelen istekler birleştirilip tek batch'te işlenir (Triton, TorchServe).
- Continuous (in-flight) batching: LLM'ler için. Bir istek bitince yerine hemen yenisi alınır, batch'in en uzun isteği beklemesi gerekmez. Static batching'e göre throughput'u kat kat artırabilir.
- PagedAttention ve prefix caching: KV cache belleğini verimli kullanarak daha fazla eşzamanlı istek.
- Speculative decoding: Küçük bir draft model birkaç token önerir, büyük model bunları tek forward pass'te doğrular. Çıktı dağılımı değişmeden decode gecikmesi düşer.
- Tensor / pipeline parallelism: Tek GPU'ya sığmayan modeller için. Ekstra iletişim maliyeti vardır.
LLM serving metrikleri
| Metrik | Anlamı |
|---|---|
| TTFT | İlk token'a kadar süre, prefill ağırlıklı |
| TPOT / ITL | Token başı süre, decode ağırlıklı |
| Throughput | Saniyede toplam token veya istek |
| Goodput | SLA'i karşılayan isteklerin throughput'u |
Darboğazı bulmak
- Profiling:
nvidia-smi, PyTorch Profiler, Nsight. GPU kullanımı düşükse sorun genelde CPU tarafındadır (preprocessing, tokenization, veri aktarımı). - Compute-bound mu (büyük batch, prefill) memory-bound mu (küçük batch, decode)? Çözümler farklıdır.
- Gerçekçi trafikle (istek boyutu dağılımı, eşzamanlılık) load test yapılmalıdır.
vllm serve meta-llama/Llama-3.1-8B-Instruct --dtype bfloat16 \
--max-model-len 8192 --gpu-memory-utilization 0.90 --enable-prefix-cachingPopüler araçlar: vLLM, SGLang, TensorRT-LLM, NVIDIA Triton, Hugging Face TGI.
İlgili MLOps soruları
- ML sistemleri için CI/CD nasıl kurulur? Klasik yazılım CI/CD'sinden farkı nedir?
- Yeni bir modeli production'a güvenli şekilde nasıl çıkarırsınız? Shadow deployment, canary ve A/B testi karşılaştırın.
- Bir ML modelini tekrarlanabilir (reproducible) hale getirmek ve versiyonlamak için neler yaparsınız?
- Feature store nedir? Training-serving skew problemini nasıl çözer?
- Experiment tracking neden önemlidir? MLflow ile neleri takip edersiniz?
- Data drift ve concept drift arasındaki fark nedir? Production'da nasıl tespit edersiniz?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.