Prhub

#2276 Add args check for --save-debug-train-data

原始 PR 作者 zhuzilin 合并时间 2026-08-16 17:46 文件变更 2 提交数 1 评论 0 代码增减 +15 / -0

执行摘要

新增 --save-debug-train-data 与 rollout 路径冲突校验

该 PR 是对 2266 中重构 --save-debug-train-data 功能的后续加固。用户可能将两个参数配置为相同的路径模板,导致训练数据和 rollout 数据写入同一文件,造成数据互相覆盖,难以排查。PR 通过参数校验在配置阶段提前发现并拒绝这种非法配置,提升用户体验和系统健壮性。

该 PR 值得快速 review,逻辑简单清晰,测试覆盖到位。可关注点:校验位置是否覆盖所有设置路径(如 --dump-details 间接设置),以及是否需要在文档中提及该限制。

讨论亮点

本 PR 无公开评论,无 review 讨论。

实现拆解

本变更分为两步:

  1. 在参数验证函数中增加路径冲突检查:修改 slime/utils/arguments.py 中的 slime_validate_args 函数,在 dump_details 处理后、load_debug_rollout_data 处理前,新增一个条件判断:当 --save-debug-train-data 非空且与 --save-debug-rollout-data 完全相等时,抛出 ValueError,错误信息明确提示两者不能相等。这个位置选择在 dump_details 赋值之后,确保即使是 --dump-details 间接设置的路径也能被检查,并且放在 load_debug_rollout_data 之前,避免后续流程使用错误的配置。

  2. 添加单元测试:在 tests/test_megatron_argument_validation.py 中新增 test_slime_validate_args_rejects_equal_debug_data_paths 测试函数,使用 make_slime_validate_args 构造两个相同的路径参数,断言 slime_validate_args 抛出 ValueError 且错误消息包含指定文本,验证校验逻辑有效。

文件 模块 状态 重要度
slime/utils/arguments.py 参数校验 modified 5.16
tests/test_megatron_argument_validation.py 参数校验 modified 4.73

关键符号

slime_validate_args test_slime_validate_args_rejects_equal_debug_data_paths

关键源码片段

slime/utils/arguments.py core-logic

修改了核心参数校验函数,新增路径冲突检查,是功能实现的关键。

# slime/utils/arguments.py 中 slime_validate_args 函数内的相关片段
if args.dump_details is not None:
    # dump_details 提供统一模板,同时设置两个路径
    args.save_debug_rollout_data = f"{args.dump_details}/rollout_data/{{rollout_id}}.pt"
    args.save_debug_train_data = f"{args.dump_details}/train_data/{{rollout_id}}.pt"# 新增校验:两者路径相同时拒绝,避免训练与 rollout 数据互相覆盖
if args.save_debug_train_data is not None and args.save_debug_train_data == args.save_debug_rollout_data:
    raise ValueError("--save-debug-train-data must not be equal to --save-debug-rollout-data.")if args.load_debug_rollout_data is not None:
    # 加载调试数据时只跑训练,不启动 sglang 服务
    logger.info("load_debug_rollout_data ... is set, will not instantiate sglang servers...")
    args.debug_train_only = True
tests/test_megatron_argument_validation.py test-coverage

新增对应测试,验证校验逻辑,是保证代码正确性的必要配套。

# tests/test_megatron_argument_validation.py 中的新增测试
def test_slime_validate_args_rejects_equal_debug_data_paths(monkeypatch):
    module = load_slime_arguments_module(monkeypatch)
    # 构造两个参数值为相同时,应触发校验错误
    args = make_slime_validate_args(
        save_debug_rollout_data="/tmp/debug_{rollout_id}.pt",
        save_debug_train_data="/tmp/debug_{rollout_id}.pt",
    )
    # 断言抛出的异常类型和消息
    with pytest.raises(ValueError, match="--save-debug-train-data must not be equal"):
        module.slime_validate_args(args)

评论区精华

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

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

风险与影响

风险较低。新增校验仅在两个参数相等时报错,不会影响已有合法配置。但需注意:

  • 校验是严格字符串相等,若用户配置了不同但实际会冲突的路径(例如符号链接指向同一文件),此校验无法拦截。
  • 校验抛出 ValueError,若上层调用未捕获该异常,可能导致程序以非常规方式退出,但符合预期。
  • 修改位于核心参数验证路径,所有训练启动都会调用,但影响面极小。

影响范围:所有使用 slime 训练框架的用户,尤其是开启调试数据保存的用户。该校验在参数验证阶段生效,用户配置错误时会得到清晰报错信息,避免运行时数据覆盖。代码影响面小,只涉及参数校验函数和对应测试,风险可控。

校验仅覆盖完全相等路径 核心参数验证路径变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论