news 2026/9/11 7:27:24

使用 verl 对 Qwen3 进行强化学习(RL)训练:GRPO/PPO 全流程实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 verl 对 Qwen3 进行强化学习(RL)训练:GRPO/PPO 全流程实战指南

使用 verl 对 Qwen3 进行强化学习(RL)训练:GRPO/PPO 全流程实战指南

【免费下载链接】Qwen1.5Qwen3 is the large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen1.5

verl 是火山引擎开源的 LLM 强化学习(RL)训练库,也是论文 HybridFlow: A Flexible and Efficient RLHF Framework 的开源实现。本文以 Qwen3 系列模型为核心,完整介绍如何在 verl 中配置环境、准备数据,并通过 FSDP + vLLM 的组合以 GRPO 算法启动 Qwen3-1.7B 的 RL 训练,同时深入解析训练命令中每一个关键参数的作用与取值建议。

verl 是什么:面向 LLM 的灵活、高效、生产级 RL 训练库

verl 是一个专门为大型语言模型(LLM)设计的强化学习训练库,其定位是灵活(flexible)、高效(efficient)且生产就绪(production-ready)。它是论文 HybridFlow: A Flexible and Efficient RLHF Framework、LLaMA-Factory、ms-swift、Unsloth 共同构成 Qwen3 的后训练工具链,参见 docs/source/index.rst 中 Training 目录的编排。

灵活性与易用性

verl 的灵活性和易用性主要体现在以下四个方面:

  • 多样化的强化学习算法扩展:verl 采用混合控制器(hybrid-controller)编程模型,融合了单一控制器(single-controller)与多控制器(multi-controller)的优势,能够灵活表示并高效执行复杂的后训练数据流(Post-Training dataflows)。用户只需几行代码即可构建 GRPO、PPO 等强化学习数据流。
  • 与现有 LLM 基础设施无缝集成:verl 通过模块化 API 解耦计算与数据依赖,能够与 PyTorch FSDP、Megatron-LM、vLLM、SGLang 等主流 LLM 训练与推理框架无缝集成,且易于扩展至其他框架。
  • 灵活的设备映射与并行性:verl 支持将模型放置到不同的 GPU 集合上,实现高效的资源利用,并支持在不同规模的集群上灵活扩展。
  • 与热门 HuggingFace 模型即插即用:verl 支持 Qwen、Llama 等主流 LLM 模型,可直接以 HuggingFace 仓库 ID 或本地路径指定模型。

高效性

  • 业界领先的吞吐量:verl 集成了先进的 LLM 训练与推理引擎,实现了领先的 RL 吞吐性能。
  • 3D-HybridEngine 高效 Actor 重分片:verl 在训练与生成两个阶段切换时,通过 3D-HybridEngine 消除内存冗余,并显著降低通信开销,这是其 RL 吞吐性能的重要来源。

强化学习(RL):支持的多框架组合与多算法

verl 当前支持多种训练框架与推理框架的组合,包括 FSDP、Megatron-LM 与 vLLM、SGLang 等,并支持 PPO、GRPO、DAPO 等多种强化学习算法。这意味着你可以根据自身硬件与业务诉求,自由选择"训练框架 × 推理框架 × RL 算法"的组合。

第一步:环境与训练准备

环境配置请按照 verl 官方安装指南完成。准备阶段通常包含两步:数据准备与模型下载。

数据准备:以 GSM8K 数学推理数据集为例,通过 verl 仓库提供的预处理脚本生成训练所需的标准格式数据:

git clone https://github.com/volcengine/verl.git cd verl python3 examples/data_preprocess/gsm8k.py --local_dir ~/data/gsm8k

执行后会在~/data/gsm8k目录下生成train.parquettest.parquet等文件,供后续训练命令中的data.train_filesdata.val_files引用。

模型下载:可直接通过 HuggingFace 的 transformers 管线触发模型下载,例如下载 Qwen3-1.7B:

python3 -c "import transformers; transformers.pipeline('text-generation', model='Qwen/Qwen3-1.7B')"

第二步:开始训练

在 verl 中,训练框架与推理框架可以自由组合,只要训练框架和推理框架本身分别支持模型训练与推理任务,verl 即可支撑相应的 RL 训练。官方示例选择了FSDP(训练)+ vLLM(推理)+ GRPO(算法)的组合来训练 Qwen3-1.7B,因为该模型仅需一张 80GB 显存的 GPU,外加内存大于 64GB 的机器即可启动训练。

