GRPO 训练
使用 Group Relative Policy Optimization(GRPO)和自定义奖励环境训练语言模型。与奖励模型不同,您提供一个包含环境类的 Python 模块,该类运行多轮对话并返回分数。概述
GRPO 与 PPO 的关键区别:- PPO 需要预训练的奖励模型来评分响应
- GRPO 使用您编写的自定义环境 — 它为每个提示生成多个补全,通过您的环境评分,并相对于组进行策略优化
快速开始
Python API
环境接口
您需要实现一个包含 3 个方法的 Python 类:带配置的环境
通过--rl-env-config 将 JSON 配置传递给您的环境:
**kwargs 传递给环境构造函数:
要求
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() 方法构建。工作原理
- 环境加载 — 通过
importlib.import_module()导入您的模块,使用可选配置实例化类 - 构建数据集 —
env.build_dataset(tokenizer)返回提示 - 模型生成 — GRPO 为每个提示生成
rl_num_generations个补全 - 环境评分 — 对每个补全调用
env.score_episode(),返回 0.0-1.0 - GRPO 优化 — 策略相对于组分数进行更新(更好的补全获得更高权重)
GRPO 与 PPO 对比
最佳实践
- 从简单环境开始 — 在复杂的多轮逻辑之前验证评分是否有效
- 使用较小的
rl_num_generations— 从 4 开始,如需更多补全多样性再增加 - 评分在 0 到 1 之间 — 使用完整范围;避免总是返回 0 或 1
- 独立测试您的环境 — 确保
build_dataset()和score_episode()在训练前能正常工作 - 使用 LoRA — 完整微调的 GRPO 需要大量内存;LoRA 使其可行
- 小学习率 — 从 1e-5 开始,与 PPO 相同的指导
下一步
PPO 训练
使用奖励模型的 RLHF
RL 模块
底层 RL 构建模块
DPO 训练
使用偏好数据的更简单替代方案
LoRA/PEFT
高效微调