主题
字号
PART I · 架构演化
CHAPTER 05 ≈ 50 MIN READ

注意力的账单——KV cache 与一部省钱史

第一章埋过一个伏笔:参数账本之外还有一本计算账单,其中注意力有一项特殊开销,不记在参数上,却会在长文本时主导一切。现在到了把这本账单摊开的时候。这一章的主线只有一个问题——生成一个 token,到底贵在哪里?——而 2019 年至今整条注意力演化线(MQA → GQA → MLA → 稀疏 → 线性混合),全部是对这个问题步步紧逼的回答。读完这一章,你将能看懂 2026 年架构讨论中最热闹、也最没有共识的那个战场。

5.1 两种工作模式:训练在"改卷",生成在"写作"

先建立一个多数课本不强调、却是理解一切的区分:同一个模型,训练和生成时的计算模式完全不同。

训练时是并行改卷。一段 4000 token 的文本整段进入模型,因果掩码保证每个位置只看左边,于是 4000 个位置的"下一词预测"可以在一次前向中同时计算、同时算损失。GPU 最擅长这种大矩阵乘法,算力被喂得满满当当。

生成时是逐字写作。回答用户时,下一个词依赖上一个词,只能一个 token 一个 token 地吐。每生成一个 token 都要完整跑一遍模型——而这一遍里,注意力层需要当前 token 的 query 与历史上每一个 token 的 key、value 做计算。历史怎么来?如果每一步都从头重算前文所有位置的 k、v,生成第 $t$ 个 token 的代价就正比于 $t$,整段回答的总代价正比于长度的平方——不可接受。

好在第一章讲过 decoder-only 的一个天赋:因果掩码使前文 token 的 k、v 不依赖后文,算一次就永远有效。于是标准做法是把它们全部缓存下来,每步只算新 token 的 q、k、v,然后查缓存。这份缓存就是 KV cache。它把生成从"每步重算历史"救成"每步查一次表",是所有大模型推理服务的基石。

但代价是显存。KV cache 要为每一层每一个注意力头每一个历史 token 存两个向量。它像写作时摊在桌面上的全部草稿——你写得越长,桌面堆得越高。

5.2 把账单算出来

KV cache 到底多大?公式很朴素:

$$ \text{KV cache} = 2 \times N_{\text{层}} \times h_{kv} \times d_{\text{head}} \times T \times (\text{每元素字节数}) $$

其中 $h_{kv}$ 是 KV 头数、$d_{\text{head}}$ 是每头维度、$T$ 是已有 token 数。代两个真实模型(16 位精度,每元素 2 字节):

这本账单解释了推理服务的核心矛盾。生成阶段每步的计算量其实不大(矩阵乘向量),真正的瓶颈是搬运:每生成一个 token,都要把全部模型权重和全部 KV cache 从显存读一遍。工程上称之为访存受限(memory-bound)——GPU 的算力在等数据,显存带宽和容量才是王座。KV cache 越大,单卡能同时服务的对话越少、能支撑的上下文越短,每个 token 的成本就越高。API 按 token 计价的背后,这本账单是最大的成本项之一。

于是问题清晰了:**能不能少存点?**接下来的三代技术,是三种越来越狠的答案。

5.3 第一刀:砍 KV 头——MQA 与 GQA

第一个观察来自 2019 年(又是 Shazeer,SwiGLU 的那位):多头注意力里,$h$ 个头各存一套 k、v,但实验发现——query 必须多样,key 和 value 未必。让所有 query 头共享同一组 k、v,即 MQA(Multi-Query Attention),KV cache 直接除以头数(32 头就是缩 32 倍)。代价是质量有可测的下降:所有头被迫从同一套"索引"里取信息,第二章讲的"不同头读写不同子空间"的多样性被压缩了。

2023 年的 GQA(Grouped-Query Attention)在两个极端之间取中:把 $h$ 个 query 头分成 $g$ 组,组内共享一套 k、v。$g = h$ 回到 MHA,$g = 1$ 就是 MQA,中间可调。Llama 2 70B 首次大规模采用:64 个 query 头共 8 组 KV——缓存缩 8 倍,质量几乎无损。刚才那笔 2.5 MB/token 的账,GQA 之后变成 320 KB/token,128K 上下文从 320 GB 降到 40 GB,勉强可用了。GQA 论文还有一个漂亮的工程贡献:不必从头训练,用约 5% 的额外算力就能把现成 MHA 模型"改装"成 GQA。低成本、低风险、收益确定,GQA 迅速成为 2023–2024 年开源模型的标配。