以下是完整的训练命令:

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=1024 \ data.max_prompt_length=512 \ data.max_response_length=1024 \ data.filter_overlong_prompts=True \ data.truncation='error' \ actor_rollout_ref.model.path=Qwen/Qwen3-1.7B \ actor_rollout_ref.actor.optim.lr=1e-6 \ actor_rollout_ref.model.use_remove_padding=True \ actor_rollout_ref.actor.ppo_mini_batch_size=80 \ 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.actor.kl_loss_type=low_var_kl \ actor_rollout_ref.actor.entropy_coeff=0 \ 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=20 \ actor_rollout_ref.rollout.tensor_model_parallel_size=1 \ actor_rollout_ref.rollout.name=vllm \ actor_rollout_ref.rollout.gpu_memory_utilization=0.6 \ actor_rollout_ref.rollout.n=3 \ actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu=20 \ actor_rollout_ref.ref.fsdp_config.param_offload=True \ algorithm.use_kl_in_reward=False \ trainer.critic_warmup=0 \ trainer.logger=['console'] \ trainer.project_name='verl_grpo_example_gsm8k' \ trainer.experiment_name='qwen3_1_7b_function_rm' \ trainer.n_gpus_per_node=1 \ trainer.nnodes=1 \ trainer.save_freq=-1 \ trainer.test_freq=5 \ trainer.total_epochs=15 $@

该命令以python3 -m verl.trainer.main_ppo作为入口,说明 verl 使用同一个 PPO 训练主程序承载多种算法——通过algorithm.adv_estimator=grpo指定优势估计器(advantage estimator)为 GRPO,即可将同一套 RL 数据流切换到 GRPO 算法;类似地,将其切换为 ppo 即可运行 PPO,这也印证了文档中"几行代码构建 GRPO、PPO 数据流"的设计理念。

数据与模型相关参数解析
参数取值作用说明
data.train_files/data.val_files$HOME/data/gsm8k/train.parquet/test.parquet指定训练与验证数据文件,即第一步预处理生成的 parquet 文件
data.train_batch_size1024每轮 RL 迭代的全局训练 batch 大小
data.max_prompt_length512prompt 的最大 token 长度,超长样本会被截断或过滤
data.max_response_length1024模型生成响应(response)的最大 token 长度
data.filter_overlong_promptsTrue是否过滤过长的 prompt 样本,防止超出上下文窗口
data.truncation'error'截断策略;设为error表示当数据超出设定长度时直接报错,而不是静默截断,从而保证数据质量
actor_rollout_ref.model.pathQwen/Qwen3-1.7BActor 模型的来源,可以是 HuggingFace 仓库 ID 或本地路径
训练端(actor)参数解析
参数取值作用说明
actor_rollout_ref.actor.optim.lr1e-6Actor 学习率。RL 训练通常采用比 SFT 更小的学习率(如 1e-6 量级)以稳定训练
actor_rollout_ref.model.use_remove_paddingTrue训练时移除 padding token,减少无效计算、提升效率
actor_rollout_ref.actor.ppo_mini_batch_size80PPO/GRPO 更新阶段每个 mini-batch 的大小
actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu20每张 GPU 上的微批次大小,用于控制显存占用
actor_rollout_ref.actor.use_kl_lossTrue是否使用 KL 惩罚(KL loss)约束 Actor 与参考模型(ref)的分布差异
actor_rollout_ref.actor.kl_loss_coef0.001KL 惩罚系数,权衡探索与稳定性
actor_rollout_ref.actor.kl_loss_typelow_var_klKL 损失的计算类型,low_var_kl为低方差变体,有助于稳定训练
actor_rollout_ref.actor.entropy_coeff0熵奖励(entropy bonus)系数,设置为 0 表示不引入额外的熵正则
actor_rollout_ref.model.enable_gradient_checkpointingTrue开启梯度检查点(activation checkpointing),以计算换显存,降低显存需求
actor_rollout_ref.actor.fsdp_config.param_offloadFalse是否将模型参数 offload 到 CPU。训练阶段关闭可保持吞吐;参考模型阶段则开启(见下文)
actor_rollout_ref.actor.fsdp_config.optimizer_offloadFalse是否将优化器状态 offload 到 CPU,本例关闭以保证训练速度
生成端(rollout)与参考模型(ref)参数解析
参数取值作用说明
actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu20生成阶段计算 log_prob 时每 GPU 的微批次大小
actor_rollout_ref.rollout.tensor_model_parallel_size1vLLM 生成时的张量并行度;单卡场景下为 1
actor_rollout_ref.rollout.namevllm推理引擎选择为 vLLM,即采用 FSDP(训练)+ vLLM(生成)的组合
actor_rollout_ref.rollout.gpu_memory_utilization0.6vLLM 可使用的 GPU 显存比例,本例为 60%,为训练过程预留余量
actor_rollout_ref.rollout.n3GRPO 中每个 prompt 采样的响应数量,GRPO 通过对 n 个采样响应估计优势值
actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu20参考模型计算 log_prob 时每 GPU 的微批次大小
actor_rollout_ref.ref.fsdp_config.param_offloadTrue参考模型参数 offload 到 CPU。由于参考模型不参与梯度更新,将其 offload 可显著释放显存

值得注意的是actor_rollout_ref.rollout.name=vllm与 FSDP 的组合体现了 verl 的模块化设计:训练端使用 FSDP 做数据并行与分片训练,生成端调用 vLLM 做高吞吐采样,两者通过 3D-HybridEngine 在训练与生成阶段之间高效切换并重分片模型,从而规避显存冗余与通信开销问题。

