跳转到主要内容

GRPO 训练

使用 Group Relative Policy Optimization(GRPO)和自定义奖励环境训练语言模型。与奖励模型不同,您提供一个包含环境类的 Python 模块,该类运行多轮对话并返回分数。

概述

GRPO 与 PPO 的关键区别:
  • PPO 需要预训练的奖励模型来评分响应
  • GRPO 使用您编写的自定义环境 — 它为每个提示生成多个补全,通过您的环境评分,并相对于组进行策略优化
这使得 GRPO 非常适合智能体训练,其中奖励来自任务执行(工具使用、代码执行、多轮交互),而不是静态奖励模型。

快速开始

Python API

环境接口

您需要实现一个包含 3 个方法的 Python 类:

带配置的环境

通过 --rl-env-config 将 JSON 配置传递给您的环境:
JSON 被解析并作为 **kwargs 传递给环境构造函数:

要求

GRPO 训练需要同时指定 --rl-env-module--rl-env-class。这些在启动时进行验证 — 如果缺少任何一个,训练将以清晰的错误消息失败。
GRPO 使用 TRL 的 GRPOTrainer(需要 TRL >= 0.28.0)。分词器的填充方向会自动设置为 left,这是 GRPO 的要求。

参数

GRPO 特定参数

共享 RL 参数(PPO + GRPO)

vLLM 加速

使用 vLLM 在 GRPO 训练期间显著加速补全生成:
两种模式可用:
  • colocate(默认)— vLLM 与训练共享 GPU。调整 --vllm-gpu-memory-utilization(默认 0.3)控制内存分配。
  • server — vLLM 在专用 GPU 上运行。训练进程会自动减少 --vllm-server-gpus 个。
vLLM 需要单独安装:pip install aitraining[vllm](需要 vllm>=0.14.0)。
GRPO 不需要 --data-path — 数据集由环境的 build_dataset() 方法构建。

工作原理

  1. 环境加载 — 通过 importlib.import_module() 导入您的模块,使用可选配置实例化类
  2. 构建数据集env.build_dataset(tokenizer) 返回提示
  3. 模型生成 — GRPO 为每个提示生成 rl_num_generations 个补全
  4. 环境评分 — 对每个补全调用 env.score_episode(),返回 0.0-1.0
  5. GRPO 优化 — 策略相对于组分数进行更新(更好的补全获得更高权重)

GRPO 与 PPO 对比

最佳实践

  1. 从简单环境开始 — 在复杂的多轮逻辑之前验证评分是否有效
  2. 使用较小的 rl_num_generations — 从 4 开始,如需更多补全多样性再增加
  3. 评分在 0 到 1 之间 — 使用完整范围;避免总是返回 0 或 1
  4. 独立测试您的环境 — 确保 build_dataset()score_episode() 在训练前能正常工作
  5. 使用 LoRA — 完整微调的 GRPO 需要大量内存;LoRA 使其可行
  6. 小学习率 — 从 1e-5 开始,与 PPO 相同的指导

下一步

PPO 训练

使用奖励模型的 RLHF

RL 模块

底层 RL 构建模块

DPO 训练

使用偏好数据的更简单替代方案

LoRA/PEFT

高效微调