GQA 的逻辑是"少存几套",天花板显而易见:组数砍到底就是 MQA,质量损失兜底。想再省一个数量级,需要换思路。

5.4 第二刀:压缩——MLA 的低秩魔法

2024 年 DeepSeek-V2 提出的 MLA(Multi-head Latent Attention,多头潜在注意力)换了一个根本不同的问题:不问"存几套",问"每套能不能存小点"。

思路是低秩压缩。与其缓存每个 token 完整的 k、v(合计几万维),不如训练一个降维矩阵,把它们联合压缩成一个几百维的潜在向量 $c$,只缓存 $c$;用的时候再由上投影矩阵从 $c$ 恢复出各头的 k、v。这个想法能成立,靠的正是第二章的"空间经济学":各头的 k、v 本就存在大量子空间冗余,信息的真实维度远低于表面维度,压缩掉的多是冗余。

数字令人瞠目。DeepSeek-V2/V3 的配置:128 个头、每头 128 维,标准 MHA 每层每 token 要缓存 $2 \times 128 \times 128 = 32768$ 个元素;MLA 只缓存 512 维的潜在向量,外加一小段 64 维的位置通道(下述),合计 576 个元素——压缩约 57 倍。落到整机账单上:DeepSeek-V3 这个 671B 的庞然大物,每 token 的 KV cache 约 69 KB——比 Llama-2-7B 这个小它百倍的模型还小一个数量级。V2 论文报告:相比自家上一代 67B dense 模型,KV cache 减少 93.3%,最大生成吞吐提升 5.76 倍。

两个精妙的细节值得一讲,它们最能体现这类工作的工程品味。**其一,"恢复"其实不用真做。**上投影矩阵是线性的,数学上可以吸收进 query 投影和输出投影里——推理时直接在潜在空间算注意力,压缩几乎不添额外计算。**其二,RoPE 和压缩打架。**上一章讲的 RoPE 要对 k 按位置旋转,而旋转依赖位置、无法被吸收进静态的投影矩阵。MLA 的解法是"解耦":把维度劈成两部分,大头(512 维)不带位置信息、走压缩通道,小尾巴(64 维)专门携带 RoPE、原样缓存。位置信息被隔离在一条窄通道里——又一次"把信息放在唯一用得到它的地方"。

最反直觉的是质量:消融实验里 MLA 不仅不输,甚至略优于标准 MHA(而同压缩量级的 GQA/MQA 明显更差)。一个可能的解释:低秩瓶颈迫使模型把 KV 信息组织得更紧凑高效,压缩本身成了一种正则。无论如何,"省 57 倍还不掉点"让 MLA 成了 GQA 之后最重要的注意力革新,Kimi K2 等模型直接沿用。

顺便安利一道思维体操

MLA 每层 576 个元素、61 层、fp16——你可以自己乘一乘验证 69 KB/token 这个数,再算算 128K 上下文的一条对话占多少显存(答案:约 8.6 GB)。这类"信封背面"估算是从业者的日常基本功,材料都在本章了。

5.5 第三刀:干脆别全看——稀疏注意力

MQA、GQA、MLA 省的都是存储,但注意力还有另一半开销:计算仍是每个 query 对全部历史逐一打分,代价随长度平方增长。上下文冲向 1M 时,这一项成了新的主导。2025 年起,前沿转向一个更激进的问题:每个 token 真的需要看全部历史吗?

注意力权重的实证分布早就给出了暗示:绝大多数权重集中在极少数 token 上,大部分历史在大部分时刻是"陪跑"。稀疏注意力的目标就是只算真正相关的那一小撮,难点全在"怎么便宜又准地找出这一小撮"——如果找它们的开销赶上全量注意力,就白忙了。2025 年两个代表方案给出不同解法:DeepSeek 的 NSA 用三条并行分支组合(压缩的粗粒度全局扫描 + 按块挑选的细粒度精读 + 滑动窗口保底近邻),且从预训练第一步就用稀疏模式("原生可训练"),并把选择的粒度对齐到 GPU 访存友好的块上;月之暗面的 MoBA 则把上下文切块后用类似 MoE 路由的门控挑出 top 几个相关块。

