← 课程库
语言模型与架构模块三 · 高效注意力架构概念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/VKV 缓存最小,可能掉点
GQA 分组查询每组查询头共享 1 套 K/VMHA 与 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²)。

独立练习

做到这些,才算完成本节

  1. 给定 32 个查询头和 8 个 KV 头,写出查询头到 KV 头的分组映射。
  2. 在相同序列长度和 head_dim 下计算 MHA、GQA、MQA 的 KV cache 比例。
  3. 合上正文,用自己的话解释核心概念。
  4. 写出一个相似概念,并说明两者最关键的区别。
学习记录

记录本节阅读进度

建议先独立回答自测。读完记录不等于已经掌握。

继续下一课
← 上一课
详细配置:RMSNorm、Pre-Norm、GELU/Swish
下一课 →
MoE 与长上下文

学完不要急着赶进度:去练习自测,或完成对应的阶段实验