执行摘要
- 一句话:优化 CI 文档并标记 CPU-only 测试
- 推荐动作:值得快速浏览,了解项目 CI 架构演变。设计决策“通过
NUM_GPUS 常量区分 CPU/GPU 测试”简单且有效,可在类似项目中复用。
功能与动机
原有 CI 文档结构陈旧,未反映实际的两层测试拆分;CPU 测试文件缺少 NUM_GPUS 标记,导致 changed-test job 默认按 8 GPU 调度,浪费资源。本次优化旨在让文档与实际 CI 流程一致,并让 CPU 测试显式声明自身需求。
实现拆解
- 重写 CI 文档:分别更新
docs/en/developer_guide/ci.md 和 docs/zh/developer_guide/ci.md,将原有单一 label 触发描述重构为“CPU 层 + GPU 层”的双层结构;新增 changed-test job 说明,强调 NUM_GPUS 常量在动态矩阵构建中的作用。
- 标记 CPU-only 测试:在
tests/ 下的 10 个测试文件(test_cp_utils.py、test_dp_schedule.py、test_loss_cp_invariance.py、test_megatron_argument_validation.py、test_metric_report.py、test_metric_report_dist.py、test_rm_deepscaler.py、test_rm_f1.py、test_rm_math.py、test_rm_math_dapo.py)顶部添加 NUM_GPUS = 0 常量。这些文件中的测试均为纯 CPU 逻辑,不依赖 GPU。
- 合并主分支:
Merge branch 'main' into zilin/test 确保分支与最新 main 同步。
关键文件:
docs/en/developer_guide/ci.md(模块 文档;类别 docs;类型 documentation): 重写英文 CI 文档,新增 CPU/GPU 两层架构说明及 changed-test 工作流描述,是本次 PR 的核心文档变更。
docs/zh/developer_guide/ci.md(模块 文档;类别 docs;类型 documentation): 与英文文档同步更新,确保中英文内容一致。
tests/test_cp_utils.py(模块 测试;类别 test;类型 test-coverage): 作为 CPU-only 测试的代表,添加 NUM_GPUS = 0 常量的模式适用于所有同类测试文件。
关键符号:未识别
关键源码片段
tests/test_cp_utils.py
作为 CPU-only 测试的代表,添加 NUM_GPUS = 0 常量的模式适用于所有同类测试文件。
"""CPU unit tests for slime.backends.megatron_utils.cp_utils.get_sum_of_sample_mean.
...
"""
from __future__ import annotations
# 导入 megatron 桩模块
import _cp_dist_helpers # noqa: F401
import pytest
import torch
from slime.backends.megatron_utils.cp_utils import ( # noqa: E402
get_logits_and_tokens_offset_with_cp,
get_sum_of_sample_mean,
)
# 标记为 CPU 测试,CI 不会为此文件申请 GPU
NUM_GPUS = 0
def _make_inputs(per_sample_lengths: list[int]):
...
评论区精华
PR 未产生任何 review 讨论或评论。
风险与影响
- 风险:风险极低。文档更新不涉及运行时逻辑;
NUM_GPUS = 0 的添加仅影响 CI 调度,不会改变测试行为。潜在风险是未来若有新的 CPU 测试忘记添加该常量,CI 会误认为需要 GPU,但可通过 CI 模板的默认值兜底(默认 8 GPU)。
- 影响:CI 效率提升:CPU 测试不再错误触发 GPU 集群资源抢占,队列等待时间缩短。文档准确性提高:开发者可通过文档快速理解 CI 分层及触发条件。影响范围限于 CI 流程和文档,对训练/推理核心代码无影响。
- 风险标记:低风险文档与标记变更
关联脉络
参与讨论