Yapay Zeka

KV Cache Nedir? Büyük Dil Modelleri Geçmiş Hesaplamaları Nasıl Yeniden Kullanıyor?

KV Cache (Key-Value Cache), önceki tokenlar için hesaplanan anahtar ve değer temsillerini saklayarak bu tekrarların bir bölümünü önler.

Bu yöntem, metin üretimini hızlandırabilir. Ancak bunun karşılığında ek bellek kullanır. Dolayısıyla KV Cache, modern LLM servislerinde hem bir performans avantajı hem de yönetilmesi gereken önemli bir bellek yüküdür.

KV Cache Nedir?

KV Cache, Transformer tabanlı modellerde attention mekanizmasının kullandığı Key (K) ve Value (V) tensörlerini sonraki üretim adımlarında yeniden kullanmak üzere saklayan önbellektir.

Attention hesaplamasında üç temel temsil bulunur:

  • Query (Q): İşlenen konumun hangi bilgilerle ilişki kuracağını belirlemede kullanılır.

  • Key (K): Sorguyla karşılaştırılarak dikkat ağırlıklarının hesaplanmasına katılır.

  • Value (V): Bu ağırlıklar doğrultusunda birleştirilen bilgiyi taşır.

KV Cache, geçmiş tokenlara ait K ve V temsillerini saklar. Nihai cevapları veya bütün attention sonuçlarını saklayan bir cevap arşivi değildir. Her attention katmanının kendi önbelleği bulunabilir.

Geçmiş Hesaplamalar Neden Yeniden Kullanılabilir?

Nedensel attention kullanan bir dil modelinde, bir token kendisinden sonra gelen tokenlara bakmaz. Bu nedenle sona yeni tokenlar eklendiğinde, önceki konumların K ve V temsillerini yeniden hesaplamak gerekmez.

Yeni konum için gerekli temsiller oluşturulur ve geçmişte saklanan K/V değerleri kullanılır.

Ancak yeni tokenın geçmiş bağlamla attention hesabı yine yapılır. KV Cache, bütün hesaplamaları ortadan kaldırmaz; önceki konumların tekrar tekrar işlenmesini önler.

Prefill ve Decode Aşamaları Nasıl Çalışır?

Prefill: Girdinin İşlenmesi

Kullanıcının sorusu, sistem talimatları ve varsa belgeler modele verilir. Model, girdideki tokenları uygun paralel hesaplamalarla işler ve K/V temsillerini oluşturur.

Bu aşama yalnızca ilk tokenın işlenmesinden ibaret değildir. Uzun bir belge gönderilmişse belgenin tamamının işlenmesi önemli zaman alabilir.

Decode: Yanıtın Üretilmesi

Model daha sonra tokenları sırayla üretir. İşlenen yeni token için hesaplamalar yapılır; geçmiş tokenların K/V temsilleri önbellekten alınır.

Yeni K/V değerleri de önbelleğe eklenerek süreç sürdürülür. NVIDIA’nın çıkarım açıklamalarında bu iki aşama ayrı ele alınır; prefill ile decode farklı hesaplama ve bellek davranışları gösterebilir.

KV Cache Ne Kadar Bellek Kullanır?

Kullanılan bellek; model mimarisine, katman sayısına, tutulan token sayısına, K/V başlığı sayısına ve veri hassasiyetine bağlıdır.

Standart, sıkıştırılmamış bir Transformer önbelleği için yaklaşık hesap şöyledir:

Bellek ≈ 2 × katman sayısı × token sayısı × K/V başlığı sayısı × başlık boyutu × değer başına bayt

Buradaki 2, hem Key hem de Value tutulmasını temsil eder. Birden fazla bağımsız istek işlendiğinde bunların önbellekleri de toplam ihtiyaca eklenir.

Örneğin varsayımsal olarak:

  • 32 katman,

  • 8 K/V başlığı,

  • 128 başlık boyutu,

  • 8.192 token,

  • değer başına 2 bayt

kullanılan tek bir dizinin ham KV verisi yaklaşık 1 GiB yer kaplar. Bu hesap, model ağırlıklarını ve diğer çalışma belleğini içermez.

Dolayısıyla bir modelin ağırlıklarının GPU’ya sığması, uzun bağlamlarla çok sayıda kullanıcıya aynı anda hizmet verebileceği anlamına gelmez.

Uzun Bağlamda Hız Avantajı Sınırsız mı?

Hayır. KV Cache yeniden hesaplamayı azaltır; ancak tam attention kullanılan katmanlarda yeni token hâlâ geçmiş K/V değerlerine erişir. Bağlam uzadıkça okunacak veri ve yapılacak attention işlemi artabilir.

Bu nedenle uzun bağlamda bellek kapasitesi kadar bellek bant genişliği de önem kazanır.

Ayrıca her mimaride önbellek sınırsız büyümez. Sliding-window attention kullanan katmanlar yalnızca belirli bir pencereyi tutabilir. Hugging Face dokümantasyonu, bu katmanlarda önbelleğin ilgili pencere boyutuna ulaştığında büyümeyi durdurabildiğini belirtir.

