Prhub

#6340 [trainer] feat: support ReMax in synchronous TransferQueue trainer

原始 PR 作者 liziniu 合并时间 2026-05-14 12:39 文件变更 3 提交数 4 评论 2 代码增减 +198 / -6

执行摘要

同步 Trainer 支持 ReMax 算法

实现 ReMax 算法(arXiv:2310.10505),通过贪心基线降低策略梯度方差,在同步训练框架中提供一种无 critic 的高效 RL 选项。该需求来自 PR #6308 的讨论。

该 PR 在同步 trainer 中成功集成了 ReMax 算法,设计清晰,值得精读以了解如何通过贪心基线注入实现 variance reduction。但 PR 中已指出两个潜在问题(KeyError 和多轮奖励),建议在使用 ReMax 时注意检查多轮 reward 场景,并考虑加强 baseline 获取的健壮性。

讨论亮点

Review 中 gemini-code-assist[bot] 指出两个问题:
1)在 _add_remax_reward_baselines 中,如果 sampled trajectory 对应的 greedy baseline 缺失,列表推导会引发 KeyError,建议添加检查或过滤。
2)当前逻辑只选取每个 greedy trajectory 最后一个 output 的 reward,在多轮 dense reward 场景下应累加所有 steps 的 reward。
这些评论未产生后续讨论,PR 在 wuxibin89 批准后合并。

实现拆解

  1. 贪心基线注入(main_ppo_sync.py):在 PPOTrainer.step() 中,当 adv_estimator=remax 时,将 batch 复制为两份:一份 do_sample=True, rollout_n=N(采样轨迹),一份 do_sample=False, rollout_n=1(贪心基线),并用 remax_baseline_ 前缀标识。
  2. Per-prompt 采样控制(AgentLoopWorkerTQ._run_prompt):从 prompt dict 中 pop __rollout_n____do_sample__,动态控制采样行为;若 do_sample=False 则调用 apply_greedy_sampling_params 设置贪心参数。
  3. 基线奖励提取(_add_remax_reward_baselines):从 TransferQueue 查询贪心 baseline 的 rm_scores,计算总和作为每个 uid 的 baseline score,附加到采样轨迹的 reward_baselines 字段。
  4. Advantage 计算:在 compute_advantage 中,当 adv_estimator=remax 时,读取 reward_baselines 计算 advantage。
  5. 示例与文档:新增 examples/remax_trainer/run_qwen2.5_math_7b_sync_fsdp.sh,配置 algorithm.adv_estimator=remax 等参数;更新 README 表格。
文件 模块 状态 重要度
verl/trainer/main_ppo_sync.py 同步训练器 modified 7.82
examples/remax_trainer/run_qwen2.5_math_7b_sync_fsdp.sh 示例脚本 added 5.02
examples/remax_trainer/README.md 文档 modified 2.07

关键符号

apply_greedy_sampling_params _add_remax_reward_baselines

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

评论区精华

baseline KeyError 风险 正确性

gemini-code-assist[bot] 指出如果 greedy baseline 缺失,列表推导会引发 KeyError,建议添加检查或过滤。

结论:无进一步讨论,PR 已合并。 · unresolved

多轮 dense reward 基线计算缺陷 正确性

gemini-code-assist[bot] 指出当前只取最后 output 的 reward 作为 baseline,在多轮 dense reward 场景下应汇总所有 steps 的 reward。

结论:无进一步讨论,PR 已合并。 · unresolved

风险与影响

1) 基线 KeyError:若 baseline rollout 失败或未成功标记,训练会崩溃,影响同步训练稳定性。
2) 多轮奖励偏差:在多轮 dense reward 场景下,基线只采用最后一步奖励,可能导致 advantage 估计偏离 ReMax 原意。
3) 外部补丁依赖:TransferQueue 的 BatchMeta.concat 需要外部补丁(PR 中未包含)才能正常运行,否则可能在其他场景引发 ValueError
4) 计算开销:每个 prompt 额外生成一次贪心轨迹,增加约一倍 rollout 计算量。

对用户:通过设置 algorithm.adv_estimator=remax 即可启用 ReMax,与现有同步 trainer 配置兼容。对系统:仅在 remax 模式下影响训练流程,其他模式无影响。对团队:提供了一种新的训练算法变体示例和文档,便于后续扩展其他 advantage estimator。

KeyError 风险 多轮奖励基线缺陷 TransferQueue 补丁依赖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论