Prhub

#22081 [CI] Support CPU stage and auto-batch same-stage files in `/rerun-test`

原始 PR 作者 hnyls2002 合并时间 2026-04-04 06:56 文件变更 2 提交数 1 评论 11 代码增减 +193 / -80

执行摘要

扩展 `/rerun-test` 命令支持 CPU-only 测试并优化批处理逻辑。

PR body 中明确指出,目标是支持 CPU-only 测试并优化多个测试文件的分派。具体来说,/rerun-test 现在可以通过检测 register_cpu_ci() 支持 CPU 测试,并通过批处理相同 (runner_label, use_deepep, is_cpu) 配置的文件来减少工作流运行数量。

建议 CI 维护者和开发者关注此 PR,特别是批处理逻辑和错误处理的设计。代码变更集中在两个文件,便于 review,值得精读以理解 CI 工具的演进和改进方向。

讨论亮点

无 review 讨论,但 issue 评论中展示了功能验证:作者多次执行 /rerun-test 命令测试不同文件(如 test_runai_utils.py 作为 CPU 测试,使用 ubuntu-latest runner),验证了 CPU 测试支持和批处理分组的正确性。

实现拆解

  • scripts/ci/utils/slash_command_handler.py
    • 重命名 detect_cuda_suite()detect_suite(),使其先尝试匹配 register_cuda_ci,后尝试 register_cpu_ci,返回 is_cpu 标志。
    • 拆分 _resolve_and_dispatch_ut()_resolve_test_spec()(仅解析)和 _dispatch_batch()(分派批处理组)。
    • handle_rerun_test() 中,解析所有测试 spec,按 (runner_label, use_deepep, is_cpu) 分组,每个组作为一个工作流运行。
  • .github/workflows/rerun-test.yml
    • 添加 is_cpu 输入选项,默认 false;在 runner 选择中添加 ubuntu-latest
    • 将工作流分为 rerun-test-cuda(当 is_cpu != 'true')和 rerun-test-cpu(当 is_cpu == 'true')两个 job。
    • CPU job 模仿 pr-test.yml 中的 stage-a-test-cpu 设置,包括释放磁盘空间、安装 Python 和依赖。
    • 两个 job 都支持多行 test_command,通过 shell 循环逐行执行。
文件 模块 状态 重要度
.github/workflows/rerun-test.yml CI 工作流 modified 5.0
scripts/ci/utils/slash_command_handler.py CI 工具 modified 6.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

detect_suite _resolve_test_spec _dispatch_batch handle_rerun_test

评论区精华

功能验证测试 测试

在 issue 评论中,作者多次执行 `/rerun-test` 命令测试不同文件(如 CPU-only 的 `test_runai_utils.py` 和 GPU 测试),展示了 CPU 测试支持和批处理分组的实际运行结果。

结论:功能按预期工作,CPU 测试正确分派到 `ubuntu-latest` runner,批处理减少了工作流数量。 · 已解决

风险与影响

  • 批处理失败传播:在 rerun-test.yml 中,使用 shell 循环执行多行命令,如果某个测试失败则整个工作流停止,可能掩盖其他测试结果。
  • 依赖管理风险:CPU job 中的 uv pip install 步骤可能因网络或依赖冲突失败,影响测试可靠性。
  • 路径解析准确性detect_suite() 函数依赖正则表达式匹配 register_cuda_ciregister_cpu_ci,如果测试文件格式异常可能导致误判和错误消息。
  • 对开发者:提供更灵活的测试重跑功能,支持 CPU 测试并自动批处理相似配置,减少手动操作,提升开发体验。
  • 对 CI 系统:通过批处理减少工作流运行数量,降低资源消耗,加快整体测试速度。
  • 对团队:提高测试效率,加速反馈循环,但需要监控批处理稳定性以避免调试复杂性。
批处理失败传播 依赖管理变化 路径解析准确性

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本 PR 扩展了 CI 命令 /rerun-test,支持 CPU-only 测试并引入自动批处理机制,通过分组相同 runner 配置的文件来减少工作流运行次数,提升测试效率和资源利用率。

功能与动机

PR 的主要动机是增强 /rerun-test 命令的灵活性,支持使用 register_cpu_ci() 注册的 CPU-only 测试文件,并优化多个测试文件的分派逻辑。PR body 中说明:“/rerun-test now supports CPU-only tests (files with register_cpu_ci()) by dispatching to ubuntu-latest runner” 和 “When multiple test files are specified, files targeting the same (runner_label, use_deepep, is_cpu) are batched into a single workflow run instead of one run per file”。

实现拆解

关键改动集中在两个文件:

  1. scripts/ci/utils/slash_command_handler.py

    • detect_cuda_suite() 重命名为 detect_suite(),使其支持检测 register_cuda_ciregister_cpu_ci,返回 is_cpu 标志。
    • 拆分 _resolve_and_dispatch_ut()_resolve_test_spec()(解析测试 spec)和 _dispatch_batch()(分派批处理组)。
    • handle_rerun_test() 中,解析所有测试 spec 后按 (runner_label, use_deepep, is_cpu) 分组,每个组触发一个工作流运行。
  2. .github/workflows/rerun-test.yml

    • 添加 is_cpu 输入选项和 ubuntu-latest runner 选择。
    • 新增 rerun-test-cpu job(当 is_cpu == 'true'),模仿现有 CI 的 CPU 阶段设置(释放磁盘空间、安装 Python、使用 uv pip 安装依赖)。
    • 修改 rerun-test-cuda job 支持多行 test_command,通过 shell 循环逐行执行命令。

评论区精华

无正式的 review 讨论,但 issue 评论中展示了功能的测试验证:

  • 作者执行 /rerun-test test_runai_utils.py,成功触发 CPU 测试并使用 ubuntu-latest runner。
  • 执行多个文件如 /rerun-test test_srt_endpoint.py test_openai_server.py,正确批处理相同 GPU runner 的测试。
  • 这验证了 CPU 测试支持和批处理逻辑的有效性。

风险与影响

  • 技术风险:批处理中单个测试失败可能导致整个工作流停止,增加调试难度;CPU job 的依赖安装可能不稳定;detect_suite() 的正则匹配可能误判非标准测试文件。
  • 影响分析:对开发者而言,提供了更便捷的测试重跑功能;对 CI 系统,减少了工作流数量,节约资源;但对团队需确保批处理稳定性,避免因失败传播影响测试反馈。

关联脉络

从近期历史 PR 看,本 PR 是 CI 基础设施持续优化的一部分:

  • PR 22045 调整 CI 超时参数,解决测试配置问题。
  • PR 22036 添加内核发布提示,完善工作流文档。
  • PR 22018 修复构建失败,提升 CI 可靠性。
    这些 PR 共同体现了团队对测试流程和资源效率的关注,本 PR 的批处理设计可能为未来更大规模的测试优化奠定基础。

参与讨论