算法与训练调度参数解析
参数取值作用说明
algorithm.adv_estimatorgrpo选择优势估计器为 GRPO,确定 RL 算法
algorithm.use_kl_in_rewardFalse是否将 KL 惩罚并入奖励计算;此处为 False,KL 惩罚由actor_rollout_ref.actor.use_kl_loss独立控制
trainer.critic_warmup0Critic 预热步数。GRPO 属于 actor-only 算法,无需 Critic,故设为 0
trainer.logger['console']日志输出方式,可扩展为 wandb 等
trainer.project_name'verl_grpo_example_gsm8k'实验所属项目名
trainer.experiment_name'qwen3_1_7b_function_rm'本次实验名
trainer.n_gpus_per_node1每节点使用的 GPU 数量
trainer.nnodes1节点数量,单机训练为 1
trainer.save_freq-1保存 checkpoint 的频率,-1表示训练期间不保存
trainer.test_freq5每 5 轮迭代在验证集上测试一次
trainer.total_epochs15总训练轮数

命令末尾的$@允许你将其他任意参数透传给训练程序,例如在需要多机多卡时覆盖trainer.nnodestrainer.n_gpus_per_node等配置,而无需改写整条命令。

调参要点与实操建议

基于上述参数结构,在实际训练中可关注以下几点:

  • 显存紧张时优先开启梯度检查点enable_gradient_checkpointing=True是最直接的省显存手段;若仍不足,可将actor_rollout_ref.rollout.gpu_memory_utilization适当调低,为训练端预留更多显存。
  • 扩大 GRPO 采样数 nactor_rollout_ref.rollout.n直接决定每个 prompt 的采样响应数量,n 越大优势估计越稳定,但生成成本随之线性上升,需要根据吞吐目标权衡。
  • KL 惩罚是稳定性的关键kl_loss_coef过小可能导致策略漂移,过大则限制探索;kl_loss_type=low_var_kl适合在训练初期快速收敛的稳定版本。
  • 多卡扩展:该命令以单机单卡为基准。扩展到多卡或多节点时,可保持 FSDP + vLLM 组合不变,调整trainer.n_gpus_per_nodetrainer.nnodes以及 vLLM 的tensor_model_parallel_size;vLLM 的并行度应与 GPU 拓扑匹配以获得最优采样吞吐。
  • 从 FSDP 切换到 Megatron-LM:若需要训练更大规模的 Qwen3 模型(如 30B-A3B、235B-A22B 等 MoE 模型),可将训练端替换为 Megatron-LM,推理端仍使用 vLLM 或 SGLang,verl 的模块化 API 支持这类自由组合。

结束语

verl 以混合控制器编程模型和 3D-HybridEngine 为核心,为 Qwen3 等主流 LLM 提供了一套灵活、高效、可组合的强化学习训练方案。通过本文的完整命令与逐参数解析,你已经可以在单张 80GB GPU 上启动 Qwen3-1.7B 的 GRPO 训练,并具备向 PPO、DAPO 等算法以及 FSDP/Megatron-LM × vLLM/SGLang 等组合扩展的能力。如果在使用过程中遇到任何困难,可以前往 verl 官方讨论区 参与讨论。

【免费下载链接】Qwen1.5Qwen3 is the large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen1.5

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 7:26:39

GHelper:5分钟上手的华硕笔记本轻量控制工具

GHelper:5分钟上手的华硕笔记本轻量控制工具 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertbook,…

作者头像 李华
网站建设 2026/9/11 7:25:30

Linux内核架构解析与核心子系统详解

1. Linux内核全景图:从宏观视角看内核架构作为一名在Linux系统开发领域摸爬滚打十年的老手,我见过太多初学者面对内核源码时那种茫然无措的表情。让我们先抛开复杂的代码细节,站在上帝视角审视Linux内核的整体架构。内核本质上是一个用C语言编…

作者头像 李华
网站建设 2026/9/11 7:22:22

SystemInformer 历史版本获取与版本回退:3条路径装对旧版本

SystemInformer 历史版本获取与版本回退:3条路径装对旧版本 【免费下载链接】systeminformer A free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you by Winsider Seminars & Sol…

作者头像 李华
网站建设 2026/9/11 7:22:11

Claudian 批量处理 Obsidian 笔记的 5 个实用技巧

Claudian 批量处理 Obsidian 笔记的 5 个实用技巧 【免费下载链接】claudian An Obsidian plugin that embeds Claude Code/Codex as an AI collaborator in your vault 项目地址: https://gitcode.com/GitHub_Trending/cl/claudian Vault 里的笔记一多,重复…

作者头像 李华
网站建设 2026/9/11 7:18:53

电商数据采集与分析工具:店透视插件核心功能解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 7:18:24

随机森林分类建模详解:从集成学习原理到参数调优实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华