尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
VeRL 框架下 RL 微调 DeepSeek-7B,比较 PPO / GRPO 脚本的参数差异
最近正在研究如何使用强化学习RL技术微调大模型读 VeRL 框架 的代码。VeRL 代码库在 examples/ 目录下提供了一些 RL 训练的示例脚本。其中ppo_trainer/run_deepseek7b_llm.sh 和 grpo_trainer/run_deepseek7b_llm.sh 这两个脚本均使用 gsm8k 数据集训练 deepseek 7b 模型不过一个使用 PPO 算法另一个使用 GRPO 算法。经比较这两个脚本的内容只有一些参数不同。笔者感到很好奇这些不同的参数表示什么含义如何跟具体算法对应起来对训练的影响又是什么本篇博客记录了笔者的学习过程。1 PPO 脚本 vs GRPO 脚本内容比较1.1 PPO 脚本 examples/ppo_trainer/run_deepseek7b_llm.sh# 来源于 examples/ppo_trainer/run_deepseek7b_llm.shset-xpython3-mverl.trainer.main_ppo\algorithm.adv_estimatorgae\data.train_files$HOME/data/gsm8k/train.parquet\data.val_files$HOME/data/gsm8k/test.parquet\data.train_batch_size1024\data.max_prompt_length512\data.max_response_length512\data.filter_overlong_promptsTrue\data.truncationerror\actor_rollout_ref.model.pathdeepseek-ai/deepseek-llm-7b-chat\actor_rollout_ref.actor.optim.lr1e-6\actor_rollout_ref.model.use_remove_paddingTrue\actor_rollout_ref.actor.ppo_mini_batch_size256\actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu16\actor_rollout_ref.actor.fsdp_config.param_offloadFalse\actor_rollout_ref.actor.fsdp_config.optimizer_offloadFalse\actor_rollout_ref.actor.use_kl_lossFalse\actor_rollout_ref.model.enable_gradient_checkpointingTrue\actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu32\actor_rollout_ref.rollout.tensor_model_parallel_size4\actor_rollout_ref.rollout.namevllm\actor_rollout_ref.rollout.gpu_memory_utilization0.4\critic.optim.lr1e-5\critic.model.use_remove_paddingTrue\critic.model.pathdeepseek-ai/deepseek-llm-7b-chat\critic.model.enable_gradient_checkpointingTrue\critic.ppo_micro_batch_size_per_gpu32\critic.model.fsdp_config.param_offloadFalse\critic.model.fsdp_config.optimizer_offloadFalse\algorithm.use_kl_in_rewardFalse\trainer.critic_warmup0\trainer.logger[console,wandb]\trainer.project_nameverl_example_gsm8k\trainer.experiment_namedeepseek_llm_7b_function_rm\trainer.n_gpus_per_node8\trainer.nnodes1\trainer.save_freq20\trainer.test_freq1\trainer.use_legacy_worker_implauto\trainer.total_epochs15$1.2 GRPO 脚本 examples/grpo_trainer/run_deepseek7b_llm.sh# 来源于 examples/grpo_trainer/run_deepseek7b_llm.sh仅展示不同的行algorithm.adv_estimatorgrpo\data.max_response_length1024\actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu80\actor_rollout_ref.actor.use_kl_lossTrue\actor_rollout_ref.actor.kl_loss_coef0.001\actor_rollout_ref.actor.kl_loss_typelow_var_kl\actor_rollout_ref.actor.entropy_coeff0\actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu160\actor_rollout_ref.rollout.tensor_model_parallel_size2\actor_rollout_ref.rollout.gpu_memory_utilization0.6\actor_rollout_ref.rollout.n5\actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu160\actor_rollout_ref.ref.fsdp_config.param_offloadTrue\# 以及GRPO 脚本没有以下这些行critic.optim.lr1e-5\critic.model.use_remove_paddingTrue\critic.model.pathdeepseek-ai/deepseek-llm-7b-chat\critic.model.enable_gradient_checkpointingTrue\critic.ppo_micro_batch_size_per_gpu32\critic.model.fsdp_config.param_offloadFalse\critic.model.fsdp_config.optimizer_offloadFalse\2 脚本差别讲解2.1 核心算法选择adv_estimatorPPO 脚本algorithm.adv_estimatorgaeGRPO 脚本algorithm.adv_estimatorgrpo含义gae使用 GAEGeneralized Advantage Estimation需要一个 value functioncritic来估计 V(s)然后用 TD(λ) 的形式算 advantage。grpo改用 GRPO 的 group-relative advantage不需要单独的 critic 网络而是对同一个 prompt 采样一组 responsegroup根据组内 reward 做归一化直接得到 advantage。在 VeRL 的实现里这是通过把adv_estimator设为对应的枚举值AdvantageEstimator.GRPO然后调用compute_grpo_outcome_advantage/compute_grpo_vectorized_outcome_advantage等函数来实现的。2.2 响应长度data.max_response_lengthPPOdata.max_response_length512GRPOdata.max_response_length1024GRPO 脚本允许更长的输出复杂推理、多样解答这和 GRPO 的典型使用场景math / reasoning是匹配的。没有算法上的硬性要求只是工程经验GRPO 经常和更长推理链配合使用。2.3 Actor 端 batch 设置相关对比几行# PPOactor_rollout_ref.actor.ppo_mini_batch_size256\actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu16\# GRPOactor_rollout_ref.actor.ppo_micro_batch_size_per_gpu80\# 示例里没再显式设 mini_batch_size保持默认含义根据 VeRL config 文档ppo_mini_batch_size一个 PPO epoch 里每次 optimizer step 使用的样本数全局计数。ppo_micro_batch_size_per_gpu每块 GPU 一次前向/反向的微批大小控制显存占用。GRPO 脚本把ppo_micro_batch_size_per_gpu提高到 80是利用了下面两个事实GRPO没有 critic总体显存压力小了可以把 micro batch 放大。GRPO 一般会配合n1的 group 采样需要吞吐更多样本。2.4 KL 相关use_kl_loss、kl_loss_coef、kl_loss_type、use_kl_in_reward对比# PPOactor_rollout_ref.actor.use_kl_lossFalse\algorithm.use_kl_in_rewardFalse\# GRPOactor_rollout_ref.actor.use_kl_lossTrue\actor_rollout_ref.actor.kl_loss_coef0.001\actor_rollout_ref.actor.kl_loss_typelow_var_kl\# (仍然保持 algorithm.use_kl_in_rewardFalse也就是不用 reward 级的 KL 惩罚)关键点PPO 脚本里use_kl_lossFalseuse_kl_in_rewardFalse 既没有在 loss 里用 KL也没有在 reward 里扣 KL纯靠 reward / advantage。GRPO 脚本里关掉 reward 中的 KLalgorithm.use_kl_in_rewardFalse改为在 loss 里加 KL 正则actor_rollout_ref.actor.use_kl_lossTrue系数kl_loss_coef0.001决定total_loss ppo_loss 0.001 * kl_loss形式kl_loss_typelow_var_kl即使用 “低方差 KL 近似公式”具体实现下面会讲。这也符合官方 GRPO 文档里的推荐GRPO 建议在 actor loss 上加 KL而不是在 reward 上手动减一个 KL penalty。2.5 熵系数entropy_coeffPPO 脚本没有显式改使用 config 默认值文档里默认是 0 或很小的值。GRPO 脚本显式写actor_rollout_ref.actor.entropy_coeff0意思是完全关掉熵正则。因为 GRPO 已经通过group 相对奖励鼓励好样本抑制差样本以及KL loss 控制和 ref policy 的距离来进行探索/正则了额外的熵正则很多工作里会直接设为 0。在 loss 公式中PPO/GRPO 的 actor loss大致是L actor L ppo λ KL ⋅ KL_loss − λ ent ⋅ H ( π ) L_{\text{actor}} L_{\text{ppo}} \lambda_{\text{KL}} \cdot \text{KL\_loss} - \lambda_{\text{ent}} \cdot H(\pi)Lactor​Lppo​λKL​⋅KL_loss−λent​⋅H(π)GRPO 时把λ ent 0 \lambda_{\text{ent}} 0λent​0。2.6 rollout ref 计算相关log prob batch、并行度和 n差异行# PPO rolloutactor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu32\actor_rollout_ref.rollout.tensor_model_parallel_size4\actor_rollout_ref.rollout.gpu_memory_utilization0.4\# GRPO rolloutactor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu160\actor_rollout_ref.rollout.tensor_model_parallel_size2\actor_rollout_ref.rollout.gpu_memory_utilization0.6\actor_rollout_ref.rollout.n5\actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu160\actor_rollout_ref.ref.fsdp_config.param_offloadTrue\各字段含义rollout.log_prob_micro_batch_size_per_gpu生成/算 logprob 时的微批大小。从 32 提到 160提升推理吞吐量注意 GRPO 需要多条 response/组。rollout.tensor_model_parallel_size模型张量并行的切分数PPO 用 4GRPO 用 2。这通常是工程上在“并行粒度 vs 单卡显存需求”之间的折中配置与gpu_memory_utilization连动调参。GRPO 脚本把gpu_memory_utilization提高到 0.6说明它希望单卡吃更多显存、换取更高吞吐。rollout.n5GRPO 特有关键参数每个 prompt 采样几条 candidate response。GRPO 算 advantage 时是在同一个 prompt 的 n 条 response 之间做“组内对比归一化”。这里n5就是 group size 5。actor_rollout_ref.ref.*ref.log_prob_micro_batch_size_per_gpu160参考模型算 logprob 的微批大小。ref.fsdp_config.param_offloadTrue参考模型参数做 FSDP param offload卸到 CPU 或 NVMe节省 GPU 显存。因为 ref policy 通常是冻结的只用来算 KL所以可以 aggressive 地 offload。PPO 脚本中没有actor_rollout_ref.ref.*原因是那套 PPO 示例没有使用 “单独的 ref 模型 KL loss”而 GRPO 示例引入了显式 KL loss对 ref 模型的配置就要写出来。2.7 Critic 模块PPO 有GRPO 去掉PPOcritic.optim.lr1e-5\critic.model.use_remove_paddingTrue\critic.model.pathdeepseek-ai/deepseek-llm-7b-chat\critic.model.enable_gradient_checkpointingTrue\critic.ppo_micro_batch_size_per_gpu32\critic.model.fsdp_config.param_offloadFalse\critic.model.fsdp_config.optimizer_offloadFalse\GRPO完全没有上面这些 critic 行。这正是 GRPO 的核心特征之一critic-less。PPO需要训练一个 value net通常是同 arch 的 LLM 头 value head用来估计 (V(s))然后通过 GAE 算 advantage。GRPO不再训练 value net。各样本的“优势”直接由组内 reward 做相对归一化得到见下一节。在 VeRL 代码里这体现为当adv_estimatorgrpo时trainer 会走到 GRPO 的 advantage 计算分支compute_grpo_outcome_advantage/compute_grpo_vectorized_outcome_advantage而不会用 GAE、也不会用 critic logits / value。
RELATED