真正进入生产线的是 DeepSeek-V3.2(2025 年 9 月)的 DSA:训练一个极轻量的"闪电索引器"(lightning indexer,少量头、低精度)给历史 token 快速打相关性分,主注意力(仍是 MLA)只在得分最高的约两千个 token 上计算。复杂度从 $O(L^2)$ 降到 $O(L \cdot k)$。更值得注意的是引入方式:不是重新训练,而是在现成 V3.1 模型上续训改装——先冻结主干、训练索引器去模仿完整注意力的分布,再联合微调。效果立竿见影:长上下文推理成本大降,DeepSeek 的 API 直接降价一半以上,而基准成绩基本持平。此后 DSA 路线开始外溢:智谱 GLM-5 成为第一个跟进的旗舰,DeepSeek 自家的 V4 则把压缩与稀疏选择结合得更深。"稀疏"由此从论文概念变成了 2026 年的生产路线之一。

5.6 第四刀:换掉数学——线性注意力与混合架构

最后一条路线动的是注意力的数学本身。有一族"线性注意力"机制(可以粗略理解为 RNN 思想的现代复活):不保留全部历史,而是把历史滚动压缩进一个固定大小的状态里,每来一个新 token 就按"该记住什么、该遗忘什么"的规则更新状态。它的诱惑是致命的:计算随长度线性增长,KV cache 不随长度增长——账单上最凶的两项同时消失。

代价同样致命:固定大小的状态是有损压缩,"从三十万字前精确找回某个细节"这类检索任务,恰恰是滚动压缩最容易丢的。纯线性模型多年来始终打不过 Transformer,业界最终收敛到一个务实的折中——混合:大部分层用线性注意力(便宜),间插少量全注意力层(精确检索保底)。2025–26 年,这个配方在多家旗舰上收敛出了惊人一致的比例——约 3:1:阿里 Qwen3-Next 及其后的 Qwen3.5,每三层线性(Gated DeltaNet)配一层标准注意力;月之暗面从 Kimi Linear 实验(KDA 线性层与 MLA 全注意力 3:1)走到 2026 年 7 月刚发布的旗舰 K3,把这套混合架构第一次推上了万亿级参数的量产,官方称 1M 上下文的解码最多快 6 倍。

而这条路线上最有教育意义的一课来自 MiniMax 的"回退"。他家 2025 年上半年的 M1 是线性混合路线的先锋,但年底的 M2 却退回了全注意力,并罕见地发博客解释:小规模实验和常规基准上混合注意力与全注意力打平,但规模放大后,在多跳推理、检索、复杂 agent 任务上出现了明确劣化——"没有任何一个高效注意力变体,在生产环境的全谱任务上可靠追平全注意力"。这个故事的价值在于暴露了第三章讲过的那个困境的另一面:小规模实验不仅测不出"会不会崩",也测不出"高级能力掉不掉"。评测基准覆盖不到的角落,才是架构冒险真正的风险所在。(后记:MiniMax 没有放弃效率,2026 年的 M3 换道去了稀疏注意力——从"线性"跳到了另一条船。)

5.7 2026 年的三派格局

把整章收拢。围绕"注意力的账单",2026 年年中的旗舰模型分成了三派,而且罕见地没有任何一派占据压倒性优势

有人把 2026 年的这个局面总结成一句话:"关于注意力,大家又没有共识了"(Nobody agrees on attention anymore)。这在架构高度同质化的今天是一道罕见的风景——它说明这本账单仍在重塑架构,胜负未分,你正在见证一场进行中的分岔。

注意力这条线讲完了。但你可能已经注意到,本章反复出现的那些模型——DeepSeek-V3 的 671B、Kimi K3 的 2.8T——它们的"总参数"大得吓人,"激活参数"却只有几十分之一。这就是另一半故事:参数账本那边,FFN 发生了一场更彻底的革命。下一章,MoE。


本章要点