聊大模型推理成本,大多数人第一反应是 GPU 算力不够。但在解码阶段,真正的瓶颈是另一回事:显存带宽。围绕它,注意力机制在七年间打了一场持续至今的 KV Cache 争夺战——从 MQA 的一把梭,到 GQA 的折中,再到 DeepSeek MLA 的可学习压缩,每一步都在回答同一个问题:注意力必须为每个头存一整套 K/V 吗?
一、瓶颈不是算力,是搬数据
自回归解码天生无法并行:每生成一个 token,注意力都要把全部历史位置的 K/V 重新读一遍。Shazeer 在 2019 年的 MQA 论文(arXiv 1911.02150)里给出了定量刻画:解码的访存与算力之比随序列长度增长到 Θ(n/d + 1/b)(d 为隐层维度、b 为批大小),批大小为 1 时这个比值趋近 1——而 GPU 的算力超出显存带宽约两个数量级。算力全在空转,GPU 变成了「搬砖机」。
KV Cache 的账很好算,每 token 字节数 = 2 × 层数 × KV 头数 × 每头维度 × 每元素字节数:
- Llama-2-7B(32 层、32 个 KV 头的纯 MHA,fp16):
2 × 32 × 32 × 128 × 2 B = 512 KiB/token。4096 上下文就是 2 GiB;32 条并发时光 KV Cache 就要 64 GiB 以上,反客为主——模型权重才 13.5 GB。 - Llama-3-70B 这个量级若仍用 MHA(80 层、64 个 KV 头):
2 × 80 × 64 × 128 × 2 B = 2.5 MiB/token,8K 上下文一条请求就要 20 GiB,完全不具部署性。 - 即便换成 GQA-8(320 KiB/token),8K 上下文一条 2.5 GiB,128 路并发也要 320 GiB——8 张 80GB 的 H100 都装不下。70B 级模型的长上下文服务,从算式上就注定要继续压缩。
于是问题变成:能不能少存几份 K/V,而模型不变笨?
二、MQA(2019):一把梭
Multi-Query Attention 的答案是:所有 query 头共享同一组 K/V,KV 头数直接压到 1。Shazeer 在 211M 参数的编码器-解码器模型上实验,质量几乎无损——WMT14 英德翻译的 BLEU 甚至从 28.4 微涨到 28.5;TPU 上 batch 1024 时解码从每 token 46 μs 降到 3.8 μs,约 12 倍加速。
但「无损」是规模相关的。所有头共享一份 K/V 的表达力损失,在小模型与小任务上看不出来;GQA 论文后来在 T5-XXL(11B)上量出了 MQA 相对 MHA 掉 0.6 分的差距。PaLM 与 Falcon(7B 版 config 显式标注 multi_query)是这一代的代表用户。还有一个常被忽略的事实:MQA 只省解码、不省训练——论文里训练速度几乎不变(每 token 13.2 对 13.0 微秒)。这场战争从第一天起就只发生在推理侧。
三、GQA(2023):质量与显存的中间点
Google 的 GQA 论文(arXiv 2305.13245,EMNLP 2023)把两端统一成谱系:设 n_g 组 KV 头(1 < n_g < n_h),MHA 与 MQA 是两个极端。关键数据在 T5-XXL 上:平均分 MHA 47.2、MQA 46.6、GQA-8 47.1——分组到 8 之后质量几乎追平 MHA;速度上 GQA-8 把每样本延迟从 1.51 秒压到 0.28 秒,约 5.4 倍,只比 MQA 慢 23%。
更值钱的是 uptraining 流程:把训好的 MHA 检查点各头 K/V 投影做均值池化聚成 n_g 组,再用原始训练量约 5% 的算力继续训练即可完成转换。Llama-2-70B(64Q/8KV)正是用这条路从 MHA 检查点切换过来的。此后 GQA 成为开源界默认:Llama 3 全系 8 个 KV 头,Mistral 7B 8 个,Qwen3 全系 8 个(旗舰 235B-A22B 进一步压到 4 个)。顺带说,8 这个数字与其说是质量最优点,不如说是硬件折中——70B 级模型按 8 卡张量并行切分,每张卡恰好分到一组 KV。从 64 组压到 8 组,KV 显存直接省 8 倍,而 uptraining 的全部代价约 600 个 TPUv3 chip-day,按预训练标准几乎免费。
小结:GQA 赢在性价比——质量几乎不掉,KV 显存直接省 n_h/n_g 倍。
四、MLA(2024):把 K/V 压进 latent
DeepSeek-V2(arXiv 2405.04434,2024-05)换了思路:不减少头数,而是把 K/V 联合压缩进一个 512 维的低秩 latent 向量。推理时每层每 token 只需缓存 576 个元素——512 维主 latent 加 64 维位置分量。官方口径:KV Cache 减少 93.3%,最大生成吞吐提升到 5.76 倍(对比自家 67B 的 MHA 模型);部署侧同样可观——单节点 8 张 H800 生成吞吐超 5 万 token/秒、预填充超 10 万 token/秒。另外 Q 侧也做了低秩压缩(q_lora_rank 1536),只是它不占推理缓存。
四种机制的每 token 每层缓存对比(DeepSeek-V2 论文 Table 1):MHA 为 2·n_h·d_h,GQA 为 2·n_g·d_h,MQA 为 2·d_h,MLA 为 576。论文自己的表述是「相当于只有 2.25 组的 GQA,但能力强于 MHA」。落到具体模型:DeepSeek-V3(61 层)每 token 约 68 KiB(fp16),同样 head_dim 下 GQA-8 每层要缓存 2048 个元素——单层就是约 3.6 倍的差距。
MLA 为什么能两头兼得?关键在于压缩发生在「可学习的变换」之后,而不是简单分组:训练时 128 个头全容量工作,是个带低秩瓶颈的 MHA;推理时利用矩阵乘法结合律,把 K 的上投影矩阵「吸收」进 query 侧投影、V 的上投影吸收进输出投影,直接在 latent 上算注意力——K/V 从头到尾不需要重建。这就是矩阵吸收(absorb)。
但有一个硬冲突:RoPE。旋转矩阵是位置相关的,与 K 的上投影不可交换,吸收会失效。DeepSeek 的解法是让位置信息走旁路:每头额外 64 维与主 latent 解耦的 rope 通道,共享一个跨位置可见的 rope key,显式缓存。DeepSeek-V3 config 里 qk_nope_head_dim 128 与 qk_rope_head_dim 64 两个参数,就是这两个通道的尺寸。
五、MLA 的工程代价与两大阵营
MLA 不是免费午餐,代价主要有三笔。在此之前值得补一笔收益:综合 MLA 与稀疏化的效果,DeepSeek-V2 的训练成本较 67B 前代节省了 42.5%——缓存架构的收益从来不止推理侧。三笔代价是:
- 推理核难做。Stanford Hazy Research 团队(ThunderMLA 博客,2025-03)实测发现 MLA 解码曾是出了名的难优化——FlashMLA 在某真实负载下只有 144 TFLOPS、1199 GB/s,瓶颈在核启动与尾效应而非 MLA 本身;他们把整个解码融合成单个 megakernel 后再提速 20%-35%。DeepSeek 官方的 FlashMLA(2025-02 随开源周放出)则把 H800 上的性能做到 660 TFLOPS,现已深度集成进 vLLM。
- 训练与推理不对称。矩阵吸收是推理期的代数恒等式,训练时仍要物化全部 128 个头——本质是用计算换缓存。
- 与部分稳定化技术冲突。QK-Norm 没法直接套在 MLA 上,因为 K 矩阵推理时不完全物化、norm 没处安放;Kimi K2 技术报告原话确认了这一限制,而 K2 恰恰选了 MLA。K2 报告还算过一笔账:把注意力头数翻倍,128K 序列下推理 FLOPs 增加 83%,验证损失的改善却只有 0.5%-1.2%——KV 容量的边际收益已经薄到可以忽略,这正是 MLA 阵营敢于把缓存压到极限的底气。
于是行业分成两个阵营:DeepSeek 系(V2、V3、V3.2)与 Kimi K2 选 MLA;Llama、Mistral、Qwen、Gemma 全系选 GQA——Qwen3 技术报告对 MLA 只字未提。中文社区流传最广的分析来自研究者苏剑林:GQA 本质上也是低秩投影,但它压缩之后只做「分裂/复制」这类平凡映射,浪费了容量;MLA 的本质是把「复制」换成「可学习的一般线性变换」。这解释了 MLA 为什么能用 2.25 组 GQA 的缓存做出强于 MHA 的质量。截至 2026-10,没有公开的受控实验证明 GQA 在质量上反超 MLA;GQA 阵营的实际优势更多在生态与内核成熟度上。另一个务实差异是迁移成本:GQA 可以从现成 MHA 检查点 uptraining 而来,MLA 则必须从头按压缩结构训练——对手握大量已训资产的团队,这不是小差别。
六、MLA 之外:sink 与压缩的下一站
与「压头部」正交的另一条路是「压哪些 token」。StreamingLLM(arXiv 2309.17453)发现 softmax 注意力天然把多余注意力「倒」进最开头的几个 token:Llama-2-13B 若把初始 token 逐出缓存,困惑度崩到 5158;只保留最初 4 个 token 加滑窗,就能稳定流式生成 400 万 token(相比滑窗加重算的朴素方案最高 22.2 倍加速)——而且换成换行符顶替也有效,说明这是位置现象而非语义现象。gpt-oss 把这个观察做进了训练:每个注意力头在 softmax 分母带一个可学习偏置,让头可以显式「什么都不看」,配合 128 token 带状窗口与全注意力交替,一半的注意力层只需维护 128 token 的缓存。
2025 至 2026 年,前沿已经越过「每 token 存多少字节」,开始问「哪些 token 的缓存可以不存」:DeepSeek-V3.2 的 DSA 用一个轻量索引器给每个 query-token 对打分,只让 top-k(config 为 2048)参与注意力,官方称输出质量与全注意力版本几乎一致而 API 价格直降 50% 以上;2026 年的 DeepSeek-V4 系列更进一步,官方论文报告跨层 KV 复用与 FP4 缓存把全局 KV 压到约 890 B/token,vLLM 官方博客实测 1M 上下文单序列 KV 仅约 9.6 GiB,比 61 层的 V3.2 式堆栈(83.9 GiB)小 8.7 倍。
对部署者来说,2026 年的选型逻辑已经比较清晰:短上下文与端侧场景,GQA 配合量化就够用,生态最省心;高并发长上下文的 API 服务,MLA 与原生稀疏的账面优势明显;单条超长会话的 agent 应用,滑窗混合与线性架构的恒定内存开始占优。没有全能冠军,只有场景匹配。
结语:从 MQA 的「一把梭」,到 GQA 的「分组折中」,到 MLA 的「学出来的压缩」,再到 DSA 的「按需加载」,KV Cache 之争的每一步都在逼近同一个问题的答案:注意力必须看见一切吗?每把字节压低一个数量级,就多一批用得起长上下文的应用。
参考资料
- Fast Transformer Decoding: One Write-Head is All You Need ——MQA 原论文,解码瓶颈的经典论证
- GQA: Training Generalized Multi-Query Transformer Models ——GQA 与 uptraining
- DeepSeek-V2 Technical Report ——MLA 结构与 93.3% / 5.76 倍官方数据
- DeepSeek-V3 Technical Report ——MLA 落地 671B 规模的配置
- Efficient Streaming Language Models with Attention Sinks ——attention sink 的机制与流式方案
- FlashMLA ——DeepSeek 官方 MLA 解码内核
- ThunderMLA: FlashMLA, Faster and Fused-er! ——MLA 内核瓶颈的实测分析
- gpt-oss Model Card ——可学习 attention sink 与带状注意力交替
读者留言
COMMENTS 暂无还没有留言,来说第一句?