Prhub

#6890 [doc, algo] feat: add Ascend NPU GSPO script for Qwen3-32B

原始 PR 作者 chengminhua 合并时间 2026-06-29 20:31 文件变更 2 提交数 1 评论 0 代码增减 +175 / -3

执行摘要

新增 Ascend NPU Qwen3-32B GSPO 训练脚本及文档链接

PR提出提供一个规范化的Ascend NPU训练脚本用于Qwen3-32B GSPO,位于examples/ascend_extras/gspo_trainer/,并在现有GSPO优化实践文档中链入该脚本。参照PR body: 'Add a canonical Ascend NPU training script for Qwen3-32B GSPO under examples/ascend_extras/gspo_trainer/, and link it from the existing GSPO optimization practice doc.'

对于需要在Ascend NPU上使用GSPO算法训练Qwen3-32B的用户,此PR提供了可靠的参考实现。建议关注以下几点:

  • GSPO的配置差异点(对比GRPO):loss_mode=gspoloss_agg_mode=seq-mean-token-mean以及不使用KL惩罚。
  • FSDP2与vLLM rollout的协同配置,特别是序列并行度(SP_SIZE)和TP的分配。
  • 环境变量对性能的影响,可按需启用jemalloc等优化。
    整体而言,该PR设计清晰,适合作为在Ascend上运行GSPO的基础模板。
讨论亮点

无实质性review讨论。维护者wucong25直接批准了PR,仅有一条自动化代码审查机器人评论(Gemini Code Assist)但未提出具体问题,因此没有需要关注的争议点或决策权衡。

实现拆解

  1. 创建训练脚本:在examples/ascend_extras/gspo_trainer/下新建run_qwen3_32b_fsdp.sh。脚本包含完整的Ascend NPU环境变量导出、用户可调参数(项目名、模型路径、数据路径、训练超参数等)、训练配置(数据、Actor、Rollout参数)以及启动Ray集群和运行verl.trainer.main_ppo的命令。脚本采用FSDP2策略训练actor,vLLM作为rollout引擎,并启用了GSPO损失模式(loss_mode=gspo)和序列级均值聚合(loss_agg_mode=seq-mean-token-mean)。
  2. 更新文档:修改docs/ascend_tutorial/model_support/examples/gspo_optimization_practice.md,将最后更新日期改为2026/06/29,在文档开头添加指向新脚本的相对链接,并在正文入口函数说明处补充完整可运行示例的链接,确保用户能从文档直接跳转到脚本。
  3. 配置要点:脚本中的GSPO相关关键参数包括clip_ratio_low/clip_ratio_highuse_kl_in_reward=Falseadv_estimator=grpo等,用户可根据实际需求调整。脚本内默认使用DAPO-Math-17k数据集和AIME-2024测试集。
    本PR未涉及测试或CI变更,因为脚本依赖Ascend NPU环境,无法在通用CI中运行。
文件 模块 状态 重要度
examples/ascend_extras/gspo_trainer/run_qwen3_32b_fsdp.sh 示例脚本 added 5.16
docs/ascend_tutorial/model_support/examples/gspo_optimization_practice.md 文档 modified 2.48

关键源码片段

examples/ascend_extras/gspo_trainer/run_qwen3_32b_fsdp.sh core-logic

新增的主要训练脚本,包含完整配置和启动命令,是 PR 的核心产出。

