GQA / MHA / MLA:注意力与 KV 头
KV 头数直接决定 KV Cache 大小;MLA 用低秩压缩把它再压一个量级。
MHA → GQA → MLA
- MHA(多头注意力):每个 Query 头配一套 K/V。KV Cache = 层数 × 头数 × head_dim × 2。
- GQA(分组查询注意力):多个 Query 头共用一组 K/V。Qwen3-32B 是 64 Q 头 / 8 KV 头,KV 直接砍到 1/8。绝大多数 2024–2025 开源模型用它。
- MLA(多头潜在注意力,DeepSeek):把 K/V 压成一个低秩潜向量(DeepSeek-V3 是 512 维 + 64 维 RoPE),推理时再展开。每 token 每层只存 576 个数,比 GQA 8 头 × 128 = 2048 还小。
数字对比(每 token,BF16)
| 模型 | 注意力 | 每 token KV |
|---|---|---|
| Qwen3-32B | GQA 8 头 × 128 × 64 层 | 256 KiB |
| GLM-4.6 | GQA 8 头 × 128 × 92 层 | 368 KiB |
| DeepSeek-V3.2 | MLA 576 × 61 层 | ≈ 70 KiB |
| Qwen3-Next-80B | 混合,仅 12 层全注意力 | ≈ 24 KiB |
更新的变体
- 稀疏注意力(DSA):DeepSeek-V3.2 为每个 query 只挑 top-k 个键,把长上下文的注意力计算从 O(L²) 降到 O(L·k)。KV 仍要存,但算力大降。
- 滑动窗口:Gemma 3 每 6 层只有 1 层看全局,其余 5 层只看 1024 token 窗口;gpt-oss 隔层滑窗 128。KV Cache 主要来自全局层。
- 线性 / 混合:Qwen3-Next 的 Gated DeltaNet、Nemotron 3 的 Mamba-2。状态大小固定,不随序列增长,代价是精确的长程回忆变弱。
选型提示
KV 头数少 → 长上下文与高并发更省显存,但模型质量上限略受影响。看长上下文场景时,先看这个数,再看上下文标称长度。