GQA, MQA ve MLA: attention KV cache'i nasıl belirler

KV cache attention'dan doğar ve bir modelin attention head'lerini nasıl düzenlediği, aynı parametre sayısında önbelleği on kat değiştirebilir. Bugünün açık modellerini dört düzen kapsar.

Multi-head attention (MHA)

Her query head'in kendi key ve value head'leri vardır ve önbellek hepsini saklar: token başına 2 × katman × head × head boyutu × byte. Özgün Transformer tasarımıdır ve önbelleği en pahalı olandır. Phi-3 mini 4k hâlâ bunu kullanır — 32 katmanda 32 head, token başına 384,0 KiB.

Multi-query attention (MQA)

Tüm query head'ler tek bir key head'ini ve tek bir value head'ini paylaşır (Shazeer, 2019, “Fast Transformer Decoding: One Write-Head is All You Need”). Önbellek head sayısının tamamı kadar küçülür — mümkün olan en büyük kazanç — ama tek bir key ve value takımını her head'e paylaştırmak kaliteye mal olabilir.

Grouped-query attention (GQA)

Query head'ler gruplara ayrılır ve her grup bir key-value head'i paylaşır: birden fazla, ama query head sayısından az. Ainslie ve arkadaşları (2023) bunu orta yol olarak önerdi — multi-head attention'a yakın kalite, multi-query'ye yakın hız — ve LLMScale'in yerleşik 31 modelinden 28 tanesi bunu kullanır. Llama 3.3 70B Instruct, 64 query head'i 8 key-value head'e toplar; bu yüzden multi-head attention'ın 2560,0 KiB isteyeceği yerde token başına 320,0 KiB saklar: 8× daha az.

Multi-head latent attention (MLA)

DeepSeek-V2 başka bir yol izledi. Head başına key ve value yerine her katman, token başına tek bir sıkıştırılmış latent vektör ve rotary konum kodlamasını taşıyan küçük, ayrık bir key saklar. Token başına önbellek katman × (kv_lora_rank + qk_rope_head_dim) × byte olur ve head sayısı formülden düşer. DeepSeek-V2 makalesi (§2.1.3), kendi boyutları için bunu yalnızca 2,25 gruplu bir GQA'nın boyutuna eşitler.

DeepSeek V3, 61 katmanın her birinde 512 + 64 = 576 değer saklar: token başına 68,6 KiB, head başına formülün verdiğinden 24,9× az. 8k context'te bu, 13,34 GiB yerine 549 MiB eder. DeepSeek modellerine head başına formülü uygulayan bir hesaplayıcı önbelleği bu oranda abartır; LLMScale, bir config iki alanı da taşıdığında formül değiştirir.

Yan yana

ModelQuery headKV headAttentionToken başınaMHA'ya göre
Phi-3 mini 4k3232MHA384,0 KiB1×
Llama 3.2 1B Instruct328GQA32,0 KiB4×
Qwen2.5 7B Instruct284GQA56,0 KiB7×
Llama 3.1 8B Instruct328GQA128,0 KiB4×
Mistral Nemo 12B Instruct328GQA160,0 KiB4×
Mixtral 8x7B Instruct328GQA128,0 KiB4×
Qwen3 32B648GQA256,0 KiB8×
Llama 3.3 70B Instruct648GQA320,0 KiB8×
Qwen2.5 72B Instruct648GQA320,0 KiB8×
DeepSeek V3128—MLA68,6 KiB24,9×

FP16. “MHA'ya göre”: aynı modelin multi-head bir sürümünün kaç kat fazla önbellek tutacağı.

Model seçerken ne anlama gelir