AI Sözlüğü
İleri· ~2 dk okuma#kv-cache#memory#inference

KV Cache

Key-Value Cache

Transformer'ın daha önce hesapladığı attention key-value tensor'larını saklayıp her token için yeniden hesaplamayı önleyen optimizasyon — VRAM'in büyük kısmını yer.

HER TOKEN İÇİN K + V SAKLAüretilen token akışı12345678910111213141516KV cache — tokenle birlikte büyürKV~131 KB / token · 32K → ~4 GB · 128K → ~16 GBağırlıklara ek — cache fragmantasyonu için PagedAttentionhız uğruna hafıza — modern inference'ın olmazsa olmazı
Tanım

Transformer her token üretirken attention için K (key) ve V (value) matrislerini hesaplar. Naive implementasyonda token N üretilirken N-1 token'ın K, V'leri tekrar hesaplanır = O(N²) iş.

KV cache: ilk hesaplandıktan sonra K ve V'leri bellekte tut; her yeni token sadece kendi K, V'sini hesaplayıp cache'e ekler. Sonuç: her token üretimi O(1) (sabit) iş, toplam O(N) — N²'den dramatik iyileştirme. Modern inference'ın olmazsa olmazı.

Bedeli: VRAM. Cache boyutu = 2 (K+V) × num_layers × num_heads × head_dim × num_ctx × bytes. Llama 3.1 8B'de token başına ~131 KB. 32K bağlam → ~4 GB sırf cache. 128K → ~16 GB. Modelin ağırlıkları sığsa bile cache patlatabilir.

Optimizasyonlar: - PagedAttention (vLLM): cache'i sayfalı yönetir, fragmentasyonu ~%25 azaltır. - GQA (Grouped-Query Attention, Llama 3): KV head'lerini gruplar, cache 4-8× küçülür. - Sliding window (Mistral): sadece son N token'ı cache'le. - Quantize KV cache (FP8, INT4): ~%50 ek tasarruf, küçük doğruluk kaybı.

Benzetme

Bir muhasebecinin tüm geçmiş işlemleri her sorduğunda yeniden hesaplaması yerine bir defter tutması. İlk hesaplama yapılır, deftere yazılır; sonraki sorularda defterden okur. Çok hızlı — ama defter şişer. KV cache de öyle: hız uğruna hafıza harcar.

Gerçek dünyadan örnek

Llama 3.1 8B (FP16) 16 GB VRAM kullanıyor. Modelle sohbete başlıyorsun.

Token 1 üretildi → cache: 131 KB Token 100: cache: 13 MB Token 1000: cache: 131 MB Token 10000 (uzun makale yazma): cache: 1.31 GB Token 32000 (max num_ctx): cache: 4.2 GB

Toplam VRAM: 16 GB (model) + 4.2 GB (cache) = 20.2 GB. RTX 4090'a sığmaz! Çözümler: 1. Modeli quantize et (Q4 → 5 GB, +cache 4.2 = 9 GB) ✓ 2. num_ctx küçült (8K → cache 1 GB) 3. KV cache'i quantize et (FP8 → 2.1 GB) 4. GQA'lı model seç — Llama 3.1 zaten GQA, daha eskiler değildi.

vLLM PagedAttention ile aynı VRAM'da %25 daha çok eşzamanlı kullanıcı sığar — fragmentasyon kaybı yok.

Ne zaman kullan
  • Inference engineering — KV cache'i bilmeden VRAM planlanamaz
  • Long-context modelleri çalıştırmak — cache asıl darboğaz
  • Production'da PagedAttention (vLLM) ya da KV quant kullanmak
  • Multi-tenant servis — cache paylaşımı/izolasyonu kritik
Ne zaman kullanma
  • Eğitimde — KV cache sadece inference içindir, training farklı
  • Tek bir kısa istek — fark edilemez
  • Detayları gizleyen managed API kullanıyorsan (OpenAI, Anthropic) — onlar yönetir
Sık yapılan hatalar

Cache'i hesaba katmamak

'8B model 16 GB VRAM'a sığar' deyip 32K context açınca OOM. Cache modelin ~%25-%100'ü kadar yer kaplayabilir. Plan başında dahil et.

Multi-user'da cache izolasyonu

Aynı sunucuda farklı kullanıcılar için cache karışırsa veri sızıntısı. Production framework'leri (vLLM, TGI) izolasyonu sağlar; kendi yazıyorsan dikkat.

Prefix caching'i atlamak

Aynı sistem prompt'u her isteğe gönderiyorsan cache'i her seferinde yeniden hesaplama. Anthropic, OpenAI prompt caching API'leri var; vLLM/SGLang otomatik prefix cache yapar.