KV Cache Darboğazı ve Uzun Bağlam
KV cache belleği, katman sayısı, kafa sayısı, kafa boyutu ve üretilen token sayısı ile çarpılarak büyür; bağlam iki katına çıktığında bellek ihtiyacı da yaklaşık iki katına çıkar ve eşzamanlı işlenebilen istek sayısı düşer.
Üretim neden önbellek ister?
Üretici bir modelde yeni token üretmek için önceki tokenların tümünün dikkat bağlamına dahil edilmesi gerekir. Bunları her adımda yeniden hesaplamak yerine saklamak çok daha ucuzdur.
Bu saklama, anahtar-değer önbelleğidir. Model önbelleği bir kez doldurduktan sonra her yeni token için yalnızca yeni anahtar ve değer ekler.
Boyutu ne belirliyor?
Önbellek boyutu, katman sayısı, kafa sayısı, kafa başına boyut ve üretilen toplam token sayısının çarpımıdır. Sayı tipi de doğrudan etkilidir; düşük hassasiyetli sayılar belleği belirgin biçimde azaltır.
Bu formül, önbelleğin token sayısıyla doğrusal büyüdüğünü gösterir. Bağlamı iki katına çıkarmak, önbelleği de yaklaşık iki katına çıkarır.
Doğrusal büyüme neden sorun?
Üretim sırasında bellek bir anda değil adım adım dolar. Kullanıcı başta kısa bir bağlam kullanıyorsa sistem normal çalışır; ancak uzun bir belge yüklediğinde önbellek dolar ve sistem kapasitesini aşar.
Ayrıca bellek taşması, aynı anda işlenebilen istek sayısını sınırlar. Bu, yüksek eşzamanlılık istenen üretim hizmetlerinde doğrudan kapasite kaybı yaratır.
Mühendislik yanıtları
Kaba kuvvet yaklaşımı, önbelleği sayfa gruplarına bölerek gerektiğinde ayrı depolamaya taşımaktır. Bu, eşzamanlı istek sayısını artırır ama erişim gecikmesi getirir.
Daha zekice yaklaşımlar önbelleği kuantize ederek boyutunu küçültür ve tekrarlanan ön eki paylaşarak kullanılmayan kapasiteyi ortadan kaldırır. Aynı ön eki paylaşma, sabit sistem istemi olan uygulamalarda çok etkilidir.
Pencere yetmiyorsa?
Bazı senaryolarda tek istekte gereken bağlam, modelin pencere sınırını aşar. Bu durumda bağlamı bölüp özetlemek veya harici belleğe başvurmak gerekir.
Ancak bu yaklaşımlar dikkatin bütünlüğünü bozabilir. Belgenin ortasındaki bilgiye erişim, baştan sona modele sunulduğundan farklı davranabiliyor; bu, uzun bağlam mimarisinin temel gerilimidir.
- KV cache, üretimde önceki tokenların temsillerini saklar
- Boyut, katman, kafa, boyut ve token sayısıyla çarpılır
- Bağlam iki katına çıkınca bellek de yaklaşık iki katına çıkar
- Sayfalama, kuantizasyon ve ön eki paylaşımı belleği düşürüyor
Sık sorulan sorular
KV cache belleği bağlam uzunluğuyla nasıl büyür?
Doğrusal olarak. Üretilen her yeni token, her katman ve her kafa için sabit miktarda yeni anahtar ve değer ekler. Bağlam iki katına çıkarsa bellek de yaklaşık iki katına çıkar.
Neden bellek taşması sorun?
Taşma, aynı anda işlenebilecek istek sayısını sınırlar. Yüksek eşzamanlılık gerektiren üretim hizmetlerinde bu doğrudan kapasite kaybı ve maliyet artışıdır.
Önbelleği küçültmenin yolları neler?
Kuantizasyon, daha az kafa kullanan GQA, sayfa bazlı yönetim ve tekrarlanan ön eki paylaşmak başlıca yöntemlerdir. Hepsi bellek ile gecikme arasında bir denge kurar.
Bu sorun büyük dil modellerine özgü mü?
Hayır. Her otoregresif üretici model aynı sorunu yaşıyor. Ancak büyük modeller ve uzun bağlamlar bu maliyeti görünür kıldığı için çözüm çalışmaları yoğunlaştı.
Kaynakça
- GQA ve KV cache azaltmaarXiv
- vLLM ve PagedAttentionarXiv
- Dikkat mekanizmasıWikipedia
- Büyük dil modeliWikipedia
- Model kuantizasyonuWikipedia