执行摘要
- 一句话:同步 Trainer 支持 ReMax 算法
- 推荐动作:该 PR 在同步 trainer 中成功集成了 ReMax 算法,设计清晰,值得精读以了解如何通过贪心基线注入实现 variance reduction。但 PR 中已指出两个潜在问题(KeyError 和多轮奖励),建议在使用 ReMax 时注意检查多轮 reward 场景,并考虑加强 baseline 获取的健壮性。
功能与动机
实现 ReMax 算法(arXiv:2310.10505),通过贪心基线降低策略梯度方差,在同步训练框架中提供一种无 critic 的高效 RL 选项。该需求来自 PR #6308 的讨论。
实现拆解
- 贪心基线注入(main_ppo_sync.py):在
PPOTrainer.step() 中,当 adv_estimator=remax 时,将 batch 复制为两份:一份 do_sample=True, rollout_n=N(采样轨迹),一份 do_sample=False, rollout_n=1(贪心基线),并用 remax_baseline_ 前缀标识。
- Per-prompt 采样控制(AgentLoopWorkerTQ._run_prompt):从 prompt dict 中 pop
__rollout_n__ 和 __do_sample__,动态控制采样行为;若 do_sample=False 则调用 apply_greedy_sampling_params 设置贪心参数。
- 基线奖励提取(_add_remax_reward_baselines):从 TransferQueue 查询贪心 baseline 的
rm_scores,计算总和作为每个 uid 的 baseline score,附加到采样轨迹的 reward_baselines 字段。
- Advantage 计算:在
compute_advantage 中,当 adv_estimator=remax 时,读取 reward_baselines 计算 advantage。
- 示例与文档:新增
examples/remax_trainer/run_qwen2.5_math_7b_sync_fsdp.sh,配置 algorithm.adv_estimator=remax 等参数;更新 README 表格。
关键文件:
verl/trainer/main_ppo_sync.py(模块 同步训练器;类别 source;类型 core-logic;符号 apply_greedy_sampling_params, _add_remax_reward_baselines): 核心逻辑变更,实现了贪心基线注入和 baseline 奖励提取。
examples/remax_trainer/run_qwen2.5_math_7b_sync_fsdp.sh(模块 示例脚本;类别 other;类型 core-logic): 新的 ReMax 示例脚本,展示了同步 FSDP trainer 的完整配置和启动方式。
examples/remax_trainer/README.md(模块 文档;类别 docs;类型 documentation): 更新文档,添加新脚本的表格行。
关键符号:apply_greedy_sampling_params, _add_remax_reward_baselines
评论区精华
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 批准后合并。
- baseline KeyError 风险 (correctness): 无进一步讨论,PR 已合并。
- 多轮 dense reward 基线计算缺陷 (correctness): 无进一步讨论,PR 已合并。
风险与影响
- 风险:
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补丁依赖
关联脉络
参与讨论