Prhub

#5698 [one_step_off] fix: fix one-step-off update weights before rollout finished

原始 PR 作者 wucong25 合并时间 2026-03-23 10:45 文件变更 1 提交数 1 评论 1 代码增减 +0 / -2

执行摘要

修复 one-step-off 算法中权重更新时机错误导致推理中断的 bug。

根据PR body描述,当在fit_step函数中更新权重时,所有当前在推理中的请求被取消,导致推理过程在完成前终止,从第二步开始训练时间变得非常快。这是一个逻辑问题,相关PR #5418和auto_await的case 3也涉及类似问题。

对于使用one-step-off算法的开发者,建议精读此PR以理解权重同步的正确时机。关注设计决策:将权重更新从fit_step移到_fit_generate以确保顺序执行,避免竞态条件,这在异步训练场景中具有参考价值。

讨论亮点

review中,gemini-code-assist[bot]评论指出这个修复解决了潜在竞态条件,通过移除并发权重更新,确保权重同步在rollouts之间顺序进行,使训练过程更稳健并符合one-step-off策略逻辑。ArronHZG批准了此变更,没有额外争议。

实现拆解

实现方案仅修改了文件verl/experimental/one_step_off_policy/ray_trainer.py。在fit_step函数中,移除了两行代码:self._fit_update_weights()await asyncio.sleep(0)。权重更新逻辑现在由_fit_generate函数处理,确保在rollout完成后进行同步。

文件 模块 状态 重要度
verl/experimental/one_step_off_policy/ray_trainer.py one_step_off_policy modified 6.0

关键符号

fit_step

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

评论区精华

竞态条件修复与权重同步顺序 设计

gemini-code-assist[bot] 指出移除 `fit_step` 中的权重更新避免了并发更新导致的模型状态不一致,确保权重同步在 rollouts 之间顺序进行。

结论:修复被批准,提升训练稳健性并符合算法逻辑。 · 已解决

风险与影响

风险较低,因为这是一个简单的代码删除操作,旨在修复已知bug。但需确保_fit_generate函数中的权重更新逻辑正确,且没有其他代码部分依赖fit_step中的更新。缺乏直接测试覆盖可能是个隐患,但review已确认逻辑正确性。

影响范围限于使用one-step-off算法的训练流程。修复后,推理过程不会被过早中断,确保训练稳定性和正确性。对用户来说,训练时间恢复正常,避免异常加速导致的性能问题。

权重同步顺序修复 潜在竞态条件

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论