1. 为什么 KV 会成为数据中心级资源

权重可在部署时复制或分片,生命周期以小时计;KV 随请求生成,生命周期从毫秒到多轮会话的小时级,且与具体 token 前缀绑定。一个热门 system prompt、工具 schema 或代码仓库快照可能被成千上万请求复用。若每个副本独立重算,浪费 prefill;若全局共享,又必须解决定位、传输和一致性。

2. 前置:KV 的尺寸与语义

对 dense MHA/GQA,单 token KV 近似由层数、KV head 数、head dimension 和精度决定。TP/CP、MLA、压缩 KV、稀疏 attention 会改变分片和常数,因此运行时应从模型配置和实际 layout 读取,不应硬编码。

KV_bytes/token = L × 2(K,V) × n_kv_heads × head_dim × bytes_per_element KV_bytes/request ≈ cached_tokens × KV_bytes/token 对象身份至少包含: model_epoch + adapter_epoch + token_block + position_semantics + modality_digest

同样的文本 token 若模型权重、LoRA、RoPE scaling、视觉 embedding 或 KV 精度不同,不能共享物理 KV。缓存系统必须把“内容相同”与“可安全复用”分开。

3. 从 tensor 到 KV object

数据中心系统通常把 KV 按固定 token block、layer group 或两者组合切成对象。对象描述包括 logical prefix hash、物理地址、层范围、token 范围、dtype、owner、版本、引用计数、最后访问和持久层级。block 越小,复用和淘汰越细;block 越大,元数据和 I/O 越高效。

粒度优点代价
token page(如 16/32 token)prefix 匹配细、内部碎片小对象数和目录事件多
layer group可边算边传、流水恢复地址和完成状态更复杂
整请求 KV实现简单、大 I/O 高效部分 prefix 难复用,尾部浪费大

4. P/D 分离的完整请求流

Prefill 偏计算密集、decode 偏权重/KV 带宽密集,把两者放进独立 worker pool 可分别选择 batch、并行度与硬件。一次标准 P/D 请求如下:

  1. router 解析模型、SLO、prompt hash,并查询全局 prefix 目录。
  2. 选择 prefill worker;已命中 prefix 的 block 可就地读取或从远端加载,只算 suffix。
  3. prefill worker 分配 KV block,逐 layer/chunk 计算并发布可传输的范围。
  4. 控制面选择 decode worker,预留其 block table 和接收 credit。
  5. NIXL/RDMA/共享 fabric 把 KV 直接传到目标 HBM,完成事件提交版本。
  6. decode worker 在 KV 完整可见后进入 continuous batching,逐 token 输出。
  7. 结束后根据复用价值保留、降层或回收 KV,并更新全局目录。
TTFT_PD = router + queue_P + cache_load + prefill_suffix
          + KV_transfer + queue_D + first_decode

PD 有利条件:独立池的排队/硬件收益
           > KV_transfer + 额外路由/状态成本
Mooncake 论文中以 KVCache 为中心的预填充、缓存和解码池架构
原始/论文结构图:Mooncake, Figure 1。图将 cache-aware prefill scheduler、KVCache balance scheduler、load-balanced decoding scheduler 与 P pool、分布式 KVCache pool、D pool 放在同一请求流中,并显式画出节点间 KV 传输。它是 2024 的 KVCache-centric disaggregated serving 架构,适合解释 P/D 的对象和控制点;Dynamo、LMCache、SGLang HiCache 的接口与控制面并不必然相同。

5. 分离解决什么,又制造什么

收益

P 与 D 分别扩容;长 prompt 不阻塞 decode;可给 P 用计算型 GPU、D 用带宽/容量型 GPU;独立设置 TP 与 batch。

成本

必须传 KV;router 同时理解两池负载;目标 HBM 要提前预留;一个请求跨更多故障域;cache locality 更难维护。

DistServe(OSDI 2024)是重要基础,报告在其设置下可服务 7.4× 更多请求或满足 12.6× 更严格 SLO,并使超过 90% 请求满足约束。它不是 2026 论文;2026 的 Dynamo、EcoServe、Libra、load-aware deflection 等继续处理真实链路、异构硬件和动态拆分。

6. 全局路由:负载最轻不等于完成最快

