Prhub

#5935 [ci] chore: Add veomni npu ci test

原始 PR 作者 wangshuyang31 合并时间 2026-04-13 15:58 文件变更 2 提交数 11 评论 7 代码增减 +165 / -10

执行摘要

为 veomni 引擎添加 NPU CI 测试

veomni 引擎在 Ascend NPU 上缺少持续集成测试,无法及时捕获 NPU 环境下的回归问题。该 PR 将 veomni NPU 测试纳入 CI 流水线,保障多后端兼容性和稳定性。

建议阅读以了解 veomni NPU CI 的配置方式,尤其是合并测试脚本的模式。对于关注 CI 基础设施和 NPU 后端的工程师,本 PR 提供了可参考的集成范例。

讨论亮点
  • gemini-code-assist[bot] 指出 bash 参数扩展语法错误:${VERL_EXP_NAME:...} 应改为 ${VERL_EXP_NAME:-...}。同时指出 vLLM rollout 配置中 TP=4, EP=4 需要 16 GPU,与可用 8 GPU 不匹配。——已修复。
  • wucong25 建议将 NPU 测试脚本与 GPU 脚本合并,而非额外创建一个单独脚本。——已被采纳,最终删除了 NPU 独立脚本。
  • 另有评论提及“这里同步修改”要求联动更新其他配置,作者回应后达成一致。

实现拆解

  1. 新增 CI workflow:在 .github/workflows/e2e_ppo_trainer_veomni_vllm_ascend.yml 中定义 veomni NPU 端到端测试的触发条件、运行环境和执行步骤。
  2. 改造测试脚本:修改 tests/special_e2e/run_ppo_trainer_veomni.sh,通过 verl.utils.device.get_device_name 自动检测设备类型(GPU 或 NPU),动态设置 profiler 配置参数(Contents、Tool 等),实现单脚本多后端支持。
  3. 修复 review 问题:修正 bash 参数扩展语法错误(${VERL_EXP_NAME:-...}),调整 rollout 并行配置(TP、EP)以避免资源不匹配。
  4. 删除冗余脚本:移除最初创建的 run_ppo_trainer_veomni_npu.sh,合并到通用脚本中。
文件 模块 状态 重要度
.github/workflows/e2e_ppo_trainer_veomni_vllm_ascend.yml CI 配置 added 6.04
tests/special_e2e/run_ppo_trainer_veomni.sh 端到端测试 modified 5.75

关键源码片段

tests/special_e2e/run_ppo_trainer_veomni.sh test-coverage

被修改的测试脚本,从仅支持 GPU 改为支持 GPU 和 NPU 通用,是测试执行的主体。

#!/usr/bin/env bash
set -xeuo pipefail
​
# 其他设置和公共参数 ...device_name=$(python3 - <<'EOF'
from verl.utils.device import get_device_name
print(get_device_name())
EOF
)common_params=( ... ) # 公共训练参数数组# 根据设备类型选择 profiler 配置
if [ -n "$device_name" ] && [ "$device_name" == "cuda" ]; then
    # GPU 路径:使用 torch profiler
    python3 -m verl.trainer.main_ppo \
        "${common_params[@]}" \
        actor_rollout_ref.actor.profiler.tool_config.torch.discrete=$DISCRETE \
        actor_rollout_ref.actor.profiler.tool_config.torch.contents=['cuda'] \
        global_profiler.tool=torch $@
    python3 "tests/utils/test_check_profiler_output.py" --profiler_dir="$SAVE_PATH" --device="gpu"
elif [ -n "$device_name" ] && [ "$device_name" == "npu" ]; then
    # NPU 路径:使用 npu profiler
    python3 -m verl.trainer.main_ppo \
        "${common_params[@]}" \
        actor_rollout_ref.actor.profiler.tool_config.npu.discrete=$DISCRETE \
        actor_rollout_ref.actor.profiler.tool_config.npu.contents=['npu','cpu'] \
        global_profiler.tool=npu $@
    python3 "tests/utils/test_check_profiler_output.py" --profiler_dir="$SAVE_PATH" --device="npu"
else
    echo "Unknown device: $device_name"
    exit 1
fi

评论区精华

VERL_EXP_NAME 参数扩展语法错误 正确性

gemini-code-assist[bot] 指出 bash 参数扩展语法错误:`${VERL_EXP_NAME:...}` 会导致 substring 扩展,应使用 `${VERL_EXP_NAME:-...}` 提供默认值。

结论:作者在后续提交中修正为 `${VERL_EXP_NAME:-function-reward-minimal-fsdp-size${FSDP_SIZE}}`。 · 已解决

GPU 资源配置(TP*EP)不匹配 正确性

gemini-code-assist[bot] 指出 rollout 中 TP=4, EP=4 需要 16 GPU,而节点仅有 8 GPU,任务将失败。

结论:作者调整了 TP=2,EP 等相关参数以匹配 8 GPU 环境。 · 已解决

NPU 测试脚本与 GPU 合并 设计

wucong25 建议将 NPU 测试脚本与 GPU 脚本合并,避免维护两套脚本。

结论:作者采纳建议,删除 NPU 独立脚本,修改通用脚本通过设备检测动态分支。 · 已解决

风险与影响

主要风险在于修改了原有 GPU 测试脚本,可能对 GPU CI 造成回归。需确认 GPU 路径仍能正常工作。NPU 环境(如华为 Ascend 集群)稳定性可能影响 CI 可靠性。并行资源配置(TP、EP)需与实际 GPU 数量匹配,否则任务启动失败。新增 workflow 会增加 CI 总耗时。

对用户无直接影响。对开发团队,veomni 引擎的 NPU 支持将纳入 CI 门禁,有助于提前发现兼容性问题。CI 流水线新增一个端到端测试 job,运行时间较长(约数十分钟)。修改后的通用测试脚本降低了维护两个独立脚本的成本。

gpu_regression npu_env_stability parallel_config

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论