Prhub

#22557 fix: track est_time per suite instead of per backend

sgl-project/sglang · 作者 ch-wan · 合并时间 2026-04-11 07:58

分析状态 已生成
文件变更 1提交数 1 · 评论 1
代码增减 +36 / -17
ci run-ci

执行摘要

修复 CI 测试时间估算脚本,按测试套件而非后端硬件区分时间统计。

PR #22545引入的每周update_est_time.py脚本按(filename, backend)键统计时间,导致同一文件在不同测试套件(如H100与B200硬件)上获得相同est_time值,如PR #22550中test_gpt_oss_4gpu.py在stage-c-test-4-gpu-h100和stage-c-test-4-gpu-b200套件上都错误地使用了est_time=304。这影响了CI负载均衡的准确性,因为不同硬件上的执行时间实际不同。

该PR值得CI/基础设施维护者精读,展示了如何从CI日志中提取和关联元数据以优化资源调度。关注点:1. job_name_to_suite函数的设计如何平衡灵活性与鲁棒性。2. 从backend到suite的键变更如何影响时间数据聚合粒度。

讨论亮点

无review评论,PR由作者直接合并。从提交信息和PR body看,变更逻辑清晰,直接修复了PR #22545引入的问题。

实现拆解

修改仅涉及scripts/ci/update_est_time.py文件:1. 新增job_name_to_suite函数,使用正则表达式从CI任务名(如"stage-c-test-4-gpu-h100 (2)")中提取套件名(去除分区后缀" (N)")。2. 将collect_timings函数中的时间统计键从(relative_path, backend)改为(relative_path, suite),确保按套件区分时间数据。3. 更新相关注释和函数文档,明确说明按套件而非后端统计。4. 在update_est_times函数中,通过匹配函数名和suite参数,确保每个register_cuda_ci调用获得正确的套件特定时间中位数。

文件 模块 状态 重要度
scripts/ci/update_est_time.py CI/ 基础设施 modified 10.0

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

关键符号

job_name_to_suite collect_timings update_est_times

评论区精华

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

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

风险与影响

风险较低:1. 回归风险:修改仅影响时间统计逻辑,不涉及核心推理或测试逻辑,但若job_name_to_suite函数正则表达式错误,可能导致套件名提取不准确,影响时间估算。2. 兼容性:依赖CI任务命名规范(如包含" (N)"分区后缀),若命名变更可能失效。3. 测试覆盖:PR body中未添加单元测试,依赖现有CI验证。

影响范围有限但重要:1. 对系统:修复CI时间估算准确性,提升负载均衡效果,避免因错误时间估算导致测试队列不平衡。2. 对用户:无直接影响,但间接改善开发体验(更可靠的CI运行时间)。3. 对团队:确保后续自动生成的PR(如PR #22550)中est_time值正确反映不同硬件性能差异。

依赖外部命名规范 缺少单元测试

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR修复了CI测试时间估算脚本中的关键缺陷:原脚本按后端硬件(如H100/B200)而非测试套件统计时间,导致同一测试文件在不同硬件上获得相同错误时间值,影响CI负载均衡。通过新增套件名提取函数并将统计键从(filename, backend)改为(filename, suite),确保每个测试套件获得独立准确的时间估算。变更仅涉及基础设施脚本,风险低但对CI效率有重要改进。

功能与动机

PR #22545引入的每周update_est_time.py脚本旨在从CI日志中自动更新测试文件的est_time值以优化负载均衡,但其按(filename, backend)键统计时间,忽略了同一文件可能在不同测试套件(对应不同硬件,如H100与B200)上运行的事实。如PR body所述,这导致像test_gpt_oss_4gpu.py这样的文件在stage-c-test-4-gpu-h100stage-c-test-4-gpu-b200套件上错误地获得相同est_time=304,而实际执行时间因硬件差异应不同。本PR旨在纠正这一统计逻辑,确保时间估算准确反映各套件性能。

实现拆解

修改集中于scripts/ci/update_est_time.py文件:

  1. 新增套件名提取函数job_name_to_suite()使用正则表达式re.sub(r"\s*\\(\\d+\\)$", "", job_name)从CI任务名(如"stage-c-test-4-gpu-h100 (2)")中去除分区后缀" (N)",得到套件名"stage-c-test-4-gpu-h100"
  2. 更改时间统计键:在collect_timings()函数中,将时间数据字典的键从(rel_path, backend)改为(rel_path, suite),并更新所有相关注释和文档字符串以反映这一变更。
  3. 确保套件匹配update_est_times()函数通过匹配函数名和suite=参数,为每个register_cuda_ci调用分配正确的套件特定时间中位数。

关键代码片段:

def job_name_to_suite(job_name):
    """Extract the suite name from a job name.
    Job names look like "stage-c-test-4-gpu-h100 (2)" or "stage-a-test-cpu".
    Strip the partition suffix " (N)" to get the suite name.
    """
    return re.sub(r"\s*\(\d+\)$", "", job_name)

评论区精华

无review评论,PR由作者直接合并。从提交信息看,变更逻辑直接明了,旨在快速修复前序PR引入的问题。

风险与影响

风险

  • 若CI任务命名规范变更(如分区后缀格式),job_name_to_suite函数可能提取错误套件名,导致时间统计不准确。
  • 未添加单元测试,依赖现有CI流程验证,可能掩盖边缘情况。

影响

  • 正面:提升CI时间估算准确性,优化测试队列负载均衡,间接加快开发迭代。
  • 范围:仅影响基础设施脚本,不涉及模型推理或核心测试逻辑,对终端用户无直接影响。

关联脉络

本PR是CI时间估算自动化流程的一部分:

  • PR #22545:引入了每周更新est_time的工作流和初始脚本,但存在统计逻辑缺陷。
  • PR #22550:展示了错误时间估算的实际案例(由工作流自动生成),凸显了修复必要性。

结合近期历史PR,该仓库持续投入CI基础设施优化(如PR #22461、#22545),本PR是这一趋势中的精细调整,体现了对CI资源调度效率的持续关注。

参与讨论