执行摘要
R3 开启时跳过 CI 中的 logprob 对比检查
R3 模式下 actor forward 和 reference forward 的路由逻辑不同,log_probs 与 ref_log_probs 原本就不应完全一致,但 CI 中的断言 < 1e-8 会误判为失败。PR 标题和改动注释明确说明了这一背景。
可快速合入,无精读必要。但注释中对 R3 路由差异的解释值得关注。
该 PR 无 review 评论,属于直接合并的简单修复。
R3 模式下 actor forward 和 reference forward 的路由逻辑不同,log_probs 与 ref_log_probs 原本就不应完全一致,但 CI 中的断言 < 1e-8 会误判为失败。PR 标题和改动注释明确说明了这一背景。
可快速合入,无精读必要。但注释中对 R3 路由差异的解释值得关注。
该 PR 无 review 评论,属于直接合并的简单修复。
slime/backends/megatron_utils/data.py 的 log_rollout_data 函数中,CI 检查前增加了 not getattr(args, 'use_rollout_routing_replay', False) 条件。| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
slime/backends/megatron_utils/data.py |
数据层 | modified | 4.83 |
slime/backends/megatron_utils/data.py
core-logic
核心改动文件,在 CI 检查中添加了 R3 模式下的条件跳过逻辑。
def log_rollout_data(...):
# ... 前面的代码 ...
reduced_log_dict = gather_log_data("rollout", args, rollout_id, log_dict)
if args.ci_test and reduced_log_dict is not None:
# R3 replays rollout routing for the actor forward, while the
# reference forward intentionally falls through to normal routing.
# Their log-probs are not expected to match bit-for-bit in CI.
if (
rollout_id == 0
and not getattr(args, "use_rollout_routing_replay", False) # <-- 新增条件
and "rollout/log_probs" in reduced_log_dict
and "rollout/ref_log_probs" in reduced_log_dict
):
# 仅当非 R3 模式时才执行数值对比
assert abs(reduced_log_dict["rollout/log_probs"] - reduced_log_dict["rollout/ref_log_probs"]) < 1e-8
if "rollout/log_probs" in reduced_log_dict:
assert -0.5 < reduced_log_dict["rollout/log_probs"] < 0
if "rollout/entropy" in reduced_log_dict:
assert 0 < reduced_log_dict["rollout/entropy"] < 0.5
# ... 后续代码 ...
当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。
风险极低:变更仅新增一个条件判断,且默认值为 False,不影响既有逻辑。若未来 R3 配置名称变化,需同步更新 getattr 的参数。
影响范围仅限于 CI 环境:当启用 R3(use_rollout_routing_replay=True)时,不会再因 logprob 数值差异而报错。用户无感知。
当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。
参与讨论