Prhub

#22545 feat: add weekly workflow to update CI test est_time values

原始 PR 作者 ch-wan 合并时间 2026-04-11 06:03 文件变更 2 提交数 3 评论 2 代码增减 +323 / -0

执行摘要

添加每周工作流自动化更新 CI 测试估计时间,优化负载均衡。

根据PR body,'est_time values in CI test registration calls drift from actual execution times over time. These values drive the LPT load-balancing algorithm that partitions tests across parallel CI jobs. Inaccurate estimates lead to unbalanced partitions, wasting CI resources.' 目标是自动化保持这些值的准确性。

该PR值得精读,特别是脚本中的日志解析、中位数计算和正则表达式更新逻辑,这些设计决策展示了CI自动化的最佳实践;建议关注GitHub API集成和错误处理部分,以了解如何稳健处理外部数据源。

讨论亮点

review中gemini-code-assist[bot]指出两个核心问题:

  1. 后端检测函数determine_backend仅识别'cpu'并默认其他为'cuda',需要支持'amd'和'npu'以避免混合硬件平台时间数据;
  2. 更新逻辑的正则表达式不够稳健,无法处理空格、浮点数或文件内多处est_time值。作者通过后续提交解决了这些问题:更新了determine_backend以包括'amd'和'npu',并改进了更新逻辑。讨论已解决,无未决疑虑。

实现拆解

实现方案包括两个新增文件:

  1. .github/workflows/weekly-update-est-time.yml:每周六00:00 UTC触发的GitHub Actions工作流,运行更新脚本并在检测到变更时自动创建PR。
  2. scripts/ci/update_est_time.py:Python脚本,通过GitHub API获取最近20个调度的PR Test运行日志,解析每个测试文件的执行时间,计算最后10次成功执行的中位数,并使用正则表达式匹配和更新源代码中的est_time字面量。目前仅支持NVIDIA后端(CUDA + CPU),计划未来扩展至AMD、NPU等。
文件 模块 状态 重要度
.github/workflows/weekly-update-est-time.yml CI Infrastructure added 7.0
scripts/ci/update_est_time.py CI Tooling added 8.0

关键符号

determine_backend parse_job_logs gh_api update_file_est_times

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

评论区精华

后端检测支持扩展 设计

gemini-code-assist[bot] 指出 determine_backend 函数仅识别 'cpu',默认其他为 'cuda',而 CI 注册支持 'amd' 和 'npu' 后端,混合数据会导致不准确。

结论:作者通过提交更新了函数以包括 'amd' 和 'npu' 后端,确保时间数据按硬件平台正确分类。 · 已解决

更新逻辑稳健性改进 正确性

review 指出正则表达式和更新逻辑可能无法处理空格、浮点数或文件内多处 est_time 值,存在误匹配风险。

结论:作者在后续提交中改进了逻辑,但具体细节未在提供材料中显示;评论被采纳并解决。 · 已解决

风险与影响

技术风险包括:

  1. 依赖GitHub API,若API变更或访问失败可能导致脚本中断(文件:scripts/ci/update_est_time.py中的gh_api函数)。
  2. 正则表达式更新可能错误匹配或遗漏est_time值,导致数据不准确(如浮点数处理、多行匹配问题)。
  3. 计算基于最后10次执行的中位数,在测试逻辑频繁变更时可能导致估计偏差。
  4. 自动化PR创建需GH_PAT_FOR_PULL_REQUEST权限,若泄露可能引入安全风险。

对CI系统:提高LPT负载均衡算法准确性,减少测试分区不平衡,提升并行测试效率和资源利用率,预计减少浪费。对团队:自动化减轻手动更新负担,但需监控脚本运行和日志解析的准确性。影响范围限于CI测试配置,不直接影响模型推理性能或用户功能。

依赖外部 API 正则表达式脆弱 数据采样偏差

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论