a
ascend_model_docs/Qwen3-8B_A2-A3_Verl-GRPO
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

【小白文档】Qwen3-8B × 昇腾 Atlas 800T A2 / 800T A3 × Verl GRPO

上级索引:verl/README.md。
本页面面向:已在昇腾机器上装好驱动与 Docker 的用户,介绍如何使用 Verl 框架跑通 Qwen3-8B 的 GRPO 训练。
技术细节与参数说明请以 Verl 官方文档 为准。


你将得到什么

按照以下步骤操作后:你将在 Atlas 200T A2 Box16 或 Atlas 800T A3 上,使用 Verl 框架完成 Qwen3-8B 的 GRPO 训练。

本页不解决:宿主机未安装昇腾驱动、无对应机型、无 Docker 等问题——请先完成 昇腾环境准备。


目录

  • 0. 开始前确认(30 秒)
  • 1. 环境准备
  • 2. 下载模型与数据集
  • 3. 启动训练
  • 4. 常见问题

0. 开始前确认(30 秒)

在宿主机执行以下命令(有正常输出即可进入下一步):

npu-smi info
docker --version
python --version
  • 机型:支持 Atlas 200T A2 Box16 和 Atlas 800T A3。

1. 环境准备

1.1 安装基础环境

参考 Verl Ascend Quickstart:

软件版本
Python>= 3.10, <3.12
CANN== 8.5.0
torch== 2.8.0
torch_npu== 2.8.0

1.2 安装其他软件包

pip install torchvision==0.22.1
pip uninstall -y triton triton-ascend
pip install triton-ascend==3.2.0
pip install transformers==4.57.6

1.3 安装 vllm & verl

source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh

git clone --depth 1 --branch v0.13.0 https://github.com/vllm-project/vllm.git
cd vllm && pip install -r requirements/build.txt
VLLM_TARGET_DEVICE=empty pip install -v -e . && cd ..

git clone -b releases/v0.13.0 https://github.com/vllm-project/vllm-ascend.git
cd vllm-ascend && pip install -r requirements.txt
export COMPILE_CUSTOM_KERNELS=1 && pip install -v -e . && cd ..

git clone --recursive https://github.com/volcengine/verl.git
cd verl && pip install -r requirements-npu.txt && pip install -v -e . && cd ..

2. 下载模型与数据集

2.1 下载模型权重

来源链接
HuggingFaceQwen/Qwen3-8B

2.2 下载并预处理数据集

python3 examples/data_preprocess/gsm8k.py --local_save_dir ~/data/gsm8k

3. 启动训练

3.1 使用 vLLM 后端(Atlas 200T A2)

set -x

export VLLM_ATTENTION_BACKEND=XFORMERS

python3 -m verl.trainer.main_ppo \
   algorithm.adv_estimator=grpo \
   data.train_files=$HOME/data/gsm8k/train.parquet \
   data.val_files=$HOME/data/gsm8k/test.parquet \
   data.train_batch_size=128 \
   data.max_prompt_length=512 \
   data.max_response_length=128 \
   data.filter_overlong_prompts=True \
   data.truncation='error' \
   actor_rollout_ref.model.path=Qwen/Qwen3-8B \
   actor_rollout_ref.actor.optim.lr=5e-7 \
   actor_rollout_ref.model.use_remove_padding=False \
   actor_rollout_ref.actor.entropy_coeff=0.001 \
   actor_rollout_ref.actor.ppo_mini_batch_size=64 \
   actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=20 \
   actor_rollout_ref.actor.use_kl_loss=True \
   actor_rollout_ref.actor.kl_loss_coef=0.001 \
   actor_rollout_ref.model.enable_gradient_checkpointing=True \
   actor_rollout_ref.actor.fsdp_config.param_offload=False \
   actor_rollout_ref.actor.fsdp_config.optimizer_offload=False \
   actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=40 \
   actor_rollout_ref.rollout.enable_chunked_prefill=False \
   actor_rollout_ref.rollout.tensor_model_parallel_size=2 \
   actor_rollout_ref.rollout.name=vllm \
   actor_rollout_ref.rollout.gpu_memory_utilization=0.6 \
   actor_rollout_ref.rollout.n=5 \
   actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu=40 \
   actor_rollout_ref.ref.fsdp_config.param_offload=True \
   algorithm.kl_ctrl.kl_coef=0.001 \
   trainer.critic_warmup=0 \
   trainer.logger=console \
   trainer.project_name='verl_grpo_example' \
   trainer.experiment_name='qwen3_8b_grpo' \
   trainer.n_gpus_per_node=8 \
   trainer.nnodes=1 \
   trainer.save_freq=-1 \
   trainer.test_freq=5 \
   trainer.total_epochs=1 $@

3.2 使用 SGLang 后端(Atlas A3/A2)

set -x

export HCCL_HOST_SOCKET_PORT_RANGE=60000-60050
export HCCL_NPU_SOCKET_PORT_RANGE=61000-61050
export RAY_EXPERIMENTAL_NOSET_ASCEND_RT_VISIBLE_DEVICES=1
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export SGLANG_DEEPEP_BF16_DISPATCH=1

python3 -m verl.trainer.main_ppo \
   algorithm.adv_estimator=grpo \
   data.train_files=$HOME/data/gsm8k/train.parquet \
   data.val_files=$HOME/data/gsm8k/test.parquet \
   data.train_batch_size=128 \
   data.max_prompt_length=1024 \
   data.max_response_length=128 \
   actor_rollout_ref.model.path=Qwen/Qwen3-8B \
   actor_rollout_ref.actor.optim.lr=5e-7 \
   actor_rollout_ref.actor.entropy_coeff=0.001 \
   actor_rollout_ref.actor.ppo_mini_batch_size=64 \
   actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=20 \
   actor_rollout_ref.actor.use_kl_loss=True \
   actor_rollout_ref.actor.kl_loss_coef=0.001 \
   actor_rollout_ref.model.enable_gradient_checkpointing=True \
   actor_rollout_ref.actor.fsdp_config.param_offload=False \
   actor_rollout_ref.actor.fsdp_config.optimizer_offload=False \
   actor_rollout_ref.rollout.name=sglang \
   actor_rollout_ref.rollout.engine_kwargs.sglang.attention_backend=ascend \
   actor_rollout_ref.rollout.gpu_memory_utilization=0.6 \
   actor_rollout_ref.rollout.n=5 \
   actor_rollout_ref.ref.fsdp_config.param_offload=True \
   algorithm.kl_ctrl.kl_coef=0.001 \
   trainer.n_gpus_per_node=8 \
   trainer.total_epochs=1 $@

4. 常见问题

现象建议
训练报错找不到 torch_npu检查 CANN 和 torch_npu 是否正确安装
OOM / 显存不足调小 batch_size 或开启 offload
使用 SGLang 后端报错确保设置正确的环境变量

相关链接

说明链接
Verl 官方文档文档
Ascend 快速开始ascend_quick_start
Ascend SGLang 后端ascend_sglang_quick_start
GitHub 仓库volcengine/verl

*环境版本与训练参数随 Verl 发布更新,若与官方文档冲突,以官方为准。