☰
Open-Reasoner-Zero 强化学习训练解析:推理模型的 PPO/GRPO 实现与快速上手
2026/10/23 1:53:36 网站建设 项目流程

Open-Reasoner-Zero 强化学习训练解析:推理模型的 PPO/GRPO 实现与快速上手

【免费下载链接】FactoryBluePrints游戏戴森球计划的**工厂**蓝图仓库项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints

Open-Reasoner-Zero 是一个开源推理强化学习训练系统,它用 PPO 和 GRPO 两种策略优化算法训练大模型做数学、科学问答这类推理任务。下面把它的训练流程、算法差异和实验配置讲清楚,帮你看完一遍源码后不再迷路。

为什么推理任务需要强化学习训练

做推理的模型输出的是"思考过程 + 答案",而答案对不对是一个结果信号,没法像微调那样逐 token 监督。这时候奖励信号的作用类似工厂质检:工人不知道哪一步工序出了错,只知道这批产品过没过检,质检结果反过来调整生产方式。强化学习干的就是这件事——让模型自己生成回答,用奖励分数告诉它"这次答得怎么样",再据此调整策略。Open-Reasoner-Zero 把这个闭环完整实现了,并且支持从 7B 到 32B 的模型规模。

一次训练走一圈:actor 采集、奖励计算、trainer 更新、buffer 回放

读这个项目的源码,最好先跟一遍一次迭代的数据流,而不是按文件顺序看。

  • 采集数据:策略(actor)拿着 prompt 去环境里生成回答。相关逻辑在 orz/ppo/actors.py,BasePPORole负责策略执行与环境交互,是产出训练样本的源头。
  • 计算奖励:回答被打分,得到每道题的分数。这些分数在 GRPO 分支下还会做归一化,后面专门讲。
  • 更新策略:orz/ppo/trainer.py 里的RayPPOTrainer是总调度,数据收集、模型更新、评估都归它管。更新时具体改哪些参数,由 orz/ppo/models.py 中定义的策略网络和价值网络决定,模型规模从 14M 一路覆盖到 32B。
  • 经验回放:采到的轨迹不会用完即弃,而是先进 orz/ppo/replay_buffer.py 存着,之后按采样规则重新利用,提高每份数据的学习效率。

整套东西跑在多卡上靠的是 orz/exp_engine/parallels/orz_distributed_c10d.py 的分布式封装,组件之间的通信都从这里走。

PPO 与 GRPO 的差别:两种不同的"防翻车"机制

PPO 是这套系统的基础算法,核心手段是给策略更新装一个"安全阀":clip_eps(默认 0.2)限制每次参数更新的幅度,防止新策略和旧策略差太远导致训练崩掉。

def __init__(self, clip_eps: float = 0.2) -> None: self.clip_eps = clip_eps

翻译成人话:每一步更新都先跟旧策略比一比,改得超过 20% 的"步子"会被削回边界内,更新稳但慢。

GRPO 的思路不同,它动的是奖励本身:对同一道 prompt 采出的多个回答,先减去均值再除以标准差,把奖励拉回同一尺度。这段逻辑在 playground/orz_7b_ppo.py 里:

scores[i] -= np.mean(pass_at_n_dict[prompt]) if std := np.std(pass_at_n_dict[prompt]) > 0: scores[i] /= std

也就是说,一道题上"比同题的平均表现好多少"才是信号,而不是绝对分数——难一点的题分数天然低,归一化后不会把它的信号淹没掉。

PPOGRPO
稳定训练的手段clip_eps限制策略更新幅度按 prompt 归一化奖励(减均值、除标准差)
干预的对象参数更新这一步奖励信号本身
解决的问题新策略偏离旧策略太远不同题目奖励尺度不一
开关方式默认开启配置里use_grpo控制,同时记录grpo_raw_reward原始奖励

两者不冲突,可以看作从两个方向同时压住训练方差:一个管"步子别迈大",一个管"尺子先校准"。

数据说了什么:准确率与训练曲线的两层读法

官方在 figure/teaser.png 里放了 7B 和 32B 模型在 AIME2024、AIME2025、MATH500、GPQA Diamond 四个数据集上的准确率对比。图上能看到的是:四个数据集的曲线都随训练步数持续上行,且 32B 的曲线整体压在 7B 之上。这说明两件事——一是 RL 训练本身在稳定涨点而不是震荡,二是推理任务上更大的模型能吃到更多强化学习的红利,规模优势没有被算法抵消。

训练曲线(figure/train_curve.png)左图是奖励变化,右图是响应长度。能看到 32B(ORZ-32B)的奖励值和回答长度都明显高于小模型。这里要留意一点:奖励涨和回答变长往往同时出现,说明模型学到的不只是"更会答",也包括"愿意多推理几步"——长度本身不是目标,但它是策略在探索更复杂推理路径的副作用。

如何配置并运行 7B 模型训练:三步跑起来

第一步,拿代码。

git clone https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints

第二步,选实验脚本。playground/ 下按模型规模和算法分好了入口:

  • playground/orz_7b_ppo.py:7B 模型 + PPO,日常调参首选,GRPO 开关也在同一套配置里
  • playground/orz_7b_grpo.py:7B 模型 + GRPO,验证奖励归一化的效果
  • playground/orz_32b_ppo.py:32B 模型 + PPO,需要更多显存和更长的训练时间

第三步,直接跑。以 7B 的 PPO 为例:

python playground/orz_7b_ppo.py

脚本自带默认配置,先把这一轮跑通看曲线是否如预期上行,再去改clip_eps、采样数这些超参,比一上来就调参省很多排查时间。

收尾与延伸

Open-Reasoner-Zero 把推理 RL 的两条主线都摆在明面上:PPO 用 clip 限制更新幅度保稳定,GRPO 用奖励归一化让不同难度的题目贡献均衡的信号;组件按"采集—打分—更新—回放"各司其职,分布式封装支撑大模型规模。一个值得动手验证的问题留给你:把 7B 的 PPO 和 GRPO 各训同样的步数,观察原始奖励(grpo_raw_reward)和归一化后奖励的走势差多少,你预期归一化在哪个阶段收益最大——是训练初期还是奖励曲线进入平台期之后?

【免费下载链接】FactoryBluePrints游戏戴森球计划的**工厂**蓝图仓库项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询