Prhub

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

原始 PR 作者 ch-wan 合并时间 2026-04-11 08:54 文件变更 1 提交数 1 评论 1 代码增减 +17 / -17

执行摘要

修复 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

关键符号

collect_timings compute_medians update_est_times

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

评论区精华

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

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

风险与影响

技术风险较低:

  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 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论