Skip to content

P/D 分离 ​

预填充和解码是两种负载,为什么塞在一组卡上?​分开部署,各自最优。

为什么分开 ​

Chunked Prefill 在时间维调和了 prefill 与 decode,但物理上仍共享资源,配比被焊死。两者的画像截然不同:

维度PrefillDecode
负载类型计算受限带宽受限
并行策略偏好大 TP(吃算力,通信可摊薄)小 TP 或 EP(通信敏感)
KV Cache一次性写满持续增长读取
扩展维度加卡线性降 TTFT加卡线性提吞吐

Splitwise 与 DistServe 独立证明了同一件事​:分开后,各自用最优配置,双 SLO(TTFT/TPOT)同时达成,goodput 提升可达 2 倍以上,且故障域隔离(decode 不被 prefill 的长尾拖死)。

架构与 KV 传输 ​

分离引入新组件:​KV 传输层​。prefill 完成的 KV 要搬到 decode 实例:

flowchart LR
    U["用户请求"] --> P["Prefill 池<br/>(大 TP、算力优先)"]
    P -- "KV 传输<br/>(RDMA/IB/NVLink)" --> D["Decode 池<br/>(小 TP、带宽优先)"]
    D -- "流式输出" --> U
    C["KV Cache 池<br/>(前缀缓存共享)"] -.复用.-> P
    C -.复用.-> D

传输代价(集合通信篇模型):Mkv=2Lnkvdheadsb⋅bytes 走 IB 50 GB/s 时,8K token 的 7B 模型 KV(约 1 GB)需 20 ms——相对数秒的 decode 生命周期可接受,但传输时间是分离架构的新的一等公民约束​,也解释了为什么 P/D 分离优先在同超节点内做(NVLink 域传输近免费,超节点篇)。

配比与调度 ​

  • 静态配比​:按流量画像定 P:D 卡数比(RAG 重 prefill → P 多;长输出 → D 多);
  • 动态调度​(DistServe 的 goodput 目标):按实时 TTFT/TPOT 违约率调整两池规模与请求路由;
  • 与前缀缓存合体​:Mooncake 把 KV 集中池化(CPU 内存池 + RDMA),prefill 池按"缓存命中优先"调度,命中率直接省算力——​P/D 分离 + KV 池化 + 前缀缓存是现代 serving 三件套​。
深入推导:goodput 目标函数与分离的收益边界

goodput​(DistServe 定义):同时满足 TTFT/TPOT SLO 的有效吞吐 goodput(r)。单卡混合部署的资源被两种负载撕扯:prefill 想要大块迭代(降 TTFT)、decode 要小迭代(保 TPOT),chunked prefill 的块预算是妥协点。分离后各池独立满足:

TTFT:spc⋅Cprefillpool≤D1,TPOT:Mkvβhbm+sΨΨ/bβhbm≤D2

两个约束在不同池内分别可解,不再互为约束——​这就是分离带来的可行域扩大​。

收益边界​。分离不是免费的:KV 传输时间 Mkv/βnet 直接加进 TTFT(prefill 完到 decode 开工);若 βnet 太小或 s 太长,传输吃掉分离收益。临界条件近似:Mkv/βnet≪TTFT 节省+TPOT 稳定性收益。这也给出部署指引:​超节点内分离(NVLink/UB,近零成本)优先,跨机分离要 IB 级带宽​;KV 池化(Mooncake)则把传输从"点对点搬运"变成"池化共享",进一步摊薄。

配比推导​。设到达率 λ、平均 prefill 算力 wp、decode 占用时长 wd:稳态下 Np:Nd=λwp:λT¯dwd′(w 为各池单位占用),流量画像直接给出卡数比——RAG 重 prefill 的 P:D 可到 1:1,纯 chat 约 1:2~1:3。

(据 Zhong et al. 2024、Patel et al. 2024、Qin et al. 2024。)

思考题 ​

  1. 为什么 prefill 池偏好大 TP 而 decode 池偏好小 TP/EP?
  2. 32K 长上下文、跨机分离(IB 50 GB/s):KV 传输要多久?这决定了什么?
  3. P/D 分离、chunked prefill、前缀缓存三个优化能叠加吗?各自解决什么?
参考答案
  1. prefill 是计算受限:大 TP 摊薄权重读取、拉满算力利用率,通信虽重但单次 prefill 计算量大可掩盖;decode 是带宽受限、通信敏感(张量并行篇:decode 的通信/计算比恶劣),小 TP 减少每 token 通信频次。
  2. 7B/GQA:Mkv≈2×32×8×128×32768×2B≈4.3 GB,IB 传输约 86 ms——是 TTFT 的显著增量;这决定"分离优先域内、跨机必须算清传输账",以及长上下文更倾向 KV 池化 + 本地 decode。
  3. 可叠加且互补:chunked prefill 管时间维(同卡调度)、P/D 管空间维(分池部署)、前缀缓存管重复计算(命中省 prefill)。生产三件套(Mooncake 架构)同时启用,缓存池还是 P/D 之间 KV 的中转站。

小结 ​

  • P/D 分离让两种负载各自最优配比与调度,双 SLO 同时达成,goodput 2 倍以上。
  • KV 传输是新增的一等约束,决定了分离优先在超节点内、跨机需高带宽或池化。
  • 与前缀缓存、KV 池化天然组合,构成现代 serving 的三件套。
  • 配比由流量画像显式推导,不是玄学。

参考资料 ​

最近更新