← 返回观点 思考

显存的暴政:KV Cache 如何重塑 AI 推理的每一层

1M上下文时代,KV Cache 成为推理成本的核心矛盾。

2026-06-15思考50 分钟阅读

开篇:500GB vs 80GB

2026 年上半年,主流大模型的上下文窗口集体冲到 100 万 token。GLM-5.2、Claude Fable 5、DeepSeek V4,全部原生支持 1M 上下文。一个满载 1M 上下文的推理请求,KV Cache(模型推理中存储"已处理上下文"的中间数据)需要多大空间?以 Llama-3-70B 为例,大约 320 GB。一张 NVIDIA H100 的 HBM(High Bandwidth Memory)只有 80 GB。8 卡节点 HBM 总量 640 GB,扣掉模型权重,留给 KV Cache 的空间不到 300 GB——一个请求就接不住。

100 个用户同时发起长上下文请求呢?100 × 320 GB = 32 TB。这个数字放在任何数据中心都是一组机架的显存量。

32 TB 的 KV Cache 缺口,怎么填?

加卡填不了这个缺口。HBM 每 GB 价格 15-40 美元,17 TB 意味着数亿美元的显存开支。真正的答案是一条五层优化链:模型架构压缩每份 KV Cache 的体积,精度编码再砍一半,推理引擎把显存利用率从 30% 拉到 90%,集群架构让 KV Cache 在节点间流动,存储设备层用 SSD 承接溢出的冷数据。每一层缩小缺口,每一层缩小后暴露下一层的结构性问题。

DeepSeek V4 把这条链的终极潜力展示了出来:通过四级混合压缩注意力,V4-Pro 单请求 1M 上下文的 KV Cache 只有 9.62 GB——是同等规模 GQA 方案的 3%。再叠加 FP8 精度、Prefix Caching 和 Prefill-Decode 分离,均摊到每个请求的有效 KV 占用可以低于 1 GB。

这篇文章逐层拆解这条优化链,并在最后给出千卡集群的经济模型和决策框架。


第一章:KV Cache 的本质——为什么它比算力更关键

两阶段推理

大模型推理分两个阶段。

Prefill 阶段处理用户输入的全部 token。模型为每一层 attention 生成 K(Key)和 V(Value)矩阵,写入缓存。一个 100K token 的输入,prefill 一次性产生 100K 份 KV 数据。这个阶段是计算密集型,GPU 算力跑满,每个 token 只写一次 KV Cache。

Decode 阶段逐个生成输出 token。每生成一个新 token,模型都要读取之前所有 token 的 KV Cache 做注意力计算——"回头看"全部历史。这个阶段是访存密集型,计算量只有一层 attention,但需要反复读取全量 KV Cache。瓶颈在内存带宽和容量。

KV Cache 的作用是避免重复计算。不用 KV Cache,生成第 N 个 token 需要重新计算前 N-1 个 token 的 attention,计算量是 O(N²)。用了 KV Cache,每步只需计算新 token 的 K/V 存入缓存,然后做一次 attention,O(N)。实测中,HuggingFace T4 GPU 上用 KV Cache 比不用快 5.2 倍(11.7s vs 61s)。

KV Cache 多大

精确公式:

每 token KV Cache = 2 × n_layers × n_kv_heads × d_head × precision_bytes

  • 2:Key 和 Value 各一份
  • n_layers:模型层数
  • n_kv_heads:KV head 数(GQA 后远少于 query head)
  • d_head:每个 head 的维度
  • precision_bytes:每个数值的字节数(FP16=2, FP8=1, INT4=0.5)

用三个 2026 年的主流模型代入公式,感受一下差距。

Llama-3-70B(GQA 架构,原生 128K 上下文)。 80 层、8 个 KV head、head 维度 128、FP16。每 token KV Cache = 2 × 80 × 8 × 128 × 2 = 327,680 字节 ≈ 320 KB/token。128K 上下文填满后,单个请求 KV Cache = 131,072 × 320 KB ≈ 40 GB。如果强行扩展到 1M token(Llama-3 架构理论上可以,但原生不支持),KV Cache 达到 320 GB。

DeepSeek V4-Pro(混合压缩架构,原生 1M 上下文)。 61 层,但 KV 经历四级压缩(第二章会展开):KV 共享 + c4a 序列压缩(4×)+ c128a 序列压缩(128×)+ DSA 稀疏选择。vLLM 团队实测 BF16 下单请求 1M 上下文 KV Cache 仅 9.62 GB。FP8 attention + FP4 indexer 模式下进一步降到 4.8 GB。

GLM-5.2(GQA 架构,原生 1M 上下文,参数估算)。 约 80-96 层、估计 8-16 个 KV head。按 GQA 8 heads × 128 dim 估算,每 token KV Cache ≈ 328 KB。1M 上下文 = 1,048,576 × 328 KB ≈ 343 GB。

三个模型,三种答案。同样的 1M token 上下文:Llama-3 需要 320 GB,GLM-5.2 需要 343 GB,V4-Pro 只需要 9.62 GB。差距达 35 倍——这还是在模型架构层面的差距,还没开始做推理优化。

模型权重是固定的,KV Cache 随上下文线性增长,随并发数线性增长。这才是矛盾的本质。推理成本的天花板往往不是 GPU 算力(FLOPS),而是"为了装下并发请求的 KV Cache 需要买多少卡"。

在讨论怎么装下这些数据之前,先看清楚当前的存储层次:

存储层级金字塔:HBM→DRAM→G3.5→NVMe→HDD 五层
存储层级金字塔:HBM→DRAM→G3.5→NVMe→HDD 五层

图 1:AI 推理的存储层级金字塔。从塔尖到塔基,容量增大、延迟升高、成本下降。G3.5 是正在出现的中间层,比 DRAM 便宜一到两个数量级,比传统 NVMe 快三到五倍。

塔尖是 GPU HBM,~100ns 延迟、3-8 TB/s 带宽、80-288 GB 容量,最贵。往下是 DRAM,延迟相当但带宽低一个量级,容量可以做到 1-4 TB。再往下是 NVMe SSD 和 HDD。G3.5 层目前还是虚线——它正是第六章要论证其必然性的那个新层级。


第二章:模型架构层——注意力机制的压缩史

Attention 机制的演进史,几乎就是一部 KV Cache 压缩史。每一次架构演进都在改变上一章公式中的 n_kv_headsd_head,甚至改变 KV Cache 的组织方式本身。

架构 代表模型 KV Cache 压缩机制 每层 per-token 大小 相对 GQA
MHA Llama-2, GPT-3 无压缩,每个 head 独立 K/V 2 × n_heads × d_head × 2B ~2-4×
GQA Llama-3, GLM, Qwen 多个 query head 共享一组 K/V 2 × n_kv_groups × d_head × 2B 1×(基准)
MLA DeepSeek V3 K/V 联合压缩为低维潜变量 (d_latent + d_rope) × 2B ~28%
混合压缩 DeepSeek V4 序列维度压缩 + 稀疏检索 + 滑窗 ~10 KB (全模型) ~3%

MHA → GQA:砍 KV head 数

MHA(Multi-Head Attention)是原始方案。以一个 70B 级模型为例,64 个 attention head 各有独立的 K 和 V 矩阵。每一层每 token 的 KV Cache 是 2 × 64 × 128 × 2 = 32 KB。

GQA(Grouped-Query Attention)的做法:query head 保持 64 个不变,KV head 砍到 8 组。64 个 query head 每 8 个一组共享同一对 K/V。Llama-3-70B 用的就是这个方案。每层每 token 的 KV Cache 降到 2 × 8 × 128 × 2 = 4 KB,是 MHA 的 12.5%。

代价是 attention 的"分辨率"下降。8 组 KV head 要服务 64 个 query head,不同 query head 在同一组 K/V 上做注意力计算,表达力理论上不如每个 head 独立 K/V 的 MHA。但多项实验显示,推理质量损失极小,主流 benchmark 上精度损失不到 1%。这个代价换来 8 倍的 KV Cache 压缩。

GQA 是一次性的架构决策,训练时确定,已有模型不能事后"升级"到 GQA。而且 GQA 压缩到 8 组后,再往下砍(4 组、2 组)精度下降加速。GQA 的红利在 8-16 组附近基本吃完了。