目标 worker 的成本至少由三部分构成:排队、prefix overlap 和迁移。一个忙 worker 如果已持有 80K prefix,可能比空闲但无缓存的 worker 更快;反过来,过度粘性会把热门 prefix 压到少数 worker。

score(worker) = wq × estimated_queue_time + wc × recompute_or_fetch_missing_prefix + wt × transfer_time + wm × memory_pressure + wf × failure_domain_penalty choose min score subject to SLO and admission feasibility

NVIDIA Dynamo 的 2026 官方 KV-aware routing 将 cache overlap 与 worker load 组合,并维护全局 radix registry。KV 更新可通过 NATS、JetStream、ZMQ 或近似 TTL 模式传播;精确模式提高一致性,近似模式减少事件成本但会产生误判。

7. 全局目录与 cache event

目录不一定保存 KV 数据本身,它保存“哪个 worker/层级拥有哪个 prefix block”。创建、引用、移动、删除都产生 event。事件必须带 model epoch 和 sequence number;worker 崩溃时,控制面应一次失效该 owner 的所有条目,而不是等待每个 TTL。

CACHE_ADD(prefix_block, owner, tier, model_epoch, version)
CACHE_MOVE(prefix_block, old_owner, new_owner, version+1)
CACHE_DROP(prefix_block, owner, version)
WORKER_EPOCH_LOST(owner, epoch)

router 只接受当前 model_epoch 且 version 单调的记录。

强一致目录成本高;最终一致目录允许短暂 false hit/false miss。false miss 只多算,false hit 若直接引用不存在或旧 KV 会失败甚至产生错误输出。因此数据面仍需目标端验证,不能完全信任路由目录。

8. HBM、DRAM、SSD 与远端:四级缓存

层级用途主要限制典型策略
本地 HBM正在 decode、即将命中容量最小,争模型 workspacepin active、引用计数、LRU/价值淘汰
peer/远端 HBM同 fabric 快速借用占用链路,远端 GPU 也有压力拓扑感知放置、donor credit
host DRAMwarm KV、抢占恢复PCIe/NVLink CPU 路径异步 prefetch、pin memory
NVMe/对象存储大容量冷 KV微秒到毫秒尾延迟、写放大大对象、GPU direct I/O、slack-aware load

多层缓存不是层数越多越好。每层都需要 admission、metadata、promotion/demotion 和带宽预算;如果复用概率低,保存 KV 的写成本可能高于下次重算。

9. 淘汰价值:不能只用 LRU

KV 的复用价值与长度、重算 FLOPs、未来命中概率、加载成本和当前内存压力有关。长 prefix 命中节省大,但对象也大;短热门 system prompt 小且高频,通常价值更高。

value(block) ≈ P(reuse within horizon) × saved_prefill_time_or_cost - storage_cost - expected_load_cost evict lowest value/byte, subject to active-session pinning

Agent 会话还有“工具即将返回”之类的外部信号。已发起 200 ms API 的 session,通常比恢复时间未知的 session 更值得保留在 HBM。缓存控制器若只看最近访问时间,就会忽略这类生命周期信息,因此需要与调度器共享状态。

10. SYMPHONY:把 memory server 变成可协作的控制面

SYMPHONY(NSDI 2026)把计算与 KV memory disaggregate,使用 advisory request/prefetch、priority-based 与 cooperative memory management 协调计算节点和内存节点。论文报告端到端延迟降低 2.4×、可处理请求数提高 4×。

远端内存容量大只是前提。计算节点还要提前报告未来访问,内存层据请求关键路径排序,并在多个消费者之间协调。若完全依赖无提示的按需 page fault,I/O 延迟会直接落到 decode 关键路径上。

11. Bidaw、Strata、Tutti:SSD KV 不只是一次读写

Bidaw(FAST 2026)在 DRAM+SSD 两层中让计算与存储双向感知:存储队列按 KV 大小排序,响应反馈指导淘汰,并选择性缓存历史 tensor;报告响应延迟最高降低 3.58×、吞吐提高 1.83×。论文也指出朴素两层加载会使延迟升至 3.8×、吞吐降至一半。

