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 | ``${HOME}/.cache/models/Qwen/Qwen3-30B-A3B-Instruct-2507`` | +---------------------------------------+-------------------------------------------------------------------+ | Qwen2.5-VL-3B-Instruct | ``${HOME}/.cache/models/Qwen/Qwen2.5-VL-3B-Instruct`` | +---------------------------------------+-------------------------------------------------------------------+ | Qwen2.5-0.5B | ``${HOME}/.cache/models/Qwen/Qwen2.5-0.5B`` | +---------------------------------------+-------------------------------------------------------------------+ | Qwen2.5-0.5B-Instruct | ``${HOME}/.cache/models/Qwen/Qwen2.5-0.5B-Instruct`` | +---------------------------------------+-------------------------------------------------------------------+ | Qwen2.5-1.5B-Instruct | ``${HOME}/.cache/models/Qwen/Qwen2.5-1.5B-Instruct`` | +---------------------------------------+-------------------------------------------------------------------+ | Skywork-Reward-V2-Llama-3.2-1B | ``${HOME}/.cache/models/Skywork/Skywork-Reward-V2-Llama-3.2-1B`` | +---------------------------------------+-------------------------------------------------------------------+ 流水机器上的数据集与绝对路径: +--------------+---------------------------------------------------+ | 数据集名称 | 绝对路径 | +==============+===================================================+ | gsm8k | ``${HOME}/.cache/datasets/openai/gsm8k`` | +--------------+---------------------------------------------------+ | geo3k | ``${HOME}/.cache/datasets/hiyouga/geometry3k`` | +--------------+---------------------------------------------------+ **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..steps``) .. code-block:: yaml :linenos: name: your_yml_ascend # 工作流唯一标识 # 触发条件配置 on: push: branches: - main - v0.* pull_request: branches: - main paths: - ".github/workflows/your_yml_ascend.yml" # 必须包含此工作流文件路径 - "path/to/affected_files" # 需监控的相关代码路径 # 并发控制策略 concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} # 仅非main分支取消进行中的任务 permissions: contents: read # 最小权限原则 jobs: your_job_name: # 任务唯一标识 if: github.repository_owner == 'verl-project' # 仅在主仓库运行 runs-on: linux-aarch64-a2-4 # 硬件规格:a2实例,4卡NPU timeout-minutes: 60 # 任务超时阈值(分钟) container: #运行镜像 该示例为vllm的镜像 image: swr.ap-southeast-1.myhuaweicloud.com/base_image/ascend-ci/verl/verl:verl-8.5.0-910b-ubuntu22.04-py3.11-latest options: >- --shm-size 16g # 共享内存配置 env: HF_ENDPOINT: "https://hf-mirror.com" HF_HUB_ENABLE_HF_TRANSFER: "0" steps: - name: Check npu and CANN info run: | cat /usr/local/Ascend/ascend-toolkit/latest/"$(uname -i)"-linux/ascend_toolkit_install.info npu-smi info - name: Check initial pip list from image run: pip list - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 clean: true - name: Install dependencies run: | pip install -r requirements-npu.txt pip install -e . - name: Verify environment run: pip list # 以下为具体测试步骤(根据需求定制) - name: Preprocess dataset run: python examples/data_preprocess/your_script.py --local_dataset_path ${HOME}/.cache/datasets/your_dataset - name: Execute NPU test run: | ray stop --force bash tests/special_npu/your_test_script.sh **Note** ${HOME}/.cache/文件夹内一旦添加新内容,不会因CI跑完容器销毁而删除,请避免往该文件夹添加内容。 3. 添加单元测试 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 步骤: (1) 在 ``tests/`` 目录下创建或修改单元测试文件(例如 ``test_xxx.py``)。 (2) 若测试文件路径未被 ``npu_unit_test.yml`` 中的 ``--ignore-glob`` 规则排除,则会在以下命令中自动执行: .. code-block:: yaml pytest -s -x --ignore-glob="xxx" --ignore-glob="xxx" tests/ (3) 若测试路径在 ``--ignore-glob`` 排除范围内,需在 ``npu_unit_test.yml`` 中新增一个 step 来显式运行该测试。 (4) 如新增一批相关用例,建议单独创建专门的工作流文件以保持清晰。 4. 添加端到端测试脚本 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 步骤: (1) 在 ``tests/special_npu/`` 目录下创建端到端测试脚本。 (2) 在 ``.github/workflows/`` 目录中找到功能最接近的以 ``_ascend.yml`` 结尾的工作流文件,在其中添加一个 step 调用该脚本。 (3) 若测试场景独立或较复杂,可考虑单独创建新的工作流文件。 5. 测试策略建议 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * **单元测试**:覆盖核心函数、类与方法,确保逻辑正确。 * **集成/端到端测试**:覆盖典型训练、推理 pipeline,验证多模块协同与硬件适配。 * **资源管理**:一个workflow里的多个job为并行运行,请合理设置超时时间,避免任务长时间挂起,请控制单个 job 的运行时间在 40min 以内。 通过以上步骤,可系统化地为 verl 仓库添加 NPU 相关的自动化测试,确保代码变更在合并前经过充分验证。