Skip to content

动手实践:用 GRPO 构建一个推理 LLM

Build a Reasoning LLM using GRPO [Hands On]

Group Relative Policy Optimization(GRPO)是一种强化学习方法,它使用确定性奖励函数,针对数学和推理任务对 LLM 进行微调,无需任何标注数据。

下面简要概述一下 GRPO 的工作流程:

fine tuning p95 1

  • 从一个数据集出发,为其添加一段聚焦推理的系统提示词(system prompt),例如“一步一步地思考……”。
  • LLM 使用采样引擎生成多个候选回答。
  • 每个回答都会被赋予相应的奖励,这些奖励会被汇总,为每一个生成的回答计算出一个分数。
  • GRPO 损失函数利用这些奖励来计算梯度,通过反向传播更新 LLM,模型的推理能力也随之逐步提升。

接下来让我们深入代码,看看如何在不依赖任何标注数据、也无需人工干预的情况下,用 GRPO 把任意模型打造成一个推理能力强劲的模型。

我们将使用:

  • UnslothAI,用于高效微调。

  • HuggingFace TRL,用于实现 GRPO。

完整代码见此处:Build a reasoning LLM from scratch using GRPO。你也可以按下方方式复现我们的运行环境,无需任何本地安装即可直接运行:

fine tuning p96 1

现在开始吧!

#1)加载模型

我们首先使用 Unsloth 加载 Qwen3-4B-Base 及其 tokenizer。

这里你也可以换成任何其他开放权重的 LLM。

fine tuning p96 2

#2)定义 LoRA 配置

为了避免对整个模型权重进行微调,我们会使用 LoRA。在这段代码中,我们通过 Unsloth 的 PEFT 来指定:

fine tuning p97 1

  • 模型
  • LoRA 的低秩维度(r)
  • 需要微调的模块,等等

#3)创建数据集

我们加载 Open R1 Math 数据集(一个数学题数据集),并将其格式化以适配推理场景。

fine tuning p98 1

每条样本都包含:

  • 一段强制要求结构化推理的系统提示词
  • 一个来自数据集的问题
  • 按要求格式给出的答案

#4)定义奖励函数

在 GRPO 中,我们使用确定性函数来校验回答并给出奖励,完全不需要人工标注!

这些奖励函数包括:

fine tuning p99 1

  • 精确匹配格式
  • 近似匹配格式
  • 校验答案
  • 校验数字

#5)应用 GRPO 并开始训练

既然数据集和奖励函数都已准备就绪,是时候应用 GRPO 了。

HuggingFace TRL 通过 GRPOConfig 和 GRPOTrainer,开箱即用地提供了我们在 GRPO 示意图中描述的全部功能。

fine tuning p100 1

效果对比

我们再次看到,GRPO 是如何把一个基础模型(base model)打造成推理能力强劲的模型的。

fine tuning p100 2

像 GRPO 这样的强化微调(RFT,Reinforcement Fine-Tuning)方法,只有配合可靠的强化学习环境才能发挥出最佳效果。这就引出了基于 RL 的微调中一个重要组成部分:智能体(Agent)如何与环境交互。

本站内容仅供学习交流,版权归原作者所有。