KV Cache Nasıl Daha Verimli Yönetilir?

Sayfalı Bellek Yönetimi

PagedAttention, önbelleği bloklara ayırarak belleğin kesintisiz tek bir alanında tutulma zorunluluğunu azaltır. Bu yaklaşım, gereksiz rezervasyonları ve bellek israfını sınırlamaya yardımcı olur.

Bu, K/V değerlerini otomatik olarak daha düşük hassasiyete sıkıştırmakla aynı işlem değildir.

Nicemleme

K/V değerleri daha düşük bit sayısıyla temsil edilebilir. Bellek ihtiyacı azalabilir; ancak ek dönüştürme maliyetleri ve çıktı kalitesi üzerindeki etkiler değerlendirilmelidir.

GPU Dışına Taşıma

Offloading, önbelleğin bir bölümünü CPU belleği gibi başka bir alanda tutabilir. GPU belleği rahatlayabilir; buna karşılık veri taşıma gecikmesi oluşabilir.

Dinamik veya Sabit Önbellek

Dinamik önbellek ihtiyaç oldukça büyür. Sabit önbellek önceden alan ayırır ve bazı derleme optimizasyonlarını kolaylaştırabilir; ancak kullanılmayan kapasite ayırabilir.

Bu seçeneklerin desteği ve avantajları, model ile çıkarım altyapısına göre değişir.

Ortak Önekler Yeniden Kullanılabilir mi?

Evet. Prefix caching, farklı isteklerin aynı başlangıç tokenlarını paylaşması durumunda bu bölümün K/V hesaplamalarını yeniden kullanabilir.

Örneğin aynı uzun belge hakkında farklı sorular soruluyorsa, belge her isteğin başında aynı biçimde bulunabilir. Uygun altyapı, ortak bölümü tekrar işlemeyebilir.

Ancak yalnızca metinlerin anlamca benzemesi yeterli değildir. Yeniden kullanım, token dizisi ve model gibi hesaplamayı belirleyen koşulların uyumlu olmasını gerektirir.

vLLM’nin otomatik önek önbellekleme yaklaşımı, özellikle prefill süresini azaltır. Yeni yanıt tokenlarının üretilmesini kendiliğinden hızlandırmaz.

Context Window ve Kalıcı Hafızadan Farkı Nedir?

Context window, modelin desteklediği bağlam kapasitesini ifade eder. KV Cache ise işlenen bağlama ait ara temsilleri saklar. Daha fazla önbellek ayırmak, modelin desteklediği bağlam sınırını otomatik olarak genişletmez.

Kalıcı hafıza ise sohbetler veya görevler arasında saklanan bilgilerle ilgilidir. KV Cache tek başına kullanıcı tercihlerini seçen, özetleyen veya gelecekteki konuşmalar için yöneten bir hafıza sistemi değildir.

Çok turlu sohbetlerde yeniden kullanım, sunucunun önbelleği korumasına ve yeni isteğin önceki hesaplamayla uyumlu olmasına bağlıdır.

Sık Sorulan Sorular

KV Cache modelin ağırlıklarını değiştirir mi?

Hayır. Standart kullanımda eğitim yapılmaz; çıkarım sırasında üretilen ara temsiller saklanır.

İlk yanıtı her zaman hızlandırır mı?

Hayır. Yeni ve uzun bir girdinin prefill işlemi yine gerekir. Ortak önek önbelleklemesi varsa bu yükün bir bölümü azaltılabilir.

Eğitim sırasında kullanılır mı?

Standart otoregresif üretimde kullanılan KV Cache esas olarak çıkarım optimizasyonudur. Olağan tam dizi eğitiminde genellikle devre dışı bırakılır.

Speculative decoding ile birlikte kullanılabilir mi?

Evet. Speculative decoding aday tokenları önerip doğrulamaya odaklanırken KV Cache geçmiş K/V hesaplamalarını yeniden kullanır. Birlikte uygulanmaları, önbelleğin doğru yönetilmesini gerektirir.

KV Cache’in temel değeri, tekrar eden hesaplamaları bellek kullanımı karşılığında azaltmasıdır. İyi bir uygulama; üretim hızını, bağlam uzunluğunu ve aynı anda hizmet verilen istek sayısını birlikte değerlendirir.

Kaynaklar: Hugging Face Transformers — How Caching Works ve Cache Strategies; NVIDIA Technical Blog — Mastering LLM Techniques: Inference Optimization; vLLM — Automatic Prefix Caching dokümantasyonu.

Editör Notu

Bu içerik, kamuya açık büyük dil modeli çıkarım araştırmaları ve resmî teknik dokümantasyonlardan yararlanılarak hazırlanmış bir araştırma ve değerlendirme yazısıdır. İçerikte yer alan değerlendirmeler editoryal yorum niteliğindedir. KV Cache’in bellek tüketimi ve performans kazanımları; model mimarisine, bağlam uzunluğuna, donanıma ve önbellek yönetimine göre değişebilir.