1. 这篇论文为什么值得认真读
先给一句结论:
DistServe 的价值在于:它把大模型服务里最痛的“延迟-成本矛盾”从调度层面硬扛,升级成“架构层面解耦”,然后再用算法做资源与并行策略的联合优化。
很多服务系统论文会给你“吞吐更高”的漂亮数字,但实际线上产品最在意的是:
- 用户是否足够快看到首个 token(TTFT)?
- 后续生成是否足够流畅(TPOT)?
- 在满足服务质量(SLO)的前提下,每块 GPU 的产出值不值?
DistServe 不是只追求 token/s,而是明确优化 goodput(满足 SLO 约束下的单位 GPU 可服务请求率)。这点非常“工程真相”。
论文报告的核心收益是:
- 相比主流方案,最高 7.4× 请求率提升;
- 或在同样请求率下,实现 12.6× 更严格 SLO;
- 且 >90% 请求满足延迟约束。
这是“性能数字 + 用户体验 + 成本效率”三者同时进步,而不是单指标提升。
2. 给“零基础读者”的前置知识
这一节我会从最基础的系统直觉开始讲起。
2.1 什么是大模型在线服务
当你在聊天助手里提问,后台并不是“直接跑一个函数然后秒出答案”。
真实系统要做很多事:
- 接收请求,
- 把请求排队、分批,
- 调度 GPU,
- 执行推理,
- 把生成内容流式返回,
- 同时保证延迟和成本别失控。
所以 LLM serving 本质是“模型计算 + 分布式系统 + 调度优化”的组合题。
2.2 Prefill 和 Decoding 到底在做什么
自回归生成通常分两段:
- Prefill 阶段:先把整段输入提示词吃进去,算出首个输出 token。
- Decoding 阶段:后续 token 一个一个往外生成。
生活化比喻:
- prefill 像“做菜前备菜、起锅、下第一铲”;
- decoding 像“后续一盘盘持续出菜”。
两段流程连续,但计算形态很不一样。
2.3 TTFT、TPOT、SLO、SLO 达标率
论文关心两个核心延迟指标:
- TTFT(Time To First Token):从请求发出到看到第一个 token 的时间。
- TPOT(Time Per Output Token):首 token 之后,每个输出 token 的平均生成时间。
再往上是服务目标:
- SLO:例如 TTFT ≤ 0.25s、TPOT ≤ 0.1s。
- SLO attainment:满足 SLO 的请求比例(例如要 ≥90%)。
如果系统“平均很快”但尾部很慢,SLO 达标率会很难看,用户体验也会变差。
2.4 Throughput 与 Goodput 的区别
很多人容易混:
- Throughput:每秒处理了多少 token 或请求。
- Goodput(本文定义):在 SLO 达标率目标下,每块 GPU 能承载的最大请求率。
你可以 throughput 很高,但一半请求都超时,那对产品几乎没意义。
DistServe 选择优化 goodput,是非常务实的方向。
2.5 GPU 上的“算力瓶颈”与“带宽瓶颈”
GPU 性能瓶颈常见两类:
- 算不过来(compute-bound),
- 数据搬运不过来(memory-bandwidth-bound)。
在 LLM 推理里:
- prefill(尤其长输入)常偏算力密集,
- decoding(每步一个 token)常偏带宽密集。
这意味着它们在同一资源池共存时,容易互相拖累。
2.6 批处理与排队:为什么延迟会突然恶化
批处理能提升利用率,但不同“作业长度”的任务混在一起时,排队延迟会迅速上升。
特别是“长 prefill + 短 decode”混批时,decode 会被长任务卡住,TPOT 被抬高。
DistServe 在论文中用排队模型(M/D/1 思路)解释了这种现象,不是拍脑袋结论。
2.7 Intra-op / Inter-op 并行是什么
- Intra-op 并行(可理解为张量并行风格):把一个算子拆到多卡并行,单步更快,但通信开销高。
- Inter-op 并行(可理解为流水并行风格):按层分 stage 形成流水,吞吐扩展好,但会有流水气泡和协同成本。
关键点:prefill 与 decoding 的最优并行策略往往不同。
2.8 NVLINK 与跨节点网络为什么决定系统设计
Prefill 与 decoding 解耦后,需要传 KV cache。传输开销受网络拓扑强烈影响:
- 同节点 NVLINK:很快;
- 跨节点网络:可能明显慢(论文实验里是 25Gbps)。
所以 DistServe 不是“只讲算法”,还专门做了网络感知的放置策略。
3. DistServe 试图解决的核心矛盾
现有系统(如 vLLM、DeepSpeed-MII)常把 prefill 和 decoding 放在同一批 GPU 上协同调度。论文指出这会导致两个根本问题:
- Prefill-Decoding 干扰(interference)
- prefill 常比 decode step 慢很多,混在一起时会拖慢 decode。
- decode 也会给 prefill 增压。
- 资源与并行策略耦合(coupling)
- 两个阶段被迫共享同一套资源配置和并行策略,无法各自最优。
图 1 给了非常直观的证据:
- 13B 模型、给定工作负载下,现有系统单卡 goodput 约 1.6 rps;
- 若只做 prefill,可到 5.6 rps;
- 若只做 decoding,可到 10 rps;
- 理想解耦后(如 2 卡 prefill + 1 卡 decode)总体效率显著更高。
这不是“微调调度参数”能彻底解决的问题,而是架构层面的冲突。
4. 关键洞察:Prefill 与 Decoding 不应被强行绑在一起
DistServe 的核心思想很简单也很硬核:
把 prefill 与 decoding 分配到不同 GPU 实例上,分别优化 TTFT 与 TPOT。
这样做有两大直接收益:
- 消除直接计算干扰;
- 让两阶段各自选择更适合自己的资源和并行策略。
代价是需要在两阶段之间传 KV cache。
论文并不回避这个代价,而是把它纳入 placement 优化问题,并在实验中证明:只要放置合理,传输成本远小于解耦收益。
5. DistServe 的系统架构与请求生命周期
结合论文图 6:
- 请求进入中心控制器;
- 控制器把请求派发给队列较短的 prefill 实例;
- prefill 完成首 token 计算并产出 KV cache;
- decoding 实例拉取 KV cache,继续逐 token 生成;
- 输出回传给用户。
几个关键工程点:
- DistServe 不是重写整个推理引擎,而是“编排层 + 并行执行引擎”组合;
- 支持跨实例 KV 流转;
- 使用 pull 式 KV 传输应对突发流量,避免 decode 端内存被突发写爆。
这类细节很重要,因为真正上线时,稳定性和尾延迟常由这些“看起来不起眼”的机制决定。
6. 论文中的权衡分析(Tradeoff Analysis)
6.1 Prefill 实例分析
6.1.1 批处理策略
图 3(a) 的核心观察:
- 当输入足够长时,prefill 在很小 batch 下就能把 GPU 算力吃满;
- 继续加 batch 并不能显著提效,反而会增加等待和 TTFT。
论文定义了阈值 (L_m):输入长度超过 (L_m) 后,prefill 进入“近似算力饱和”。
调度上就应避免盲目堆 batch。
6.1.2 排队模型与并行选择
论文给了简化模型,帮助理解并行策略为什么会在不同负载下出现优劣反转。
单设备下平均 TTFT 近似:
其中 (D) 是执行时间,(R) 是到达率。
再引入两种并行后(论文 Eq.2/Eq.3),得到结论:
- 低到达率下,intra-op 可能更好(执行时间下降);
- 高到达率下,inter-op 常更好(排队与扩展性优势)。
图 4 的实验与推导一致,这种“理论-实验一致性”是论文可信度的加分项。
6.2 Decoding 实例分析
Decoding 的关键特点是“单步带宽受限”,因此非常依赖批处理来提升利用率。
图 3(b)、图 5 显示:
- batch 变大时吞吐显著提升;
- intra-op 可以降延迟但收益递减;
- inter-op 在一定条件下近线性扩吞吐。
此外,decoding 需要长期持有活跃请求 KV cache,受显存容量约束明显。
所以论文在解耦后允许“一个 decoding 实例对应多个 prefill 实例”,从而更容易聚出较大 decode batch,提高整体 goodput。
6.3 工程落地中的现实问题
变长输入引发流水气泡
真实请求长度不均匀会导致 pipeline stage 不平衡。论文在运行期通过分批策略尽量让每批“有效 token 量”靠近目标值,减少气泡。
KV 传输压力
论文举例:OPT-66B、512 token 请求的 KV cache 约 1.13GB。
若 10 rps,则约 11.3GB/s(约 90Gbps)传输需求。
这解释了为什么 placement 必须网络感知,而不是仅按算力放置。
集群拓扑限制
当跨节点带宽不足时,必须尽量把相关 stage 放在同节点走 NVLINK,DistServe 的 low node-affinity 算法就是为此设计。
7. 方法部分:Placement 优化算法
目标函数很明确:
在给定模型、负载分布、SLO 与达标率目标下,找到使 per-GPU goodput 最大的放置方案。
7.1 高节点亲和场景(Algorithm 1)
假设跨节点网络足够快,KV 传输约束较弱。
流程:
- 枚举 prefill 并行配置并模拟;
- 二分搜索满足 SLO 达标率的最大请求率;
- decoding 做同样流程;
- 按目标流量做实例复制。
论文给出复杂度 (O(NM^2))((M) 常见为每节点 8 卡),可接受。
7.2 低节点亲和场景(Algorithm 2)
假设跨节点带宽较弱(实验就是这类)。
关键做法:
- 用 inter-op 分 stage;
- 将 prefill 与 decoding 的对应 stage 尽量同节点 colocate;
- 让 KV 传输主要走 NVLINK。
该算法多了约束,但能显著降低传输对尾延迟的冲击。
7.3 为什么要做模拟器(Simulator)
现实中不可能把所有并行与放置组合都在真机跑一遍。
DistServe 通过延迟模型 + 离散事件模拟估算 SLO 达标率,再做搜索。
附录 A 给了建模思路(prefill 与 decode 的主要计算/访存项分解)。
Table 2 显示模拟结果与真机误差 <2%,说明该模拟器在论文场景下是实用的。
7.4 在线调度与运行期优化
论文不止有“离线规划”,还补上了运行期优化:
- FCFS 基础调度;
- 通过 token 预算减小 pipeline bubbles;
- pull 式 KV 传输对抗突发;
- 周期性重规划(replan)应对负载漂移;
- 讨论了 preemption 与故障容错作为后续方向。
8. 实现细节
论文实现量级:
- placement + 前端 + 编排层:约 6.5K 行 Python;
- 并行执行引擎:约 8.1K 行 C++/CUDA。
组件上:
- OpenAI API 兼容前端;
- NCCL 跨节点通信;
- 节点内异步 CudaMemcpy;
- Ray actor 管理执行 worker;
- 集成 continuous batching、FlashAttention、PagedAttention 等优化。
这说明论文原型不是“玩具实现”,具备相当工程完整度。
9. 实验设置
9.1 集群与硬件
- 4 节点共 32 卡;
- 每节点 8×A100-80GB(NVLINK 互联);
- 跨节点带宽 25Gbps。
9.2 模型
OPT-13B、OPT-66B、OPT-175B,均 FP16。
作者故意选经典 MHA 架构(非 GQA/MQA),让 KV 传输压力更大,验证更保守。
9.3 工作负载与应用(Table 1)
- Chatbot(ShareGPT):
- 13B: TTFT 0.25s, TPOT 0.1s
- 66B: TTFT 2.5s, TPOT 0.15s
- 175B: TTFT 4.0s, TPOT 0.2s
- Code completion(HumanEval):TTFT 0.125s, TPOT 0.2s
- Summarization(LongBench):TTFT 15s, TPOT 0.15s
9.4 对比基线
- vLLM
- DeepSpeed-MII(含 chunked prefill 思路)
主指标:SLO 达标率曲线,关注 90% 目标下可承载请求率和可承受最严 SLO。
10. 结果解读(含图表证据)
10.1 Chatbot 场景
图 8 给出核心结论:
- DistServe 相比 vLLM,可承载请求率提升 2.0×–4.6×;
- 相比 DeepSpeed-MII,提升 1.6×–7.4×;
- 相比 vLLM,能承受 1.8×–3.2× 更严格 SLO。
原因剖析:
- chatbot 对 TPOT 很敏感;
- colocation 下长 prefill 对 decode 拖累严重;
- DistServe 解耦后可单独优化 decode,TPOT 违规大幅减少。
论文还举了 175B 场景的并行配置示例,prefill 与 decoding 的最优配置不同,说明“自动搜索”是刚需,不是可有可无。
10.2 代码补全场景
图 9(a):
- DistServe vs vLLM:请求率 5.7×;
- DistServe vs DeepSpeed-MII:请求率 1.6×;
- SLO 严格度约 1.4× 提升。
代码补全是极低 TTFT 需求场景,DistServe 的 prefill 优化收益会被放大。
10.3 文档摘要场景
图 9(b):
- DistServe vs vLLM:请求率 4.3×;
- DistServe vs DeepSpeed-MII:请求率 1.8×;
- DistServe 可承受 SLO 严格度比 vLLM 高 12.6×(非常显著),比 MII 高 2.6×。
摘要任务常有长输入,对 prefill 压力巨大。colocation 会把这种压力外溢到 decode,DistServe 的阶段隔离优势在此非常明显。
10.4 延迟拆解:KV 传输是否拖后腿
图 10 给出关键证据(OPT-175B + ShareGPT):
- KV 传输在总延迟中占比 <0.1%;
- 超过 95% 请求传输延迟 <30ms。
这说明 DistServe 的网络感知放置策略有效,通信并没有成为主要瓶颈。
10.5 消融实验与模拟器准确性
Table 2:模拟器与真机 SLO 达标率误差都很小(<2%)。
图 11:
- 只给 vLLM 加并行搜索(vLLM++)收益很有限;
- 真正决定性提升来自“prefill/decoding 解耦”;
- 在高带宽跨节点假设下,DistServe 还能进一步提升。
10.6 算法运行时间
图 12 显示 placement 算法运行在秒到分钟级,最大场景约 1.3 分钟量级,可用于周期性重规划。
对于生产系统,这是可接受开销。
11. 我对这篇论文的技术判断
我给 DistServe 的总体评价是:工程价值非常高,且研究思路扎实。
理由有五点:
- 目标对(goodput + SLO 达标),不是“只卷吞吐数字”;
- 诊断准(干扰 + 耦合),不是“调参式补丁”;
- 方法完整(分析 + 算法 + 运行期机制);
- 证据充分(多模型、多场景、含消融与误差校验);
- 落地意识强(网络拓扑、传输策略、重规划)。
在 LLM serving 领域,这种“从问题定义到部署细节都闭环”的工作并不多见。
12. 局限性与边界条件
论文也诚实讨论了适用边界,我补充成更工程化的版本。
12.1 非延迟敏感场景
如果业务主要看离线吞吐,不强调 TTFT/TPOT,DistServe 的复杂度收益比可能下降。
12.2 极小规模资源环境
只有 1–2 张卡时,可选并行/放置空间太小,解耦收益可能不如系统复杂度带来的维护成本。
12.3 对负载统计稳定性的依赖
placement 依赖负载分布估计。若业务突发变化剧烈且频繁,规划结果可能过时,需要更激进的在线自适应。
12.4 运行期策略仍可更强
当前 FCFS 可能出现 convoy effect;抢占与故障恢复机制仍有改进空间。
12.5 网络条件极差时的风险
如果节点内外都缺乏高带宽,KV 传输可能重新成为瓶颈,解耦收益会被侵蚀。
13. 复现与工程落地清单
如果你要在公司里复现 DistServe 思路,我建议按这个顺序推进。
13.1 先做诊断
- 采集 TTFT/TPOT 的 P50/P90/P99;
- 统计 prefill/decode 队列等待占比;
- 估算 KV 大小分布与传输带宽需求;
- 定位目前最大 SLO 违规来源。
13.2 再做规划
- 建立简单但可校验的延迟模型;
- 用仿真替代全量真机穷举;
- 搜索 prefill/decode 并行配置;
- 决定实例复制比例以满足目标流量。
13.3 最后做运行期策略
- 采用分阶段队列与调度;
- 实现 pull 式 KV;
- 加入负载漂移检测与周期重规划;
- 加入容量水位、退化策略和告警。
13.4 关键监控指标
至少要持续监控:
- TTFT/TPOT 分位数,
- SLO 达标率,
- 每 GPU goodput,
- 分阶段队列长度与等待时间,
- KV 传输延迟分布,
- 重规划频率与生效收益。
14. 如果明天要上线 LLM 服务,我会怎么用这篇论文
14.1 什么时候优先采用 DistServe 思路
- 你有明确 TTFT + TPOT 双 SLO;
- 你已经观测到 prefill/decode 互相拖慢;
- 你关心每张 GPU 的成本产出;
- 你的集群至少有较好的节点内带宽。
14.2 什么时候先不采用
- 业务是离线批处理、延迟不敏感;
- 集群规模太小;
- 网络条件不足且短期不可改善。
14.3 实施路径建议
- 先在一个高价值模型上灰度试点;
- 验证 SLO 达标率与成本收益;
- 再扩展到多模型、多应用调度;
- 最后完善抢占、故障隔离与自动回滚。
15. 总结
DistServe 的关键贡献不只是“把 prefill 和 decode 分开”这么一句口号,而是:
- 先证明现有架构的干扰与耦合问题确实存在且严重;
- 再给出可执行的、网络感知的放置算法;
- 再用系统实现和端到端实验证明收益真实可落地。
一句话收尾:
在强调服务质量(TTFT/TPOT)与成本效率(per-GPU goodput)的 LLM 线上服务里,DistServe 提供了非常值得借鉴的架构基线。
16. 参考文献
- Yinmin Zhong, Shengyu Liu, Junda Chen, Jianbo Hu, Yibo Zhu, Xuanzhe Liu, Xin Jin, Hao Zhang. DistServe: Disaggregating Prefill and Decoding for Goodput-optimized Large Language Model Serving. OSDI 2024. arXiv:2401.09670.
- Woosuk Kwon et al. Efficient Memory Management for Large Language Model Serving with PagedAttention (vLLM). SOSP 2023.
- Amey Agrawal et al. Sarathi: Efficient LLM Inference by Piggybacking Decodes with Chunked Prefills. arXiv 2023.
- Bingyang Wu et al. Fast Distributed Inference Serving for Large Language Models (FastServe). arXiv 2023.
- Zhuohan Li et al. AlpaServe: Statistical Multiplexing with Model Parallelism for Deep Learning Serving. arXiv 2023.
- Pratyush Patel et al. Splitwise: Efficient Generative LLM Inference using Phase Splitting. arXiv 2023.
评审写于 2026-04-09。