当前位置: 首页 > news >正文

LLM | VeRL 相关文档汇总


目录

  • PPO 示例脚本的 readme
  • GRPO 示例脚本的 readme

PPO 示例脚本的 readme

examples/ppo_trainer/README.md

近端策略优化(Proximal Policy Optimization,PPO)是一类用于强化学习的策略梯度方法,由 OpenAI 于 2017 年提出。PPO 在简单性、稳定性和性能之间取得了平衡,使其成为现代 RL 应用(包括大规模语言模型微调)中最广泛使用的算法之一。

像 REINFORCE 或 Vanilla Policy Gradient 这样的传统策略梯度方法存在以下问题:

  • 高方差和样本效率低下。
  • 因策略更新过大导致的不稳定性。

PPO 使用一种裁剪后的替代目标函数来解决这个问题,该函数避免了过大的更新,同时不需要二阶导数。

关于 PPO 的更多技术细节,我们建议阅读 OpenAI spinning up 教程 的介绍以及论文 Proximal Policy Optimization Algorithms。

1 关键组件

  • Actor-Critic 架构:PPO 需要 actor 模型(策略)和 critic 模型(价值函数)。这与 GRPO 和 RLOO 等其他不需要 critic 模型的算法不同。
  • 广义优势估计 (GAE):PPO 使用 GAE 来计算优势值,这有助于在保持低偏差的同时减少策略梯度估计的方差。
  • 裁剪后的替代目标:PPO 的核心是通过裁剪后的替代目标函数实现的,该函数限制了策略更新。

2 配置

请注意,所有包含 micro_batch_size 的配置都用于配置每次前向或后向传递的最大样本数或 token 数,以避免 GPU 内存不足(OOM),其值不应改变算法/收敛行为。

大多数 critic 配置与 actor 的配置类似。注意下图中省略了 critic 模型。

image
  • data.train_batch_size:用于生成一组采样轨迹/rollout 的提示的全局批次大小。响应/轨迹的数量是 data.train_batch_size * actor_rollout.ref.rollout.n
  • actor_rollout_ref.actor.ppo_mini_batch_size:采样得到的轨迹集被分割成多个大小为 ppo_mini_batch_size 的小批量,用于 PPO actor 的更新。ppo_mini_batch_size 是所有工作节点上的全局大小。
  • critic.ppo_mini_batch_size:采样得到的轨迹集被分割成多个大小为 ppo_mini_batch_size 的小批量,用于 PPO critic 的更新。ppo_mini_batch_size 是所有工作节点上的全局大小。
  • actor_rollout_ref.actor.clip_ratio:PPO 的裁剪范围。默认为 0.2。
  • actor_rollout_ref.actor.ppo_epochs:在一组采样轨迹上对 actor 进行 PPO 更新的轮数。
  • critic.ppo_epochs:在一组采样轨迹上对 critic 进行 PPO 更新的轮数。默认为 actor_rollout_ref.actor.ppo_epochs
  • algorithm.gamma:折扣因子。
  • algorithm.lam:在 GAE 估计器中用于权衡偏差和方差的 lambda 项。
  • algorithm.adv_estimator:支持 gaegrporeinforce_plus_plusreinforce_plus_plus_baselinerloorloo_vectorized(似乎 PPO 算法应该使用 gae)。

3 高级扩展

3.1 KL 散度控制

防止策略与参考策略偏离太远的选项。提供了两种机制:KL 奖励惩罚和 KL 损失。更多技术细节,请参阅 Training language models to follow instructions with human feedback。

