[ English | 中文 | 日本語 ]
OpenRLHF 是首个结合 Ray + vLLM 分布式架构与基于智能体的统一设计范式的高性能、生产就绪的开源 RLHF 框架,旨在实现可扩展、可扩展的人类反馈强化学习。
📚 了解更多: 文档 | 演示文稿 | 技术报告 | 视频
📖 目录
新闻
显示新闻
- [2026/2] [ProRL V2](https://developer.nvidia.com/blog/scaling-llm-reinforcement-learning-with-prolonged-training-using-prorl-v2/) 使用 REINFORCE++-baseline 通过延长 RL 训练训练了一个先进的 1.5B 推理模型。训练脚本:[train_prorlv2_math_hybrid_engine.sh](./examples/scripts/train_prorlv2_math_hybrid_engine.sh)
- [2025/10] [ScaleRL](https://arxiv.org/abs/2510.13786) 验证了 REINFORCE++-baseline 在大规模训练场景中的有效性。发布了 [REINFORCE++ 演示文稿](https://docs.google.com/presentation/d/1stieP_3PM1z4Hq1YWR3GywFkxcHEAlstXMaS23KlGN4)
- [2025/6] [Magistral](https://mistral.ai/static/research/magistral.pdf) 使用与 REINFORCE++-baseline 非常相似的方法训练推理模型。
- [2025/5] [MARTI](https://github.com/TsinghuaC3I/MARTI) 已作为 OpenRLHF 的一个分支发布。它旨在通过将集中式多智能体交互与分布式策略训练相结合,使用 RL 训练基于 LLM 的多智能体系统。
- [2025/5] OpenRLHF 0.8.0 通过 `--async_train` 支持异步 RLHF 训练,并通过 `--agent_func_path` 支持异步智能体 RLHF。可运行的示例参见 [train_reinforce_baseline_ray_agent_async.sh](./examples/scripts/train_reinforce_baseline_ray_agent_async.sh)。
- [2025/4] 发布博客 [使用 vLLM 加速 RLHF,来自 OpenRLHF 的最佳实践](https://blog.vllm.ai/2025/04/23/openrlhf-vllm.html)
- [2025/4] 清理 OpenRLHF:基于单一控制器和统一打包样本重构了源代码。
- [2025/3] CMU 的 [高级自然语言处理 2025 春季课程](https://cmu-l3.github.io/anlp-spring2025/) 使用 OpenRLHF 作为 RLHF 框架教学案例。
- [2025/2] [Logic-RL](https://arxiv.org/abs/2502.14768) 和 [PRIME](https://arxiv.org/abs/2502.01456) 证明 REINFORCE++ 在训练中比 GRPO 更稳定,比 PPO 更快。
- [2025/2] [LMM-R1](https://github.com/TideDra/lmm-r1) 是 OpenRLHF 的一个分支,旨在为多模态任务上复现 DeepSeek-R1 提供高性能 RL 基础设施。
- [2025/2] MIT & Microsoft 使用 OpenRLHF 提出了 [关于 LLM 中思维涌现的研究 I:寻找正确的直觉](https://arxiv.org/pdf/2502.06773)。
- [2025/1] 香港科技大学使用 OpenRLHF 在小模型上复现了 [DeepSeek-R1-Zero 和 DeepSeek-R1 训练](https://github.com/hkust-nlp/simpleRL-reason)。
- [2024/12] 我们“提出”了 😊 [REINFORCE++:一种简单高效的对齐大语言模型的方法](https://www.researchgate.net/publication/387487679_REINFORCE_An_Efficient_RLHF_Algorithm_with_Robustnessto_Both_Prompt_and_Reward_Models)。
- [2024/12] 我们在 [Notion 博客文章](https://hijkzzz.notion.site/unraveling-rlhf-and-its-variants-engineering-insights#147d9a33ecc9806090f3d5c749d31f05) 中分析了 PPO、REINFORCE++、GRPO 和 RLOO。
- [2023/8] OpenRLHF 开源。
🏗️ 架构基础:Ray + vLLM 分布式
OpenRLHF 是首个基于 Ray + vLLM 分布式架构构建的 RLHF 框架,可高效协调跨 GPU 的多个组件:
核心基础设施组件
Ray - 分布式调度器与控制器
OpenRLHF 利用 Ray 实现高效的分布式调度。它将 Actor、Reward、Reference 和 Critic 模型分离到不同的 GPU 上,支持对高达 70B+ 参数的模型进行可扩展训练。
混合引擎调度:所有模型和 vLLM 引擎可以共享 GPU 资源——最大限度地减少空闲时间并最大化 GPU 利用率。这使得在有限的硬件上运行完整的 RLHF 流水线成为可能。
vLLM - 高性能推理引擎
RLHF 训练 80% 的时间用于样本生成。借助 vLLM 的自动张量并行 (AutoTP) 和流水线并行 (PP),OpenRLHF 提供了高吞吐量、内存高效的生成能力。
DeepSpeed - 内存高效训练
基于 DeepSpeed ZeRO-3、deepcompile、AutoTP 和 RingAttention。无需重量级框架即可实现大模型训练,同时直接与 HuggingFace 模型协同工作。
Transformers - 模型接口
与 HuggingFace Transformers 原生集成,实现无缝的模型加载、状态管理和预训练模型的微调。
NCCL / CUDA IPC - 高速通信
高效的 GPU 间通信,用于分布式训练和推理。
🎯 设计范式:基于智能体的执行
在 Ray 分布式架构之上,OpenRLHF 是首个实现统一的基于智能体范式的 RLHF 框架。每次训练运行——无论是标准的 PPO 还是复杂的多轮推理——都遵循一致的智能体执行流水线。
为什么基于智能体?
OpenRLHF 通过令牌输入-令牌输出的智能体执行统一了生成和训练,确保了完美的一致性、易于单/多轮扩展以及零文本级不匹配。
智能体架构
┌─────────────────────────────┐
│ AgentExecutorBase │
│ (Token-in-Token-out Core) │
└─────────────────────────────┘
│
┌────────────┴────────────┐
↓ ↓
SingleTurnExecutor MultiTurnExecutor
│ │
┌──────────┴──────────┐ ┌─────────┴──────────┐
↓ ↓ ↓ ↓
Standard RLHF Custom Reward Multi-Step External Env
(One-shot gen) Function Reasoning (OpenAI Agent Server)
↓ ↓ ↓ ↓
└─────────────────────┴───────────┴────────────────┘
│
Consistent Token Trajectories
│
┌─────────┴─────────┐
│ RL Algorithms │
│ (Decoupled) │
│ │
│ PPO, REINFORCE++ │
│ GRPO, RLOO, etc. │
└───────────────────┘
核心设计原则
显示核心设计原则
| 原则 | 描述 | 优势 |
|-----------|-------------|---------|
| **令牌输入-令牌输出** | 所有采样都产生令牌级轨迹 | 零文本级不匹配 |
| **统一接口** | 所有模式使用相同的 `AgentExecutorBase` API | 通过一个标志切换模式 |
| **算法无关** | RL 算法(PPO、REINFORCE++ 等)与智能体执行器解耦 | 任何算法可与任何模式配合使用 |
| **可扩展** | 轻松插入自定义奖励/环境 | 快速实验 |
| **生产就绪** | 支持同步/异步/混合引擎 | 从研究到部署 |
两种执行模式(与 RL 算法正交)
智能体执行模式独立于你选择的 RL 算法。你可以将任何算法(PPO、REINFORCE++、GRPO 等)与任何执行模式一起使用:
| 模式 |
使用场景 |
接口 |
复杂度 |
| 单轮 |
标准 RLHF,自定义奖励函数 |
可选的 reward_func() |
⭐ 默认(99% 使用场景) |
| 多轮 |
多步推理,交互式环境 |
reset() + step() |
⭐⭐ 高级 |
🚀 先进的 RL 算法
OpenRLHF 实现了 PPO、REINFORCE++、REINFORCE++-baseline、GRPO、RLOO,并采用了受实践指南和社区最佳实践启发的高级优化技巧。
关键设计:RL 算法与智能体执行模式解耦。所有算法都能与单轮和多轮智能体执行器无缝协作,通过统一的令牌输入-令牌输出流水线运行,确保行为一致。
显示算法对比表
| 算法 | `--advantage_estimator` | 关键特性 | 最佳使用场景 |
|-----------|------------------------|-------------|---------------|
| **PPO** | (默认) | 完整的 Critic 网络 | 稳定训练,已验证结果 |
| **REINFORCE++** | `reinforce` | 无 Critic 的 PPO 技巧 | 高效训练,内存占用少 |
| **REINFORCE++-baseline** | `reinforce_baseline` | 平均奖励基线 | 推理任务 (RLVR),对奖励尺度鲁棒 |
| **RLOO** | `rloo` | 每令牌 KL + PPO-clip | 多样本训练 |
| **GRPO** | `group_norm` | 组归一化 | 基于批次的训练 |
| **Dr. GRPO** | `dr_grpo` | 简化的 GRPO | 移除局部 `/std` 归一化 |
参考:知乎文章 | Notion 最佳实践
📋 全面功能
OpenRLHF 提供了一个完整的 RLHF 流水线,并具备基于智能体的灵活性:
🎯 基于智能体的 RL 训练(核心创新)
显示基于智能体的 RL 训练详情
**单轮模式**(默认 - 99% 使用场景)
- 每个提示单次生成
- 适用于所有 RL 算法:[PPO](./examples/scripts/train_ppo_ray_hybrid_engine.sh)、[REINFORCE++/baseline/GRPO/RLOO](./examples/scripts/train_reinforce_baseline_hybrid_engine.sh)
- [自定义奖励函数](./examples/scripts/train_ppo_with_reward_fn.sh) (`--remote_rm_url`)
- [混合引擎](./examples/scripts/train_ppo_ray_hybrid_engine.sh) 实现最大 GPU 利用率
**多轮模式**(高级 - 交互式任务)
- 与环境反馈进行多步交互
- 适用于所有 RL 算法
- [自定义智能体函数](./examples/scripts/train_reinforce_baseline_ray_agent_async.sh) (`--agent_func_path`)
- OpenAI 兼容服务器:参见 `examples/python/agent_func_openai_server_executor.py`,这是一个将 vLLM 包装为本地 OpenAI Agent Server 的智能体执行器
- 异步流水线 (`--async_train`) 实现更高吞吐量:[train_reinforce_baseline_ray_agent_async.sh](./examples/scripts/train_reinforce_baseline_ray_agent_async.sh)
🎓 监督训练与偏好学习
显示监督训练与偏好学习表
| 方法 | 脚本 | 描述 |
|--------|--------|-------------|
| **SFT** | [train_sft.sh](./examples/scripts/train_sft.sh) | 带打包的监督微调 |
| **DPO/IPO/cDPO** | [train_dpo_llama.sh](./examples/scripts/train_dpo_llama.sh) | 直接偏好优化 |
| **奖励模型** | [train_rm.sh](./examples/scripts/train_rm.sh) | 训练奖励模型 |
⚡ 高级能力
显示高级能力
**效率优化**
- 所有训练模式的样本打包 (`--packing_samples`)
- vLLM 加速 (`--vllm_num_engines`) 实现快速生成
- DAPO [动态过滤](./examples/scripts/train_dapo_ray_hybrid_engine.sh) (`--dynamic_filtering`)
- 🎲 动态采样:对于每个提示,生成多个响应,并根据你的奖励/智能体 **0–1 `scores`** 信号**过滤**它们
- 启用:`--dynamic_filtering`
- 分数范围:`--dynamic_filtering_reward_range 0.0 1.0`
- 要求:`--n_samples_per_prompt > 1` 且 `--remote_rm_url`