KV cache boyutu: formül ve gerçek modellerle örnekler

Bir dil modeli metin üretirken, önceki her token için her katmanda hesapladığı key ve value'ları saklar; böylece bir sonraki token için onları yeniden hesaplamaz. Bu depo KV cache'tir. Kaba hesapların atladığı GPU belleği kısmıdır ve uzun context'te ya da çok kullanıcıyla modelin ağırlıklarını geçer.

Formül

Her token için her katman, her key-value head başına bir key ve bir value vektörü saklar:

token başına KV byte = 2 × katman × key-value head × head boyutu × değer başına byte
KV cache             = token başına KV byte × context uzunluğu × eşzamanlı dizi

2, key ile value'yu sayar. Bir değer FP16 ya da BF16'da 2 byte, FP8'de 1 byte tutar. Katman, key-value head ve head boyutu mimariyle sabittir — modelin config.json dosyasında num_hidden_layers, num_key_value_heads ve head_dim — aynı boyuttaki iki modelin çok farklı önbellek istemesinin nedeni budur. Multi-head latent attention kullanan modellerde formülün ortası değişir; bkz. GQA, MQA ve MLA.

Çözümlü örnek: Llama 3.1 8B Instruct

Llama 3.1 8B Instruct 32 katmana, 8 key-value head'e ve 128 boyutlu head'lere sahiptir. FP16'da bu, token başına 2 × 32 × 8 × 128 × 2 = 131.072 byte, yani 128,0 KiB eder. Tek kullanıcı 8k token'da 1,00 GiB önbellek ister; 131.072 token'lık tam context'te 16,00 GiB — 14,96 GiB tutan BF16 ağırlıklarından fazla.

Bunu belirleyen parametre sayısı değildir. Qwen2.5 7B Instruct ile Llama 3.1 8B Instruct boyut olarak birbirine yakındır — 7,62B ve 8,03B parametre — ama Llama 3.1 8B Instruct token başına 128,0 KiB saklar, Qwen2.5 7B Instruct ise 56,0 KiB. Aradaki 2,3× fark katman ve key-value head sayısından gelir.

Popüler modellerde token başına önbellek

ModelKatmanKV head × head boyutuToken başına8k32k128k
Llama 3.2 3B Instruct288 × 128112,0 KiB896 MiB3,50 GiB14,00 GiB
Qwen2.5 7B Instruct284 × 12856,0 KiB448 MiB1,75 GiB—
Llama 3.1 8B Instruct328 × 128128,0 KiB1,00 GiB4,00 GiB16,00 GiB
Mistral Nemo 12B Instruct408 × 128160,0 KiB1,25 GiB5,00 GiB20,00 GiB
Qwen3 32B648 × 128256,0 KiB2,00 GiB8,00 GiB—
Llama 3.3 70B Instruct808 × 128320,0 KiB2,50 GiB10,00 GiB40,00 GiB
Qwen2.5 72B Instruct808 × 128320,0 KiB2,50 GiB10,00 GiB—
DeepSeek V361MLA68,6 KiB549 MiB2,14 GiB8,58 GiB

FP16, tek dizi. —: modelin maksimum context'inin ötesi. DeepSeek V3, head başına key ve value yerine sıkıştırılmış bir latent saklar. Gemma 2 ve gpt-oss bu tabloya alınmadı: sliding-window katmanları pencerede büyümeyi bırakır, bu yüzden token başına maliyetleri context uzadıkça düşer. Hesaplayıcı bunu katman katman sayar.

Eşzamanlılık onu çarpar

Her eşzamanlı dizinin kendi önbelleği vardır. 72,82 GiB kullanılabilir belleğiyle tek bir H100 SXM 80GB üzerinde Llama 3.1 8B Instruct, BF16'da kullanıcı başına 8k token ile 55, 32k ile 13, 128k ile 3 kullanıcıya yer bırakır. Ağırlıklar tabanı belirler; önbellek, üstüne kaç kişinin sığacağına karar verir.

Onu ne küçültür, ne küçültmez