模型架构 进阶

GQA 与 MQA

别名:Grouped Query Attention / Multi-Query Attention / 分组查询注意力 / 多查询注意力

让多个 Q 头共享 K/V,减少 KV Cache;MQA 共享一组,GQA 分组共享。

更新于 2026/11/08
AttentionKV Cache推理

一句话定义

GQA 与 MQA 是 MHA 的变体:Q 头数量不变,但多个 Q 头共享同一组 K/V。MQA 让所有 Q 头共享一组,GQA 把 Q 头分成若干组、每组共享一组。

为什么需要它们

长上下文推理时,KV Cache 的显存和带宽会随层数、头数、序列长度线性增长。减少 K/V 的份数,就能直接缩小缓存;Q 头仍然可以保留多个,维持一定的表达能力。

怎么工作

  • MHA:每个 Q 头都有独立的 K/V,KV Cache 份数 = Q 头数。
  • MQA:所有 Q 头共享一组 K/V,缓存最小,但表达压缩最狠。
  • GQA:每 g 个 Q 头共享一组 K/V;g 介于 1 和 Q 头数之间,是质量和显存的折中。

注意力公式本身不变,只是 K/V 的来源从“每头一份”变成“每组一份”。缓存大小约为 2 × 层数 × K/V 组数 × 头维度 × 序列长度 × batch。

GQA 与 MQA:多个 Q 头共享 K/V

关键取舍

  • MQA 最省显存和带宽,但质量可能下降;GQA 通常更平衡。
  • 组数越少越省,越多越接近 MHA;要结合模型规模、上下文长度和评测选。
  • 组数 g 常取 2–8;具体要看模型规模、上下文长度和 KV Cache 预算。
  • 省的是 KV Cache,不是注意力计算量;训练和推理的收益要分开看。

常见误区

  • GQA/MQA 不是“减少 Q 头”,Q 头数量通常不变。
  • 它们不改变注意力的语义公式,只改变 K/V 的共享方式。
  • 省显存不等于一定更快;还要看算子、batch 和硬件。

用在哪里

  • 长上下文 LLM 推理、批量服务、显存受限的部署。
  • 需要在质量和 KV Cache 之间折中时,优先试 GQA;极端省显存才用 MQA。
  • 看开源模型配置时,num_key_value_heads 往往就是 GQA 的组数。

相关概念

  • MHA:GQA/MQA 的基线。
  • KV Cache:被优化的主要对象。
  • Attention:共享方式变化的地方。