已合并
【RFC】split ut case by execute time #40543
fengyixing创建于 7月9日
【RFC】split ut case by execute time #40543
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 fengyixing 的贡献)7月9日 创建了 pull request,commit 102a32d2
atomgit-bot
7月9日 评论:
7月9日 评论:
变更摘要
此 PR 引入基于历史执行耗时的用例拆分机制,替代原有的轮询(round-robin)分配方式,并支持对慢文件(总耗时 ≥ 300 秒)进行类级拆分。新增 ci/split_by_time.py 模块实现 LPT 贪心算法,将用例按预估耗时均匀分配到各机器;同时改造 exec_ut 函数,使其能按类粒度执行并记录类级耗时数据,最终输出到 temp_time_data.json 用于后续迭代。
主要改动
- 新增
ci/split_by_time.py模块:实现load_and_validate_time_data、build_split_units、split_by_time等函数,基于time_data.json中的timedata字典,使用 LPT 贪心算法将用例文件及类按预估耗时分配到world_size台机器,慢文件在无类级数据时通过 AST 发现测试类并以默认 60 秒拆分。 TestMgr增加test_classes字段:在ci/access_control/test_manager.py的__init__中初始化self.test_classes,用于存储类级拆分信息,格式为{'ut_files': {file_path: [class_name]}, 'op_ut_files': {}}。exec_ut支持类级执行与耗时记录:在ci/access_control_test.py中扩展exec_ut和内部run_tests,当传入test_classes时逐个类执行(通过 pytest-k过滤),记录每个成功类的耗时到class_durations,最终汇总写入BASE_DIR / 'temp_time_data.json'。- 主流程集成基于时间的分发逻辑:在
ci/access_control_test.py的__main__中加载time_data.json,若有效则调用split_by_time进行分发并设置test_mgr.test_classes,否则回退到原有的split_test_files轮询方式。


ascend-robot
7月9日 评论:
7月9日 评论:
atomgit-bot
7月9日 评论:
7月9日 评论:
代码审查
现在我已经对所有三个变更文件进行了全面审查。让我给出最终总结。
审查总结
各文件审查结果
| 文件 | 审查结论 |
|---|---|
ci/access_control/test_manager.py |
无问题 — 仅新增 test_classes 属性初始化,变更安全 |
ci/access_control_test.py |
发现 2 个 P3 问题:不可达死代码 + 数据一致性 |
ci/split_by_time.py |
无问题 — 逻辑清晰,LPT 算法实现正确,边界处理合理 |
问题统计
- P0: 0
- P1: 0
- P2: 0
- P3: 2
整体风险评估:低风险
此变更的核心逻辑(基于历史耗时数据使用 LPT 算法拆分用例)设计合理,实现正确。发现的两个问题均为 P3 级别:一个是防御性死代码可能在未来成为潜伏缺陷,另一个是 npu_core 过滤路径上的数据一致性问题(无运行时影响)。两个问题均不影响当前功能的正确性和 CI 流水线的正常运转,可以合入后再优化。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


7月9日 添加了label:ascend-cla/yes
此处折叠了53条消息 查看更多
7月14日 添加了label:lgtm
7月14日 删除了label:ci-pipeline-passed
7月14日 合入了pull request
ascend-robot
7月14日 评论:
7月14日 评论:
流水线 pytorch_gitcode_PR_multiVersion#12493 [ commitID:262fe625 ] 已完成


【合入来源】
【修改方案】
【资料变更】
【接口变更】
【功能验证】
【CheckList】