1/6

SGLang 速懂:为什么要把 Prefill 和 Decode 分开跑

六张图看懂 SGLang PD Disaggregation 的请求流、最小部署和适用边界,带你从启动参数走到对照实验。

SGLang 的 PD Disaggregation,可以先记成一句话:让 Prefill 和 Decode 分开占 GPU。
Prefill 处理完整输入,偏计算密集;Decode 反复读取 KV Cache,偏内存密集。SGLang 官方文档把两者拆成 prefill-only server 和 decode-only server,再用 Router 接起来。1
为什么要拆?长输入进入同一个调度池时,可能打断正在生成的 Decode batch;两阶段对 GPU 并行策略的偏好也不一样。DistServe 的实验把它概括为两个问题:prefill-decoding interference,以及资源与并行策略耦合。2
图 3 的队列名来自 SGLang 当前实现:Prefill 侧经过 Bootstrap、Waiting、Inflight,Decode 侧经过 Prealloc、Transfer、Waiting、Running。两侧真正要跨实例传的是 KV Cache,Router 负责配对和转发,最终合并结果后流式返回。3 4 5
最小部署有三个角色:
  • Prefill:--disaggregation-mode prefill
  • Decode:--disaggregation-mode decode
  • Router:--pd-disaggregation --prefill <PREFILL_URL> --decode <DECODE_URL>
官方文档中的默认 transfer backend 是 Mooncake,也支持 NIXL;bootstrap 端口默认值是 8998。具体模型路径、TP、GPU 数量和网络设备,仍要按你的机器补齐。6
拆开以后,调优重点会转向 KV Cache 的传输。可以先记录 SGLANG_DISAGGREGATION_QUEUE_SIZE=4SGLANG_DISAGGREGATION_BOOTSTRAP_TIMEOUT=300SGLANG_DISAGGREGATION_WAITING_TIMEOUT=300,再观察传输是否堆积。异构 TP 还要额外检查 staging buffer 的模型和 chunked-prefill 限制,MLA 模型不要直接照搬这条路径。1
最后,PD 分离不是「开了就更快」。TaiChi 的结论是:TTFT 很紧、TPOT 较松时,合置可能更合适;TPOT 很紧、TTFT 较松时,分离更有优势。另一项研究也指出,低负载、缺少高速 KV 通道,或同时把两种 SLO 都压得很紧时,分离未必占优。7 8
实践顺序可以很朴素:先明确自己要压 TTFT 还是 TPOT,再测 P 到 D 的 KV 传输,最后决定 GPU 怎么分。不要先把 1P1D 当成答案。
继续查:

相似内容

评论

登录后可发表评论。