执行摘要
- 一句话:修复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文件:
- 数据结构变更:将时间收集字典的键从(relative_path, suite)改为(relative_path, suite, backend),后端通过determine_backend函数从作业名中提取。
- 中位数计算:compute_medians函数相应更新,处理三元组键。
- 分组逻辑:update_est_times函数中将by_file从{rel_path: {suite: median}}改为{rel_path: [(suite, backend, median), ...]}。
- 正则表达式:将匹配模式从register_\w+ci改为register{backend}_ci,确保只匹配对应后端的注册调用。
关键文件:
scripts/ci/update_est_time.py(模块 CI基础设施): 唯一修改的文件,包含时间收集、计算和更新的核心逻辑变更。
关键符号:collect_timings, compute_medians, update_est_times
评论区精华
无review评论,PR由作者直接合并。从提交信息看,作者清晰描述了问题根源和修复方案。
风险与影响
- 风险:技术风险较低:
- 回归风险:修改仅影响CI测试时间估算逻辑,不涉及核心推理路径,但若正则表达式匹配错误可能导致est_time更新到错误行。
- 兼容性:需要确保determine_backend函数能正确从所有CI作业名中提取后端标识,否则可能遗漏某些后端的时间数据。
- 数据完整性:修复后每个后端将独立统计时间,但若某个后端数据点不足(MIN_DATA_POINTS),其est_time可能不会被更新。
- 影响:影响范围有限但重要:
- 对用户:无直接影响,仅影响内部CI基础设施。
- 对系统:确保CI测试时间估算更准确,有助于优化测试负载均衡和资源调度。
- 对团队:修复了跨后端时间数据污染问题,避免未来类似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数据污染),是本修复的直接诱因。
参与讨论