Prhub

#1844 Rename RolloutExecutor.generate to get for future async and multi trainer scenarios

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

执行摘要

将 RolloutExecutor.generate 方法重命名为 get,以准确反映其职责。

该变更属于 Issue #1837 跟踪的重构与增强任务之一。commit 消息明确指出重命名的目的:“The executor hands over data the rollout already produced; it does not itself generate. Matches the naming in the target design.”(执行器移交 rollout 已经生成的数据;它自身并不生成数据。与目标设计中的命名保持一致。)

对于关注系统架构演进或参与相关模块开发的工程师,建议精读此 PR,以理解团队在命名约定和职责划分上的意图。对于日常功能开发,此 PR 影响有限,但可作为未来相关重构的参考。

讨论亮点

PR 获得 approve,但没有具体的 review 讨论。变更本身是机械性的符号重命名,不涉及逻辑调整,因此没有引发争议或权衡讨论。

实现拆解

  1. 核心方法重命名:在 miles/ray/rollout/rollout_executor.py 中,将核心数据生成入口方法 async def generate(self, rollout_id) 重命名为 async def get(self, rollout_id)。
  2. 同步调用点更新:更新所有通过 Ray 远程调用 (execute.remote()) 该方法的入口点,包括:
    • 同步训练主循环 train.py
    • 异步训练主循环 train_async.py
    • 多 LoRA 异步训练主循环 train_multi_lora_async.py
  3. 文档与注释同步:更新 miles/dashboard/hooks.py 和 miles/dashboard/store.py 中引用 RolloutExecutor.generate() 的文档字符串,将其改为 RolloutExecutor.get(),以保持一致性。
  4. 测试配套更新:更新单元测试 tests/fast/ray/rollout/real_ray/test_rollout_executor.py 中对重命名方法的调用和断言,确保测试覆盖新 API。
文件 模块 状态 重要度
miles/ray/rollout/rollout_executor.py 执行器 modified 5.55
train.py 训练循环 modified 4.98
train_async.py 异步训练循环 modified 4.69
train_multi_lora_async.py 多 LoRA 训练循环 modified 4.86
tests/fast/ray/rollout/real_ray/test_rollout_executor.py 执行器测试 modified 4.24

关键符号

RolloutExecutor.get

关键源码片段

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

核心方法 `generate` 被重命名的定义位置,是本次变更的核心。

# 在 rollout_executor.py 中,核心方法的重命名
async def get(self, rollout_id): # 原 generate
    start_time = time.time()
    self.rollout_id = rollout_id
    if (get_buffer_length := getattr(self.data_source, "get_buffer_length", None)) is not None:
        dashboard_hooks.report_data_buffer(get_buffer_length())
    with timer("rollout"):
        data, metadata, metrics = await self._get_rollout_data(rollout_id=rollout_id)
    # ... 后续数据处理和返回逻辑保持不变 ...

评论区精华

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

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

风险与影响

变更风险极低。这是一次纯粹的符号重命名,未引入任何新的控制流、数据结构或状态管理。所有调用点(包括三个训练脚本和一个测试文件)均已同步更新,确保调用链完整。主要风险在于是否有其他未在此 PR 中列出的代码片段引用了旧方法名,但鉴于改动已覆盖所有主要入口点,此风险可忽略。

此变更对用户运行时行为无直接影响。其主要影响在于代码清晰度和可维护性,为未来实现异步执行和多训练器协调(例如,在 InferenceController 和 RolloutExecutor 分离后)扫清了命名障碍。它促进了设计意图的明确表达,即执行器是数据消费者和移交者,而非生产者。

API 重命名 调用链更新

关联 Issue

#1837 Tracking issue for refactoring and enhancements

完整报告

参与讨论