直接回答:三者是注意力头在 KV 共享程度上的不同取舍。MHA(标准多头注意力)每个 query 头都配独立的 K、V 头,表达力最强但 KV cache 最大;MQA(Multi-Query Attention,Shazeer 2019)让所有 query 头共享同一组 K、V,KV cache 直接缩小 h 倍,但质量有可见损失;GQA(Grouped-Query Attention)是折中:把 h 个 query 头分成 g 组,每组共享一组 K、V,Llama 2/3 的 70B 即采用 64 个 query 头配 8 个 KV 头,g=1 时退化为 MQA,g=h 时退化为 MHA。

展开解析:重要性来自推理的访存瓶颈。自回归解码每步只算一个 token,矩阵乘退化成矩阵-向量乘,算力大量闲置,耗时主要在把权重和 KV cache 从 HBM 搬进计算单元。KV cache 大小为 层数 × KV头数 × 头维度 × 2 × 序列长度,长上下文加大 batch 下可达数十 GB,甚至超过模型权重本身。GQA 把它缩小数倍,直接降低每步访存量、加快解码,还腾出显存换取更大并发 batch,吞吐收益非常显著。实践表明从零训练或对已有 MHA 模型的 checkpoint 做少量 uptraining 转换得到的 GQA,下游任务质量几乎追平 MHA,因此已成主流开源模型的标配;DeepSeek 的 MLA 更进一步,把 K、V 联合压缩成低秩隐向量再按需展开,缓存占用比 MQA 还小且质量更高。

追问方向:GQA 与 KV cache 量化能否叠加?MLA 相对 GQA 的设计思路是什么?长上下文场景下 KV cache 还有哪些压缩与驱逐手段?(约 540 字)