本文已于 2026.05.06 发表于公众号和知乎。
五一本打算更新一年前写的开源引擎 KVCache 实现文档,但梳理下来发现,光是 KVCache 演进的理论部分就已足够撑起一篇独立文章。在 Agent 改变搜索习惯、重塑软件行业的今天,多轮交互带来的长上下文让 KVCache 持续膨胀,显存瓶颈愈发突出——过去几年以注意力机制为核心的模型架构演进,几乎都绑不开对 KVCache 的重新设计。本文尝试对这条演进脉络做一次系统梳理。

1 Decoder-only 模型结构
目前主流大语言模型都采用 Decoder-only 架构,其核心流程如下图所示:
包括以下核心组件:
| 组件 | 职责 |
|---|---|
| Embedding | token ID → d_model 维向量 |
| Attention | token 间信息交互,建模上下文依赖 |
| FFN / MoE | 非线性变换,增加模型表达能力 |
| RMSNorm | 归一化,稳定数值 |
| Residual | 残差连接,保证梯度流通 |
| LM Head | hidden → 词表 logits |
其中 Attention 是唯一需要 KVCache 的模块。近年来围绕 Attention 的每一项改进,几乎都在改变 KVCache 的形态和大小。
2 大模型推理加速的本质三要素
大模型推理的所有优化,本质上都是围绕计算、存储、通信这三个核心资源维度进行的资源置换(trade-off)。我们的目标:在保障推理效果的前提下,于有限的物理约束内,追求吞吐与延迟的最优解。
- 存储换计算:缓存 KVCache 或公共前缀,用显存空间的增加,换取计算量的减少。
- 计算/存储换效率:通过 FP8/FP4 量化或 GQA 结构,在微小的效果损失下,换取带宽的释放与计算吞吐的提升。
- 通信换存储:引入多级缓存,用 PCIe/NVLink 的通信开销,换取 GPU 显存的有效承载上限。
- 通信换算力利用率:采用 PD 分离架构,通过增加系统通信开销,换取计算集群在不同推理阶段(Prefill/Decode)更高的硬件利用率。
结合本文的主题,下面我们重点讨论 KVCache 的演进。
3 近几年和 KVCache 相关的演进
过去几年,大模型 Attention 架构经历了 MHA、MQA、GQA、MLA,再到稀疏注意力、线性注意力的演进。从 KVCache 的视角审视,可以归纳为同一个目标:让模型更强的同时,让 KVCache 更小。
3.1 压缩 KV 头数 —— MHA → MQA → GQA
标准的 Multi-Head Attention(MHA)中,每个 Q 头都配有独立的 K 头和 V 头,KVCache 大小与注意力头数成正比。
- MQA(Multi-Query Attention, Shazeer 2019):所有 Q 头共享一组 K/V 头,KVCache 缩小到 MHA 的
1/num_heads。效果极为显著,但单组 KV 头的表达力不足,模型质量有所下降。 - GQA(Grouped-Query Attention, Ainslie et al. 2023):折中方案——将 Q 头分组,每组共享一对 KV 头。例如 Qwen3-72B 使用 64 个 Q 头 / 8 个 KV 头(8:1 分组比),KVCache 降至 MHA 的 1/8,质量几乎无损。
3.2 压缩 KV 表示 —— MLA(Latent 维度压缩)
3.1 的思路是减少 KV 头的数量,而 MLA 换了一个角度——压缩每个 KV 头的维度。
MLA(Multi-head Latent Attention, DeepSeek V2/V3):不存储完整的 K/V 向量,而是将它们联合压缩到一个低维 latent 向量 c。推理时只需缓存 c(维度 = kv_lora_rank + qk_rope_head_dim),注意力计算时再解压还原。
以 DeepSeek V3 为例:
- 传统 MHA 每 token 缓存 KV 维度为
hidden_size × 2 = 7168 × 2 = 14336 - MLA 只需缓存
kv_lora_rank + qk_rope_head_dim = 512 + 64 = 576维 - 单层 KVCache 压缩约 96%,且模型质量不降反升(联合压缩提供了正则化效果)
3.3 稀疏注意力 —— 选择性保留,压缩序列范围
前两个思路(压缩头数、压缩维度)都是在缩小每个 token 的 KV 表示大小,而稀疏注意力换了一个角度:减少需要保留 KV 的 token 数量。
其核心洞察是:在长上下文场景中,并非所有历史 token 都对当前生成同等重要。如果能识别并只保留"关键"token 的 KV,便可以大幅缩减缓存规模,同时保持模型质量。沿着这一思路,业界经历了从"固定窗口截断"到"动态稀疏选择"再到"分层混合策略"的演进:
3.3.1 SWA —— 滑动窗口,截断历史
SWA(Sliding Window Attention, Mistral 2023.10):每个 token 只关注最近 W 个 token 的 KV,窗口外的 KV 直接丢弃。KVCache 上限固定为窗口大小 W,不再随序列增长。
- 优势:实现简单,显存可控,推理速度快
- 局限:窗口外的信息完全丢失,长距离依赖能力受限
SWA 提出了一个关键洞察:并非所有历史 token 都同等重要,近距离 token 的价值远高于远距离 token。但它的做法过于激进——对窗口外信息"一刀切"式丢弃。
3.3.2 NSA —— 稀疏索引,选择性保留
NSA(Native Sparse Attention, DeepSeek 2025.02):在 SWA 的基础上进一步思考——能否不完全丢弃窗口外的信息,而是用稀疏索引选择性保留重要 token 的 KV?
NSA 通过学习到的稀疏模式,以远少于全量的 KV 覆盖关键信息,兼顾了长距离依赖和显存效率。
- 优势:保留了远距离的关键信息,效果优于 SWA
- 局限:稀疏模式需要动态计算,增加了调度复杂度
NSA 验证了"选择性保留"的可行性:不需要存储所有历史 KV,只需保留最重要的那部分。
3.3.3 CSA + HCA —— 分层混合,集大成者
CSA + HCA(DeepSeek V4, 2026)将 SWA 的"近距离精确保留"和 NSA 的"远距离稀疏选择"思想融合并推到极致,形成分层混合注意力架构:
- 继承 SWA 的思想:每层保留最近 128 token 的完整 KV(滑动窗口)
- 继承 NSA 的思想:对窗口外的历史不丢弃,而是用不同粒度的压缩策略保留
- 更进一步:不同层使用不同的压缩比(CSA 4:1,HCA 128:1),形成多尺度的信息覆盖
不同距离的 token 分配不同的压缩策略。根据 DeepSeek V4 技术报告的等效对比:在 1M token 的上下文设定下,V4-Pro 的 KVCache 仅为 V3 的约 10%。
以 V4-Pro 为例(61 层),前 2 层为 HCA,之后 CSA 与 HCA 严格交替,共 31 层 HCA + 30 层 CSA。每一层的 KVCache 由两部分组成:
(1)滑动窗口(所有层共有)—— 存储最近 128 token 的完整 KV
无论是 CSA 层还是 HCA 层,都保留最近 128 个 token 的原始 KV,不做任何压缩或丢弃。原因:
- 最近的 token 对当前生成贡献最大(注意力权重随距离衰减)
- 近距离信息不能容忍任何精度损失
- HCA 的压缩需要凑满 128 个 token 才能执行,未凑满的部分必须以原始形式保留
(2)历史区域 —— CSA 层:先压缩,再稀疏选择
CSA(30 层)的 4:1 压缩比通过两个阶段实现:
阶段一:交错重叠压缩。 不是简单的每 4 个 token 无重叠划分,而是以 4 token 为步长、8 token 为窗口交错压缩——每个 compressed KV 单元覆盖 8 个连续 token(与前后各重叠 4 个),最终序列长度变为 S/4:
原始历史: [t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, ...]c1 覆盖: [t1, t2, t3, t4, t5, t6, t7, t8 ] → 压缩为 1 个
c2 覆盖: [t5, t6, t7, t8, t9, t10, t11, t12] → 压缩为 1 个
c3 覆盖: [t9, t10, t11, t12, t13, t14, t15, t16] → 压缩为 1 个步长 = 4,窗口 = 8 → 等效压缩比 4:1
论文将每个窗口拆为两路:Cᵃ(当前步长新进入的 4 token)和 Cᵇ(前一窗口重叠的 4 token),分别投影后联合加权融合。这样每个原始 token 被前后两个压缩单元共同覆盖,边界信息不会割裂,过渡更平滑。
阶段二:Top-k 稀疏选择。 通过 Lightning Indexer(轻量级相关性打分网络)对所有 compressed KV 单元快速评分,无需走完整注意力开销;每个 query 只选出最相关的 top-k 个(V4-Pro: k=1024)参与后续正式稠密注意力计算:
压缩后序列: [c1, c2, c3, c4, ..., c262144] (1M/4 = 256K 个 compressed KV 单元)
Lightning Indexer 快速粗筛 → 选出 Top-1024 个最相关 → 仅这些参与正式 Attention
(3)历史区域 —— HCA 层:块级压缩 128:1,不做稀疏选择
HCA(31 层)将历史序列按 128 token 为一块,通过 token compressor 将整块融合为 1 个 compressed KV 向量。Compressor 内部包含可学习投影 + 位置偏置 + Softmax 全局加权聚合——不是简单池化,而是带 Softmax 的块级加权融合:
历史 Block (128 tokens): [t1, t2, ..., t128] → 可学习投影+位置偏置 → Softmax加权聚合 → [c1](1个压缩向量)
与 CSA 的关键区别:
- 压缩方法不同:CSA 的 token compressor 是轻量级压缩(4 token → 1),保留更多细节;HCA 的 compressor 是带 Softmax 的块级加权融合(128 token → 1),压缩更激进但丢失更多局部信息。
- 后续处理不同:CSA 压缩后还需 Lightning Indexer 做 top-k 稀疏选择;HCA 压缩后不做 top-k,直接对所有 compressed KV 做 dense attention——因为 128:1 的压缩率已经足够激进(1M token → 约 8K 个 compressed KV),全量计算开销也很小。
(4)注意力计算:两部分结果可学习融合
推理时,每一层为当前 token 计算注意力输出,同时使用滑动窗口和历史区域的 KV:
CSA 层:Q × [最近128 token 的 KV(精确)] + Q × [Top-k compressed KV(压缩+稀疏选择)] → 可学习融合 → 输出
HCA 层:Q × [最近128 token 的 KV(精确)] + Q × [全部 compressed KV(压缩+dense attention)] → 可学习融合 → 输出
两部分的注意力输出经过可学习的融合(而非简单相加)后得到最终输出。滑动窗口保证了近距离的精确性,历史区域则以不同粒度覆盖远距离信息。
(5)整体压缩比
以 CSA 为例,在 1M 上下文下:
- 滑动窗口:128 个完整 KV(固定开销)
- 历史区域:100 万 token 压缩为 S/4 = 25 万个 compressed KV(存储层面 4:1 压缩)
- 注意力计算时进一步稀疏:每个 query 仅选 top-1024 个 compressed KV 参与计算
存储上,CSA 层的 KVCache 大小趋近原始的 1/4。HCA 层(128:1 聚合)趋近 1/128。
3.4 线性注意力 —— 固定隐状态,解除序列长度瓶颈
无论是 GQA/MLA 压缩表示大小,还是稀疏注意力减少保留数量,KVCache 的规模终究还是与序列长度挂钩——只是从 O(n) 变成了更小系数的 O(n)。有没有办法彻底打破这层绑定?
线性注意力给出了一个激进的答案:参考 RNN 的思路,用固定大小的隐状态替代逐 token 增长的 KVCache,将"缓存"大小从 O(n) 降为 O(1),从根本上解除显存与序列长度的线性关系。
这一思路的演进经历了三个阶段:纯 SSM 架构验证"固定隐状态"的可行性(Mamba),线性注意力在保持 O(1) 缓存的同时改善表达力(DeltaNet),最终混合架构在工程落地中找到纯注意力与线性机制的最佳配比(Qwen3.5)。
3.4.1 Mamba / SSM —— 固定大小隐状态
Mamba/SSM(Gu & Dao, 2023)是这条路线的开创者——用一个固定大小的隐状态向量替代逐 token 增长的 KVCache,无论序列多长,推理时的"缓存"大小恒定。
(1)核心思想:用递推代替检索
传统 Attention 的做法是"把所有历史 KV 存起来,每次生成时回头查";而 SSM 的做法更像"边读边压缩成一个摘要,每次生成时只看摘要":
传统 Attention: 存所有历史 → KVCache 随序列线性增长,O(n) 显存
SSM: 压缩为隐状态 → hₜ = Ā·hₜ₋₁ + B̄·xₜ,O(1) 显存
输出: yₜ = C·hₜ + D·xₜ
(2)Selective SSM —— "选择性"记忆与遗忘
早期 SSM 的参数是固定的,对所有 token 一视同仁。Mamba 的关键创新是让 Ā 和 B̄ 依赖于当前输入——模型能"选择性"地决定:这个 token 重要吗?要不要写入记忆?
注:Ā 和 B̄ 由连续参数 A、B 经离散化(涉及一个输入相关的步长 Δ 和矩阵指数运算)得到,这里省略数学细节,只关注其直觉效果。
直觉上,模型为每个 token 动态计算一个"开关" Δ:
- 遇到重要 token → Δ 增大:Ā 快速衰减(为新信息腾空间),B̄ 放大(大量写入新信息)
- 遇到无关 token → Δ 缩小:Ā≈1(旧状态几乎不变),B̄ 缩小(新输入几乎不写入)
一句话总结:Δ 大 = "关注当前",Δ 小 = "忽略当前"。
(3)完整 Mamba Block 数据流
┌─────────────────────────────────────────────────────────────────┐x → Linear 投影 →├─ x 路: Conv1d(k=4) + SiLU → 投影出 Δ,B,C(离散化)→ Selective SSM ─→ ⊙ → Linear↓ → y└─ z 路: ────────────────────────────────────→ SiLU(z) ───────→↗
各组件的作用:
- Linear↑(输入投影):将 d_model 扩展到 2×d_inner(d_inner = expand × d_model,默认 expand=2),一分为二——x 路进入 SSM 主计算,z 路旁路保留用于门控
- Conv1d(k=4)(一维因果卷积,窗口大小 4):SSM 递推是逐 token 操作,对相邻 token 的局部模式(如 n-gram)感知不足。Conv1d 先在相邻 4 个 token 上做卷积,提取短程局部特征作为补偿
- 投影 + 离散化:从当前输入中产生 Δ、B、C,再结合固定参数 A 得到 Ā 和 B̄(即前文所述的输入依赖衰减/写入系数)
- Selective SSM:核心递推——
hₜ = Ā·hₜ₋₁ + B̄·xₜ(更新隐状态),yₜ = C·hₜ + D·xₜ(读取输出) - ⊙ 门控合并:
y_ssm ⊙ SiLU(z)——z 路为每个维度提供缩放因子(≈0 抑制,≈1 保留),同时提供更直接的梯度回传路径 - Linear↓(输出投影):映回 d_model
(4)优劣势
- 优势:推理显存 O(1),生成速度恒定,不随上下文变长而减速
- 劣势:固定隐状态本质是有损压缩——在需要精确回溯长距离细节的任务上(如"第 3 段第 2 句说了什么"),表现弱于全注意力
3.4.2 Gated DeltaNet —— 门控线性注意力
Gated DeltaNet(MIT 2024; Qwen3.5 采用):一种门控线性注意力机制,用 delta 更新规则维护固定大小的隐状态矩阵。
(1)核心更新公式
固定隐状态: Sₜ = αₜ · Sₜ₋₁ + βₜ · (vₜ - Sₜ₋₁ · kₜ) · kₜᵀ
输出: oₜ = Sₜ · qₜ其中:αₜ = exp(-softplus(a_proj(xₜ) + dt_bias) · exp(A_log)) // 衰减因子∈(0,1):α→0 快速遗忘,α→1 完全保留βₜ = sigmoid(b_proj(xₜ)) // 写入强度∈(0,1):控制沿 k 方向的精确纠错更新强度
直觉理解:固定隐状态 S 是一个 d×d 的"关联记忆矩阵"——你可以把它想象成一个 key→value 的联想存储器,给定任意 key 向量,矩阵能"回忆"出对应的 value。每个新 token 到来时,更新分两步(遗忘 + delta 纠错写入):
αₜ · Sₜ₋₁:全局遗忘——对整个记忆矩阵做统一衰减(类似"清空黑板")+ βₜ · (vₜ - Sₜ₋₁·kₜ) · kₜᵀ:Delta Rule 更新:先计算"预测误差"vₜ - Sₜ₋₁·kₜ(当前真实值减去记忆矩阵对 kₜ 的旧预测),再将纠错信号沿 kₜ 方向写入矩阵- 展开:
- βₜ · (Sₜ₋₁·kₜ) · kₜᵀ(擦除旧关联)+ βₜ · vₜ · kₜᵀ(写入新关联) - 输出时
Sₜ · qₜ相当于用 query 向量对矩阵中累积的所有历史信息做加权提取(类似 Attention 的 softmax(QKᵀ)V,但这里是线性版本,无 softmax)
α 和 β 互补:α 负责"粗粒度全局遗忘"(一次性衰减整个矩阵),β 负责"细粒度精确更新"(只修改特定 key 对应的记忆)。两者结合解决了纯 DeltaNet 无法快速清除过时信息、纯门控无法精确更新特定关联的问题。
(2)Conv1d + 门控 —— 局部预混合与信息过滤
与 Mamba 类似,Gated DeltaNet 在线性注意力之前也使用 Conv1d(通常 kernel_size=4),并在输出时使用门控:
Gated DeltaNet Block 数据流:┌─ α 路: exp-decay; β 路: Sigmoid ───────────────────┐│ ↓x → 多路 Linear →├─ q,k,v 路: q,k,v 各自 Conv1d(k=4)+SiLU → L2 Norm(q,k) → Gated Delta Rule → RMSNorm ─→ ⊙ → Linear↓ → y│ (k,v 更新 S; q 读取 o) ↑└─ g 路: ──────────────────────────────────────────→ SiLU(g) ─────────────→↗
- 多路 Linear:各自独立的线性投影,分别生成 q, k, v, g, α, β(图中简写为"多路")
- q, k, v:注意力核心——q 用于从记忆矩阵读取输出 (
oₜ = Sₜ · qₜ),k 和 v 用于更新记忆矩阵 - g(Output Gate):输出门控信号,经 SiLU 激活后对输出逐元素缩放
- α(Alpha / 衰减因子):通过 exp(-softplus(·)) 映射到 (0,1),控制对整个记忆矩阵的全局衰减程度
- β(Beta / 写入强度):经 Sigmoid 激活映射到 (0,1),控制沿当前 key 方向的精确纠错更新强度
- Conv1d(k=4)(一维因果卷积,窗口大小 4):局部混合,弥补逐 token 递推的局部感知不足(与 Mamba 一致的设计模式)
- L2 Norm:对 q, k 归一化,稳定线性注意力的数值
- Gated Delta Rule:核心递推——
Sₜ = αₜ·Sₜ₋₁ + βₜ·(vₜ - Sₜ₋₁·kₜ)·kₜᵀ(状态更新),oₜ = Sₜ · qₜ(输出读取)。α 控制全局遗忘,β 控制沿 key 方向的精确 delta 更新 - RMSNorm(输出) ⊙ SiLU(g):门控操作——g 路提供逐元素缩放因子,控制哪些维度的信息最终输出,同时 g 路提供更直接的梯度回传路径
- Linear↓(输出投影):映回 d_model
(3)与 Mamba/SSM 的核心区别
| 维度 | Mamba/SSM | Gated DeltaNet |
|---|---|---|
| 隐状态形态 | 一维向量 h∈R^d | 二维矩阵 S∈R^{d×d},信息容量更大 |
| 更新规则 | 递推加法 h = A·h + B·x | Delta rule(先擦除旧关联,再写入新关联) |
| 门控粒度 | 参数 A/B 隐式控制 | 双门控 α/β 显式独立控制遗忘和精确更新 |
| 语义 | 状态空间压缩 | 更接近 Attention 的 KV 关联存储 |
| 局部预处理 | Conv1d(k=4) | Conv1d(k=4) |
(4)效果
在多数长文本任务上效果接近全注意力,同时保持 O(1) 的推理显存和恒定生成速度。由于固定隐状态是 d×d 矩阵,信息容量远大于 SSM 的一维向量,因此在复杂推理任务上表现更好。
3.4.3 混合架构 —— 线性注意力 + 全注意力分层
混合架构(Jamba 2024, Qwen3.5 2025):综合两者优势——大部分层用线性注意力/SSM(无需 KVCache),每隔几层插入一个全注意力层(需要 KVCache)。
(1)层配置
以 Qwen3.5-397B 为例:共 60 层,采用 3:1 的混合比例(45 层 Gated DeltaNet + 15 层 Gated Attention),总计 KVCache 缩减至纯 dense attention 的约 1/4。
Qwen3.5-397B 层配置(示意,共 15 个重复块 × 4 层 = 60 层):
Layer 0: Gated DeltaNet → 无 KVCache,固定隐状态(内含 Conv1d)
Layer 1: Gated DeltaNet → 无 KVCache,固定隐状态(内含 Conv1d)
Layer 2: Gated DeltaNet → 无 KVCache,固定隐状态(内含 Conv1d)
Layer 3: Gated Attention → 需要完整 KVCache(GQA: 2 KV Heads, head_dim=256)
Layer 4: Gated DeltaNet → 无 KVCache
...
每 4 层只有 1 层需要 KVCache → 仅 15 层有 KV 开销,总 KVCache ≈ 25%
(2)与 CSA+HCA 的对比
DeepSeek V4 的稀疏注意力(CSA+HCA)和 Qwen3.5 的线性注意力混合是当前业界降低 KVCache 开销的两大主流方向,它们的设计哲学有相似之处,但实现路径截然不同:
| 维度 | CSA+HCA(DeepSeek V4) | 混合架构(Qwen3.5) |
|---|---|---|
| 核心理念 | 不同层用不同压缩粒度 | 不同层用不同注意力机制 |
| 高效层(大部分) | HCA 128:1 压缩 + dense | 线性注意力层(Gated DeltaNet),O(1) 隐状态,无需 KVCache |
| 精确层(少部分) | CSA 4:1 + top-k 稀疏 | 全注意力层,完整 KVCache,长短距离都能精确检索 |
| 局部特征 | 每层 128 token 滑动窗口 | 线性注意力层内 Conv1d 提取局部特征 |
本质差异:CSA+HCA 是每一层都有 KVCache(通过压缩/稀疏减少大小);混合架构是大部分层完全没有 KVCache(少数全注意力层保留完整 KV)。两者的共同设计哲学:用不同机制处理不同层次的信息,而非一刀切。
3.5 模型结构之外的优化 —— 量化与压缩
前面的思路都在改变模型结构(头数、维度、注意力机制),而这条思路不动模型结构本身,直接对存储的 KV 数据做"后处理"压缩——降低每个 KV 元素的位宽或维度。
(1)标量量化:FP8 / FP4
最直接的方式——减少每个数值的存储位数:
- FP8 量化:将 KVCache 从 BF16(16 bit)量化到 FP8(8 bit)存储,显存直接减半。计算 Attention 时,在 Kernel 内通过缩放因子(scale)将 FP8 数据反量化回高精度参与运算。质量影响极小,已被 vLLM/SGLang 等主流推理框架广泛支持,是目前生产环境中最成熟的 KVCache 压缩手段。
- FP4 (NVFP4) 量化:NVIDIA Blackwell 架构推出的 4 bit 格式,相比 FP8 再减半,相比 FP16 减少 75%。采用两级缩放机制(全局 FP32 scale + 每块 FP8 scale),质量损失 < 1%。
(2)向量压缩
标量量化到 4 bit 已接近极限——再低精度损失会急剧上升。另一类思路是不逐标量量化,而是对整个 KV 向量做向量级压缩。例如 Google Research 的 TurboQuant,通过极坐标变换 + 在线向量量化将 KVCache 压缩到平均每个维度仅需约 3.5 bits(对比 BF16 的 16 bits),实现 5-6 倍压缩,且质量几乎无损。
3.6 跨层共享 —— CLA(Cross-Layer Attention)
核心观察:相邻层的 K/V 存在高度相似性。CLA 让某些层直接复用其他层的 KVCache,不再独立计算和存储。
传统: Layer 0 有自己的 KV, Layer 1 有自己的 KV, Layer 2 有自己的 KV ...
CLA2: Layer 0 有自己的 KV, Layer 1 复用 Layer 0 的 KV, Layer 2 有自己的 KV ...→ KVCache 减少 50%
CLA 可以与 GQA/MLA 正交组合,进一步压缩 KVCache。目前主要在学术研究阶段,尚未被主流模型大规模采用。相关工作可参考:Reducing Transformer Key-Value Cache Size with Cross-Layer Attention(MIT-IBM, 2024,CLA 的原始提出)、xKV: Cross-Layer SVD for KV-Cache Compression(2025,基于 SVD 的后训练跨层压缩,兼容 MLA)。
3.7 其他模块的间接影响
除 Attention 外,模型其他模块的演进也间接影响着 KVCache 的地位:Pre-Norm + RMSNorm 使模型可以稳定堆叠到 80-128 层,层数越多 KVCache 总量越大;Dense FFN → MoE 大幅降低了 FFN 的激活显存占用,使得 KVCache 在推理总显存中的占比进一步上升(可达 60-80%)。换句话说,MoE 越流行,KVCache 优化越重要。
4 各架构 KVCache 显存占用对比
4.1 计算公式
将第 3 章介绍的各架构落到具体的显存计算公式:
(1)MHA / GQA(如 Qwen3-72B)
KVCache 显存 = 2 × num_layers × num_kv_heads × head_dim × seq_len × batch_size × dtype_size↑ ↑K 和 V 各一份 每个元素字节数(FP16=2, FP8=1)
(2)MLA(如 DeepSeek V3)
KVCache 显存 = num_layers × (kv_lora_rank + qk_rope_head_dim) × seq_len × batch_size × dtype_size
MLA 将 K 和 V 联合压缩为低维 latent 向量(详见 3.2),因此没有 "×2"。
(3)混合架构(如 Qwen3.5,Gated DeltaNet + Gated Attention)
KVCache 显存 = 2 × num_full_attn_layers × num_kv_heads × head_dim × seq_len × batch_size × dtype_size
仅全注意力层需要 KVCache(详见 3.4.3),线性注意力层的隐状态大小固定,与序列长度无关。
(4)CSA + HCA(如 DeepSeek V4)
V4 使用 High-rank MQA(单共享 KV Head、head_dim=512)+ 分层序列压缩(详见 3.3.3):
KVCache 显存 ≈ 压缩段 + 滑窗段压缩段 = (30 × kv_dim / 4 + 31 × kv_dim / 128) × seq_len × dtype_size↑ CSA 30层 4:1压缩 ↑ HCA 31层 128:1压缩
滑窗段 = 61 × kv_dim × window_size × dtype_size (固定开销,FP16 下约 7.6 MB)
整体 KVCache 仅为 DeepSeek V3 的 10% 左右。
4.2 数值对比
| 模型 | 架构 | 层数 | 每层每 Token KV 元素数 | 单 Token KV 大小(FP16) | 1M 上下文总量 |
|---|---|---|---|---|---|
| Qwen3-72B | GQA | 80 | 8×128×2 = 2048 | 320 KB | 305 GB |
| DeepSeek-V3 | MLA | 61 | 576 | 68.6 KB | 65 GB |
| Qwen3.5-397B | 混合(15/60 全注意力) | 15(有效) | 2×256×2 = 1024 | 30 KB | 28.6 GB |
| DeepSeek-V4 | CSA+HCA | 61(混合压缩) | CSA: 512/4=128, HCA: 512/128=4 | 7.7 KB | 7.4 GB |
注:1M = 1,000,000 tokens。"单 Token KV 大小"= 每层元素数 × 层数 × 2 字节(FP16)。V3 有效 KV 维度为 576(kv_lora_rank + qk_rope_head_dim),V4 为 512。V4 另有每层 128 token 滑窗固定开销(约 7.6 MB),长序列下占比可忽略。
同样是 1M 上下文、单个请求,Qwen3-72B(GQA)需要 305 GB KVCache,而 DeepSeek-V4 仅需 7.4 GB——相差约 41 倍。这意味着同一块 GPU 上,V4 架构能同时服务的并发请求数远超传统 GQA 架构。
这就是 KVCache 优化的核心动机:每省一点 KVCache,就能多服务一个用户,或者支持更长的上下文。
5 畅想未来趋势
回顾以上各方向,我们从工程落地的角度做一个横向对比:
| 演进思路 | 核心技术代表 | 显存瓶颈突破 | 带来的工程复杂度 |
|---|---|---|---|
| 头数压缩(3.1) | GQA | 带宽缓解 | 低 |
| 维度压缩(3.2) | MLA | 显存容量大幅释放 | 中(需 Kernel 支持解压) |
| 稀疏注意力(3.3) | CSA/HCA/NSA | 序列级显存释放 | 高(需动态调度/稀疏 Kernel) |
| 线性注意力(3.4) | Gated DeltaNet/Mamba | 彻底解除线性增长 | 高(需重构计算范式) |
| 精度压缩(3.5) | FP8/FP4 + 向量压缩 | 显存容量直接减半 | 低(生产环境标配) |
站在多轮交互 Agent 越来越流行的今天,长上下文的诉求变得更加迫切。我们可以清晰地看到,当前业界正沿着两条核心路径做演进:
- 稀疏注意力(Sparse Attention):以 DeepSeek V4 的 CSA/HCA、GLM-5 的 MLA+DSA(Differential Sparse Attention)为代表,通过分层稀疏机制仅让高相关的 Token 参与计算,在保持全局建模精度的同时,将 KVCache 冗余度压至极限。
- 线性注意力(Linear Attention):以 Qwen3.5 的 Gated DeltaNet + Gated Attention 混合架构、Kimi 的 KDA(Kimi Delta Attention)+ MLA 混合架构、MiniMax-M1 的 Lightning Attention + Softmax Attention 混合架构为代表,用固定大小的隐状态替代随序列增长的 KVCache,将显存复杂度从 O(n) 降至 O(1),从根本上解除显存与序列长度的线性绑定。
未来哪条路径胜出?也许答案是融合——线性注意力负责超长距离的全局编码,稀疏注意力负责中近距离的精确检索,滑动窗口负责局部的高保真注意力。也许是某个尚未出现的创造性突破。值得期待。
6 参考资料
在学习和总结过程中除了借助 AI 工具,以下文章也提供了较大帮助:
- Qwen3-Next:迈向更极致的训练推理性价比
- DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence
- MQA/GQA/YOCO/CLA/MLKV笔记: 层内和层间KV Cache共享
- 【DeepSeek 注意力】MHA、MLA、DSA、CSA/HCA——从 V1 到 V4
本文所在:https://www.cnblogs.com/cswuyg/p/19981922
