Prhub

#1840 Extract future inference engine hooks on generation and eval

原始 PR 作者 fzyzcjy 合并时间 2026-09-04 12:12 文件变更 27 提交数 4 评论 1 代码增减 +116 / -766

执行摘要

提取生成和评估过程中的未来推理引擎钩子,为异步场景做准备。

这个PR值得精读,因为它展示了如何通过提取钩子来解耦核心逻辑,为未来架构演进做准备。设计决策(如将准备逻辑移到单独方法)可借鉴,但注意RDT回滚是临时的,后续PR会重新集成。风险较低,适合快速评审。

讨论亮点

无显著讨论,PR被直接批准(guapisolo approve),没有提供具体评论内容。

实现拆解

  1. 在RolloutManager中提取准备钩子:在 miles/ray/rollout/rollout_manager.py 中新增 prepare_rollout 和 prepare_eval 方法,将健康监控、CI故障注入、仪表盘引擎注册等准备逻辑从 generate 和 eval 方法中移出,使生成和评估方法更专注于数据流。
  2. 调整异步训练流程:在 train_async.py 中,在调用 generate 和评估分发前,先调用 prepare_rollout.remote() 和 prepare_eval.remote(),确保准备逻辑同步执行,避免数据生成与准备逻辑耦合。
  3. 清理RDT相关代码:临时回滚RDT(权重传输)功能,删除 miles/backends/training_utils/weight_update/protocols/rdt.py 和 miles/ray/rollout/sglang_server_actor.py 文件,并修改 miles/backends/sglang_utils/sglang_engine.py 以移除RDT分支逻辑,简化引擎初始化。
  4. 更新测试覆盖:移除RDT相关测试(如 tests/e2e/megatron/test_qwen3_30B_A3B_rdt.py 和 tests/fast/utils/test_arguments.py 中的 TestRdtValidation),并添加新钩子的测试(如 tests/fast/ray/rollout/real_ray/test_rollout_manager.py 中的 TestPrepareRollout),确保重构后的逻辑正确性。
  5. 调整依赖和配置:修改 miles/ray/placement_group.py 和 miles/ray/train/actor_factory.py,移除RDT相关的GPU分配和并发控制逻辑,统一为标准配置。
文件 模块 状态 重要度
miles/ray/rollout/rollout_manager.py Rollout 管理器 modified 7.55
miles/backends/sglang_utils/sglang_engine.py SGLang 引擎 modified 7.96
miles/ray/rollout/sglang_server_actor.py SGLang 服务器 removed 7.96
miles/backends/training_utils/weight_update/protocols/rdt.py RDT 协议 removed 9.28
tests/e2e/megatron/test_qwen3_30B_A3B_rdt.py RDT 测试 removed 6.82

关键符号

prepare_rollout prepare_eval generate eval _init_normal

关键源码片段

miles/ray/rollout/rollout_manager.py core-logic

核心变更文件,新增 prepare_rollout 和 prepare_eval 钩子,将准备逻辑与生成 / 评估解耦,是重构的关键入口。

# RolloutManager 中新增的准备钩子,用于在数据生成和评估前执行健康监控、CI 故障注入等逻辑
# 这些钩子与生成 / 评估解耦,支持未来的异步推理引擎集成
def prepare_rollout(self, rollout_id):
    self.rollout_id = rollout_id
    self._health_monitoring_resume()
    if self.args.ci_test and self._rollout_ft_enabled and rollout_id >= 2:
        self._try_ci_fault_injection()
    dashboard_hooks.register_engines(self.servers)
​
def prepare_eval(self):
    self._health_monitoring_resume()

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

  1. RDT回滚风险:移除RDT代码(如 rdt.py 和 sglang_server_actor.py)可能影响未来重新集成RDT,但PR说明是临时回滚,为重构链条清理道路。
  2. 初始化顺序变更:在 rollout_manager.py 中调整了 init_http_client 和 start_session_server 的顺序(先启动服务器再初始化客户端),可能引入微妙的依赖问题,但测试覆盖了核心路径。
  3. 测试覆盖缺口:删除了RDT相关测试,但新增了钩子测试,整体测试覆盖可能保持平衡。
  4. 兼容性影响:修改了 miles/utils/arguments.py 中的验证逻辑,移除了RDT特定参数验证,可能影响现有配置,但与其他PR协调进行。
  1. 用户影响:直接用户影响较小,主要涉及内部代码重构,不改变功能接口。
  2. 系统影响:为系统引入了更清晰的职责分离,准备逻辑独立于数据生成,为未来异步推理引擎和多训练器架构铺路。
  3. 团队影响:代码结构更易于维护和扩展,重构链条(如#1842、#1843)逐步实现,但需要团队协作确保平滑过渡。
RDT 回滚可能影响未来集成 初始化顺序变更 测试覆盖调整

关联 Issue

#1837 Tracking issue for refactoring and enhancements

完整报告

参与讨论