#!/usr/bin/env bash
# GSPO | Qwen3-32B | DAPO-Math-17k | vLLM rollout | FSDP2 training | Ascend NPU
set -xeuo pipefail
​
export RAY_DEDUP_LOGS=0
export HYDRA_FULL_ERROR=1
export TASK_QUEUE_ENABLE=1
export HCCL_ASYNC_ERROR_HANDLING=0
export VLLM_USE_V1=1
export VLLM_ATTENTION_BACKEND=XFORMERS
export VLLM_ASCEND_ENABLE_FLASHCOMM=1
export VLLM_ASCEND_ENABLE_PREFETCH_MLP=1
export VLLM_ASCEND_ENABLE_DENSE_OPTIMIZE=1PROJECT_NAME=${PROJECT_NAME:-GSPO-Qwen3-32B-BASE-MATH}
EXPERIMENT_NAME=${EXPERIMENT_NAME:-GSPO-Qwen3-32B-BASE-FSDP-vLLM}
NNODES=${NNODES:-4}
NPUS_PER_NODE=${NPUS_PER_NODE:-16}
MODEL_PATH=${MODEL_PATH:-Qwen/Qwen3-32B}
TRAIN_FILE=${TRAIN_FILE:-${RAY_DATA_HOME}/dataset/dapo-math-17k.parquet}
MAX_PROMPT_LENGTH=${MAX_PROMPT_LENGTH:-2048}
MAX_RESPONSE_LENGTH=${MAX_RESPONSE_LENGTH:-8192}
TRAIN_BATCH_SIZE=${TRAIN_BATCH_SIZE:-256}
ROLLOUT_N=${ROLLOUT_N:-16}
CLIP_RATIO_LOW=${CLIP_RATIO_LOW:-3e-4}
CLIP_RATIO_HIGH=${CLIP_RATIO_HIGH:-4e-4}
ACTOR_LR=${ACTOR_LR:-1e-6}DATA=(
    algorithm.adv_estimator=grpo
    algorithm.use_kl_in_reward=False
    data.train_files=${TRAIN_FILE}
    data.val_files=${TEST_FILE}
    data.prompt_key=prompt
    data.train_batch_size=${TRAIN_BATCH_SIZE}
    data.max_prompt_length=${MAX_PROMPT_LENGTH}
    data.max_response_length=${MAX_RESPONSE_LENGTH}
    data.truncation='left'
)ACTOR=(
    actor_rollout_ref.actor.strategy=fsdp2
    actor_rollout_ref.actor.use_torch_compile=False
    actor_rollout_ref.actor.policy_loss.loss_mode=gspo
    actor_rollout_ref.actor.loss_agg_mode=seq-mean-token-mean
    actor_rollout_ref.actor.clip_ratio_low=${CLIP_RATIO_LOW}
    actor_rollout_ref.actor.clip_ratio_high=${CLIP_RATIO_HIGH}
    actor_rollout_ref.actor.learning_rate=${ACTOR_LR}
)ROLLOUT=(
    actor_rollout_ref.rollout.n=${ROLLOUT_N}
    actor_rollout_ref.rollout.tensor_parallel_size=${ROLLOUT_TP}
    actor_rollout_ref.rollout.gpu_memory_utilization=${ROLLOUT_GPU_MEM_UTIL}
)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险较低。主要风险在于:

  • 环境依赖:脚本通过大量export设置Ascend NPU特有环境变量(如HCCL_*VLLM_ASCEND_*),如果用户运行环境缺少对应硬件或软件栈(如CANN、vLLM Ascend插件),脚本将无法执行。
  • 配置硬编码:部分路径和参数(如数据路径、模型名称)以默认值形式出现,用户需自行覆盖;未检查路径有效性可能带来运行时错误。
  • 无测试覆盖:由于依赖特定硬件,未在CI中包含测试,脚本的正确性需用户实际运行验证。
  • 性能风险VLLM_USE_V1=1等优化选项在特定Ascend版本下可能不稳定,建议用户根据实际环境调整。
    整体而言,作为示例脚本,这些风险是可接受的。

用户影响:为Ascend NPU用户提供了可直接复用的GSPO训练脚本,降低了使用门槛;文档更新使得用户能更方便地找到脚本。
系统影响:未修改任何核心库代码,不影响现有功能。
团队影响:新增一个需要维护的示例脚本,但由于文档中已建立链接,后续变更需保持同步。

环境依赖敏感 示例脚本未在 CI 测试

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论