Disaggregation

分离式推理(disaggregated inference)把原本在同一模型实例上执行的阶段或状态放到不同资源池。在 LLM 服务里通常特指 prefill–decode 分离(P/D disaggregation):prefill 实例生成 KV cache,再把它传给 decode 实例继续逐 token 生成。

核心思想

prefill 一次处理很多输入 token,通常更偏计算密集;decode 每轮处理少量新 token,却反复读取模型权重和历史 KV,通常更偏内存带宽与延迟。把两阶段放在不同 GPU 池后,可以为它们选择不同 batch、并行方式、GPU 数和扩缩容策略,避免长 prefill 直接阻塞 decode。

代价是状态跨边界移动。调度器必须选择 prefiller 和 decoder、给两池做 rate matching,并把每层或整请求的 KV 通过 RDMA/NVLink/PCIe 或缓存层传过去。网络拥塞、队列、失败和模型版本从此都在关键路径上。

这里要区分三类相邻设计:

  • 物理 P/D 分离:不同实例长期承担不同阶段,KV 跨实例传输。
  • 时间或混合分离:完整模型实例在较长窗口内切换 prefill/decode,减少短周期干扰,但 KV 留在本地。
  • 存储、内存、专家或角色分离:也属于广义 disaggregation,却不能直接证明 P/D serving 的收益。

为什么重要

分离让阶段独立伸缩,也能为 prefill 选择吞吐型配置、为 decode 选择低延迟配置。但它不是默认更优。KV 大小取决于 context、层数、head 结构和精度;网络需求还取决于到达率和传输是否能与计算重叠。短 context、低并发、慢网络或高 cache hit 都可能改变 crossover。

OSDI 2026 的 EcoServe-OSDI26 是重要反例:在普通 PCIe GPU 和 Ethernet 集群上,完全分离会被 KV 流量和固定池配比限制;复制完整模型并让多个实例错峰切换较长 phase,反而能减少数据搬运。这说明分离的真正问题不是“拆不拆”,而是在哪个边界拆、拆到什么程度。

关键观察 / 隐含假设

  • 阶段异构是真实的,但强弱随模型改变。 MHA 的 KV 较大,GQA/MLA 的 KV 和投影成本不同。EcoServe-OSDI26 发现 A800 的计算能力比 L20 增长更快、网络只增加 2.5 倍时,完全分离反而更容易被网络卡住。
  • KV transfer 与资源配比必须联合优化。 NVIDIA-Disagg-Study-MLSys26 扫描大量模拟设计点,发现 prefill-heavy、较大模型的收益更明显,prefill:decode GPU 比需要动态 rate matching。约 8 倍 goodput 的 headline 来自特定 H200 原型相对静态配比,不能理解为 P/D 对共置系统普遍提升 8 倍。
  • 远端 KV 不一定比重新 prefill 划算。 LMCache-arXiv25 把 KV 作为跨引擎、跨存储层对象,并在企业部署中观察到两种情况都存在;CacheGen-SIGCOMM24 又说明低带宽下,直接传 10 GB 级 KV 可能更慢,所以需要压缩和流式传输。
  • 小块、动态成员需要不同通信抽象。 fabric-lib-MLSys26 用可靠无序 RDMA write 和计数完成来传分页 KV,避免静态 collective 的限制。它证明的是通信 substrate 和三个特定用例,不是完整 P/D scheduler 的端到端最优性。
  • prefix reuse 会改变传输经济性。 KVCacheInTheWild-ATC25 的生产 trace 显示 ideal hit 约 54%–62%,而非合成 workload 常见的近满复用;global routing 若高估 hit,可能付出远端查找和传输却没有节省 prefill。
  • 分离扩大故障恢复边界。 GhostServe-MLSys26 的 chunk-level KV parity 在共置 TP 中有效,但论文明确没有解决 P/D 后 parity 归属;prefiller、decoder 或 KV store 失败时,系统要决定重算、重传还是恢复。
  • 可观测性必须跨实例。 StriaTrace-OSDI26 已在含 monolithic 和 P/D 部署的生产服务中追踪请求。慢 token 的根因可能在 prefiller queue、传输、decoder、collective 或 host runtime,单实例 profiler 不够。
  • 更多阶段不一定只分成 P 和 D。 TriInfer-MLSys26 把多模态 encode 也变成 first-class stage,在 E+P+D、EP+D、ED+P 等组合之间按 SLO 选择;结果来自所测 MLLM 和历史 trace,拓扑切换的生产成本仍需验证。

设计空间与取舍

  • 共置、完全分离或 hybrid:共置不搬 KV但有阶段干扰;完全分离独立伸缩但网络最重;EcoServe-OSDI26 的 phase hybrid 复制模型、保留本地 KV,以显存换网络。
  • 请求级或 layer/chunk 级传输:整请求协议简单,decoder 等待更久;逐层或逐块可 overlap,产生更多小消息、metadata 和错误状态。
  • 固定或动态池比例:固定配置稳定且易运维;动态 rate matching 能跟随 P:D 变化,却有冷启动、迁移和控制滞后。
  • 直接传输、压缩或重新计算:直接传最简单;压缩省带宽、增加计算与质量风险;重新 prefill 在短上下文或慢网络下可能更便宜。
  • 专用 KV 服务或点对点:共享 cache layer 能复用和统一管理,形成新的故障域与拥塞点;点对点路径短,跨请求复用较弱。
  • 同构或异构硬件:两池同构容易调配备用容量;异构能贴合阶段,但故障替代、模型 kernel 和容量规划更复杂。
  • 单纯 P/D 或更多角色:多模态 encode、MoE expert pool、RL rollout/reward/trainer 都可拆开;每多一条边,就多一组状态版本、backpressure 和重试语义。

引用本概念的论文

P/D serving 与 KV 数据面

  • EcoServe-OSDI26:给出普通 Ethernet 上完全分离的反例,并提出较长 phase 的跨实例错峰方案。
  • NVIDIA-Disagg-Study-MLSys26:系统扫描 P/D parallelism、池比例和 SLO 的设计空间,强调动态 rate matching。
  • LMCache-arXiv25CacheGen-SIGCOMM24fabric-lib-MLSys26:分别提供 KV cache layer、压缩流式传输和多 fabric RDMA 点对点机制。
  • DeepServe-ATC25:在长期运行的 Ascend serverless 平台中,把 P/D-aware 调度、tensor cache 和扩缩容放到同一控制面。
  • TriInfer-MLSys26:把多模态 encode 加入 P/D,并按 workload 选择混合拓扑。
  • GhostServe-MLSys26:揭示分离环境下 KV checkpoint 的 ownership 和跨节点容错仍未解决。

缓存、执行与调度边界

广义分离,不是 P/D 证据

已知局限 / 开放问题

  • 应公开共置、hybrid、完全分离随 context、arrival、KV format 和 network bandwidth 变化的 crossover,而不是只给一个最优配置。
  • 扩缩容、取消、重试和节点故障时,KV、输出 token 和模型版本需要明确唯一 owner;exactly-once 很难只靠 transport 保证。
  • 池比例控制要考虑冷启动和 burst。控制器反应慢时,一侧会排队、另一侧会空闲。
  • 网络成本不只有带宽:小消息率、NIC CPU、collective 竞争、拥塞和 tail 都会放大 TPOT。
  • 多租户 KV cache 涉及权限、清除和侧信道;跨实例复用不能只按性能设计。
  • TCO 评估应包含复制模型的 HBM、KV store、NIC、host DRAM、能耗、备用容量和故障恢复,而不只算 GPU goodput。