语言模型与架构模块三 · 高效注意力架构概念约 14 分钟
高效注意力:MQA、GQA、MLA 与 KV 缓存
推理时真正卡显存的是 KV 缓存,不是参数
学完这节你能:
- 理解 KV 缓存为什么占显存
- 区分 MHA、MQA、GQA、MLA
- 了解稀疏/线性注意力的动机
自回归生成时,每生成一个新 token 都要用到前面所有 token 的 K、V。为避免重复计算,把它们缓存起来,就是 KV 缓存——序列越长,它越吃显存。
| 方法 | K/V 头数 | 效果 |
|---|---|---|
| MHA 多头 | 每个查询头一套 K/V | 标准,KV 缓存最大 |
| MQA 多查询 | 所有查询头共享 1 套 K/V | KV 缓存最小,可能掉点 |
| GQA 分组查询 | 每组查询头共享 1 套 K/V | MHA 与 MQA 的折中,主流 |
| MLA 多头潜在 | 把 K/V 压到低秩潜空间 | DeepSeek 用,进一步省显存 |
🔑 共同目标:减小 KV 缓存的显存与带宽压力,让长序列推理更快更省。GQA 是当前最常见的平衡选择。
另一条思路是改注意力本身的复杂度:标准自注意力是 O(n²);稀疏注意力只算部分位置对、线性注意力用核技巧把复杂度降到近 O(n),理论基础常是低秩近似。
自测MQA / GQA / MLA 的共同目的是:
自测变式(换数字再算):MHA 有 32 个查询头,改用 GQA 让每 4 个查询头共享 1 套 K/V,则 KV 缓存相比 MHA 约降为:
// 带走一句话
长序列推理卡在 KV 缓存;MQA(共享1套)/GQA(分组共享,主流)/MLA(低秩压缩)都为省 KV,稀疏/线性注意力则降 O(n²)。
独立练习
做到这些,才算完成本节
- 给定 32 个查询头和 8 个 KV 头,写出查询头到 KV 头的分组映射。
- 在相同序列长度和 head_dim 下计算 MHA、GQA、MQA 的 KV cache 比例。
- 合上正文,用自己的话解释核心概念。
- 写出一个相似概念,并说明两者最关键的区别。
学习记录
记录本节阅读进度
建议先独立回答自测。读完记录不等于已经掌握。