P/D 分离架构下 KVCache 流通方式:系统性深度调研报告

📅 调研时间:2026-07-15  |  受众:AI 系统 / 芯片架构研究人员  |  覆盖:SGLang · vLLM · NVIDIA Dynamo · Mooncake · LMCache · arxiv 前沿(2024-2026) |  主题:挑战 · 流通模式 · CXL 影响分析  |  📎 续篇:PD 路由调研 · 长序列 PD 挑战(含 4 项子报告)

1. 背景与动机:为什么需要 P/D 分离

LLM 推理两阶段本质不对称:Prefill 对 prompt 做一次大矩阵乘,算力强但时间短;Decode 每次只生成一个 token,访存密集、对延迟敏感。传统统一调度把两者放在同一组 GPU 上,产生三类干扰:

📊 DistServe (OSDI'24) 的关键数据

在 5 种 LLM 上,统一调度相对于分离调度的 goodput 下降 3.4×–8.3×,因为 TTFT SLO 与 ITL SLO 无法同时满足。来源:arxiv 2401.09670

解决路径:把 Prefill 和 Decode 拆成独立实例池,中间通过高速网络把 Prefill 产生的 KVCache 传给 Decode。传输行为 = 整个系统的新瓶颈与新战场。

2. KVCache 流通的核心模式

2.1 数据路径的三种基本拓扑

模式数据流向代表系统核心特征
Pull(拉取) D 主动 RDMA READ P 端的 KV vLLM NixlConnector (默认) D 拥有调度主动权;P 被动“扣块”持有 lease
Push(推送) P 主动 RDMA WRITE 到 D 预分配的内存 vLLM NixlPushConnector D 提前注册 block 信息;P 在 forward 结束后立即发
Peer-to-Peer 共享池 KV 写 → 多级缓存(GPU/CPU/SSD)→ 任何实例可取 Mooncake · LMCache MP 模式 KVCache 成为"一等公民"持久化对象;跨会话复用

2.2 流通的"时域"层级

KVCache 流通并非只在 P→D 请求级发生,按时间粒度可分为四层:

  1. Layer-level:逐层搬(边算边传,已在 HMA-Serve 提出)
  2. Sequence / request-level:一个请求的整条 prompt在 P 算完后一次性推送
  3. Block-level:PagedAttention 切块后按 block 推,适配 prefix cache
  4. Cache-line / token-level:CXL 时代提出,粒度更细的随机访问(3DLS 论文提出)
💡 Insight 1:当前工业界主流流通粒度是 Block-level(Paged 块)+ Request-level(请求一束),是因为块级与 NCCL/Mooncake 的语义最契合。Layer-level 可隐藏 TTFT 但要求双向同步;token-level 更适合即将出现的 CXL pooled memory 场景。

3. SGLang 的实现路径

3.1 SGLang v0.4 起的 PD 分离设计

来源:SGLang Blog(Deploying DeepSeek with PD Disaggregation, The SGLang Team, 2025-05)

核心设计:Prefill Server 与 Decode Server 通过本地 sender/receiver 配对握手,Decode 侧先预分配 KV cache 后通知 Prefill 发起 forward;forward 后数据通过非阻塞 RDMA 直传。

3.2 GB200 NVL72 时代的变迁

来源:Deploying DeepSeek on GB200 NVL72 (Part I): 2.7× Higher Decoding Throughput, SGLang Team, 2025-06

在 GB200 NVL72 上最大的变化:

3.3 SGLang Router 视角

来源:SGLang GitHub · Kimi K2 在 128 H200 上的部署

SGLang Router 在 PD 分离中承担"轻量调度":基于 label 自动发现 P/D 节点,支持 least-privilege routing 与 decode-partition 定制化负载均衡。Kimi K2 (1T MoE, 384 experts) 实测 decode 288k tok/s,成本 $0.21 / 1M output。

4. vLLM 的 NIXL 连接器体系

4.1 总体架构(vLLM v0.25.1 状态)

来源:Disaggregated Prefilling (experimental) - vLLM Official Docs · vLLM GitHub docs/design/nixl_kv_push_connector.md

连接器后端适用场景
NixlConnectorUCX (IB/RoCE), GDS (GPUDirect Storage), TCP通用 P→P2P KV 传输
NixlPushConnectorNIXL WRITE 直写 D 的显存降低 D 等待延迟、绕过 D 侧调度排队
MooncakeConnectorMooncake 传输引擎跨节点 GPU 直接 KV 搬运
LMCacheConnectorV1LMCache 后台的 NIXL 通道跨会话 KV 持久化 + P/D 分离
OffloadingConnectorCPU DRAMKV 溢出 CPU 卸载
FlexKVConnectorV1分布式 KV Store超大规模多 LLM 共享
MoRIIOConnectorROCm 生态AMD 平台专用

4.2 Push vs Pull 的模式对比

来源:vllm/docs/design/nixl_kv_push_connector.md © vLLM Authors

🔄 Pull(默认) vs Push(新)

Pull 路径:P 完成 forward 后等待 D 主动 READ → D 获得控制权;P 端需 lock block(做 lease)防被提前 evict。

Push 路径:D 在 allocate block 后主动发 PUSH_REG:msgpack 通知 P 端的物理地址,NixlPushWorker 在 P 端以 NIXL WRITE 把 block 直接写进去,再发完成通知给 D。

Push 优势:P 端紧接 forward 立即发 → TTFT 更小;D 端只需支持后台 completion 入队,不消耗主循环。

4.3 Lease Renewal + Heartbeat 故障恢复

来源:vllm/docs/design/nixl_kv_cache_lease.md

💡 Insight 2:传统 RDMA lease 的问题是"持有太久"(崩了也占着)或"太短"(还在排队就被 evict)。vLLM 给出的答案是heartbeat-driven per-request lease renewal——只要在工作就续,崩了也秒降。这是一个重要的工程突破,已经被 vLLM 主仓库合入主线。

5. 第三方关键系统:Mooncake · LMCache · FlexKV

5.1 Mooncake — KVCache 为中心的调度

来源:arxiv 2407.00079 "Mooncake: A KVCache-centric Disaggregated Architecture for LLM Serving"(Moonshot AI, 2024-06) · Mooncake GitHub

Kimi 在线推理平台 Mooncake:Prefill 集群 + Decode 集群 + CPU/DRAM/SSD 的 KVCache 三层级分离式 cache。核心调度策略是"KVCache-centric":不再是先请求后分配,而是先找 KVCache(抢占/迁移)再决定放哪里 prefill。

关键结论:在模拟高负载场景下,KVCache-centric 比 prefill-centric 策略提升 525% throughput(同时满足 SLO)。同时 Mooncake 采用prediction-based early rejection:过负载时提早丢掉不会在 SLO 内完成的请求。

5.2 LMCache — 把 KV 持久化脱离引擎

来源:arxiv 2510.09665 "LMCache: An Efficient KV Cache Layer for Enterprise-Scale LLM Inference"(IBM Research 等) · LMCache Docs

LMCache 的三大贡献:

  1. 引擎无关:独立于 vLLM/SGLang 的 daemon 进程,KV 数据可跨 engine 共享
  2. 分层 KV 存储:GPU → CPU RAM → SSD/NVMe → S3/Redis/Valkey/NIXL/GDS
  3. MP 模式:多个 vLLM 实例通过一个 LMCachd daemon 进程共享 KV Cache
🔑 LMCache 关键数据点

5.3 FlexKVConnectorV1 — 分布式 KV Store

vLLM 最近引入的另一种反方向思路:不流传 KV block,而是把 KV 放在一个全局 KV Store,Decode Worker 按需 fetch。适合 ultra-large-scale 多模型场景。

6. NVIDIA Dynamo 如何看待 KV

来源:NVIDIA Dynamo GitHub (2026-07)

能力角色
Disaggregated P/D把 P 池 / D 池独立扩缩
KV-Aware Routing按 worker 负载 + KV cache overlap 路由,消除冗余 prefill(2× TTFT 提升实测)
KV Block Manager (KVBM)GPU → CPU → SSD → Remote Store 多级 offload
ModelExpressNIXL/NVLink 权重流:7× 更快拉起新副本
Planner + AIConfigurator10K + 部署配置模拟;SLA-driven autoscale;80% SLA breach ↓
GroveK8s topology-aware 调度,NUMA/NVL72-aware

Dynamo 的哲学:KV Cache 不再是 engine 内部概念,而是 data center 一级的资产。KVBM 让 KV Store 脱离任何单一 vLLM/SGLang 实例,这是与 LMCache 思路的融合。

7. 共性技术挑战

7.1 带宽瓶颈与 TTFT 预算

一个 100K token 的 prompt,按 DeepSeek-V3 的 MLA 参数,prefill KV 就有几个 GB。在 400Gbps RDMA 下仅传输就占 ~0.1–0.3s,这是 TTFT 中的大块。

最新论文已证明(Towards Load-Aware Prefill Deflection, arxiv 2607.02043, 2026-07):production 集群 P95 TTFT 中,仅 2-23% 真正在做 prefill 计算,其余都是排队 + KV 搬移。结论:调度器必须把网络拓扑代价纳入目标函数(NetKV, 2606.03910)。

7.2 拥塞与"关键路径上的带宽争夺"

3DLS 论文(arxiv 2607.01617, 2026-07)指出芯片级问题:在 2D/2.5D chiplet 芯片上,P→D KV cache transfer 与 Decode-side TP allreduce 争夺同一条横向 Die-to-Die 互连带宽,混合流量干扰 decode critical path。3DLS 提出用垂直互连把这两类流量解耦。

7.3 KV Cache 的"幽灵问题"——分布异构

HMA-Serve(arxiv 2606.29986, 2026-06):用 GDDR 卡做 prefill + HBM 卡做 decode(AMD MI355X + H100),跨厂商导致:

7.4 Multi-turn 重复搬移

Kimi K2 部署(128 H200, Mooncake team, arxiv 2407.00079):实测 agentic 场景 input length 常在 30K–50K,每轮 P→D 搬一次 + D→P 再搬回 → 带宽轻松打满。PPD Disaggregation(arxiv 2603.13358, 2026-03)提出区分 append-prefill vs prefix-prefill,只搬 diff。

7.5 KV 精度 vs 带宽折中

方法思路论文
SplitZip无损 KV 压缩后传输arxiv 2605.01708
SpectrumKVAttention sink FP16 + 中位 INT8 + 低位 INT4 per-tokenarxiv 2606.08635
Lynx渐进式 speculative quantizationarxiv 2607.01831
SCD语义码本替代原始 KVarxiv 2606.07684

8. 论文观点速览(DistServe → NetKV → 3DLS)

DistServe (OSDI'24) — 奠基工作

arxiv 2401.09670. 首次系统化证明 separated PD 在 goodput 维度压倒统一调度;指出 KV transfer 在单节点可通过 NVLink 低成本完成,但 cross-node 的代价决定全局部署拓扑。

Mooncake (2024-06) — KVCache 一等公民

arxiv 2407.00079. 提出 KVCache-centric scheduler:把 KV Cache pool 大小作为调度核心约束;过载时主动 early rejection。预测:"KVCache-centric 将成为未来 LLM serving 的 default 范式" Mooncake Team, 2025 LMSYS Blog。

SplitServe (2024-11) — 训练时 P/D 分离

注:SplitServe(另一分支方向)讨论离线训练 + 推理的共存,属于不同问题;本文不展开。

CrossPool (2026-06) — Cold MoE 共享 KV Pool

arxiv 2606.24506. 解决多 LLM + 稀疏 MoE 的静态 KV 浪费:cold model 峰值 KV 重叠概率低,共享 pool 可显著降低 reserve 成本。

NetKV (2026-06) — 网络感知 Decode 选路

arxiv 2606.03910. 提出 thin operator-scheduler 接口 + network cost oracle。关键结论:仅考虑 prefix-cache hit 的调度在上下文变长时任意次优(可证明)。NetKV 在 64 GPU 集群 5 类模型上提升 30-55% goodput。

RAPID-Serve (2026-01) — 单 GPU 上 P/D 分离

arxiv 2601.11822. 在单 GPU 内部通过硬件时间 multiplex 模拟 PD 分离,消除 prologue/epilogue 开销;不需要跨节点 KV transfer。

Towards Load-Aware Prefill Deflection (2026-07)

arxiv 2607.02043. 结论:在 D 端穿插 chunk-prefill 对冲 P 节点饱和,让 P 池和 D 池互为冗余。P 池利用率可从 22% 提升到 60%+。

3DLS (2026-07) — 芯片级 KV Cache 传输重构

arxiv 2607.01617. 首个在芯片架构层面把 P-KV transfer 与 D-collectives 用垂直 die 分离的研究;提出"KV-cache 专用的 die-to-die channel 将来可能是必需"。

Towards Load-Aware Prefill Deflection (2026-07) 与 TokenScale (2025-12)

TokenScale(arxiv 2512.03416)提出 "Token Velocity" 自指标,利用 token 产出速率作为领先信号替代 lagging GPU 利用率 驱动 autoscale。两者共同指向:PD 分离的动态调度必须进入毫秒级反馈时代。

9. CXL 对 KVCache 管理的潜在颠覆

背景延伸:前述结论来自 /tmp/research_cxl.md(本调研的子代理已完成 CXL 专项)。本节结合调研收集的最新进展给出系统判断。

9.1 CXL 的技术属性

属性意义
Memory Pooling跨主机共享 TB 级内存;GPU 可直接 load/store 远端 CXL memory
Cache-line 粒度与 GPU 按 page 搬 KV 块不同,CXL 语义是 64B–256B 随机访问
带宽延迟CXL 3.0 ~64 GT/s × 16 lanes ≈ 256 GB/s(单向);延迟 hundreds ns(~1μs)
协议兼容CXL 在 PCIe 物理层之上,与现有 I/O 生态兼容

9.2 CXL-native KVCache 系统(已浮现)

来源:/tmp/research_cxl.md(已通过 arxiv / IEEE 等检索验证)

系统CXL 用法效果
ITMESK Hynix CMM (CXL Memory Module)吞吐 ↑35.7%
SACSparse attention → CXL 随机取 KV2.1× ttput, 9.7× TTFT
BelugaCXL Switch GPU-direct + KV 本地缓存7.35×
TraCTRack-scale CXL pooled memory 作为 KV Store9.8× TTFT
PNM-CXLProcessing-near-memory + CXL21.9× ttput, 60× 能耗↓, 7.3× TCO

9.3 CXL 对 PD 分离 KVCache 流通的范式影响

关键判断 1:CXL 让 "KV 既在 P 也在 D" 成为可能
过去 KV 产生的速率(prefill 一次几 GB/μs)远超 RDMA 网络搬移速率,所以 KV 必然是“搬过去”才能用。CXL pooled memory 给了一种新选项:把 CXL memory 作为 KV 的统一池,P 写 D 读都通过 cache-line load/store;省掉了 GB 级的整块传输。
关键判断 2:CXL 的 cache-line 语义 天然适配 sparse attention
LLaMA-Qwen 等标准 attention 必须全量 KV,但 MoE/SSM/Hybrid attention(Jamba、Zamba、SWA+LongLite)只访问 KV 的 5-15%。过去必须全量传 → CXL 随机取 3-5 token 页 成本可忽略。这种"稀疏 access → 远端 memory 反客为主"的范式将深刻影响模型设计。
关键判断 3:当前最大障碍——NVIDIA 没有 CXL 接口
NVIDIA 尚未在 GPU 上原生支持 CXL(预计 Rubin/后续)。验证平台:AMD MI300X(有限)、Intel GPU、SK Hynix CMM。AMD 路线在 MI400 有望更完整支持。

9.4 CXL vs RDMA/Mooncake:不是替代,是分层

判断:CXL pooled memory 最可能作为 "KV 持久共享层"——NIXL/Mooncake 继续承担跨数据中心 KV 迁移与热路径层间搬移;CXL 承担"冷 KV 远程缓存在内存池里随用随取"。这与 Dynamo KVBM / LMCache 的三级分层是同一个方向。

9.5 arxiv 2512.18194 (TraCT) 给的具体数据

TraCT 实测:在 rack-scale 8 节点、H100 作 P、CXL 内存池作 KV Store,长上下文(128K)的 TTFT 提升 9.8×;关键 trick:P prefill 后的 KV 不经网络挂到 D,而是写到 CXL Pool;D decode 直接 CXL load。进一步佐证了上述判断。

10. 趋势判断:研究前沿流向何方

  1. 从 "传 KV 块" 到 "用 KV Store":Mooncake · Dynamo KVBM · LMCache · FlexKV 四种系统都指向 KV Cache 从 per-request 状态 → 持久化、可共享、可观测的一级资产。
  2. P/D 分离 → P/D/E 三分:Heterogeneous CPU + GPU EPD Disaggregation(Intel + SGLang, LMSYS 2026-06 blog)证明 vision encoding 也应独立出来。
  3. 网络感知调度成为标配:NetKV(代价 oracle) + Multi-stage Flow Scheduling(调度冲突避免) + TokenScale(领先指标);下一个 SOTA 必须把网络视为一等约束。
  4. KV 精度可调将成为 PD 分离链路基础:SpectrumKV、SCD、Lynx 给的是 per-token 多精度;PD 链路上 "传输精度 ≠ 计算精度" 会被松绑。
  5. CXL 在近 12-24 个月将从 paper 走到原型部署:SK Hynix CMM / Beluga CXL switch / PNM-CXL 已到 demo 阶段;等待 Rubin / MI400。
  6. 芯片级 KV 传输专道将被提上日程:3DLS 论文虽新但方向确定;未来 GPU 可能原生提供 "KV-cache die-to-die channel"。
  7. 路由 = PD 栈的"OS 调度器":下一段最激烈的战场在路由决策(load-aware、network-aware、expert-aware、conversation-level),而非单纯传输。本报告续篇 📎 PD 分离请求路由深度调研 已单独覆盖 40+ 来源、头部公司实践与前沿论文。

附录 · 引用资料集

完整链接列表详见本地 references.md(含访问失败链接)。下方列出本节文的全部超链接。

A. 博客与官方文档

B. 关键论文(按年代)

C. 专题 CXL 论文

D. 中文关联资料