Prhub

#22563 fix: match est_time updates by backend, not just suite

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

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

执行摘要

修复 CI 测试时间估算脚本,按后端硬件区分时间统计,避免跨后端数据污染。

PR body明确指出:在PR #22561中,test_eagle3_basic.py文件同时包含register_cuda_ci和register_amd_ci注册,且使用相同的测试套件(stage-b-test-1-gpu-small)。原脚本使用register_\w+_ci正则表达式匹配任何后端,导致CUDA的中位时间被错误应用到AMD注册上,将est_time从50改为70。这暴露了跨后端时间数据污染的问题,需要修复以确保每个后端只使用自己的性能数据。

该PR虽小但展示了CI基础设施中一个重要的数据隔离问题。建议精读以理解:1) 如何通过数据结构设计避免数据污染;2) 正则表达式在配置更新中的精确匹配技巧。对于负责CI维护的工程师,这是值得参考的修复模式。

讨论亮点

无review评论,PR由作者直接合并。从提交信息看,作者清晰描述了问题根源和修复方案。

实现拆解

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

  1. 数据结构变更:将时间收集字典的键从(relative_path, suite)改为(relative_path, suite, backend),后端通过determine_backend函数从作业名中提取。
  2. 中位数计算:compute_medians函数相应更新,处理三元组键。
  3. 分组逻辑:update_est_times函数中将by_file从{rel_path: {suite: median}}改为{rel_path: [(suite, backend, median), ...]}。
  4. 正则表达式:将匹配模式从register_\w+ci改为register{backend}_ci,确保只匹配对应后端的注册调用。
文件 模块 状态 重要度
scripts/ci/update_est_time.py CI 基础设施 modified 10.0

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

关键符号

collect_timings compute_medians update_est_times

评论区精华

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

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

风险与影响

技术风险较低:

  1. 回归风险:修改仅影响CI测试时间估算逻辑,不涉及核心推理路径,但若正则表达式匹配错误可能导致est_time更新到错误行。
  2. 兼容性:需要确保determine_backend函数能正确从所有CI作业名中提取后端标识,否则可能遗漏某些后端的时间数据。
  3. 数据完整性:修复后每个后端将独立统计时间,但若某个后端数据点不足(MIN_DATA_POINTS),其est_time可能不会被更新。

影响范围有限但重要:

  1. 对用户:无直接影响,仅影响内部CI基础设施。
  2. 对系统:确保CI测试时间估算更准确,有助于优化测试负载均衡和资源调度。
  3. 对团队:修复了跨后端时间数据污染问题,避免未来类似PR #22561中的错误更新,提升CI配置的可靠性。
正则表达式匹配风险 后端标识提取依赖

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

  • 一句话:修复CI测试时间估算脚本,按后端硬件区分时间统计,避免跨后端数据污染。
  • 推荐动作:该PR虽小但展示了CI基础设施中一个重要的数据隔离问题。建议精读以理解:1) 如何通过数据结构设计避免数据污染;2) 正则表达式在配置更新中的精确匹配技巧。对于负责CI维护的工程师,这是值得参考的修复模式。

功能与动机

PR body明确指出:在PR #22561中,test_eagle3_basic.py文件同时包含register_cuda_ci和register_amd_ci注册,且使用相同的测试套件(stage-b-test-1-gpu-small)。原脚本使用register_\w+_ci正则表达式匹配任何后端,导致CUDA的中位时间被错误应用到AMD注册上,将est_time从50改为70。这暴露了跨后端时间数据污染的问题,需要修复以确保每个后端只使用自己的性能数据。

实现拆解

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

  1. 数据结构变更:将时间收集字典的键从(relative_path, suite)改为(relative_path, suite, backend),后端通过determine_backend函数从作业名中提取。
  2. 中位数计算:compute_medians函数相应更新,处理三元组键。
  3. 分组逻辑:update_est_times函数中将by_file从{rel_path: {suite: median}}改为{rel_path: [(suite, backend, median), ...]}。
  4. 正则表达式:将匹配模式从register_\w+ci改为register{backend}_ci,确保只匹配对应后端的注册调用。

关键文件:

  • scripts/ci/update_est_time.py(模块 CI基础设施): 唯一修改的文件,包含时间收集、计算和更新的核心逻辑变更。

关键符号:collect_timings, compute_medians, update_est_times

评论区精华

无review评论,PR由作者直接合并。从提交信息看,作者清晰描述了问题根源和修复方案。

  • 暂无高价值评论线程

风险与影响

  • 风险:技术风险较低:
    1. 回归风险:修改仅影响CI测试时间估算逻辑,不涉及核心推理路径,但若正则表达式匹配错误可能导致est_time更新到错误行。
    2. 兼容性:需要确保determine_backend函数能正确从所有CI作业名中提取后端标识,否则可能遗漏某些后端的时间数据。
    3. 数据完整性:修复后每个后端将独立统计时间,但若某个后端数据点不足(MIN_DATA_POINTS),其est_time可能不会被更新。
  • 影响:影响范围有限但重要:
    1. 对用户:无直接影响,仅影响内部CI基础设施。
    2. 对系统:确保CI测试时间估算更准确,有助于优化测试负载均衡和资源调度。
    3. 对团队:修复了跨后端时间数据污染问题,避免未来类似PR #22561中的错误更新,提升CI配置的可靠性。
  • 风险标记:正则表达式匹配风险, 后端标识提取依赖

关联脉络

  • PR #22557 fix: track est_time per suite instead of per backend: 同样修改update_est_time.py,但方向相反:该PR将时间统计从按后端改为按测试套件,而本PR是在此基础上进一步细化,需要区分同一套件下的不同后端。两者共同构成CI时间统计的演进脉络。
  • PR #22545 feat: add weekly workflow to update CI test est_time values: 同样涉及update_est_time.py脚本,添加了自动化工作流。本PR修复了该工作流依赖的时间统计逻辑。
  • PR #22561 未在历史PR列表中,但PR body提及: PR body明确指出#22561中出现了因本bug导致的错误更新(test_eagle3_basic.py的AMD est_time被CUDA数据污染),是本修复的直接诱因。

参与讨论