执行摘要
- 一句话:替换 Qwen2.5 CI 测试为 Qwen3 并添加基线验证
- 推荐动作:如果关注 NPU CI 的演进和模型升级策略,可以快速浏览该 PR。但在 shell 脚本质量方面参考价值有限(未采纳自动化建议)。建议后续修复硬编码路径问题。
功能与动机
根据 PR body,目的是继续将 Qwen2.5 模型替换为 Qwen3 模型,并为 NPU 夜间 CI 测试添加基线验证脚本。从 commit 历史看,还涉及适配 transformers 5.3.0 的兼容性修复。替换过时模型可确保 CI 测试覆盖最新模型,基线验证有助于检测训练回归。
实现拆解
- 删除旧测试脚本:移除
tests/special_npu/run_qwen2_5_05b_sft_peft_sp2.sh 和 tests/special_npu/run_qwen2_5_vl_3b_npu.sh,这两个脚本分别对应 Qwen2.5-0.5B SFT/PEFT 和 Qwen2.5-VL-3B GRPO 测试。
- 新增 Qwen3-VL 测试脚本:创建
tests/special_npu/run_qwen3_vl_8b_Instruct_fsdp2_npu.sh,用于在 NPU 上运行 Qwen3-VL-8B GRPO 训练(vLLM rollout + FSDP2),支持参数化配置。
- 更新 nightly CI 配置:在
.github/workflows/nightly_ascend.yml 中添加新的 job nightlyCI_grpo_qwen3_vl_8b_Instruct_fsdp2_vllm_ascend,包含执行新脚本的步骤,并在已有的 PPO 测试后添加基线校验步骤(通过 check_ppo_qwen3-8b_fsdp_npu.py 对比日志与基线文件)。
- 更新 E2E CI 配置:在
.github/workflows/e2e_ascend.yml 中将 VLM RL 测试的 runner 从 linux-aarch64-a3-8 改为 linux-aarch64-a2b3-8,镜像从 verl-9.0.0-a3 换为 verl-9.0.0-910b,并将执行脚本从 run_qwen2_5_vl_3b_npu.sh 替换为 run_qwen3_vl_8b_Instruct_fsdp2_npu.sh。
- 微调 PPO 测试脚本:修改
run_ppo_qwen3-8b_fsdp_npu.sh 的日志输出路径,从带时间戳的文件名改为固定目录下的固定文件名。
关键文件:
tests/special_npu/run_qwen3_vl_8b_Instruct_fsdp2_npu.sh(模块 NPU 测试;类别 test;类型 test-coverage): 新增的主要测试脚本,定义了 Qwen3-VL-8B 在 NPU 上的 GRPO 训练参数和流程,是替换后的核心检验用例。
.github/workflows/nightly_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): 关键的 CI 配置文件,新增了 Qwen3-VL nightly job 和基线验证步骤,直接影响夜间测试的覆盖范围。
tests/special_npu/run_qwen2_5_05b_sft_peft_sp2.sh(模块 NPU 旧测试;类别 test;类型 deletion): 被删除的旧测试脚本,反映移除 Qwen2.5 测试覆盖。
tests/special_npu/run_qwen2_5_vl_3b_npu.sh(模块 NPU 旧测试;类别 test;类型 deletion): 被删除的旧测试脚本,反映移除 Qwen2.5-VL 测试覆盖。
.github/workflows/e2e_ascend.yml(模块 CI 配置;类别 infra;类型 infrastructure): E2E CI 配置更新,替换 runner 和镜像,指向新 Qwen3-VL 测试脚本。
tests/special_npu/nightly_ci_ascend/run_ppo_qwen3-8b_fsdp_npu.sh(模块 NPU 测试;类别 test;类型 test-coverage): 小幅修改日志路径,确保 nightly 基线校验能定位到固定文件名。
关键符号:未识别
关键源码片段
tests/special_npu/run_qwen3_vl_8b_Instruct_fsdp2_npu.sh
新增的主要测试脚本,定义了 Qwen3-VL-8B 在 NPU 上的 GRPO 训练参数和流程,是替换后的核心检验用例。
#!/usr/bin/env bash
# GRPO | vision | vLLM rollout | FSDP training | NPU
# Canonical Qwen3-VL baseline on Geo3K.
set -xeuo pipefail
# 模型和路径配置,允许通过环境变量覆盖
MODEL_ID=${MODEL_ID:-Qwen/Qwen3-VL-8B-Instruct}
MODEL_PATH=${MODEL_PATH:-${HOME}/.cache/models/${MODEL_ID}}
# ... 其他参数定义 ...
# 参数数组定义,每个数组对应一组配置
DATA=(
algorithm.adv_estimator=grpo
algorithm.use_kl_in_reward=False
data.train_files=${TRAIN_FILE}
data.val_files=${TEST_FILE}
data.image_key=images
# ...
)
MODEL=(
actor_rollout_ref.model.path="$MODEL_PATH"
actor_rollout_ref.model.use_remove_padding=True
actor_rollout_ref.model.enable_gradient_checkpointing=True
)
ACTOR=(
actor_rollout_ref.actor.strategy=fsdp2
# ...
)
ROLLOUT=(
actor_rollout_ref.rollout.name=vllm
actor_rollout_ref.rollout.tensor_model_parallel_size=${ROLLOUT_TP}
# ...
)
# ... REF, TRAINER, EXTRA 等数组 ...
# 启动命令
python3 -m verl.trainer.main_ppo \
"${DATA[@]}" \
"${MODEL[@]}" \
"${ACTOR[@]}" \
"${ROLLOUT[@]}" \
"${REF[@]}" \
"${TRAINER[@]}" \
"${EXTRA[@]}" \
"$@" | tee $LOG_DIR/$SCRIPT_NAME.log
评论区精华
仅有的 review 来自 gemini-code-assist[bot],未收到人工回复或采纳。主要建议包括:
风险与影响
- 风险:
- 测试脚本健壮性风险:新增脚本中仍使用硬编码路径
/root/.cache 且未创建日志目录,可能导致非 root 环境下运行失败或日志丢失。
- 回归覆盖风险:删除 Qwen2.5 测试脚本后,若 Qwen2.5 模型有特定回归问题将不再被 CI 捕获。
- CI 配置兼容性:e2e_ascend.yml 中更换 runner 和镜像版本,可能引入新环境的不稳定因素(如依赖版本变化)。
- 影响:主要影响 NPU 相关的 CI 测试套件。对用户无直接影响,对团队维护者而言,夜间 CI 和 E2E CI 的测试范围从 Qwen2.5 全面迁移至 Qwen3,需确保新基线验证逻辑正确。影响程度中等。
- 风险标记:测试脚本中含硬编码路径, 缺少 stderr 重定向, 覆盖可能不完整
关联脉络
- PR #6520 [ci] chore: npu ci use cann9.0.0: 同样修改了 NPU CI 配置和测试脚本,涉及 CANN 升级和模型兼容性,与本次模型替换和 CI 优化相关。
- PR #6521 [ci] chore: add npu sglang nightly ci: 新增 NPU SGLang 夜间 CI 测试,与本 PR 在 nightly CI 配置(nightly_ascend.yml)上有重叠,都是扩展 NPU 测试覆盖。
参与讨论