Strata(OSDI 2026)在 HBM/CPU/SSD 层级中使用 GPU-assisted 大 I/O、解耦 layout,并让 scheduler 处理 delayed hit;已进入 SGLang 生产栈,报告相对 vLLM-LMCache 最高 5×、相对 TensorRT‑LLM 最高 3.75×。

Tutti(2026 预印本)构建 GPU-centric SSD KV object store,使用 GPU io_uring、异步 direct object I/O 和 slack-aware scheduling;相对 GDS LMCache 报告 TTFT 降 78.3%、请求率 2×、成本降 27%,接近 DRAM LMCache。预印本结果仍应在目标 SSD、文件系统和模型上复验。

12. Prism 与 SwiftCache:让其他模型借出空闲 HBM

Prism(OSDI 2026)针对多模型、突发负载提出 GPU memory ballooning,让模型组动态让出和收回 HBM;其开源 kvcached 声称已部署于 10,000+ GPU。它把 KV/cache 内存从“进程私有预留”变成节点级可调资源。

SwiftCache(2026 预印本)进一步利用异构共置模型的空闲 HBM,通过 NVLink 借用,同时把 active layer 保持本地;论文报告 P99 TTFT 降 69%、最大上下文扩大 3.98×。借用必须有回收协议:donor 负载突然上升时,borrower 需要迁移、降层或背压,不能直接丢正在使用的页。

13. 稀疏与压缩 KV 改变数据中心经济性

DeepSeek‑V4 2026 SGLang 报告中的混合稀疏 attention 只保留短窗原始 KV,并使用压缩 KV 支持 C4/C128 模式;HiSparse 可把 C4 KV 扩展到 CPU,官方报告容量/吞吐最高 3×。当每 token KV 不再固定时,router 应按 layer/head 访问集合估计 transfer,而不是整段搬迁。

Tangram(2026 预印本)观察不同 attention head 的 KV 重要度不均,给每 head 确定预算并用 head-group page 与 AOT load balancing,报告吞吐最高 2.6×。UltraQuant 则在 agent 长上下文中用 4-bit KV;MiniMax‑M2.5 TP2、2×MI355X、32 session 实验报告 late-round P50 TTFT 3.47×、全轮 2.3×、输出吞吐 1.63×。量化必须同时核对质量,不可只看容量。

14. 跨数据中心 prefill:只有特殊负载才成立

Prefill-as-a-Service(2026 预印本)针对 hybrid-attention 模型更小的 KV,选择性把超长 prefill offload 到远端数据中心;在其 1T 内部混合模型实验中,吞吐相对 homogeneous PD 提高 54%,相对朴素 heterogeneous 提高 32%。

跨地域 RTT 通常远大于机内链路,因此只适用于 prefill 足够长、KV 足够压缩、远端有明显算力/成本优势且数据合规允许的请求。普通短请求跨 DC 会让 TTFT 更差;敏感 prompt/KV 还涉及数据驻留、加密和审计。

15. 2026 当前栈:Dynamo、LMCache、SGLang HiCache

NVIDIA Dynamo 提供 router、worker、全局 KV registry 和 NIXL 数据通道,支持 vLLM、SGLang、TensorRT‑LLM 等后端;官方 P/D 文档明确将 KV 从 prefill worker 直接送到 decode worker。LMCache 作为开源 KV connector/存储层,与 vLLM 等 runtime 连接。SGLang 的 HiCache/HiSparse/X‑Mem 处理 GPU、host、SSD 与稀疏 KV。

SGLang X‑Mem 2026 官方报告在 prefix-heavy 工作负载上相对 host-DRAM HiCache 将 TTFT 改善 6.7×。这是特定 workload 的系统报告,部署时仍需把命中率、对象大小、SSD/NIC 和 CPU 内存拓扑固定后复测。

16. 具体例子:80K Agent 会话如何跨三轮复用

  1. 第一轮含 60K repo prefix、15K tool/schema、5K 用户内容;router 无命中,P worker 计算 80K KV。
  2. KV 以 block 发布,D worker 接收后输出 300 token;60K+15K 共享部分进入 warm tier,会话尾部留 HBM。
  3. 工具等待 3 秒。控制器预测短期恢复,保留最近 block,将较老共享 prefix 只保一个引用。
  4. 第二轮追加 2K 工具结果,router 粘到同一 D 或从 warm tier拉回缺失页,仅增量 prefill 2K。
  5. 若同一 repo 有另一用户请求,目录命中 60K prefix,但 adapter/model epoch 必须相同;用户私有尾部不可跨租户暴露。

