NPU-CI 添加指导
Last updated: 02/02/2026.
我们在 verl 上增加基于华为昇腾设备的CI用例添加指导。
verl 仓库使用 GitHub Actions 作为 CI 平台,通过分层测试架构保障代码质量与系统稳定性。 NPU 相关的工作流主要包括:
npu_unit_test.yml:运行单元测试。以
_ascend.yml结尾的文件:运行针对 Ascend NPU 的端到端测试或专项测试。
添加新用例指南
1. 数据集与权重
流水机器上的权重与绝对路径:
模型名称 |
绝对路径 |
|---|---|
Qwen3-30B-A3B-Instruct-2507 |
|
Qwen2.5-VL-3B-Instruct |
|
Qwen2.5-0.5B |
|
Qwen2.5-0.5B-Instruct |
|
Qwen2.5-1.5B-Instruct |
|
Skywork-Reward-V2-Llama-3.2-1B |
|
流水机器上的数据集与绝对路径:
数据集名称 |
绝对路径 |
|---|---|
gsm8k |
|
geo3k |
|
Note
{HOME}是root
gpu用例中权重在~/models/路径下,如需适配可以用软链接,
ln -s /root/.cache/models ~/models此处为原始数据集,按需进行数据处理,如下。
python examples/data_preprocess/gsm8k_multiturn_sft.py --local_dataset_path ${HOME}/.cache/datasets/openai/gsm8k
2. 工作流 YAML 模板
如需新增一个工作流,可参考以下模板创建 .github/workflows/your_yml_ascend.yml 文件。
主要修改部分包括:
工作流名称(
name)触发条件(
on)运行环境(
runs-on)容器镜像(
container.image)具体执行步骤(
jobs.<job_id>.steps)
1name: your_yml_ascend # 工作流唯一标识
2# 触发条件配置
3on:
4 push:
5 branches:
6 - main
7 - v0.*
8 pull_request:
9 branches:
10 - main
11 paths:
12 - ".github/workflows/your_yml_ascend.yml" # 必须包含此工作流文件路径
13 - "path/to/affected_files" # 需监控的相关代码路径
14
15# 并发控制策略
16concurrency:
17 group: ${{ github.workflow }}-${{ github.ref }}
18 cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} # 仅非main分支取消进行中的任务
19
20permissions:
21 contents: read # 最小权限原则
22
23jobs:
24 your_job_name: # 任务唯一标识
25 if: github.repository_owner == 'verl-project' # 仅在主仓库运行
26 runs-on: linux-aarch64-a2-4 # 硬件规格:a2实例,4卡NPU
27 timeout-minutes: 60 # 任务超时阈值(分钟)
28 container:
29 #运行镜像 该示例为vllm的镜像
30 image: swr.ap-southeast-1.myhuaweicloud.com/base_image/ascend-ci/verl/verl:verl-8.5.0-910b-ubuntu22.04-py3.11-latest
31 options: >-
32 --shm-size 16g # 共享内存配置
33 env:
34 HF_ENDPOINT: "https://hf-mirror.com"
35 HF_HUB_ENABLE_HF_TRANSFER: "0"
36 steps:
37 - name: Check npu and CANN info
38 run: |
39 cat /usr/local/Ascend/ascend-toolkit/latest/"$(uname -i)"-linux/ascend_toolkit_install.info
40 npu-smi info
41 - name: Check initial pip list from image
42 run: pip list
43 - name: Checkout repository
44 uses: actions/checkout@v4
45 with:
46 fetch-depth: 0
47 clean: true
48 - name: Install dependencies
49 run: |
50 pip install --no-deps -e .
51 - name: Verify environment
52 run: pip list
53 # 以下为具体测试步骤(根据需求定制)
54 - name: Preprocess dataset
55 run: python examples/data_preprocess/your_script.py --local_dataset_path ${HOME}/.cache/datasets/your_dataset
56 - name: Execute NPU test
57 run: |
58 ray stop --force
59 bash tests/special_npu/your_test_script.sh
Note
${HOME}/.cache/文件夹内一旦添加新内容,不会因CI跑完容器销毁而删除,请避免往该文件夹添加内容。
3. 添加单元测试
步骤:
在
tests/目录下创建或修改单元测试文件(例如test_xxx.py)。若测试文件路径未被
npu_unit_test.yml中的--ignore-glob规则排除,则会在以下命令中自动执行:
pytest -s -x --ignore-glob="xxx" --ignore-glob="xxx" tests/
若测试路径在
--ignore-glob排除范围内,需在npu_unit_test.yml中新增一个 step 来显式运行该测试。如新增一批相关用例,建议单独创建专门的工作流文件以保持清晰。
4. 添加端到端测试脚本
步骤:
在
tests/special_npu/目录下创建端到端测试脚本。在
.github/workflows/目录中找到功能最接近的以_ascend.yml结尾的工作流文件,在其中添加一个 step 调用该脚本。若测试场景独立或较复杂,可考虑单独创建新的工作流文件。
5. 测试策略建议
单元测试:覆盖核心函数、类与方法,确保逻辑正确。
集成/端到端测试:覆盖典型训练、推理 pipeline,验证多模块协同与硬件适配。
资源管理:一个workflow里的多个job为并行运行,请合理设置超时时间,避免任务长时间挂起,请控制单个 job 的运行时间在 40min 以内。
通过以上步骤,可系统化地为 verl 仓库添加 NPU 相关的自动化测试,确保代码变更在合并前经过充分验证。