Soup's Blog

Back

大模型学习(十)注意力机制之MHA、MQA、GQABlur image

自 Transformer 架构提出以来,多头注意力(Multi-Head Attention, MHA)凭借其强大的并行建模能力成为标准配置。然而,随着模型规模不断扩大、上下文长度持续增长,MHA 在推理阶段暴露出显著的内存与计算瓶颈——尤其是其庞大的 KV Cache 开销,严重制约了部署效率。

为平衡模型性能与推理成本,研究者相继提出了多种注意力变体:多查询注意力(Multi-Query Attention, MQA)通过共享单一 KeyValue 头大幅压缩缓存,显著提升生成速度;而分组查询注意力(Grouped-Query Attention, GQA)则在 MHAMQA 之间取得折中,在几乎不损失模型质量的前提下,有效降低内存占用并加速推理。

下面简单介绍一下这三种注意力机制:

多头注意力机制(MHA)#

在这里插入图片描述 多头注意力机制(Multi-Head Attention, MHA)并不是简单地将 Q、K、V 复制 n_heads 次,而是通过不同的可学习线性投影,将输入映射到 n_heads 个独立的子空间中,每个头在自己的子空间里并行计算注意力。

由于每一层MHA需要缓存n_headsKey向量和n_headsValue向量,总共是2*n_heads个/层。

✅ 优点#

优点说明
1. 捕获多样化的依赖关系不同头可以关注不同类型的模式(例如:一个头关注语法结构,另一个头关注语义角色,再一个头关注指代关系)
2. 增强模型表达能力相当于集成多个“弱注意力模型”,提升整体泛化能力
3. 并行计算高效所有头可同时计算,充分利用 GPU 并行能力
4. 提高训练稳定性多视角学习有助于缓解梯度消失/爆炸问题

❌ 缺点#

缺点说明
1. 推理时 KV Cache 内存开销大每个头都需要缓存自己的 K 和 V → KV Cache 大小与 n_heads 成正比
(例如 Llama-7B:32 heads → 缓存是 MQA 的 32 倍)
2. 计算量增加虽然可并行,但总 FLOPs 高于单头
3. 对长上下文不友好KV Cache 随序列长度线性增长,多头进一步放大内存压力,限制最大上下文长度
4. 可能存在冗余头研究发现部分头学习到相似模式,存在参数浪费

多查询注意力机制(MQA)#

在这里插入图片描述 MQAMulti-Query Attention,多查询注意力) 是对标准多头注意力(MHA)的一种高效改进,主要用于降低大语言模型在推理阶段的内存和计算开销。它的核心思想是,保留多个Query头(每个头都有自己的查询表示),但所有头共享同一个Key和同一个Value

这里我认为图中的KV Cache计算错了,应该是2个/层(一个Key和一个Value)。


✅ 优点#

优点说明
1. 显著降低 KV Cache 内存占用所有注意力头共享同一个 Key 和 Value,每层仅需缓存 1 个 K 和 1 个 V,KV Cache 大小与 n_heads 无关(例如 Llama-7B 使用 MQA 可将缓存减少至 MHA 的 1/32)
2. 提升推理速度和吞吐量减少显存读写和带宽压力,生成新 token 时延迟更低,尤其在长序列场景下优势明显
3. 更适合长上下文部署因内存开销小,更容易支持数万 token 的上下文窗口,提升实际应用可行性
4. 训练开销几乎不变仅减少了 K/V 投影参数数量,训练时计算量和收敛性基本不受影响

❌ 缺点#

缺点说明
1. 表达能力略有下降所有头被迫使用相同的 Key 和 Value 视角,无法像 MHA 那样从多个语义子空间独立建模依赖关系
2. 在复杂任务中可能性能受损对于高度依赖细粒度注意力模式的任务(如机器翻译、结构化推理),可能出现轻微准确率下降
3. 不适用于编码器-heavy 架构MQA 主要优化解码器自回归生成,在需要双向上下文建模的编码器中收益有限甚至有害
4. 注意力多样性受限由于共享 K/V,不同头之间的注意力分布趋于相似,削弱了“多视角”学习的优势

分组查询注意力机制(GQA)#

在这里插入图片描述 GQAGrouped-Query Attention,分组查询注意力)是一种在多头注意力(MHA)之间的折中方案。它将多个查询头(Query heads)分成若干组,每组共享同一个 KeyValue,而不是像 MHA 那样每个头都拥有独立的 K/V,也不像 MQA 那样所有头共享同一对 K/V

对于每层GQA,KV Cache取决于n_headsg(分组数)2*n_heads/g个/层。例如,在 32 个头的模型中,可将其分为 8 组,每组 4 个 Query 头共享 1 个 K 和 1 个 V,从而将 KV Cache 的大小从 MHA 的 64 个张量减少到 16 个。


✅ 优点#

优点说明
1. 在性能与效率之间取得良好平衡相比 MQA 保留了更强的多头表达能力,相比 MHA 大幅降低推理开销,实测在多数任务上性能几乎无损
2. 显著减少 KV Cache 内存占用n_heads 个 Query 头分组,每组共享一个 Key 和 Value,KV Cache 大小从 2 × n_heads 降至 2 × n_groups(例如 Llama-3-8B:32 heads → 8 groups,缓存减少至 1/4)
3. 提升长上下文推理可行性更低的显存占用使模型更容易支持数万 token 的上下文长度,适合实际部署
4. 兼容现有训练流程无需修改训练目标或架构设计,仅调整注意力头的分组方式,训练稳定性与 MHA 相当

❌ 缺点#

缺点说明
1. 仍存在一定的 KV Cache 开销虽优于 MHA,但缓存大小仍高于 MQA(例如 8 组 vs 1 组),在极端内存受限场景下不如 MQA 轻量
2. 分组策略需人工设计n_groups 是超参数,需在模型设计阶段确定,不同任务可能需要调优,缺乏完全自适应机制
3. 组内头多样性受限同一组内的多个 Query 头共享相同的 K/V,导致组内注意力模式趋同,略微削弱多视角建模能力
4. 实现复杂度略高相比 MHA 和 MQA,需要额外处理分组逻辑,在底层推理引擎中需专门优化(如 vLLM、TensorRT-LLM)

对比#

在这里插入图片描述 可以看到单从精度效果来看MHA-XXL是最好的,单从推理速度来看MQA-XXL是最好的,综合来看GQA-XXL是最好的。

大模型学习(十)注意力机制之MHA、MQA、GQA
http://www.soupcola.top/blog/llm_blogs/llm_blogs-10/llm_blogs-10
Author Soup Cola
Published at 2026年2月28日