KV Cache (Anahtar-Değer Önbelleği)

KV Cache (Key-Value Cache — Anahtar-Değer Önbelleği), transformer tabanlı dil modellerinin otomatik regresif çıkarımında hesaplanmış dikkat anahtarı (Key) ve değer (Value) matrislerini yeniden hesaplamamak için bellekte saklayan bir optimizasyon mekanizmasıdır.

KV Cache (Key-Value Cache — Anahtar-Değer Önbelleği), transformer tabanlı dil modellerinin otomatik regresif çıkarımında hesaplanmış dikkat anahtarı (Key) ve değer (Value) matrislerini yeniden hesaplamamak için bellekte saklayan bir optimizasyon mekanizmasıdır. Her yeni token üretiminde daha önce işlenen tüm tokenler için bu matrisler zaten mevcuttur; yalnızca yeni token için hesaplanması gerekir. Bu sayede çıkarım O(n²)'den O(n)'e indirilir. KV cache; VRAM tüketimi ve bağlam uzunluğu skalasını etkileyen kritik bir bileşendir.

memory KV Cache Nasıl Çalışır?

Transformer'ın her dikkat katmanında, her token için Key ve Value vektörleri hesaplanır. Otoregresif üretimde token 1..n zaten üretilmişse, t+1. tokeni hesaplarken 1..n için K,V hesaplamaya gerek yoktur — önbellekten okunurlar. Yalnızca yeni token t+1 için K,V hesaplanır ve önbelleğe eklenir. Bu, her üretim adımında O(n) işlem yapar, naif yeniden hesaplama O(n²) yerine.

KV Cache Boyutu ve Yönetimi

storage VRAM Tüketimi

2 × num_layers × num_heads × head_dim × seq_len × dtype_bytes. 7B model, 4096 token, FP16'da ~500 MB KV cache. 128K token'da bellek kritik hâle gelir.

book Paged Attention (vLLM)

KV cache'i sanal sayfa tablosu gibi yönetir; farklı uzunluktaki istekler arasında bellek parçalanmasını önler. vLLM'nin temel yeniliğidir.

cached Prompt Caching

Sistem promptu gibi tekrarlayan prefix'lerin KV cache'ini API çağrıları arasında saklar. Anthropic ve OpenAI bunu prefix caching ile destekler; maliyet %75'e kadar düşer.

KV Cache'in Çalışma Mekanizması ve Türleri

  • check_circle Otomatik Regresif Çıkarım: LLM her yeni token üretirken tüm önceki token'ları yeniden işlemek zorunda olurdu. KV cache bu yeniden hesaplamayı önleyerek her adımda yalnızca yeni token'ı işler.
  • check_circle Anahtar-Değer Matrisleri: Transformer'ın her dikkat katmanında her token için hesaplanan K (anahtar) ve V (değer) matrislerini önbellekte tutar. İlk dolum pahalı, sonraki adımlar ucuzdur.
  • check_circle Prompt Caching: Uzun sistem promptları veya statik bağlamlar için KV cache önceden hesaplanıp sunucu tarafında saklanabilir. Anthropic, OpenAI ve Google API'leri bu özelliği sunar.
  • check_circle Paged Attention (vLLM): İşletim sisteminin sanal bellek yönetiminden ilham alan vLLM, KV cache'i sayfalar hâlinde yönetir; bu sayede farklı uzunluklardaki istekler aynı anda işlenebilir.
  • check_circle MLA (Multi-head Latent Attention): DeepSeek'in geliştirdiği, KV cache boyutunu sıkıştırılmış gizli vektörlere indirgeyerek VRAM kullanımını dramatik biçimde azaltan mimari yenilik.
  • check_circle Sliding Window KV Cache: Tüm geçmişi değil, yalnızca son N token'ı önbellekte tutan yaklaşım. Sonsuz bağlam için döngüsel tampon yöntemi kullanılır.

KV Cache VRAM Baskısı ve Optimizasyon Stratejileri

KV cache, büyük dil modeli dağıtımında VRAM'in en önemli tüketicilerinden biridir. 70B parametreli bir modelde 128K token bağlam için KV cache tek başına onlarca GB VRAM tüketebilir; bu durum, model ağırlıklarıyla rekabet eder hâle gelir. Toplu çıkarımda (batch inference) farklı uzunluktaki isteklerin KV cache'leri tahmin edilemez biçimde büyür, bu da bellek parçalanmasına yol açar. Başlıca optimizasyon stratejileri şunlardır: Grouped Query Attention (GQA) ve Multi-Query Attention (MQA) K/V başlıklarını azaltarak cache boyutunu küçültür; LLaMA 2'den itibaren hemen tüm modern modeller bu teknikleri kullanmaktadır. Kuantizasyon (INT8 veya FP8 KV cache) bellek tüketimini yarıya indirebilir. Prefix caching, aynı sistem promptunu paylaşan istekler arasında KV hesaplamalarını yeniden kullanır. Üretim ortamlarında vLLM, TGI ve TensorRT-LLM gibi çıkarım altyapıları KV cache yönetimini otomatik optimize etmektedir.

quiz Sık Sorulan Sorular

  • check_circle KV cache bağlam uzunluğunu nasıl etkiler?: Daha uzun bağlam = daha büyük KV cache = daha fazla VRAM. Bu yüzden 100K+ bağlam modellerinde Paged Attention, Sliding Window Attention veya KV cache quantization kritiktir.
  • check_circle KV cache quantization nedir?: KV cache'i FP16 yerine INT8 veya INT4 ile saklamak; bellek boyutunu 2-4× azaltır. Küçük kalite kaybıyla çok daha uzun bağlam işlenebilir.
  • check_circle GQA (Grouped Query Attention) neden önemli?: Multi-head attention'da her kafa için ayrı K,V vardır. GQA birden fazla sorgu kafasının K,V'yi paylaşmasını sağlar; KV cache boyutunu küçültür. Llama 3, Mistral ve Gemma'da kullanılır.
  • check_circle KV cache nedir?: Transformer dikkat katmanlarında hesaplanan anahtar-değer (K-V) matrislerini önbelleğe alarak her yeni token üretiminde tüm geçmişin yeniden hesaplanmasını önleyen bellek optimizasyon tekniğidir.
  • check_circle KV cache ne kadar VRAM kullanır?: Model boyutu, katman sayısı, başlık sayısı ve bağlam uzunluğuna bağlıdır. 70B modelde 128K token bağlam FP16 ile 80GB+ VRAM tüketebilir; GQA ve kuantizasyon bunu önemli ölçüde azaltır.
  • check_circle Prompt caching nedir?: Uzun sistem promptlarının KV cache'ini sunucu tarafında önceden hesaplayıp yeniden kullanan API özelliğidir. Anthropic Claude, OpenAI ve Google API'lerinde mevcut olup maliyet ve gecikme azaltır.
  • check_circle vLLM'in paged attention'ı nasıl çalışır?: OS'un sanal belleğinden ilham alan paged attention, KV cache'i sabit boyutlu sayfalara böler. Bu sayede farklı uzunluktaki istekler bellek parçalanması olmadan verimli bir şekilde yönetilir.