相关推荐

VeRL 框架 RL 微调大语言模型,token-level loss 聚合方式详解

VeRL 框架 RL 微调大语言模型,token-level loss 聚合方式详解

考虑这个场景:在 RL 微调大模型的过程中,我们让模型生成了一批回答,每个回答是一串文字;然后,我们给每个回答里的每个字(token)算了一个“损失值”(可以理解为这个字写得“好不好”的…

📅 2026/11/5 1:30:57
解读 VeRL 框架源码:PPO 和 GRPO 算法如何计算优势 (Advantage)

解读 VeRL 框架源码:PPO 和 GRPO 算法如何计算优势 (Advantage)

最近正在入门大模型 RL 微调,阅读 VeRL 框架代码。在这篇博客中,我们从 VeRL 源码入手,解读一下 ppo 和 grpo 算法的 advantage 计算方法: # 来自 verl/trainer/ppo/core_algos.py register_adv_est(AdvantageEstimator.GAE) # …

📅 2026/11/5 1:30:57
轻量级 jQuery 折叠插件 jQuery-Collapse:3 分钟读懂内容渐进式披露的终极方案

轻量级 jQuery 折叠插件 jQuery-Collapse:3 分钟读懂内容渐进式披露的终极方案

【免费下载链接】jQuery-Collapse A lightweight (~1kb) jQuery plugin that enables expanding and collapsing content 项目地址: https://gitcode.com/gh_mirrors/jq/jQuery-Collapse 点击查看 免费下载 网页内容太多时,直接全部展示会让用户感到 ov…

📅 2026/11/5 1:30:57
MORE NEWS

更多资讯

📰

快速排序算法原理与实现详解

1. 快速排序核心思想与原理剖析快速排序(Quick Sort)作为20世纪十大算法之一,其核心在于"分而治之"(Divide and Conquer)策略。想象你是一名图书管理员,面对满架杂乱无章的书籍,最有效…

📰

Vibe Coding:编程中的多感官体验设计与实现

1. Vibe Coding概念解析:当编程遇上氛围感第一次听到"Vibe Coding"这个词是在一个独立开发者的小型聚会上。当时一位做音乐可视化工具的开发者说:"我的代码必须要有vibe,不然用户根本感受不到节奏"。这句话让我意识到&am…

📰

智能体技能(Agent Skills)架构设计与开发实践

1. 什么是Agent Skills?Agent Skills(智能体技能)本质上是一组可复用的功能模块,让智能体能够完成特定任务。就像人类通过学习获得不同技能一样,智能体通过集成这些技能模块来扩展其能力边界。典型的Agent Skills包括但…

📰

微信校园服务平台架构设计与高并发优化实践

1. 项目概述:校园服务平台的数字化革新在移动互联网深度渗透校园生活的今天,"weixin107校园服务平台"正试图解决一个高频刚需问题:如何将分散的校园服务整合到一个统一的移动端入口。这个基于微信生态的轻量化应用,本质…

📰

网易前端实训营:全栈项目实战与高并发优化

1. 项目背景与核心价值作为一名经历过前端求职寒冬的老兵,我深知当前就业市场的残酷现实。去年辅导的37名学员中,有29人反馈"项目经验单薄"是面试失败的首要原因。这正是网易前端实训营吸引我的地方——它直接瞄准了"学习技术易&#xff…

📰

2025年Data Agent技术演进与行业应用解析

1. 榜单背景与行业价值2025年中国大数据产业正经历从规模扩张向价值深挖的关键转型期。Data Agent(数据智能体)作为融合大模型与垂直场景的新范式,正在重构企业数据应用的基础架构。金猿奖作为国内大数据领域最具公信力的行业奖项之一&#x…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