在 1M 上下文场景下,GQA 的局限暴露得很快。Llama-3-70B 的 GQA 架构,1M 上下文单请求 KV Cache 达 320 GB,是模型权重的 4.6 倍。GLM-5.2 的情况更严峻:KV/请求约 343 GB,是权重的 2.0 倍。这两个数字意味着,GQA 架构在 1M 场景下,光装一个请求的 KV Cache 就需要 3-5 个 8 卡 H100 节点。

GQA → MLA:换表示空间

DeepSeek V3 的 MLA(Multi-head Latent Attention)走了根本不同的路。GQA 是减少 KV head 的数量,MLA 是改变 KV 的表示空间。

MLA 的原理:不再为每个 KV head 存储完整的 K 和 V 向量,而是把 K/V 信息联合压缩成一个低维潜变量向量 c_kv(512 维),加上一个解耦的 RoPE key(64 维)。推理时只需要缓存 (512 + 64) × 2 = 1,152 字节/层/token,而不是分别存 K 和 V 两份。需要做注意力计算时,通过上投影矩阵 W_up(512 → 128 heads × 128 dim)恢复出完整的 K 和 V。

每层每 token 的 KV Cache 从 GQA 的 4,096 字节降到 MLA 的 1,152 字节,是 GQA 的 28%。61 层累计,DeepSeek V3 每 token 的 KV Cache 约 70,272 字节 ≈ 68.6 KB,1M 上下文约 72 GB。

代价是上投影的额外矩阵乘法。每层有两个上投影矩阵(分别恢复 K 和 V),维度 512 × (128 × 128) = 8.4M 参数,权重约 32 MB/层。但权重固定,batch 内被所有 token 共享摊销,边际计算开销不到 attention 本身的 5%。5% 的计算换 3.6 倍 GQA 内存压缩。

MLA 的更深层意义在于解耦了"缓存什么"和"计算什么"。GQA 在 head 维度做减法:减少 KV head 数量,attention 的计算路径也相应变窄。MLA 保持 attention 的计算路径完整(128 个 head × 128 维,跟 MHA 一样宽),只压缩缓存内容。这为后续的 V4 混合压缩奠定了思路基础:压缩的重心从 head 维度扩展到序列维度。

MLA → V4 混合压缩:压缩时间序列

DeepSeek V4 引入的混合压缩注意力,把压缩从空间维度(head)扩展到时间维度(序列)。V4 抛弃了 V3 的 MLA,换成一套四级混合栈——不是 MLA 的改良,是全新架构。

KV 共享(2× 节省)。 所有 attention head 共享同一组 Key 和 Value 向量。为了正确性,V4 在 attention 输出处施加 inverse RoPE 操作来恢复各 head 的位置编码差异。共享后,KV Cache 的 head 维度从"per-head"变成"all-shared",直接砍半。

c4a 序列压缩(4× 节省)。 序列维度上,每 8 个相邻 token 的 KV 被加权求和压缩成 1 个条目,stride 为 4(相邻压缩窗口有 50% 重叠)。效果是序列长度维度缩减到 1/4。c4a 处理的是细粒度检索——不是每个 token 都需要独立的 K/V 表示,相邻的几个 token 可以共享一个压缩表示。

c128a 序列压缩(128× 节省)。 更激进,每 128 个相邻 token 压缩成 1 个条目。128 个 token 约等于一段话的长度,一个条目维持全局语义连贯足够了。c128a 处理的是粗粒度全局上下文。

**DSA(DeepSeek Sparse Attention)Top-K 稀疏选择。** 即使 c4a 把序列压到 1/4,1M token 仍有 250K 压缩条目。全做 attention 还是太贵。DeepSeek Sparse Attention 从压缩后的条目中选 Top-1024 个参与 attention 计算。注意力计算量从 O(n²) 降到 O(n×1024),在 1M 场景下等于把计算量砍了两个数量级。

SWA(Sliding Window Attention)滑动窗口(固定 128 token)。 最近 128 个 token 保持全精度 attention,不压缩。语言的自然局部性意味着最近几个句子的关联最紧,这部分不能有精度损失。

V4 的 61 层中,30 层使用 CSA(Compressed Sparse Attention,MLA 组件 + Lightning Indexer(一种轻量级索引器,用于快速定位相关 KV block)),31 层使用 HCA(Hybrid Compressed Attention,c4a/c128a/SWA 混合),两层交错排列。不同机制分工不同:SWA 处理最近 128 token 的全精度 attention,c4a 处理中程稀疏检索,c128a 处理远程全局压缩,DSA 在每层内部决定哪些条目值得 attend。

vLLM 团队在 V4 发布当天验证了实际效果:BF16 精度下,V4-Pro 单请求 1M 上下文的 KV Cache 只有 9.62 GiB。对比同等规模的 V3.2 GQA 方案估算值 83.9 GiB,压缩了 8.7 倍。如果 attention cache 用 FP8、indexer cache 用 FP4,KV Cache 进一步降到约 4.8 GiB。

各架构 1M 上下文全景对比

模型 注意力机制 KV/token (FP16) 单请求 1M KV 模型权重 KV/权重比 1M 可行性
Llama-3 70B GQA (8 heads) 320 KB 320 GB 70 GB 4.6×
GLM-5.2 (估) GQA ~328 KB ~343 GB ~170 GB 2.0×
DeepSeek-V3 671B MLA 68.6 KB 72 GB 671 GB 0.11× ⚠️ 勉强
DeepSeek V4-Pro 混合压缩 ~10 KB 9.62 GB ~800 GB 0.01× ✅ 原生

这张表的核心信息:KV/权重比从 GQA 的 2-2.4× 降到 V4 混合压缩的 0.01×,差了 200 倍。在 1M 上下文场景下,GQA 架构的 KV Cache 是显存的第一消耗者(比模型权重还大),V4 的 KV Cache 几乎可以忽略(是权重的 1%)。这不是参数调优的差距,是模型设计路线的选择结果。

模型架构层把每份 KV Cache 从 320 GB 压到 9.62 GB,解决了"每份多大"的问题。但用户数量不会因为压缩而减少——"总共有多少份"的问题留给后面的层次。

Attention 架构 KV Cache 压缩演进
Attention 架构 KV Cache 压缩演进

图 5:Attention 架构 KV Cache 压缩演进。从 MHA 的 512 KB/token 到 V4 混合压缩的 ~10 KB/token,KV/请求在 1M 上下文场景下从 512 GB 降到 9.62 GB。


第三章:精度与编码层——2-4× 即时收益

在不改变模型架构的前提下,通过降低 KV Cache 存储精度来节省显存。这层优化的收益是即时的——改一个配置参数就行——但上限也明确:2-4 倍。

精度阶梯

