Prhub

#1987 [ci] don't compare ref_logprob and logprob when R3 is on

原始 PR 作者 zhuzilin 合并时间 2026-05-30 09:56 文件变更 1 提交数 1 评论 0 代码增减 +4 / -0

执行摘要

R3 开启时跳过 CI 中的 logprob 对比检查

R3 模式下 actor forward 和 reference forward 的路由逻辑不同,log_probs 与 ref_log_probs 原本就不应完全一致,但 CI 中的断言 < 1e-8 会误判为失败。PR 标题和改动注释明确说明了这一背景。

可快速合入,无精读必要。但注释中对 R3 路由差异的解释值得关注。

讨论亮点

该 PR 无 review 评论,属于直接合并的简单修复。

实现拆解

  1. slime/backends/megatron_utils/data.pylog_rollout_data 函数中,CI 检查前增加了 not getattr(args, 'use_rollout_routing_replay', False) 条件。
  2. 添加了注释解释 R3 模式下 actor 与 reference forward 路由差异导致 logprob 不一致是预期行为。
  3. 仅 4 行新增,逻辑清晰,无其他文件变更。
文件 模块 状态 重要度
slime/backends/megatron_utils/data.py 数据层 modified 4.83

关键符号

log_rollout_data

关键源码片段

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

未识别关联 Issue

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

完整报告

参与讨论