执行摘要
修复非浮点型 reward 导致的 crash
当 reward 不是 float 类型(例如 int 或 dict)时,原代码中的 reward 累积逻辑会触发 TypeError,导致 rollout 中断。作者通过删除该统计逻辑来修复此问题。
建议合并。修复明确,改动安全。若需保留平均 reward 展示,应在后续 PR 中引入更健壮的类型处理,例如统一转换为 float。
无 review 讨论。
当 reward 不是 float 类型(例如 int 或 dict)时,原代码中的 reward 累积逻辑会触发 TypeError,导致 rollout 中断。作者通过删除该统计逻辑来修复此问题。
建议合并。修复明确,改动安全。若需保留平均 reward 展示,应在后续 PR 中引入更健壮的类型处理,例如统一转换为 float。
无 review 讨论。
generate_rollout_async 函数中,删除了 total_reward 和 n_reward_samples 两个局部变量的初始化和更新逻辑。isinstance(s_.reward, (int, float)) 或 dict 取值)及累加计算。tqdm 进度条上显示平均奖励的 set_postfix 调用。| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
slime/rollout/sglang_rollout.py |
Rollout | modified | 5.95 |
slime/rollout/sglang_rollout.py
core-logic
唯一变更文件,删除了非浮点 reward 导致 crash 的累积统计逻辑。
# 以下为变更后的关键片段,删除了 reward 累积统计和进度条更新
async def generate_rollout_async(
args: Namespace, rollout_id: int, data_source: Callable[[int], list[list[Sample]]]
) -> tuple[RolloutFnTrainOutput, list[list[Sample]]]:
# ...
data = []
all_data = []
do_print = True
# 删除了 total_reward = 0.0 和 n_reward_samples = 0
pbar = tqdm(total=target_data_size * args.n_samples_per_prompt, desc="Rollout generation")
while len(data) < target_data_size:
# ...
for task in done:
group: list[Sample] = task.result()
# ...
all_data.append(group)
# 删除了 reward 累积和平均值的计算与显示
# 直接进入动态过滤和收集逻辑
dynamic_filter_output = call_dynamic_filter(dynamic_filter, args, group)
if not dynamic_filter_output.keep:
metric_gatherer.on_dynamic_filter_drop(reason=dynamic_filter_output.reason)
state.remaining_batch_size -= 1
continue
if len(data) < target_data_size:
data.append(group)
pbar.update(args.n_samples_per_prompt)
pbar.close()
# ...
当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。
删除平均 reward 统计后,进度条不再显示平均奖励,可能影响训练过程中的实时监控。但该统计仅用于日志展示,不影响核心 rollout 逻辑或训练正确性。如果后续需要类似监控,需在其他位置或更高层级实现。
影响范围极小:仅移除一处非关键统计日志功能,所有依赖该统计的代码(如有)将无法获得此信息。不涉及 API 变更、配置变更或行为变更。
当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。
参与讨论