Bir transformer token'ı işlerken attention katmanı onu her katmanda bir anahtar ve bir değer vektörüne çevirir. Üretim devam ederken bu vektörler değişmez. Dolayısıyla her yeni token'da bütün prompt için bunları baştan hesaplamak saf israf olur. KV cache tam olarak bunları saklar.
Maliyet farkı büyüktür. Önbellek olmadan bininci token'ı üretmek, önceki dokuz yüz doksan dokuz token'ı yeniden okumak demektir. Önbellekle bu iş saklanan durum üzerinde tek adıma iner. Bir yanıtın ilk token'ının yavaş, gerisinin hızlı gelmesinin nedeni budur. Prefill aşaması önbelleği doldurur, decode aşaması okur.
Uzun context'in pahalı olmasının nedeni de aynı yapıdır. Önbellek boyutu dizi uzunluğuyla ve batch boyutuyla doğrusal büyür, üstelik ağırlıklarla aynı GPU belleğinde durur. Altmış kısa konuşmayı aynı anda taşıyabilen bir servis yığını uzun konuşmalarda dörtte kalabilir.
Paged attention'dan önbellek nicemlemesine, prompt caching'e kadar çıkarım optimizasyonlarının çoğu bu yapıyı ucuzlatma denemesidir.
Kapasite planlaması yaparken önbelleğin büyüklüğünü kabaca hesaplamak mümkündür. Katman sayısı, attention başlık sayısı, başlık boyutu ve dizi uzunluğu çarpılır, sonuç iki ile çarpılır çünkü hem anahtar hem değer saklanır. Bu sayı, aynı GPU'da kaç eşzamanlı oturum taşıyabileceğinizin doğrudan cevabıdır.

