执行摘要
- 一句话:为 veomni 引擎添加 NPU CI 测试
- 推荐动作:建议阅读以了解 veomni NPU CI 的配置方式,尤其是合并测试脚本的模式。对于关注 CI 基础设施和 NPU 后端的工程师,本 PR 提供了可参考的集成范例。
功能与动机
veomni 引擎在 Ascend NPU 上缺少持续集成测试,无法及时捕获 NPU 环境下的回归问题。该 PR 将 veomni NPU 测试纳入 CI 流水线,保障多后端兼容性和稳定性。
实现拆解
- 新增 CI workflow:在
.github/workflows/e2e_ppo_trainer_veomni_vllm_ascend.yml 中定义 veomni NPU 端到端测试的触发条件、运行环境和执行步骤。
- 改造测试脚本:修改
tests/special_e2e/run_ppo_trainer_veomni.sh,通过 verl.utils.device.get_device_name 自动检测设备类型(GPU 或 NPU),动态设置 profiler 配置参数(Contents、Tool 等),实现单脚本多后端支持。
- 修复 review 问题:修正 bash 参数扩展语法错误(
${VERL_EXP_NAME:-...}),调整 rollout 并行配置(TP、EP)以避免资源不匹配。
- 删除冗余脚本:移除最初创建的
run_ppo_trainer_veomni_npu.sh,合并到通用脚本中。
关键文件:
.github/workflows/e2e_ppo_trainer_veomni_vllm_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): 新增的 CI workflow,定义了 veomni NPU 端到端测试的触发条件、运行环境和执行步骤,是本次 PR 的核心配置。
tests/special_e2e/run_ppo_trainer_veomni.sh(模块 端到端测试;类别 test;类型 test-coverage): 被修改的测试脚本,从仅支持 GPU 改为支持 GPU 和 NPU 通用,是测试执行的主体。
关键符号:未识别
关键源码片段
tests/special_e2e/run_ppo_trainer_veomni.sh
被修改的测试脚本,从仅支持 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
评论区精华
风险与影响
- 风险:主要风险在于修改了原有 GPU 测试脚本,可能对 GPU CI 造成回归。需确认 GPU 路径仍能正常工作。NPU 环境(如华为 Ascend 集群)稳定性可能影响 CI 可靠性。并行资源配置(TP、EP)需与实际 GPU 数量匹配,否则任务启动失败。新增 workflow 会增加 CI 总耗时。
- 影响:对用户无直接影响。对开发团队,veomni 引擎的 NPU 支持将纳入 CI 门禁,有助于提前发现兼容性问题。CI 流水线新增一个端到端测试 job,运行时间较长(约数十分钟)。修改后的通用测试脚本降低了维护两个独立脚本的成本。
- 风险标记:gpu_regression, npu_env_stability, parallel_config
关联脉络
参与讨论