Prhub

#20908 fix(PD): respect pause_generation in disagg event loops

原始 PR 作者 lawrence-harmonic 合并时间 2026-04-13 09:07 文件变更 3 提交数 2 评论 7 代码增减 +107 / -2

执行摘要

修复 disaggregation 事件循环中 pause_generation 失效的 bug,确保调度器暂停时生成停止。

修复 issue #20906,该 issue 指出在 disaggregation 事件循环(decode.py 和 prefill.py)中没有 self._engine_paused 检查,导致生成不会在调用 /pause_generation 时暂停。PR body 中明确说明动机为 'Fix #20906'。

该 PR 值得精读,特别是对于涉及调度和 disaggregation 模块的工程师。关注点包括:如何在事件循环中优雅地处理暂停状态,以及确保队列处理在暂停时继续的设计决策。

讨论亮点

review 中的主要讨论是测试文件的放置策略。reviewer hnyls2002 要求 'Do not add new E2E test files. Just put the pause generation test inside test_disaggregation_basic.' 作者遵守了这个要求,将测试集成到现有测试文件中,而不是创建新文件。这反映了团队对测试组织的一致性和维护性的重视。没有其他深入技术讨论。

实现拆解

实现方案包括三个关键改动点:

1) 在解码事件循环(decode.py 的 event_loop_normal_disagg_decode 和 event_loop_overlap_disagg_decode)中添加 if self._engine_paused: continue,以跳过批次运行当引擎暂停时;
2) 在预填充事件循环(prefill.py 的 event_loop_normal_disagg_prefill 和 event_loop_overlap_disagg_prefill)中添加类似检查,并调用 self.process_disagg_prefill_inflight_queue() 以确保 bootstrap 和 transfer 队列的处理在暂停时仍能完成;
3) 在 test_disaggregation_basic.py 中添加回归测试 test_pause_resume_in_place,验证暂停功能在 disaggregation 场景下的有效性。

文件 模块 状态 重要度
python/sglang/srt/disaggregation/decode.py disaggregation modified 8.0
python/sglang/srt/disaggregation/prefill.py disaggregation modified 8.0
test/registered/disaggregation/test_disaggregation_basic.py test modified 6.0

关键符号

event_loop_normal_disagg_decode event_loop_overlap_disagg_decode event_loop_normal_disagg_prefill event_loop_overlap_disagg_prefill test_pause_resume_in_place

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

测试文件放置策略 测试

reviewer hnyls2002 要求不要添加新的 E2E 测试文件,而是将暂停生成测试集成到现有的 test_disaggregation_basic.py 中。

结论:作者遵守了要求,修改了测试文件,而不是创建新文件,确保测试组织的一致性。 · 已解决

风险与影响

技术风险较低:

1) 改动是添加简单的条件检查,逻辑直接,回归风险小;
2) 在 prefill.py 中添加的 self.process_disagg_prefill_inflight_queue() 调用可能在暂停时引入轻微性能开销,但这是确保队列处理完成的必要设计;
3) 修改调度循环可能意外影响其他功能,但回归测试覆盖了基本场景,且改动范围小。兼容性风险低,因为只是修复现有 bug。

对用户:pause_generation 功能在 disaggregation 部署中现在正常工作,提高了系统的可控制性和调试能力。对系统:修复了调度器在暂停状态下的行为,确保生成停止,避免资源浪费。对团队:增加了回归测试,提升了代码质量,并为未来相关功能(如调度控制)提供测试基础。影响范围限于 disaggregation 模块。

核心路径变更 队列处理逻辑修改

关联 Issue

#20906 [Bug] disagg event loops do not respect /pause_generation

完整报告

参与讨论