M4-035M4: Sequences & TransformersAttention Variants (MHA / MQA / GQA)Easy
Mastery:

Attention Variants (MHA / MQA / GQA): 解释 MQA 与 GQA,以及它们如何降低 KV Cache。

📐 Mathematical Definition
MHA:h KV heads;GQA:g KV heads;MQA:1 KV head;KV∝nkv\text{MHA}: h\ \text{KV heads};\quad \text{GQA}: g\ \text{KV heads};\quad \text{MQA}: 1\ \text{KV head};\qquad \text{KV}\propto n_{\text{kv}}
⚡ Executive Summary
Core Concept: MQA 让所有头共享一组 K/V;GQA 把头分组、组内共享。KV cache 显存与带宽降为 1/h 或 1/g。

📌 Key Takeaways

  • •
    KV cache 显存 ∝ K/V 头数(MHA 为 h,MQA 为 1,GQA 为 g)
  • •
    Q 头数不变(保持表达力),只减 K/V 头数
  • •
    decode 阶段是 memory-bound,故减 KV 直接提速

📐 Mathematical Derivations

数学机理:<strong>KV cache</strong> 的显存 = 2(K 与 V)× 层数 L × KV 头数 n_kv × head_dim d_h × 序列长度 S × 精度字节。<strong>MHA</strong> 下 n_kv=h(如 32),故 KV cache ∝ h。<strong>MQA(Multi-Query Attention,Shazeer 2019)</strong> 让<strong>所有 Q 头共享同一组 K/V</strong>(n_kv=1),KV cache 显存与读取带宽降为 <strong>1/h</strong>;<strong>GQA(Grouped-Query Attention,Ainslie 等 2023)</strong> 折中:把 h 个 Q 头分成 g 组,每组共享一组 K/V(n_kv=g,通常 g=h/8 或 h/4)。<strong>为什么可行</strong>——注意力的表达力主要来自 <strong>Q 的多样性</strong>(不同的 query 投影产生不同的注意力模式);K/V 的作用是'被查询的内容',其冗余度较高。故减少 K/V 头数(而非 Q 头数)能在大幅节省显存/带宽的同时保留大部分表达力。<strong>为什么在推理中收益巨大</strong>——decode 阶段每步只生成 1 个 token,但需读取<strong>整个 KV cache</strong>(∝S×n_kv);故 decode 是<strong>memory-bound</strong>(算术强度低、受显存带宽限制)。降低 n_kv 直接减少每步的数据搬运量,从而提升吞吐。实证:MQA 可带来 2~5 倍的 decode 吞吐提升;GQA 在质量上接近 MHA、速度接近 MQA,是当前主流(LLaMA-2/3、Mistral 等均用 GQA)。

🏭 Production Trade-offs

深度剖析与工程权衡:① <strong>MQA 的质量损失与恢复</strong>——MQA 因 K/V 表达力受限,训练不稳、质量略降;<strong>uptraining</strong>(从 MHA 检查点出发,把 K/V 投影平均后继续少量训练)可快速恢复质量,成本远低于从头训练。这是'改架构 + 少量训练'的经典工程手法。② <strong>GQA 的分组数选择</strong>——g 越大质量越好但显存/带宽越高;实践中 g 常取 8(h=32 时每 4 个 Q 头共享一组 KV),在质量与效率间取得良好平衡。③ <strong>与 MLA 的对比</strong>——MQA/GQA 通过'减少头数'省 KV;<strong>MLA(多头潜在注意力)</strong> 通过'低秩压缩 KV 的维度'省 KV(见下一题);两者可组合(DeepSeek-V2 用 MLA)。④ <strong>训练侧的影响</strong>——减少 K/V 头数也减少了 K/V 投影的参数与计算,但训练阶段是 compute-bound,故收益不如推理明显;主要动机是'让训练出的模型推理友好'。⑤ <strong>与 KV cache 量化的关系</strong>——MQA/GQA 减少 KV 的'元素数',量化减少 KV 的'每元素位数';两者正交、可叠加。⑥ <strong>面试要点</strong>——被问'MQA/GQA',应给出'<strong>KV cache ∝ n_kv → 减少 K/V 头数 → decode 是 memory-bound 故直接提速</strong>'的因果链,并说明'保留 Q 头数、只减 K/V 头数'是关键;能提到 uptraining 与 GQA 的主流地位是加分。
⚠️ Common Interview Pitfalls
  • ✕
    以为 MQA 同时减少了 Q 头数(Q 头数不变)
  • ✕
    忽略 decode 阶段的 memory-bound 特性
🎯 Interviewer Follow-ups
  • ?
    为什么减 K/V 头数不显著损害质量?
  • ?
    GQA 的分组数 g 如何选?
📚

Associated Knowledge Base Guides & Mindmaps

Explore the comprehensive technical article, exam cards, and global architecture tree.

← PreviousM4-034: Positional Embeddings (Sinusoidal, RoPE, ALiBi): 解释位置编码与长度外推的评测方法。📋Back to BankNext →M4-036: Attention Variants (MHA / MQA / GQA): 解释 MLA(多头潜在注意力)如何压缩 KV Cache。