执行摘要
- 一句话:扩展基础模型初始化测试分片数,大幅降低 CI 耗时。
- 推荐动作:该 PR 是一个低风险、高回报的 CI 优化调整。对于关注 CI 效率和开发流程的工程师,值得快速浏览其数据依据(PR body 中的运行时间统计)和配置变更。它展示了基于数据驱动 CI 调优的实践。
功能与动机
在 24 小时 CI 仪表盘窗口中,所有四个现有的 Basic Models (Extra Initialization) 分片在 P90 时均超过了 45 分钟(最快 2848 秒,最慢 3367 秒)。现有的四路 pytest 分割对于当前的模型注册表来说过于粗糙,需要通过更细粒度的分片来均衡负载,将单个分片的运行时间控制在目标值(约 20 分钟)以内。
实现拆解
- 入口与目标:变更仅涉及 CI 配置文件
.buildkite/test_areas/models_basic.yaml,目标是调整 Basic Models (Extra Initialization) 测试任务的并行度和超时设置。
- 核心配置调整:将
parallelism 从 4 修改为 14,使得 pytest 的 --num-shards 参数值增加,测试用例集合被分割成更多份。同时将 timeout_in_minutes 从 100 大幅降低至 30 分钟,以反映每个分片预期运行时间的缩短。
- 测试命令不变:测试执行命令
pytest -v -s models/test_initialization.py -k 'not test_can_initialize_small_subset' --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT --shard-id=$$BUILDKITE_PARALLEL_JOB 保持不变,完全依赖 pytest 内置的确定性分片插件来分配测试用例。此变更不修改测试逻辑本身。
- 验证与影响:变更已通过 YAML 语法检查、CI 步骤 schema 校验以及针对性 CI 构建验证,所有 14 个新分片均成功通过。此变更是纯粹的 CI 配置优化,不影响应用代码、运行时行为或测试覆盖范围。
关键文件:
.buildkite/test_areas/models_basic.yaml(模块 CI 配置;类别 config;类型 configuration): 该文件是此次变更的唯一文件,包含了需要调整的 CI 任务定义、并行度和超时配置。
关键符号:未识别
评论区精华
本 PR 的讨论非常简略,仅包含自动化评论和维护者的批准操作。这表明变更方案清晰且风险低,得到了维护者的直接认可。
风险与影响
-
风险:
- 资源消耗:分片数从 4 增至 14,意味着该 CI 步骤同时消耗的 GPU 资源增加了 2.5 倍。虽然单个分片的运行时间缩短了,但总体的 GPU 分钟成本会显著上升,需要团队在 CI 效率和基础设施成本之间进行权衡。
- 配置僵化风险:如果未来模型注册表快速增长,或出现初始化时间异常长的模型家族,14 个分片可能很快再次成为瓶颈,需要类似地再次调整。当前的调整是基于历史数据的“快照”,需要持续监控。
- 影响:影响范围:仅影响 CI/CD 基础设施中的一个特定测试组。
影响程度:正面影响显著,预计能将该测试步骤的 P90 运行时间从近 1 小时缩短至 20 分钟以内,从而加快开发者获取 CI 反馈的速度。负面风险是 CI 资源消耗的增加。对最终用户和系统运行时无任何直接影响。
-
风险标记:资源消耗增加, 可能需要再次调整
关联脉络
- PR #54754 [CI] Shard long kernel test groups: 同属 CI 基础设施优化系列 PR,采用类似的分片策略(增加并行度、调整超时)来缩短测试耗时。
- PR #54752 [CI] Shard distributed model jobs above the 24h P90 threshold: 同属 CI 基础设施优化系列 PR,针对分布式模型测试进行分片,与本 PR 解决同一类(测试时间过长)问题。
- PR #52353 [CI] Split nightly MTP acceptance tests: 更早的 CI 分片优化 PR,展示了团队持续监控和优化 CI 耗时的实践。
参与讨论