使用 KL 损失进行 KL 散度控制的选项:

  • actor_rollout_ref.actor.use_kl_loss:是否在 actor 中使用 KL 损失。使用时,我们不会在奖励函数中应用 KL。默认为 False。
  • actor_rollout_ref.actor.kl_loss_coef:KL 损失的系数。默认为 0.001。
  • actor_rollout_ref.actor.kl_loss_type:支持 kl(k1)absmse(k2)low_var_kl(k3)full。在末尾添加 "+"(例如,'k1+' 和 'k3+')将应用直通技巧,无论 KL 值估计如何,都采用 k2 进行无偏梯度估计(更多细节请参阅:https://github.com/volcengine/verl/pull/2953#issuecomment-3162113848)。用于计算 actor 和参考策略之间 KL 散度的方法。有关详细分析,请参阅此博客文章:http://joschu.net/blog/kl-approx.html。

在奖励中使用 KL 惩罚的选项:

  • algorithm.use_kl_in_reward:是否启用奖励内部的 KL 惩罚。默认为 False。
  • algorithm.kl_penalty:支持 kl(k1)absmse(k2)low_var_kl(k3)full。这定义了计算 actor 和参考策略之间 KL 散度的方法。具体选项请参考 core_algos.py 中的 kl_penalty。有关详细分析,请参阅此博客文章:http://joschu.net/blog/kl-approx.html。
  • algorithm.kl_ctrl.kl_coef:奖励内部 KL 惩罚的(初始)系数。默认为 0.001。
  • algorithm.kl_ctrl.type:'fixed' 对应 FixedKLController,'adaptive' 对应 AdaptiveKLController。
  • algorithm.kl_ctrl.horizon:有关详细信息,请参阅 AdaptiveKLController 的源代码。
  • algorithm.kl_ctrl.target_kl:有关详细信息,请参阅 AdaptiveKLController 的源代码。

3.2 双重裁剪 PPO

双重裁剪 PPO 引入了一种方法,当优势小于零时,对策略比率应用一个下限,使得当比率乘以一个较大的数时,不超过指定的下限。

image
  • actor_rollout_ref.actor.clip_ratio_c:双重裁剪 PPO 的下限值,默认为 3.0。

4 参考示例

Qwen2.5 训练日志和命令:链接

bash run_gemma.sh \trainer.n_gpus_per_node=1 \actor_rollout_ref.rollout.tensor_model_parallel_size=1 \trainer.logger=console \critic.model.path=Qwen/Qwen2.5-0.5B-Instruct \actor_rollout_ref.model.path=Qwen/Qwen2.5-0.5B-Instruct \data.train_batch_size=256 \actor_rollout_ref.actor.ppo_mini_batch_size=64 \actor_rollout_ref.actor.ppo_micro_batch_size=2 \critic.ppo_micro_batch_size=2

使用 verl v0.2 的参考性能:

模型 方法 分数 链接
Qwen/Qwen2.5-0.5B-Instruct 预训练模型 36.4 Qwen Blog
Qwen/Qwen2.5-0.5B-Instruct PPO 56.7 PPO 命令和日志

GRPO 示例脚本的 readme

examples/grpo_trainer/README.md

在强化学习中,像 PPO 这样的经典算法依赖于一个“评论家”模型来估计动作的价值,从而指导学习过程。然而,训练这个评论家模型可能非常耗费资源。

GRPO 通过消除对单独评论家模型的需求来简化这个过程。它的运作方式如下:

  • 组采样:对于给定的问题,模型生成多个可能的解决方案,形成一个输出“组”。
  • 奖励分配:每个解决方案根据其正确性或质量进行评估并分配一个奖励。
  • 基线计算:该组的平均奖励作为基线。
  • 策略更新:模型通过将每个解决方案的奖励与组基线进行比较来更新其参数,增强优于平均水平的解决方案,并抑制劣于平均水平的解决方案。

这种方法通过避免训练单独的价值估计模型来减少计算开销,使学习过程更加高效。更多详情,请参考原始论文 DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models。

1 关键组件

  • 无价值函数(无评论家):与 PPO 不同,GRPO 不训练单独的价值网络(评论家)。
  • 组采样(分组 Rollout):GRPO 不是为每个输入评估一次 rollout,而是为每个提示从当前策略生成多个补全(响应)。这组补全被称为一个组。
  • 相对奖励:在每个组内,对补全进行评分(例如,基于正确性),并根据组内情况对奖励进行相对归一化。

2 配置

请注意,所有包含 micro_batch_size 的配置都用于配置每次前向或后向传递的最大样本数或 token 数,以避免 GPU 内存不足(OOM),其值不应改变算法/收敛行为。

尽管许多配置以 ppo_ 开头,但它们在 verl 中适用于不同的 RL 算法,因为 GRPO 的训练循环与 PPO 类似(只是没有评论家)。

image
  • actor_rollout.ref.rollout.n:每个提示的采样次数。默认为 1。对于 GRPO,请将其设置为大于 1 以进行组采样。

  • data.train_batch_size:用于生成一组采样轨迹/rollout 的提示的全局批次大小。响应/轨迹的数量是 data.train_batch_size * actor_rollout.ref.rollout.n

  • actor_rollout_ref.actor.ppo_mini_batch_size:采样得到的轨迹集被分割成多个大小为 ppo_mini_batch_size 的小批量,用于 PPO actor 的更新。ppo_mini_batch_size 是所有工作节点(worker)上的全局大小。

  • actor_rollout_ref.actor.ppo_epochs:在一组采样轨迹上对 actor 进行 GRPO 更新的轮数。

  • actor_rollout_ref.actor.clip_ratio:GRPO 的裁剪范围。默认为 0.2。

  • algorithm.adv_estimator:默认为 gae。对于 GRPO,请将其设置为 grpo

  • actor_rollout_ref.actor.loss_agg_mode:默认为 "token-mean"。选项包括 "token-mean"、"seq-mean-token-sum"、"seq-mean-token-mean"。原始的 GRPO 论文采用样本级损失(seq-mean-token-mean),这在长思维链场景中可能不稳定。verl 中提供的所有 GRPO 示例脚本都使用默认配置 "token-mean" 进行损失聚合。

GRPO 不是将 KL 惩罚项加到奖励中,而是通过直接将训练策略与参考策略之间的 KL 散度加到损失中来进行正则化:

  • actor_rollout_ref.actor.use_kl_loss:是否在 actor 中使用 KL 损失。使用时,我们不会在奖励函数中应用 KL。默认为 False。对于 GRPO,请将其设置为 True。

  • actor_rollout_ref.actor.kl_loss_coef:KL 损失的系数。默认为 0.001。

  • actor_rollout_ref.actor.kl_loss_type:支持 kl(k1), abs, mse(k2), low_var_kl(k3)full。在末尾添加 "+"(例如,'k1+' 和 'k3+')将应用直通(straight-through)技巧,无论 KL 值估计如何,都采用 k2 进行无偏梯度估计(更多细节请参阅:https://github.com/volcengine/verl/pull/2953#issuecomment-3162113848)。用于计算 actor 和参考策略之间 KL 散度的方法。有关详细分析,请参阅此博客文章:http://joschu.net/blog/kl-approx.html。

3 高级扩展

3.1 DrGRPO

Understanding R1-Zero-Like Training: A Critical Perspective 这篇工作声称 GRPO 存在优化偏差,会导致人为地生成长响应,尤其是在输出不正确的情况下。这种低效率源于 GRPO 使用基于组的奖励归一化来计算优势的方式,这可能会无意中偏向更长、准确度较低的响应。相反,DrGRPO 通过使用全局常数归一化来聚合 token 级损失,以消除长度偏差。

配置以下选项以启用 DrGRPO,其他所有参数与 GRPO 相同:

  • actor_rollout_ref.actor.loss_agg_mode:设置为 "seq-mean-token-sum-norm",这会关闭序列维度的平均。
  • actor_rollout_ref.actor.loss_scale_factor:(可选)设置为一个常数整数(例如,最大响应长度),以确保在整个训练过程中归一化一致。如果未设置,则使用当前批次的响应长度。
  • actor_rollout_ref.actor.use_kl_loss:对于 DrGRPO,请将其设置为 False。
  • algorithm.norm_adv_by_std_in_grpo:设置为 False,关闭标准差归一化。

4 参考示例

Qwen2.5 GRPO 训练日志和命令:链接

bash examples/grpo_trainer/run_qwen3-8b.sh

更多参考性能,请参阅:https://verl.readthedocs.io/en/latest/algo/baseline.html



http://www.jsqmd.com/news/390027/

相关文章:

  • SST专题(2)双有源桥式变换器单移相调制方法特性分析
  • 基于Java的户籍成员综合智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 2026最新!研究生必备的AI论文网站 —— 千笔·专业论文写作工具
  • 小钢炮MiniCPM-SALA 混合注意力架构与低成本训练范式
  • 基于Java的房产中介微信智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的户外用品销售智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 效率直接起飞! 降AIGC平台 千笔 VS 灵感ai,专科生专属利器!
  • 基于Java的户籍信息智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 救命神器 10个降AIGC平台深度测评:本科生降AI率必备指南
  • 深度测评AI论文写作软件,千笔·专业论文写作工具 VS 云笔AI,本科生必备神器!
  • 基于Java的户口医保登记智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • AI 问答就是新战场!2026 年特色 GEO 服务商盘点 - 品牌2025
  • [SpringIOC]NoSuchBeanDefinitionException
  • 用实力说话圈粉无数的降AI率网站 —— 千笔·专业降AIGC智能体
  • 赶deadline必备AI论文写作软件 千笔·专业论文写作工具 VS 灵感风暴AI
  • 【GitHub项目推荐--Blind Watermark:基于DWT-DCT-SVD的鲁棒盲水印工具】
  • 从此告别拖延 9个降AI率工具测评:专科生必看的降AI率神器推荐
  • 不踩雷!AI论文写作软件 千笔·专业论文写作工具 VS 文途AI,专科生专属神器
  • MySQL主从库复制中,主库如何查找对应日志文件位置
  • 一篇搞定全流程 10个AI论文写作软件测评:MBA毕业论文+科研写作全场景推荐
  • Web产品后台开发新思路,XinServer 深度解析
  • 为什么深度学习中需要“激活函数”?
  • Linux下GNU Autotools工具基础教程
  • 单北斗GNSS变形监测系统在基础设施安全与灾害预警中的应用与发展
  • HarmonyOS应用开发实战(基础篇)Day07-《登录注册页面》
  • 深入解剖STL Vector:从底层原理到核心接口的灵活运用 - 指南
  • 不定积分练习题详解专题
  • 2026如何做好AI推广?国内特色GEO服务商盘点 - 品牌2025
  • 这份榜单够用!9个AI论文平台深度测评,本科生毕业论文写作必备
  • 龙魂系统·审计内核宪法·加固补丁 v1.1