这条数据流同时涉及缓存复用、租户隔离、session affinity、分层迁移和 P/D 资源选择,不能由单一 LRU 完成。

17. 多租户安全与生命周期

KV 可泄露原始上下文的表征信息,应按租户、模型和数据分类隔离。全局 prefix cache 只有在明确允许共享的 system/tool prefix 上跨租户;私有 prompt 默认 tenant-scoped。内存释放需覆盖 HBM allocator、host pinned buffer、SSD object 和目录索引。

  • 传输使用身份认证与链路加密;对象 metadata 不暴露原始 prompt。
  • 每次模型/adapter 升级创建新 epoch,旧 KV 不可静默复用。
  • TTL、用户删除和会话结束触发可审计的多层删除。
  • cache hit 权限在路由前检查,目标 worker 再次验证 tenant scope。

18. 故障恢复与一致性边界

P worker 在发送一半 KV 时宕机,D worker必须把未提交 block 标记无效;D worker 宕机时,router 可选择另一 D 并从 P/远端 cache 重传;目录服务宕机时可降级为本地 cache + recompute,而不是信任过期 location。

状态机:ALLOCATED → TRANSFERRING → COMMITTED → REFERENCED → EVICTING → FREE
只有 COMMITTED 可进入 decode block table。
所有转移带 model_epoch + object_version,释放幂等。

19. 实现与部署清单

  • 把 cache hit 报成 tokens、bytes、节省 prefill ms 三种指标。
  • 分别限制 HBM 水位、host pinned memory、SSD IOPS/带宽、每目标 RDMA credit。
  • 用模型 epoch、adapter epoch、position semantics 构造强 cache namespace。
  • 为每种层级测 load/store P99,并让 scheduler 只在有 deadline slack 时预取。
  • 将“保留 KV”与“保留请求执行槽”分离,工具等待不应占 active batch。
  • 为目录 event 丢失、乱序、worker 重启做 fault injection。

20. 局限与常见失败

缓存越大不等于命中越多。若 prompt 高熵且无共享前缀,写入和维护只增加成本。
PD 不等于必然降 TTFT。排队与硬件解耦收益必须覆盖 KV 传输;短 prompt 可能更适合共置。
目录命中不等于数据可用。目标端必须验证版本与完成状态,必要时回退到重算。

所有论文倍数均绑定模型、GPU、缓存命中和请求 trace。本页不把最高数字横向相乘,也不把预印本结果当生产承诺。

21. 最小复现实验

用三种 trace:无共享随机 prompt、80% 共享 32K prefix、Agent 80K 多轮。比较共置、PD、PD+HBM cache、PD+DRAM、PD+SSD;分别扫描 0–100% hit rate 和 NIC/SSD 限速。

记录:
TTFT = queue_P + compute_P + transfer + queue_D + first_decode
cache hit tokens/bytes, transfer bytes, recompute tokens
tier load/store P99, directory false hit/miss
HBM/DRAM/SSD watermarks, eviction reason, fault recovery

报告 goodput,而非只报平均 throughput。

22. 一手来源与年份边界

来源本页用途
DistServe, OSDI 2024PD 基础与原始 SLO 结果;明确不是 2026 论文。
Dynamo KV-aware routing 官方文档全局 radix、cache/load 路由、事件模式。
Dynamo P/D 官方设计NIXL 与 worker 数据流。
SYMPHONY, NSDI 2026计算/内存分离与协同预取。
Bidaw, FAST 2026DRAM+SSD 双向感知。
Strata, OSDI 2026HBM/CPU/SSD 分层与 delayed hit 调度。
Prism, OSDI 2026GPU memory ballooning 与 kvcached 部署。
Tutti, 2026GPU-centric SSD object store;预印本。
Prefill-as-a-Service, 2026跨数据中心 selective prefill;预印本。
LMCache 官方仓库2026 当前开源 KV connector/storage 栈。