精度模式 相对大小 精度影响 工程成本 适用场景
BF16/FP16 基准 离线、高质量要求
FP8 0.5× 极小(<1% 质量损失) 极低(vLLM --kv-cache-dtype fp8 通用推荐
INT4 0.25× 中等(需校准数据) 中(校准 + 验证) 批量任务、短上下文
FP4 Indexer (V4) 额外 ~2× (indexer部分) 仅影响 indexer 精度 低(V4 专用参数) V4 专用

FP8 是当前工程上的甜点。几乎所有现代推理引擎(vLLM、SGLang、TensorRT-LLM)都默认支持 FP8 KV Cache。精度损失在各种任务上测试过,不到 1%,在长上下文生成任务中用户感知不到差异。开启成本是一个命令行参数:--kv-cache-dtype fp8

DeepSeek V4 有一个额外的精度选项:FP4 indexer cache。V4 的 CSA 层包含 Lightning Indexer 组件,用于 DSA 的 Top-K 选择。indexer 的 KV Cache 用 FP4 存储,不影响主 attention 精度,但额外节省 indexer 部分的显存。vLLM 参数:--attention_config.use_fp4_indexer_cache=True。叠加 FP8 attention cache + FP4 indexer cache,V4 的 KV Cache 从 BF16 的 9.62 GiB 降到约 4.8 GiB。

INT4 量化更激进,把 KV Cache 压到 FP16 的 1/4。问题在于量化误差在超长上下文下会累积。最后 1% 的 token 可能因为累积量化噪声产生明显偏差。INT4 需要校准数据,不同模型、不同任务的校准参数不能混用。目前 INT4 KV Cache 只适合对质量不敏感的批量任务,或者短上下文场景。

风险

KV 量化的精度损失在超长上下文下被放大。原因不难理解:decode 阶段每步都读取全量 KV Cache 做 attention,量化误差在注意力计算中逐层传播。128K 上下文以下,FP8 的误差基本不可见。但到 512K-1M 范围,FP8 的累积偏差开始出现在长程依赖的召回上——模型偶尔会"忘记"很早之前提到的细节。这个损耗在编程助手场景几乎无感(代码上下文通常在 128K 以内),但在法律文书分析、跨文档推理等超长上下文场景需要验证。

实际部署建议:FP8 作为默认基线,所有场景开启。INT4 仅在显存极度紧张且任务容忍精度下降时使用。FP4 indexer 跟随 V4 的官方推荐开启。

精度层的收益确定且零成本:2-4×,一个配置参数即得。对于 V4 这种 KV Cache 已经极小的模型,FP8 把 9.62 GiB 压到 4.8 GiB,单 GPU 可多服务一倍的 1M 并发请求。


第四章:推理引擎层——把显存用到极致

模型架构决定了每份 KV Cache 多大,推理引擎决定了这些数据怎么被组织和使用。引擎层做的是"把已有的显存用得更聪明",物理显存总量不变,但有效容量可以翻 3-5 倍。

PagedAttention:把显存碎片变成块

vLLM 团队在 2023 年发现了一个尴尬的事实:传统推理框架的显存利用率只有 30-40%。一张 80 GB HBM 的 H100,真正在干活的 KV Cache 数据只有 24-32 GB,剩下 48 GB 在碎片和空等中被浪费了。

根因在内存分配方式。传统框架为每个请求预分配一大块连续的 KV Cache 空间,按最大可能的上下文长度预留。一个请求最终只用了 4K token,但预留了 32K 的空间,28K 的空间空着不能给别人用。请求结束后释放的空间可能不连续——停车场里到处是零散空位,但停不进一辆大卡车。

vLLM 的 PagedAttention 借鉴了操作系统的虚拟内存分页机制。把 KV Cache 切成固定大小的 block,用一张 block table 管理逻辑到物理的映射。请求需要多大空间就分配多少 block,不需要连续物理地址。碎片化浪费从 60-80% 降到 4% 以下。

block 大小是关键调参。太大(256 token/block),小请求浪费尾部空间;太小(1 token/block),block table 自身的内存开销和查找开销上升。vLLM 实测 16 token/block 是传统模型的甜点。但 DeepSeek V4 的情况特殊:c4a/c128a/SWA 三种压缩比导致不同层的 block 物理大小不同。vLLM 的解法是统一 256-token 逻辑块,三种压缩比映射到三种物理 page size bucket,用一个分配器管理三个池。这是 V4 特有的工程挑战,但对使用者透明。

连续批处理

传统 static batching 有个效率瓶颈:一个 batch 内的请求长度不同,短的先完成,但 GPU 资源被长的占用,不能及时插入新请求。Continuous batching 在 iteration 级别调度:每生成一个 token 就检查一次,完成的请求立即移出 batch,等待中的请求立即插入。GPU 利用率从 30% 拉到 70% 以上。所有现代推理引擎已内置。

Prefix Caching:多轮场景的倍增器

多个请求共享同一段前缀(system prompt、文档上下文)时,每个请求都在重复计算同一份 KV Cache。Prefix caching 把这些共享前缀的 KV Cache 缓存起来,新请求命中就直接复用。

不同场景的命中率差异极大:

场景 典型命中率 节省效果
API 服务(共享 system prompt) 30-50% 中等
编程助手(多轮对话) 85-95% 极大
文档 RAG(多轮追问) 80-90% 极大
一次性长文档分析 0% 无效

编程助手的命中率为什么这么高?看一个实际流程:第 1 轮发送 [system: 8K] [file_context: 40K] [user: 0.5K],prefill 48.5K token。第 2 轮发送 [system: 8K] [file_context: 40K] [turn1: 3K] [user: 0.5K],其中 48.5K 是前一轮的复用,只有 3.5K 是新 token。Prefix Cache 命中,跳过 48.5K 的重复 prefill 计算。

SGLang 的 RadixAttention 把前缀复用做成了基数树(Radix Tree)。每个节点代表一段 token 序列,从根到叶子的路径就是一个请求的完整上下文。两个请求共享前缀就共享树上的一条路径,分叉点就是它们开始不同的位置。查找、插入是 O(L) 复杂度(L 是序列长度),几乎零开销。在 Agent 多轮对话场景(每轮共享之前所有历史),第二轮到第 N 轮的 prefill 计算量减少 80-95%。

引擎层这些优化叠加起来,有效显存利用率从 30% 拉到 90% 以上。同样一组 GPU,能服务的用户数翻了 3-5 倍。但物理显存总量没变——重排货架减少过道浪费能多放 30% 的货,仓库本身没有变大。要扩大仓库,得让 KV Cache 跨出单节点。


第五章:集群架构层——让 KV Cache 在节点间流动

KV Cache 到这里仍被锁在单个 GPU 的 HBM 里。2026 年行业最活跃的方向,就是把它解放成集群级共享资源。

NVIDIA CMX:把 KV Cache 搬出 GPU

2026 年 1 月的 CES 上,NVIDIA 发布了 CMX(Context Memory eXtension)架构。背景是一个工程现实:在 POD 级别的推理集群里,大量 GPU 各自存着重复的 KV Cache 副本。一个 Agent 应用涉及 20 轮对话,每一轮的 KV Cache 都需要在参与推理的 GPU 上保持可访问。多个用户问同一个 Agent?同一个 system prompt 的 KV Cache 被复制了 N 份。

CMX 的核心思路是用 BlueField-4 DPU(数据处理单元)在 GPU HBM 和外部存储之间架一条智能通道,把这些重复的 KV Cache 集中管理。

CMX 架构:GPU HBM ↔ BlueField-4 DPU ↔ CMX NVMe Enclosure ↔ 网络存储
CMX 架构:GPU HBM ↔ BlueField-4 DPU ↔ CMX NVMe Enclosure ↔ 网络存储

图 2:NVIDIA CMX 架构。BlueField-4 DPU 在每一层之间异步搬运数据。热 KV Cache 留在 HBM,温 KV Cache 放在 DPU 连接的 DRAM staging buffer,冷 KV Cache 落到 CMX NVMe Enclosure 中的 AI SSD。GPU 永远不需要直接等待 SSD 读取。

BlueField-4 DPU 内置 ARM 核和可编程数据面,不需要 CPU 介入就能完成跨节点数据搬运。通过 RDMA,POD 级别的所有 GPU 可以访问同一个 context memory tier。对 Agent 推理场景意义尤其大:一个 Agent 在多轮对话中积累了长程记忆,传统架构下每个参与的 GPU 都要存一份,10 个节点就是 10 份冗余。CMX 架构下,这份记忆存在共享池里,哪个 GPU 当前需要就去读。冗余消失了。

NVIDIA Dynamo:Prefill-Decode 解耦

NVIDIA Dynamo 是其开源的分布式推理框架,2026 年初发布 1.0。关键设计叫 Prefill-Decode disaggregation(预填-解码解耦)。

两个阶段为什么值得拆开?因为它们的硬件负载特征完全相反:

  • Prefill 是计算密集型。处理 100K token 的输入需要做 100K 次 attention 计算,GPU 算力跑满,每个 token 只写一次 KV Cache。瓶颈在 FLOPS。
  • Decode 是访存密集型。每生成一个 token 要读取之前所有 token 的 KV Cache 做注意力计算,但计算量只有一层 attention。瓶颈在内存带宽。

混在同一个节点上跑,两种负载互相争抢资源。prefill 占满算力时 decode 被挤到等待,decode 占满带宽时 prefill 的矩阵乘法喂不饱 GPU。拆开后,prefill 集群配置高算力 GPU(如 B300),decode 集群配置大容量 HBM + 高带宽。两者之间通过共享存储池传递 KV Cache:prefill 节点生成的 KV Cache 写入共享池,decode 节点从池中读取。

对于 V4-Pro,Prefill-Decode 分离的收益尤其大。V4 的混合压缩注意力让单请求 KV Cache 只有 4.8 GB(FP8+FP4),跨节点迁移一个请求的完整 KV Cache 在 RDMA 网络上只需不到 50ms——远低于 prefill 本身的计算时间。这让大规模分离部署成为工程上可行的方案。

开源 KV Cache 中间件:四个项目

KV Cache 解耦不只是 NVIDIA 的硬件方案。2024-2026 年,开源社区涌现了多个专门的 KV Cache 中间件项目,各自代表了一种技术路线。

Mooncake(Moonshot AI / Kimi)。 目前最完整的 KV Cache 中心化解耦架构,论文发表于 FAST 2025。三个组件:KVCache Store(部署在推理节点闲置 CPU/DRAM/SSD 上的分布式缓存服务)、Transfer Engine(基于 RDMA 的跨节点 KV 搬运,已被 vLLM、SGLang、TensorRT-LLM 集成)、Conductor(全局调度器,根据 KV Cache 分布选择 prefill 和 decode 实例)。论文公布的实测数据:过载场景下吞吐量提升最高 525%,在 Kimi 生产环境中处理请求数增加 75%。核心创新是把 KV Cache 当作一等公民来调度——不是推理引擎的附属品,而是有独立生命周期、可跨节点流动的分布式资源。

LMCache(UC Berkeley)。 走"兼容层"路线,不改推理引擎代码,以 vLLM 插件方式接入。多级 offload 体系:HBM → CPU DRAM → 本地 SSD → 远端存储,基于 LRU(Least Recently Used,最近最少使用)淘汰。后端可插拔:本地 SSD、Redis、GPU Direct Storage、InfiniStore、Mooncake Store。2026 年 3 月被 NVIDIA Dynamo 正式集成为 KV caching 层解决方案。公开 benchmark 显示在不影响生成质量的前提下,最大可服务上下文长度提升 4-8 倍。

FlexKV(Tencent + NVIDIA)。 2026 年 1 月发布,支持基于 Mooncake Transfer Engine 的分布式 KV Cache 复用。与 LMCache 侧重单节点多级缓存不同,FlexKV 侧重集群级的跨实例复用——多个 vLLM 实例可以共享同一个 FlexKV 后端,避免每个实例独立缓存相同的 KV。

NVIDIA Dynamo KVBM。 Dynamo 1.0 中的 KV Block Manager,提供三层架构:LLM runtime → logical block management → NIXL transport,支持 CPU 和磁盘两级缓存。与 Dynamo 的 KV-aware routing 原生集成——调度器知道哪些 KV Cache 块在哪个节点上,路由请求时优先选择已有缓存的节点。

四个项目代表的技术路线对比:

项目 来源 核心创新 后端存储 集成生态
Mooncake Moonshot AI KVCache-as-a-service + Conductor 全局调度 DRAM + SSD(分布式) vLLM, SGLang, TensorRT-LLM
LMCache UC Berkeley 多级 offload + 可插拔后端 DRAM → SSD → Redis → Mooncake vLLM, Dynamo
FlexKV Tencent + NVIDIA 跨实例 KV 复用 分布式 KV Store vLLM, Mooncake Transfer Engine
Dynamo KVBM NVIDIA KV-aware routing + NIXL 传输层 CPU + 磁盘 Dynamo 原生

这些项目正在融合而不是竞争。LMCache 可以用 Mooncake Store 作为后端;FlexKV 用 Mooncake Transfer Engine 做传输;Dynamo 同时集成了 LMCache 和 KVBM。最终用户不需要在四个项目中选一个,而是在 vLLM 或 SGLang 之上组合使用这些组件。

商业方案方面,华为的 UCM(Unified Context Memory)/ CMS(Context Memory Service)方案走得更激进。华为公布的数据显示,在 PB 级共享 KV 池配置下,TTFT(首 token 延迟)降低 90%。华为的优势在于自研硬件全栈:从 Ascend GPU 到 SSD 控制器都是自己的。

技术方案深度拆解:一个独立 KV Cache 系统由什么组成

前面梳理了四个开源项目和两条商业路线。要做技术选型,需要更结构化的框架。一个独立的 KV Cache 系统不是单一组件,而是四个根技术的组合:传输、存储、调度、集成。每一层都有独立的技术难点和明确的技术路线分歧。

根技术 1:传输层(Transfer Layer)

传输层解决的问题是:KV Cache 在 GPU HBM、CPU DRAM、SSD、远端节点之间搬移时,如何做到低延迟、高带宽、不阻塞 GPU 计算。

当前主流传输方案有三种。RDMA(Remote Direct Memory Access)走 InfiniBand 或 RoCE,延迟 1-5μs,带宽可达 400 Gbps,是跨节点 KV Cache 迁移的首选。NVLink/NVSwitch 走 NVIDIA 的 GPU 互联,延迟 sub-μs,但只在节点内有效。PCIe 5.0 + GPU Direct Storage 让 GPU 绕过 CPU 直接读写 NVMe,延迟 5-10μs,用于 GPU 到 SSD 的直接路径。

架构抽象上,传输层有两种设计哲学。一种是通用数据搬运:NVIDIA 的 NIXL(NVIDIA Inference Transfer Library)不关心数据是什么,只提供统一的 API 让框架在不同存储层级间搬数据:GPU HBM → CPU DRAM → 本地 NVMe → 远端 RDMA。NIXL 被 NVIDIA Dynamo 采用为底层传输,也可以被 vLLM 独立使用。另一种是 KV Cache 语义绑定:Mooncake Transfer Engine 的 API 按推理引擎理解的 block 单位做迁移,不是按字节拷贝。迁移单位是一个 KV block(通常对应若干 token),传输层知道每个 block 属于哪个请求、哪一层、哪个 shard。这种语义绑定让上层调度可以直接说"把请求 A 的 KV Cache 传到节点 B",不用关心底层怎么切块。两条路径正在融合——Mooncake 的上层调度可以调用 NIXL 作为底层传输。

技术难点有三个。长尾延迟:RDMA 的中位数延迟 2μs,但 P99 可以到 50-100μs(网络拥塞、交换机缓冲区溢出)。Prefill-Decode 分离架构中,一次 KV Cache 迁移如果在 P99 处卡住,decode 节点的 GPU 就要 stall。解法是批量传输 + 流式迁移:逐层传输逐层启动,用流水线隐藏延迟。Mooncake 的 Conductor 原生支持层间流水线。内存注册开销:RDMA 要求传输的内存预先注册(pin 到物理页),大块 KV Cache 的注册本身消耗 CPU 和时间。NIXL 用 on-demand registration + memory pool 预热缓解。多路径负载均衡:单个 RDMA 连接的带宽有限(100-400 Gbps),大集群需要多路径并发。UCCL P2P 等新兴方案用 collective API 自动分配路径。

好的传输层实现的评判标准:(1) P99 延迟不超过中位数的 10×;(2) 单节点有效带宽达到网络理论带宽的 80%+;(3) GPU 利用率不受传输影响(传输与计算重叠);(4) 支持拓扑感知——知道哪些节点在同一 NVLink 域、哪些要走交换机。

根技术 2:存储层(Storage Layer)

存储层解决的问题是:KV Cache 在不同介质(HBM/DRAM/SSD/分布式存储)上的存放、索引、淘汰和一致性维护。它决定了集群的总有效容量和跨层级命中率。

核心是三级存储:GPU HBM 作为 L1(最快、最小、最贵)、CPU DRAM 作为 L2(与 HBM 延迟相当但带宽低一个量级)、SSD/分布式存储作为 L3(大容量、低成本、高延迟)。架构抽象的关键是:每一级对上层暴露统一的 block 接口,内部实现各自的淘汰策略和预取逻辑。

LMCache 的实现最有代表性。它以 vLLM 插件方式接入,不改推理引擎代码,提供 HBM → CPU DRAM → 本地 SSD → 远端存储的多级 offload。每一级之间基于 LRU 淘汰,访问频繁的 KV Cache block 自动提升到更快的层。后端可插拔:本地 SSD、Redis、GPU Direct Storage、InfiniStore、Mooncake Store。2026 年 4 月,LMCache 发布了新架构,引入 In-Process Offload 模式和 Unified KV 模式:前者让 KV Cache offload 在推理进程内完成,避免跨进程通信;后者将多个 GPU 的 KV Cache 统一管理,在 MoE 模型上实测 TTFT 降低 13.6×。

SGLang 的 HiCache 走了另一条路。它把 RadixAttention 从 GPU 内存扩展到三级层级:GPU HBM 是 L1,host memory 是 L2,分布式存储(如 Mooncake Store)是 L3。灵感来自 CPU 的三级缓存:L1/L2 私有于每个 GPU,L3 在节点间共享。HiCache 用 HiRadixTree 跟踪每个节点的 KV Cache 存在哪一级——GPU、CPU、远端存储、或多个层级同时存在。当 GPU 内存满时,HiCache 自动把 block 降到 CPU,再降到 Mooncake,整个过程对推理引擎透明。

技术难点有四个。跨层级命中率:Block 从 GPU 降到 CPU 后,如果另一个请求恰好需要它,需要重新加载。命中率低于 90% 时,有效延迟退回到物理介质水平,推理性能显著下降。提升命中率的关键是预取算法——后面在第六章会展开。淘汰一致性:多级缓存中,同一个 block 可能同时在 GPU 和 CPU 中存在副本。一个副本被修改(如 decode 追加了新 token),另一个副本就是过时的。需要写穿透(write-through)或写回(write-back)策略。LMCache 用 write-back(延迟同步,性能优先),SGLang HiCache 用 write-through(即时同步,一致性优先)。内存开销:缓存元数据(block table、hash、TTL)本身占用内存,在万级并发场景下可以到 GB 级。分布式存储配合(下一个重点)。

根技术 3:调度层(Scheduler)

调度层解决的问题是:在多节点、多请求、多 SLO 约束下,决定每个请求在哪个节点处理、KV Cache 从哪里取往哪里放、prefill 和 decode 怎么配对。这是整个系统信息密度最高的组件——所有传输层和存储层的能力,最终都通过调度层转化为实际性能。

架构抽象上有两种路线。集中式全局调度:Mooncake 的 Conductor 是最完整的实现。每个请求经过三步:第一步,Conductor 检查哪些 prefill 实例已经有可复用的 KV Cache,把可复用的部分传过去;第二步,prefill 实例分层完成计算,同时把输出的 KV Cache 流式传输到选定的 decode 实例;第三步,decode 实例加载 KV Cache,加入 continuous batching。Conductor 的决策目标是最大化 KV Cache 复用同时满足 TTFT 和 TBT(Time Between Tokens,token 间延迟)两个 SLO(Service Level Objective,服务等级目标)。去中心化路由:NVIDIA Dynamo 的 KV-aware routing 不集中调度,而是让每个路由器知道本节点缓存了哪些 KV block。请求到达时优先选择已有缓存的节点,全局都没缓存就选负载最低的节点。去中心化路由比 Conductor 更轻量,但在跨节点复用上不如全局视野。

技术难点有三个。SLO 约束下的多目标优化:最大化吞吐 vs 最小化延迟是经典矛盾。Mooncake 论文给出实用近似解法——对 prefill 调度最大化 cache 复用率(约束 TTFT SLO),对 decode 调度最大化吞吐(约束 TBT SLO),两者独立优化后用 KV Cache 迁移连接。负载倾斜:热门 system prompt 的 KV Cache 被频繁复用,导致部分节点过载而其他节点闲置。Dynamo 用 KV-aware routing + 动态迁移缓解。调度延迟本身:Conductor 的调度决策需要查询全局 KV Cache 索引,万级并发下调度本身的延迟不能忽略。Mooncake 用两级调度(粗粒度节点选择 + 细粒度实例选择)控制调度开销在 1ms 以内。

好的调度层评判标准:(1) KV Cache 全局复用率 >70%(意味着 70% 的请求至少部分命中已有缓存);(2) 调度决策延迟 <1ms(不成为 TTFT 的显著组成部分);(3) 跨节点负载均衡度 CV(变异系数)<0.3。

根技术 4:集成层(Integration Layer)

集成层解决的问题是:KV Cache 系统如何与推理引擎对接,做到对推理引擎透明(不改推理逻辑)同时开销最小(不引入显著延迟)。

当前有两条集成路径。第一条是 vLLM 的 KVConnector 接口:定义了一套标准的 connector protocol,任何 KV Cache 后端只要实现 save_kv()/load_kv() 接口就能接入。LMCache、Mooncake Store、FlexKV 都通过这个接口与 vLLM 集成。第二条是 SGLang 的 HiCache 原生集成:KV Cache 管理内建于推理引擎,不需要外部插件,但只支持 SGLang 自家的 HiRadixTree。

架构设计的核心矛盾是灵活性 vs 性能。vLLM connector 接口跨进程通信,每次 save/load 需要序列化和 IPC 调用,单次开销 50-200μs。对于万级并发场景,这个开销累积显著。LMCache 2026 年 4 月的新架构引入 In-Process Offload 模式来解决这个问题——offload 逻辑在推理进程内完成,零 IPC 开销。SGLang 的原生集成天然没有这个问题(零拷贝),但绑定 SGLang。实际选型中,如果用 vLLM 生态,选 LMCache 或 Mooncake connector;如果用 SGLang 生态,用 HiCache;如果两者混用,用 Mooncake Transfer Engine 作为共享传输层。

技术难点有两个。生命周期同步:推理引擎在每一步 decode 中会产生新的 KV Cache(新 token 的 K/V),集成层需要在不阻塞推理的情况下将这些增量同步到外部存储。异步写入是标准做法,但需要处理写入失败时的回滚。版本兼容:推理引擎升级可能改变 KV Cache 的内部布局(如 V4 的混合压缩引入了多种 block size),集成层需要跟随适配。vLLM 的 connector 接口通过版本协商机制缓解。

好的集成层评判标准:(1) 集成后 TTFT 增加不超过 5%;(2) 支持热插拔(不停服务切换后端);(3) 推理引擎升级时只需修改 connector 适配层,不改核心推理逻辑。

技术选型小结

一个完整的 KV Cache 方案需要回答四个问题:数据怎么搬(传输层)、存在哪里(存储层)、谁来调度(调度层)、怎么接进推理引擎(集成层)。当前主流方案的组合方式:

方案 传输层 存储层 调度层 集成层
Mooncake Transfer Engine (RDMA) DRAM+SSD 分布式 Conductor 全局调度 vLLM/SGLang/TRT-LLM connector
LMCache 可插拔(GDS/RDMA/本地) 多级 offload LRU + 可选预测 vLLM 插件
SGLang HiCache 内置 + Mooncake 后端 HiRadixTree 三级 RadixAttention 命中率 SGLang 原生
NVIDIA Dynamo NIXL KVBM (CPU+磁盘) KV-aware routing Dynamo 原生

没有唯一最优的方案,只有场景匹配。单节点低并发:vLLM 内置 PagedAttention + Prefix Cache 足够。多节点 Agent 多轮对话:SGLang HiCache + Mooncake 后端。千卡集群 PD 分离:Dynamo + NIXL + Mooncake Store。中国环境无 HBM:华为 UCM + 专用 SSD。选型的核心判断是:KV Cache 系统的复杂度应该跟集群规模成正比——过度工程和不充分工程同样有害。

分布式存储与 KV Cache 组件如何配合

根技术 2 中提到 KV Cache 的 L3 层需要落到分布式存储上。但分布式存储系统(如 Ceph、WEKA、VAST、华为分布式文件系统)不是为 KV Cache 场景生的——它们是为传统数据服务(文件、块、对象)设计的。让两者配合好,需要解决三个接口问题。

访问接口匹配。 KV Cache 组件(LMCache、Mooncake Store)需要的是 block 级别的读写:按固定大小的 block 存取,不涉及文件系统语义。传统分布式存储提供的是 POSIX 文件接口或 S3 对象接口,每次读写都要经过文件系统层,开销在毫秒级。解决方案有两个。Mooncake Store 的做法是直接使用本地文件系统(ext4/xfs)+ 直接块设备访问,不走分布式文件系统——它的"分布式"是通过 Transfer Engine 在节点间直接搬数据实现的,而不是通过共享文件系统。LMCache 的做法是可插拔后端:本地 SSD 直接块设备、Redis(内存键值)、GPU Direct Storage(绕过 CPU)等,避免强制依赖特定分布式存储。如果必须用分布式存储(如 WEKA NeuralMesh),需要确认该存储支持 GPU Direct Storage 或 RDMA 直接访问,否则文件系统开销会吃掉性能。

带宽与容量规划。 分布式存储为 KV Cache 服务时,关键指标不是 IOPS(KV Cache 不是随机小块负载),而是持续顺序读取带宽。第六章的推算显示,单个存储节点需要 28-42 GB/s 的持续带宽来支撑预取流水线。这意味着存储集群的聚合带宽需要匹配推理集群的预取需求。经验公式:存储聚合带宽 >= 推理 GPU 总数 × 单 GPU 预取速率(约 1-3 GB/s)。

数据生命周期。 KV Cache 是临时数据,不是持久化数据。推理请求结束后,对应的 KV Cache 应该被回收。传统分布式存储假设数据是长期持有的,垃圾回收机制(GC)的触发频率和粒度不适合高频临时数据。Mooncake Store 通过 LRU + TTL 自动过期处理。LMCache 通过 LRU 淘汰。如果用传统分布式存储,需要显式配置短 TTL(5-30 分钟)和频繁的 GC,否则临时 KV Cache 会快速占满存储容量。

DeepSeek 3FS:原生设计 KV Cache 支持的分布式文件系统。 3FS(Fire-Flyer File System)是 DeepSeek 在 2025 年开源周发布的自研分布式文件系统,GitHub 10K+ stars。它的定位很独特——一个从第一天就把 KV Cache 作为一等公民来设计的存储系统。

3FS 的架构有三个特征跟 KV Cache 场景高度匹配。第一,** disaggregated 架构 + locality-oblivious 访问**:聚合数千块 SSD 和数百个存储节点的带宽,应用不需要关心数据存在哪个节点上。180 节点集群(每节点 2×200Gbps IB + 16×14TB NVMe)的压测读吞吐达到 6.6 TiB/s。第二,CRAQ 强一致性:Chain Replication with Apportioned Queries,不需要最终一致性的模糊窗口,KV Cache block 要么读到最新版本要么读到一致快照。第三,原生 KVCache 接口:3FS 内置了 KVCache 模块,不是外部插件,KV Cache 的读写直接走 USRBIO API 绕过 FUSE 和页缓存,单节点 400Gbps NIC 的 KVCache 读吞吐峰值达 40 GiB/s。

3FS 解决前述三个接口问题的方式值得参考。访问接口层面,3FS 既提供 POSIX 文件接口(给训练 checkpoint 用),又提供 USRBIO API(给 KVCache 直连用),避免了 POSIX 开销。带宽层面,180 节点集群 6.6 TiB/s 的聚合读吞吐,足够支撑万级并发的 KV Cache 预取。数据生命周期层面,3FS-KV 支持基于 TTL 的自动过期,KV Cache block 不会无限累积。

3FS 的局限性在于它是为 DeepSeek 自己的硬件配置(InfiniBand + 大量 NVMe)和模型(MLA/混合压缩架构,KV Cache 天然小)深度优化的。在 GQA 架构 + 以太网环境下,3FS 的优势会打折扣——GQA 的 KV Cache 太大,即使 40 GiB/s 的节点读带宽也很快被并发请求吃满。3FS 的价值更多是验证了一个设计思路:分布式文件系统可以把 KV Cache 当作一种一等数据类型来原生支持,而不是在通用存储上做适配。

推理集群性能调优:关键指标与 KV Cache 效果评估

引入 KV Cache 方案后,怎么知道效果好不好?需要一套可量化的指标体系和对比测试方法。

核心性能指标。

指标 定义 目标值 受 KV Cache 影响
TTFT(Time To First Token) 用户发出请求到第一个 token 返回 <2s(8K上下文)/ <10s(1M上下文) 极大——Prefix Cache 命中可减少 prefill 计算量
TPOT(Time Per Output Token) decode 阶段每 token 生成时间 30-50ms 中等——KV Cache 读取速度决定 decode 是否 stall
吞吐量 单位 GPU 单位时间处理的 token 数 越高越好 极大——并发数受限于 KV Cache 容量
并发数 同时服务的请求数 受限于 KV Cache 总预算 直接决定
KV Cache 命中率 Prefix Cache 或跨请求复用的命中率 编程助手 >85%,API 服务 >50% 直接衡量 Prefix Cache 效果
GPU 利用率 GPU 实际计算时间占比 >70% 间接——引擎优化提升利用率
显存利用率 有效 KV Cache 数据占分配量比例 >90% 直接衡量 PagedAttention 效果

KV Cache 方案导入前后的对比测试方法。

对比测试的核心原则是:控制变量,只改 KV Cache 配置,其他条件(模型、硬件、负载)不变。

第一步,建立基线。用标准推理引擎(如 vLLM 默认配置,只开 PagedAttention,不开 Prefix Cache / offload)跑一批固定负载,记录上述 7 个指标。负载应该覆盖三种场景:短上下文(8K)、中上下文(64K)、长上下文(256K),用真实请求 trace 或合成数据。

第二步,逐层开启优化,每次只开一个。先开 FP8 KV Cache,测一轮;再开 Prefix Cache,测一轮;再接入 LMCache(CPU offload),测一轮。每轮记录指标变化。

第三步,全量开启,跑混合负载。验证叠加效果是否符合预期。

关键对比指标:

优化手段 预期 TTFT 变化 预期吞吐变化 预期并发变化
FP8 KV Cache 不变 +80-100% +100%
Prefix Cache(85%命中) -60-80% +20-50% 不变
CPU Offload(LMCache) +5-10% +10-30% +50-200%
PD 分离 -20-40% +100-200% +100-300%

如果实际提升明显低于预期(如 Prefix Cache 命中率显示 85% 但 TTFT 只降了 20%),说明瓶颈不在 KV Cache 而在别处——可能是 GPU 算力(decode 阶段计算受限)、网络带宽(跨节点传输受限)、或者引擎调度开销。

瓶颈定位方法。

当性能指标不达标时,按以下顺序排查:

  1. GPU 算力瓶颈:检查 GPU 利用率。如果 >95% 且吞吐不再随并发增加而上升,说明算力已饱和。KV Cache 优化无法解决,需要加 GPU 或换更高性能卡。
  2. 显存容量瓶颈:检查 OOM 频率。如果并发数增加就 OOM,说明 KV Cache 占满了显存。对策:开 FP8、接 CPU offload、或加 PD 分离。
  3. 带宽瓶颈:检查 decode 阶段的 GPU 利用率。如果 decode 时 GPU 利用率很低(<30%)且 TPOT 偏高,说明 decode 在等待 KV Cache 读取——访存受限。对策:确保热 KV Cache 在 HBM,检查 DPU 预取命中率。
  4. 网络瓶颈:检查跨节点 KV Cache 迁移延迟。如果 PD 分离后 TTFT 反而增加了,说明网络迁移延迟超过了 prefill 计算节省的时间。对策:增加 RDMA 带宽、用流式迁移。
  5. 调度瓶颈:检查请求排队时间。如果请求到达后长时间不被调度,说明调度器成为瓶颈。对策:简化调度逻辑或增加调度器实例。

这套指标体系和排查流程应该是每个推理集群运维文档的标准组件。没有度量就没有优化——KV Cache 方案的效果必须通过数据验证,不能凭感觉判断。

CXL:另一条路径

CXL(Compute Express Link)是一个绕过传统 PCIe 的低延迟互联标准。它的优势是内存语义:CPU/GPU 访问远端 CXL 内存就像访问本地 DRAM 一样,不需要走块设备的协议栈。没有文件系统、没有 IO 队列、没有块设备抽象层,读写请求直达目标地址。延迟在 200-500ns 量级,比 NVMe 快两个数量级。

Marvell 的 Structera S 30260 是专门面向缓存扩展的 CXL 设备。但 CXL 3.0 的实际部署还很少,支持 CXL 的服务器主板、RCD 芯片、内存控制器都处于早期阶段。CXL 内存扩展模块目前主要基于 DRAM,成本仍然是 $3/GB 级别。短期内 NVMe + DPU 的组合因为有成熟的 PCIe 生态和大量现成 SSD 产品,跑在前面。CXL 更像是"再往后一代"的方案,需要等到 2027-2028 年生态成熟。


第六章:存储设备层——当 SSD 变成内存

前五章走完一条完整的优化链:架构压缩把 KV Cache 缩到 GQA 的 3%,精度编码再砍一半,引擎把显存利用率从 30% 拉到 90%,集群架构让 KV Cache 在节点间流动。缺口大幅缩小,但没有消失。100 个 1M 上下文并发请求,即使经过 V4 级别的压缩和池化,仍需数百 GB 的 KV Cache 空间。HBM 和 DRAM 装不下的部分,必须落到下一层介质上。

KV Cache 不是传统存储负载

KV Cache 的读写特征跟传统存储(数据库、文件系统)完全不同,存储介质的选择由访问模式决定。

写入:Prefill 阶段一次性写入整个上下文的 KV Cache,大块、顺序、一次性写完。一个 100K token 的 prefill 产生约 32 GB 数据(70B GQA),之后只在 decode 阶段每步追加一个 token 的增量(~320 KB/步)。不存在传统数据库那样的小块随机写。

读取:Decode 阶段每步读取已缓存的全量 KV Cache 做 attention。但 attention 的访问分布极度不均匀。多项 long-context attention 分布研究发现了一致的模式:attention 权重呈强烈的局部集中趋势,通常 70-90% 集中在最近数 K token 内。超过 16K token 的远程上下文仍然被访问,但权重占比低(10-20%),且访问位置高度稀疏。

维度 KV Cache 需求 传统数据库负载
写入 大块顺序、低频 小块随机、高频
读取 批量、局部集中、可预取 随机、不可预测
容量 单节点 0.5-2TB 单节点 4-16TB
延迟敏感度 有效延迟需 < 10ms 可容忍 10-100ms

为什么 SSD 的有效延迟可以逼近 DRAM

SSD 的物理访问延迟在 100μs 量级,DRAM 大约 100ns,差 1000 倍。直接拿 SSD 当内存用,推理会被拖垮。但实际部署中,SSD 的有效延迟可以逼近 DRAM——秘密在于 attention 的访问模式。

答案在于 attention 的访问模式 + DPU 预取流水线。

热数据(70-90% 的访问)= 最近数 K token 的 KV Cache。70B GQA 模型,16K token 的 KV Cache 约 5 GB,完全可以放在 HBM 或 DRAM 中,100ns 延迟。

冷数据(10-20% 的访问)= 热窗口之前的全部上下文。1M token 减去 16K ≈ 1M token 的 KV Cache,这部分数据大部分时间不被访问,存放在 SSD 上不影响推理速度。

关键问题变成:当 attention 确实需要访问冷数据时(那 10-20% 的长程依赖),SSD 的 100μs 延迟会不会造成 GPU stall?

这就是 DPU 预取发挥作用的地方。BlueField-4 DPU 在 GPU 还在处理当前 token 时,已经把下一批可能被 attention 访问的冷 KV 块从 SSD 预取到 DRAM staging buffer 里。预取策略有三层:

  1. 滑动窗口预取:维护一个不断移动的热数据窗口(当前 decode 位置前方 4-16K token),窗口内的 KV Cache 始终保持在 DRAM 中。
  2. Attention pattern 预测:对于已知的 attention pattern(如 Agent 多轮对话中反复引用的早期上下文),DPU 提前把对应 block 搬到 DRAM。
  3. Cross-request 复用:多个用户共享同一段上下文时,只预取一份到共享池。

预取效果用数学验算。假设 DPU 维护一个 4K token 的预取窗口,70B GQA 模型,每 token KV Cache 320 KB。窗口总量 = 4096 × 320 KB ≈ 1.3 GB。PCIe 5.0 NVMe 顺序读取带宽 14 GB/s,搬运耗时 ~93ms。而 decode 消耗这 4K token 需要多长时间?每步 10-30ms 生成一个 token,4K token 需要 40-120 秒。SSD 有 400-1200 倍的时间余量来完成预取。

DPU 不需要在 GPU 需要数据时才去 SSD 读,而是在 GPU 还在忙于当前 token 时就提前把下一批数据搬好了。等 GPU 真正需要这些数据时,它们已经在 DRAM 里了。GPU 看到的有效延迟接近 DRAM 水平(~100ns),而不是 SSD 的物理延迟(~100μs)。

三级 KV Cache 流水线:HBM 热 KV → DRAM 温 KV → AI SSD 冷 KV
三级 KV Cache 流水线:HBM 热 KV → DRAM 温 KV → AI SSD 冷 KV

图 3:三级 KV Cache 流水线。最热的 KV Cache(当前 attention 窗口)在 HBM;温数据(预取窗口)在 DPU 连接的 DRAM staging buffer;冷数据(长上下文的早期部分)在 AI SSD。DPU 异步搬运数据,让每一级的有效延迟向上一级逼近。

NVIDIA 在 ICMSP 2026 上公布的 CMX 架构数据显示,在 128K 上下文场景下,DPU 预取命中率达到 90%+。未被命中而退回 SSD 物理延迟的访问不到 10%。这 10% 的 miss penalty 被 attention 计算的异步流水线部分吸收,GPU stall 时间控制在可接受范围内。从 90% 到 95% 需要三个软件层面的突破:基于 attention pattern 的访问预测(超越 LRU)、token 级预取粒度、跨请求 KV Cache 复用调度。三点都是软件问题,不需要新硬件。预计 12-18 个月收敛。

新品类:AI SSD

当 SSD 的角色从"存数据的仓库"变成"参与计算的内存扩展层",一个新的产品品类正在形成。

铠侠 CM9 是支持 CMX 架构协议的企业级 SSD,PCIe 5.0 接口,顺序读取带宽 14 GB/s。铠侠还推出了 GP Series(直接连接 GPU 的闪存产品),这才是真正定义新品类的硬件——绕过传统 SSD 控制器、直接与 GPU 交互的低延迟闪存层。铠侠有 NAND 产能优势(全球第二大),没有 HBM 业务,不会自我蚕食。如果 G3.5 成为一个真实的品类,铠侠是赌最大的。

英韧科技洞庭 N3X 把参数拉得更激进:14 GB/s 读取、3500K IOPS、高耐久度。使用铠侠 XL-FLASH 存储级内存而非普通 NAND,延迟控制在传统 TLC SSD 的三分之一,DWPD(Drive Writes Per Day,每日写入次数)较传统企业级 SSD 提升 30 倍以上。传统企业级 SSD 的 DWPD 通常在 1-3,提升 30 倍意味着这些盘面向 KV Cache 场景中持续大块顺序写入设计,不是传统数据库的随机写入场景。

大普微 X5 主打 FDP(Flexible Data Placement)加透明压缩。FDP 让 SSD 控制器更高效地管理闪存块分配,把写放大控制在 1.5× 以下。透明压缩在控制器层面实时压缩写入数据,KV Cache 中重复的 attention pattern 有不错的压缩率,实际可用容量大于标称容量。

Solidigm D5 走 QLC 大容量路线,单盘容量可以做到 60TB+,$/GB 成本极低,适合作为 KV Cache 分层中的最冷一层。

行业格局:谁激进,谁保守

三星和 Solidigm(SK 海力士 + Intel NAND 合资体)都在 ICMSP 验证列表里,但都没有高调发布"AI SSD"品类。原因不难猜:两家都有大量 HBM 业务。2025-2026 年 HBM 产能供不应求,ASP 持续走高。主动推广"用 SSD 替代部分 HBM"的叙事,等于在蚕食自己最赚钱的产品线。

美光走了另一条路,重心放在 CXL 上。CXL 的内存语义访问天然比 NVMe 更适合"当内存用",但生态成熟还需要时间。

中国厂商是最激进的。英韧、大普微、加上华为的 UCM 方案,在 CFMS|MemoryS 2026 峰会上密集发布产品和方案。原因很简单:中国厂商买不到先进 HBM。出口管制把 HBM 的获取通道卡得很窄。中国厂商的推理方案(如华为 Ascend + UCM)本来就没有 HBM,SSD 是唯一大规模可得的存储介质。G3.5 对它们不是"替代 HBM",是"本来就没有 HBM,SSD 是唯一选择"。

成本对比:G3.5 存在的商业理由

KV Cache 存储层级成本对比表
KV Cache 存储层级成本对比表

图 4:各存储层级的成本与性能对比。注意 HBM 与 AI SSD 之间 $/GB 差距达到 30-130 倍。

层级 $/GB 相对 HBM 单节点容量 延迟 带宽
HBM $15-40 80-288 GB ~100ns 3-8 TB/s
DRAM $3 便宜 5-13× 1-4 TB ~100ns 100-200 GB/s
AI SSD (G3.5) $0.3-0.5 便宜 30-130× 8-64 TB ~100μs* 14 GB/s
传统 NVMe SSD $0.15 便宜 100-260× ~200μs 3-7 GB/s

*配合 DPU 预取后的有效延迟可降至接近 DRAM 水平。

HBM 每 GB 价格 15-40 美元,AI SSD 每 GB 只要 0.3-0.5 美元,差了 30 到 130 倍。一个需要存 1 TB KV Cache 的场景,用 HBM 需要等价于约 13 块 H100 的显存(每块 $30,000+),用 AI SSD 只需要 $300-500 的磁盘。这个成本差距就是 G3.5 层存在的商业理由——它不是为了取代 HBM,而是承接那些放不进 HBM、但延迟敏感性又高到不能丢进传统存储的 KV Cache 数据。


第七章:集群经济与决策框架

千卡 B300 × V4-Pro 集群实例

把五层优化放到一个真实集群里算账。

NVIDIA B300(Blackwell Ultra)规格:288 GB HBM3e、8 TB/s 带宽、13.1 PF dense FP4、NVLink 5 双向 1.8 TB/s、1400W 液冷。一个 1000 卡集群 = 125 个 8-GPU 节点,总 HBM 288 TB,总 FP4 算力 13.1 EF。

DeepSeek V4-Pro 权重以 FP4 原生加载。专家并行(8路)下,每 GPU 承载约 91 GB 专家权重 + 150 GB dense 层权重(全复制)+ 5 GB embedding ≈ 155 GB。运行时开销约 25 GB。每 GPU 可用 KV Cache 预算:

288 GB (HBM) - 155 GB (权重) - 25 GB (运行时) = 108 GB
保守按 110 GB 计

单 GPU 并发容量

上下文 KV/请求 (BF16) KV/请求 (FP8+FP4) 并发 (BF16) 并发 (FP8+FP4)
32K 0.30 GB 0.15 GB 333 666
128K 1.20 GB 0.60 GB 83 166
256K 2.41 GB 1.20 GB 41 83
512K 4.81 GB 2.40 GB 20 41
1M 9.62 GB 4.80 GB 10 20

千卡集群(125 副本)在 1M 上下文 + FP8+FP4 模式下,总并发 = 20 × 1000 = 20,000 个 1M 并发请求

对比 GQA 架构:同样 1000 张 B300,跑一个 GLM-5.2 级别(GQA,KV/请求 343 GB),单个 1M 请求就需要 343/110 ≈ 4 张 GPU。1000 张 GPU 只能跑 250 个 1M 并发——差了 80 倍。

五层叠加效果

从裸跑到全优化,V4-Pro 1M 上下文的 KV Cache 变化:

优化层 手段 KV/请求 累积压缩比
裸 GQA 等效 ~320 GB
+ 架构压缩 V4 混合注意力 (BF16) 9.62 GB 33×
+ 精度压缩 FP8 + FP4 indexer 4.80 GB 35×
+ Prefix Cache 85% 命中率(多轮场景均摊) 0.72 GB 236×
+ Prefill-Decode 分离 吞吐 +2-3× ~500× 有效

裸 GQA @ 1M:320 GB/请求,1000 卡跑 ~340 并发(110,000 GB / 320 GB)。 V4 全优化 @ 1M:~0.7 GB/请求(均摊),1000 卡跑 ~157,000 有效并发。

这 460 倍的差距,就是模型架构选择 + 推理工程 + 集群架构的叠加价值。

五层优化叠加效果
五层优化叠加效果

图 6:五层优化叠加效果。从裸 GQA 的 170 GB/请求到全优化的 ~0.7 GB/请求(均摊),累积压缩 500 倍。千卡集群的有效并发从 340 拉到 157,000。

决策框架:什么时候做什么

KV Cache 加速是必选还是可选?

这个问题有一个清晰的量化答案。判断标准是:KV Cache 优化后的 GPU 节省 >= 优化成本的 1.5 倍。超过这个拐点,不做就是在烧钱。

拐点公式:

拐点条件: N_concurrent × KV_per_token × S_avg ≥ 0.5 × W_model

当所有并发请求的 KV Cache 总量达到模型权重的 50% 时,KV Cache 优化从"可选"变成"必选"。

以 70B GQA 模型为例,权重 70 GB(FP8),KV/token 320 KB(FP16)。0.5 × 70 GB / 320 KB ≈ 109K token。也就是说,所有并发请求的 token 总和超过 109K 时,过拐点。如果平均上下文 8K,约 14 个并发就过了。如果平均上下文 32K,约 4 个并发就过了。

不同模型和上下文的具体拐点:

模型 架构 权重(FP8) KV/token 拐点(并发, 32K上下文) 拐点(并发, 128K上下文)
Llama-3 70B GQA 70 GB 320 KB 4 1
DeepSeek V3 671B MLA 671 GB 68.6 KB ~1,600 ~400
DeepSeek V4-Pro 1.6T 混合压缩 ~800 GB ~10 KB 远高于实际并发 远高于实际并发
GLM-5.2 (估) GQA ~170 GB ~328 KB 3 1

这张表透露几个信息。GQA 架构在任何实际服务场景下都在拐点之上——只要有人用,优化就值得。MLA 架构大幅推迟了拐点,中并发才开始受益。V4 混合压缩几乎不可能碰到拐点(KV 太小),除非并发极高。

按集群规模选择优化层级:

集群规模 必做 推荐 可选
1-4 卡 PagedAttention FP8 KV
8-32 卡 + Prefix Cache + Continuous Batching INT4 探索
64-256 卡 + 以上全部 + Prefill-Decode 分离 跨节点 KV 池化
1000+ 卡 + 以上全部 + KV 池化 + 弹性调度 MTP / 定制 kernel

按上下文长度判断 KV Cache 重要性:

上下文 KV/权重比 (GQA) KV Cache 角色 优化投入
< 8K < 5% 可忽略 默认开 PagedAttention
8-32K 5-30% 有感 FP8 + Prefix Cache
32-128K 30-100% 重要 全套引擎优化
128K-512K 100-500% 核心成本 + 分离架构 + 存储
1M 500%+ 生存条件 必须用架构压缩模型

自建 vs API 拐点:

千卡 B300 × V4-Pro 集群月运营成本约 $1.17M。DeepSeek V4-Pro API 输出价格 $0.87/M tokens。盈亏平衡点:$1.17M / $0.87 ≈ 1.34B output tokens/月,即日均约 45M output tokens。按平均 10K output/请求,约 4,500 请求/天。

日均请求超过 5,000 条(含超长上下文),自建千卡集群经济可行。低于 1,500 条,用 API 更划算。中间地带看利用率——集群闲置 1 小时烧 ~$1,600,没有稳定需求就别建。

真正的瓶颈已经不在显存

对于 V4-Pro + B300 组合,千卡集群的瓶颈从显存转移到了别处:

维度 状态 说明
KV Cache 显存 ✅ 充裕 1M 请求只占 ~5 GB,110 GB 预算绰绰有余
MoE(Mixture of Experts,混合专家架构)all-to-all 通信 ⚠️ 真瓶颈 49B 激活参数的 expert routing 需要 NVLink 级带宽
Prefill 计算 ⚠️ 瓶颈 1M token prefill 是 compute-bound,需要 dense FP4 算力
Decode 延迟 ✅ 良好 V4 的稀疏注意力使 decode 接近 O(1)

推理优化的投资方向应该从"省 KV Cache"转向"加速 expert routing 和长上下文 prefill"。


回到开篇的矛盾:320 GB 的 KV Cache 需求,80 GB 的 HBM,差出来的去哪了?

五层优化给出了答案。架构压缩 320 GB → 9.62 GB(33×)。精度编码 9.62 → 4.8 GB(35×)。推理引擎把显存利用率从 30% 拉到 90%+。集群架构让 KV Cache 在节点间流动,消除冗余。存储设备层用成本只有 HBM 1/100 的 AI SSD 承接溢出的冷数据,DPU 预取让有效延迟逼近 DRAM。多轮场景叠加 Prefix Caching 后,均摊到每个请求的有效 KV 占用低于 1 GB。

优化重心从推理系统层转移到模型架构层。GQA 时代,推理工程师在 vLLM 里调参数;V4 混合压缩时代,压缩发生在模型设计阶段,推理工程师的工作变成理解注意力架构并设计匹配的部署拓扑。新的瓶颈是 MoE 通信、prefill 算力、DPU 预取命中率——下一轮推理优化的主战场。

风险仍在。G3.5 的有效性依赖 DPU 预取 pipeline 的成熟度。调度算法不够好,SSD 有效延迟退回物理水平,推理性能显著下降。CMX、CXL、开源方案三条标准化路线竞争未定。

但这些不确定性改变不了一件事:大模型上下文窗口从 8K 走到 1M,推理从单轮问答走到 Agent 长程记忆,KV Cache 体量增长是结构性的。HBM 产能增长不是。这个剪刀差,是整条优化链存在的根本理由。


本文基于公开信息撰写,综合参考了 NVIDIA 官方发布(CES 2026、GTC 2026、ICMSP 2026)、CFMS|MemoryS 2026 行业峰会、铠侠/英韧/大普微产品发布、vLLM 技术博客、DeepSeek 技术讨论及 arXiv 论文。不构成投资建议。文中数据截至 2026 年 6 月 15 日。