# PR #6554 完整报告

- 仓库：`verl-project/verl`
- 标题：[ci] chore: continue to replace the qwen25 model with the qwen3 model
- 合并时间：2026-06-02 10:05
- 原文链接：http://prhub.com.cn/verl-project/verl/pull/6554

---

# 执行摘要

- 一句话：替换 Qwen2.5 CI 测试为 Qwen3 并添加基线验证
- 推荐动作：如果关注 NPU CI 的演进和模型升级策略，可以快速浏览该 PR。但在 shell 脚本质量方面参考价值有限（未采纳自动化建议）。建议后续修复硬编码路径问题。

# 功能与动机

根据 PR body，目的是继续将 Qwen2.5 模型替换为 Qwen3 模型，并为 NPU 夜间 CI 测试添加基线验证脚本。从 commit 历史看，还涉及适配 transformers 5.3.0 的兼容性修复。替换过时模型可确保 CI 测试覆盖最新模型，基线验证有助于检测训练回归。

# 实现拆解

1. **删除旧测试脚本**：移除 `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 测试。
2. **新增 Qwen3-VL 测试脚本**：创建 `tests/special_npu/run_qwen3_vl_8b_Instruct_fsdp2_npu.sh`，用于在 NPU 上运行 Qwen3-VL-8B GRPO 训练（vLLM rollout + FSDP2），支持参数化配置。
3. **更新 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` 对比日志与基线文件）。
4. **更新 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`。
5. **微调 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 训练参数和流程，是替换后的核心检验用例。

```bash
#!/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` 替换为 `${HOME}/.cache`，避免非 root 用户权限问题。
- 使用 `mkdir -p` 确保日志目录存在，并双引号引用变量防止 word splitting。
- 在管道前重定向 stderr (`2>&1`) 以捕获错误输出。这些建议均未在最终合并版本中体现。

- Shell 脚本最佳实践 (style): 建议未在最终 commit 中被采纳，但 PR 依然合并。

# 风险与影响

- 风险：
 1. **测试脚本健壮性风险**：新增脚本中仍使用硬编码路径 `/root/.cache` 且未创建日志目录，可能导致非 root 环境下运行失败或日志丢失。
 2. **回归覆盖风险**：删除 Qwen2.5 测试脚本后，若 Qwen2.5 模型有特定回归问题将不再被 CI 捕获。
 3. **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 测试覆盖。