KV Cache 公式 — 每个参数从模型的哪一层来?
KV Cache = 2 × L × H_kv × D × T × B (Bytes)
2
Key + Value — 为什么是 2?
Attention 计算需要 K 和 V。每次生成新 token,都要把当前 token 的 K 和 V 存起来,供后续所有 token 使用。Q 每次重新算,不缓存。
L
L — 层数 (Qwen2.5-7B: L=28)
每层的 Attention 权重不同,第 1 层和第 28 层关注的语义完全不同。因此每层都要存自己的一份 K/V,不能复用。28 层 × 每层一份 = 28 份。
H_kv
H_kv — KV 头数 (Qwen2.5-7B: H_kv=4)
Attention 拆成多个"头"独立计算。GQA 让多个 Q 头共享一组 K/V 头来减少缓存。如 Llama-3-70B: 64 Q 头配 8 KV 头,省 8 倍。
D
D — 每个 KV 头的向量维度 (Qwen2.5-7B: D=128)
每个头产出一个 D 维向量。H_kv 个头组成 [H_kv × D] 矩阵——这就是每层每个 token 的 K(或 V) 的"形状"。D 由模型设计决定,通常 64~256。
T
T — 序列长度 (prompt + 已生成的 tokens)
自回归生成:每生成 1 个新 token,它的 K/V 追加到 Cache 末尾 → Cache 大小随 T 线性增长。这是瓶颈。
B
B — 每个元素的字节数 (FP16=2, FP8=1, INT8=1, INT4=0.5)
数据精度决定每个数值占多少字节。量化 (FP16→FP8) 直接让 Cache 减半。
示例: Qwen2.5-7B (L=28, H_kv=4, D=128), T=2048 tokens, B=2 (FP16)
= 2 × L × H_kv × D × T × B = 2 × 28 × 4 × 128 × 2048 × 2
= 117,440,512 Bytes ≈ 112 MiB
适用范围: MHA / GQA / MQA 等稠密注意力架构 (Llama, Qwen2.5, Mistral 等)
注意: MLA (DeepSeek V2/V3) 将 K/V 压缩为 latent vector 再缓存,公式不同;MoE 模型的 KV Cache 不受 Expert 数量影响。并发 × N。