跳到主要内容
返回时间线
arXiv来源发表:

FluidPD 在 SGLang 上实现原地 P/D 弹性:Azure 轨迹上 SLO 达成率最高提升 94.6 个百分点,且不增加 GPU

核心概要

作者提出 FluidPD,一个在 SGLang 上实现的预填充-解码(P/D)分离式 LLM 服务系统,通过 FluidToken 将部分预填充后缀卸载到有空闲的解码 worker、并通过 FluidRole 在不重载模型的前提下原地切换 worker 角色,在 Azure 轨迹构造的 staged 与 mixed 负载上,相比静态 SGLang 将整体 SLO 达成率最高提升 94.6 个百分点,相比 Dynamo 自动扩缩容最高提升 88.3 个百分点且使用更少 GPU。

Source-provided article image: FluidPD: In-Place Elasticity for SLO-Aware Prefill-Decode Disaggregated LLM Serving
Fig. 1 ·

Fig. 1 : Time-varying input/output ratios in Azure workloads.

arXiv

深度剖析

静态 P/D 划分在短时突发和持续需求偏移下都会损失 SLO 达成率,即使总容量充足。 论文用受控实验把 SLO 损失归因于 P/D 失衡而非容量不足:在 Azure (staged) 上,4P4D 在 Azure-conversation 达 86.93% 而在 Azure-code 仅 3.40%,6P2D 在 Azure-code 达 99.40% 而在 Azure-conversation 仅 6.64%,而逐窗口选择不同 P/D 比例的 oracle 表现良好。 Llama-3.1-8B、8×A100-80GB、恒定 40 RPS 泊松到达、TTFT/TPOT SLO 为 2000ms/100ms 的对比实验,覆盖 4P4D、5P3D、6P2D 三种静态配置。

FluidToken 通过 SLO 感知的 token 级工作窃取,把预填充请求的有界后缀交给配对的解码 worker 执行,从而在不改变 worker 角色的前提下缓解瞬时预填充压力。 该机制沿请求已有的 P/D 执行流做部分预填充交接,复用 SGLang 的异步 KV 传输路径,并借助预测性的 Prefill Pressure Index(PPI)与 Decode Pressure Index(DPI)在 SLO 违规发生前决策;论文指出既有系统只在 worker 或 serving-group 粒度调整容量,未利用 token 级窃取应对短时相位压力。 设计层面给出窃取感知的 TTFT 约束、解码侧窃取预算与贪心求解过程;消融实验显示在 Azure (mixed) 上 FluidToken 单独贡献更大,完整 FluidPD 在两个负载上均最优。

FluidRole 通过原地、双向的角色切换在运行中的部署内重新平衡 P/D worker 比例,避免模型重载与引擎重启。 角色切换状态机(Active→Drain→Switch→Active)保留模型放置与并行配置,复用已有模型并行通信组,仅在首次切入解码角色时捕获 CUDA 图;论文报告 PD 切换约 1 秒、DP 切换最多 12 秒,且不丢弃已接纳请求。 在 Azure (staged) 上观察到 4P4D→5P3D 的切换使 p95 TTFT 在负载回到 Azure-conversation 后恢复到 SLO 以下;消融实验显示 FluidRole 在 staged 负载上单独贡献更大。

在相同 GPU 分配下,原地 P/D 弹性比静态部署和自动扩缩容都更能维持 SLO。 FluidPD 相比静态 SGLang 在 Azure (staged) 上最高提升 94.6 个百分点、在 Azure (mixed) 上最高提升 74.3 个百分点;在与 Dynamo 的对比中,两者同从 6-GPU 3P3D 起步,FluidPD 不超出 6 块 GPU,而 Dynamo 可扩到 8 块,20 RPS 时 FluidPD 在 mixed 上达 97.6%、Dynamo 为 9.3%,在 staged 上为 92.6% 对 5.2%。 覆盖 Llama-3.1-8B、Qwen3-14B、Qwen3-30B-A3B 三种模型,基线包括 SGLang v0.5.4、vLLM v0.26.0、Dynamo v1.3.0,全部使用轮询路由;论文也报告在最高负载下 FluidPD 的 TPOT 达成率略有下降。

启示与展望

该工作面向采用 P/D 分离架构、且总容量充足但相位分配不当的 LLM 服务部署,适用于短时突发与持续需求偏移两类负载;其收益在低到中等负载下最大,因为此时部署仍有可用余量。方法以 SGLang v0.5.4 的分离式运行时为实现基础,保留其预填充调度、解码侧 KV 预分配、异步 KV 传输与 CUDA 图执行流程,因此最直接的适用对象是同类引擎与具备 NVLink 互联的多 GPU 单机环境。对希望在不增加 GPU 的前提下改善 TTFT 主导的 SLO 违规、并愿意为每个模型与硬件配置做离线延迟校准的工程团队,这套机制提供了可复现的起点;当两个相位同时出现持续压力时,论文建议转向集群级准入控制或自动扩缩容。

预测器目前依赖离线校准,论文将基于观测执行时间的在线重校准列为自然扩展,因此运行时变化与负载漂移下的表现仍是开放问题。FluidRole 的 DP 切换耗时取决于切换时最长活跃解码序列的剩余输出长度,论文报告最多约 12 秒,这一开销在输出长度分布更极端时如何变化值得关注。论文报告在最高负载下 FluidPD 的 TPOT 达成率略有下降,因为被窃取的预填充工作会干扰解码迭代,说明窃取预算与饱和点附近的交互仍有调优空间。此外,评估使用两个从 Azure 轨迹构造的代表性负载而非完整 168 小时轨迹,且未与 TaiChi、TokenScale、Libra 直接对比,因为评估时没有公开实现;这些对比留待后续工作。

来源