Skip to content

注意力优化

KV cache、GQA/MQA、RoPE、Flash Attention、稀疏注意力。

Updated View as Markdown
For humans

注意力优化

O(n²) 注意力是推理成本的核心。面试主线:KV cache 解决什么、GQA 怎么省显存、RoPE 怎么外推、Flash Attention 怎么加速。

KV cache:推理的关键优化

生成是自回归的:每个新 token 都要重新算注意力。KV cache 缓存历史 token 的 K/V,新 token 只算自己的 Q 和新的 K/V:

无 cache: 每个新 token 重算全部历史的 QKV → 第 t 步 O(t²), 全程 O(n³)
有 cache: 只算新 token 的 Q/K/V, 历史 KV 复用 → 第 t 步 O(t), 全程 O(n²)
  • 推理速度提升一个量级
  • 代价:显存。KV cache 随序列线性增长,长上下文 + 高并发 = 显存大头
  • 面试点:长上下文贵在 KV cache 显存,不是计算。这也解释了为什么上下文越长单请求成本越高

MQA 与 GQA

多头注意力的 K/V 也是多头(h 份)。优化:共享 K/V 头

方案 K/V 头数 效果
MHA(原始) h 个 质量最高,KV cache 最大
MQA 1 个 KV cache 最小,质量略降
GQA g 个(如 8) 折中,质量接近 MHA,KV cache 大幅缩小

**GQA(分组查询注意力)**是现代大模型标准(Llama 2/3、Qwen 都用):查询保持多头,键值分组共享。收益在推理:KV cache 显存降 4-8 倍,吞吐翻倍。

RoPE:旋转位置编码

  • 把位置信息编码成旋转矩阵,作用在 Q/K 上
  • 特性:相对位置(两个 token 的注意力只依赖它们的距离)
  • 外推性:训练 4K 长度,可以推广到更长(配合长度外推技术,见上下文窗口篇)
  • 现代大模型标配(GPT-NeoX、Llama、Qwen)

Flash Attention:IO 优化

注意力慢的瓶颈不在计算,在显存读写(QK^T 中间矩阵要写回显存再读):

  • 分块计算:不落中间矩阵,按块在 SRAM 算完
  • 在线 softmax:分块安全地算 softmax
  • 效果:训练/推理加速 2-4 倍,显存占用从 O(n²) 降到 O(n)

面试话术:Flash Attention 是 IO 优化(少读写),不是算法优化

稀疏注意力

  • 长序列下让每个 token 只看部分上下文:局部窗口 + 全局 token + 随机采样
  • 代表:Longformer、BigBird、滑动窗口(Mistral)
  • 效果:复杂度从 O(n²) 降到 O(n),质量有取舍

面试追问

  1. KV cache 是什么? 缓存历史 token 的 K/V,新 token 只算自己的。推理从 O(n²) 变 O(n)
  2. GQA 为什么流行? K/V 头分组共享,KV cache 显存降 4-8 倍,质量损失小。推理吞吐关键
  3. RoPE 的特性? 旋转编码相对位置,外推性好。现代大模型标配
  4. Flash Attention 优化了什么? IO:分块计算避免中间矩阵落显存。不是算法变快,是少搬数据
  5. 长上下文贵在哪? KV cache 显存随序列线性增长,不是计算。长上下文 = 高显存成本
Navigation

Type to search…

↑↓ navigate↵ selectEsc close