Prhub

#2167 Always requires rollout_top_p_token_ids when rollout_top_p is not 1.0

原始 PR 作者 zhuzilin 合并时间 2026-07-02 11:44 文件变更 1 提交数 1 评论 0 代码增减 +1 / -1

执行摘要

修复 rollout_top_p 条件检查,确保非 1.0 时强制要求 token ids

当 rollout_top_p 配置不为 1.0 时,rollout 阶段必须产生 top_p token ids 和 offsets 数据用于 off-policy 修正;原逻辑仅查看 sample 对象中字段是否为 None,若未正确设置则可能静默跳过,造成训练数据不完整。PR 标题对动机有明确说明。

小范围正确性修复,值得合并,无需精读。

讨论亮点

该 PR 没有 review 评论或讨论。

实现拆解

  1. slime/ray/rollout.py_convert_samples_to_train_data 方法中,将原本的条件判断从 samples[0].rollout_top_p_token_ids is not None 改为 getattr(self.args, "rollout_top_p", 1.0) != 1.0
  2. 这一改动使得当 rollout_top_p 参数不是默认值 1.0 时,强制进入数据准备分支,并在内部通过断言确保相关字段非空。
  3. 如果 rollout_top_p 为 1.0(即不使用 top-p 采样),则跳过该分支,与之前行为一致。
  4. 没有测试、配置或部署配套改动。
文件 模块 状态 重要度
slime/ray/rollout.py 训练引擎 modified 4.82

关键符号

_convert_samples_to_train_data

关键源码片段

slime/ray/rollout.py core-logic

修改了条件判断逻辑,从检查字段 None 改为检查配置参数,是本次变更的核心文件。

# slime/ray/rollout.py
# 原逻辑:根据 sample 字段是否为 None 决定是否要求 top-p 数据
# 新逻辑:根据 rollout_top_p 配置(默认 1.0)决定是否强制要求
if getattr(self.args, "rollout_top_p", 1.0) != 1.0:
    for sample in samples:
        # 断言确保配置启用时数据必须存在
        assert sample.rollout_top_p_token_ids is not None
        assert sample.rollout_top_p_token_offsets is not None
        assert len(sample.rollout_top_p_token_offsets) == sample.response_length + 1, (
            f"top-p token offsets length {len(sample.rollout_top_p_token_offsets)} "
            f"!= response length + 1 {sample.response_length + 1}"
        )
        offset_end = int(sample.rollout_top_p_token_offsets[-1])
        assert offset_end == len(sample.rollout_top_p_token_ids), (
            f"top-p token offsets[-1] {offset_end} "
            f"!= token ids length {len(sample.rollout_top_p_token_ids)}"
        )
    train_data["rollout_top_p_token_ids"] = [sample.rollout_top_p_token_ids for sample in samples]
    train_data["rollout_top_p_token_offsets"] = [sample.rollout_top_p_token_offsets for sample in samples]

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险较低,仅修改了一个条件判断,逻辑上更符合配置驱动。但如果某些场景下 samples[0].rollout_top_p_token_ids 为 None 但配置 rollout_top_p 也不为 1.0(例如 rollout 阶段未正确生成数据),会触发断言错误,暴露已有问题而非静默失败,属于预期行为。

影响范围小,仅影响启用 rollout_top_p 的 PPO 训练流程,确保数据完整性。对不使用该功能的用户无影响。

核心路径变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论