执行摘要
修复 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 评论或讨论。
当 rollout_top_p 配置不为 1.0 时,rollout 阶段必须产生 top_p token ids 和 offsets 数据用于 off-policy 修正;原逻辑仅查看 sample 对象中字段是否为 None,若未正确设置则可能静默跳过,造成训练数据不完整。PR 标题对动机有明确说明。
小范围正确性修复,值得合并,无需精读。
该 PR 没有 review 评论或讨论。
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。rollout_top_p 参数不是默认值 1.0 时,强制进入数据准备分支,并在内部通过断言确保相关字段非空。rollout_top_p 为 1.0(即不使用 top-p 采样),则跳过该分支,与之前行为一致。| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
slime/ray/rollout.py |
训练引擎 | modified | 4.82 |
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 链接,后续同步到相关引用后会出现在这里。
参与讨论