执行摘要
- 一句话:允许 /rerun-test 调度 nightly/weekly CUDA 测试
- 推荐动作:建议关注该 PR 的设计模式:通过映射表与共享解析函数保持配置单一事实源,降低 future 维护成本。适合作为 CI 脚本扩展的参考样例。
功能与动机
修复环形 2.5-1T TP8 崩溃(#26623)时,发现未能直接在 PR 上重跑 nightly 测试,只能等待定时任务,导致修复验证周期长达 6-24 小时。该 PR 填补这一空白,提升开发者调试效率。
实现拆解
- 新增 legacy 套件解析函数
_extract_legacy_suites:模仿 _extract_runner_configs,从文件中提取所有单字符串 suite= 值。
- 定义套件到 runner_config 映射表
_LEGACY_SUITE_TO_RUNNER_CONFIG:将 nightly/weekly 套名硬编码映射到 scripts/ci/runner_configs.yml 中的 key(例如 nightly-8-gpu-common → 8-gpu-h200)。未在映射中的套件(如 nightly-8-gpu-b200、NPU/AMD 套件)保持不可调度并给出明确错误信息。
- 抽取共享调度函数
_resolve_runner_config 和 _dispatch_err:新路径和 legacy 路径共用同一解析逻辑,确保 runner 详情(标签、安装脚本、超时、rdma)仍由 runner_configs.yml 唯一决定。
- 新增 runner 配置
8-gpu-b200:在 runner_configs.yml 中加入缺失的 entry,使 nightly-8-gpu-b200 可通过。
关键文件:
scripts/ci/utils/slash_command_handler.py(模块 CI 脚本;类别 infra;类型 infrastructure;符号 _extract_legacy_suites, _dispatch_err, _resolve_runner_config, _LEGACY_SUITE_TO_RUNNER_CONFIG): 核心变更文件:新增 legacy 套件解析、映射表、共享调度函数,重构成新的解析路径。
scripts/ci/runner_configs.yml(模块 CI 配置;类别 infra;类型 infrastructure): 新增 8-gpu-b200 runner 配置,使得 nightly-8-gpu-b200 测试套件可被调度。
关键符号:_extract_legacy_suites, _dispatch_err, _resolve_runner_config
关键源码片段
scripts/ci/utils/slash_command_handler.py
核心变更文件:新增 legacy 套件解析、映射表、共享调度函数,重构成新的解析路径。
# scripts/ci/utils/slash_command_handler.py ( 部分 )
# Legacy nightly/weekly 测试套件使用单个字符串 `suite=` 注册,
# 没有 runner_config 元数据。这里将每个已知套件名映射到
# scripts/ci/runner_configs.yml 中的 runner_config key,
# 使得 /rerun-test 能获取 runner 详情(标签、安装脚本、超时等)。
_LEGACY_SUITE_TO_RUNNER_CONFIG = {
"nightly-1-gpu": "1-gpu-large",
"nightly-kernel-1-gpu": "1-gpu-large",
"nightly-eval-text-2-gpu": "2-gpu-large",
"nightly-perf-text-2-gpu": "2-gpu-large",
"nightly-eval-vlm-2-gpu": "2-gpu-large",
"nightly-perf-vlm-2-gpu": "2-gpu-large",
"nightly-4-gpu": "4-gpu-h100",
"nightly-4-gpu-b200": "4-gpu-b200",
"nightly-8-gpu-common": "8-gpu-h200",
"nightly-8-gpu-h200": "8-gpu-h200",
"nightly-kernel-8-gpu-h200": "8-gpu-h200",
"nightly-8-gpu-h20": "8-gpu-h20",
"nightly-8-gpu-b200": "8-gpu-b200",
"weekly-8-gpu-h200": "8-gpu-h200",
}
def _dispatch_err(suite, msg):
"""生成一个表示调度失败的结果字典,包含错误信息。"""
return {
"suite": suite,
"runner_label": None,
"install_script": "",
"install_timeout": "",
"rdma_devices": "",
"is_cpu": False,
"error": msg,
}
def _resolve_runner_config(rc, full_path, suite):
"""将一个 runner_config key 解析为 detect_suite 使用的调度字典。
成功返回调度字典,失败返回错误字典。
"""
configs = _runner_configs.load()
cfg = configs.get(rc)
if cfg is None:
known = ", ".join(f"`{k}`" for k in sorted(configs))
return _dispatch_err(
suite,
f"Unknown runner_config `{rc}` in `{full_path}` — not in "
f"scripts/ci/runner_configs.yml.\nKnown: {known}",
)
install_script = cfg["install"]
if not _ALLOWED_INSTALL_SCRIPT.match(install_script):
return _dispatch_err(
suite,
f"Disallowed install script `{install_script}` for runner_config `{rc}`",
)
# ... 其余逻辑(获取 timeout、rdma 等)
from . import runner_configs as _runner_configs
# 实际代码继续拼装结果字典并返回
评论区精华
PR 获得 maintainer Kangyan-Zhou 直接批准,无 review 评论或争议。Issue 评论中通过 /rerun-test 验证了两种场景:含映射的 nightly 测试(成功调度)和不含映射的 nightly-8-gpu-b200(初始失败,但在补充配置后成功)。
风险与影响
- 风险:映射表
_LEAGACY_SUITE_TO_RUNNER_CONFIG 与 nightly/weekly workflow YAML 中的硬件信息耦合,若 workflow 更新但映射未同步可能导致调度到错误硬件或失败。此外,硬编码映射需要手动维护,缺少自动校验。但当前映射已验证与 workflow 一致(见 body)。
- 影响:开发者现在可以在 PR 上直接使用
/rerun-test 命令重跑 nightly/weekly 测试,显著缩短故障排查循环。对于 nightly-8-gpu-b200 等原不可调度的套件,已在新增 runner_configs.yml 项后变得可调度。非 CUDA 套件(NPU、AMD)保持不变,避免意外调度。
- 风险标记:配置映射需同步 workflow, 手动维护映射表, 新增 runner config 需保证 YAML 正确
关联脉络
- PR #26623 [bugfix] Fix Ring-2.5-1T TP8 crash: Motivation: 修复该 bug 时需要重跑 nightly 测试,但无调度能力,从而推动此 PR 的产生。
参与讨论