<img alt="OpenRLHF logo" src="https://github.com/OpenRLHF/OpenRLHF/raw/v0.10.4/docs/logo.png" style="height: 140px;" />
<a href="https://github.com/OpenRLHF/OpenRLHF/graphs/contributors">
<img alt="GitHub Contributors" src="https://img.shields.io/github/contributors/OpenRLHF/OpenRLHF" />
</a>
<a href="https://github.com/OpenRLHF/OpenRLHF/issues">
<img alt="Issues" src="https://img.shields.io/github/issues/OpenRLHF/OpenRLHF?color=0088ff" />
</a>
<a href="https://github.com/OpenRLHF/OpenRLHF/discussions">
<img alt="Issues" src="https://img.shields.io/github/discussions/OpenRLHF/OpenRLHF?color=0088ff" />
</a>
<a href="https://github.com/OpenRLHF/OpenRLHF/pulls">
<img alt="GitHub pull requests" src="https://img.shields.io/github/issues-pr/OpenRLHF/OpenRLHF?color=0088ff" />
</a>
<a href="https://github.com/OpenRLHF/OpenRLHF/stargazers">
<img alt="GitHub stars" src="https://img.shields.io/github/stars/OpenRLHF/OpenRLHF?color=ccf" />
</a>
<a href="https://deepwiki.com/OpenRLHF/OpenRLHF"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
<em>开源 / 全面 / 轻量级 / 易用</em>
OpenRLHF 是首个结合 Ray + vLLM 分布式架构与统一 Agent 设计范式的高性能、生产就绪的开源 RLHF 框架,用于可扩展和可扩展的人类反馈强化学习。
展开新闻
--train.async_enable 启用异步 RLHF 训练,并通过 --train.agent_func_path 启用异步 Agent RLHF。可运行示例见 train_reinforce_baseline_ray_agent_async.sh。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 是首个实现统一 Agent 范式的 RLHF 框架。无论是标准 PPO 还是复杂的多轮推理,每次训练运行都遵循一致的 Agent 执行流程。
OpenRLHF 通过 token-in-token-out 的 Agent 执行统一生成和训练,确保完美一致性、轻松的单轮/多轮扩展,以及零文本级别不匹配。
┌─────────────────────────────┐
│ AgentExecutorBase │
│ (Token-in-Token-out 核心) │
└─────────────────────────────┘
│
┌────────────┴────────────┐
↓ ↓
SingleTurnExecutor MultiTurnExecutor
│ │
┌──────────┴──────────┐ ┌─────────┴──────────┐
↓ ↓ ↓ ↓
标准 RLHF 自定义奖励 多步推理 外部环境
(单次生成) 函数 (OpenAI Agent Server)
↓ ↓ ↓ ↓
└─────────────────────┴───────────┴────────────────┘
│
一致的 Token 轨迹
│
┌─────────┴─────────┐
│ RL 算法 │
│ (解耦) │
│ │
│ PPO, REINFORCE++ │
│ GRPO, RLOO 等 │
└───────────────────┘
展开核心设计原则
| 原则 | 描述 | 优势 |
|---|---|---|
| Token-in-Token-out | 所有采样产生 token 级轨迹 | 零文本级不匹配 |
| 统一接口 | 所有模式使用相同的 AgentExecutorBase API |
一个标志切换模式 |
| 算法无关 | RL 算法(PPO、REINFORCE++ 等)与 Agent 执行器解耦 | 任何算法适用于任何模式 |
| 可扩展 | 轻松插入自定义奖励/环境 | 快速实验 |
| 生产就绪 | 支持同步/异步/混合引擎 | 从研究到部署 |
Agent 执行模式与您选择的 RL 算法独立。您可以将任何算法(PPO、REINFORCE++、GRPO 等)与任何执行模式配合使用:
| 模式 | 使用场景 | 接口 | 复杂度 |
|---|---|---|---|
| 单轮 | 标准 RLHF、自定义奖励函数 | 可选 reward_func() |
⭐ 默认(99% 用例) |
| 多轮 | 多步推理、交互式环境 | reset() + step() |
⭐⭐ 高级 |
OpenRLHF 实现了 PPO、REINFORCE++、REINFORCE++-baseline、GRPO、RLOO,采用受实践指南和社区最佳实践启发的高级优化技巧。
关键设计:RL 算法与 Agent 执行模式解耦。所有算法都可以与单轮和多轮 Agent 执行器无缝配合,通过统一的 token-in-token-out 流程运行,确保行为一致。
展开算法对比表
| 算法 | --algo.advantage.estimator |
关键特性 | 最佳用例 |
|---|---|---|---|
| PPO | (默认) | 完整 critic 网络 | 稳定训练,成熟结果 |
| REINFORCE++ | reinforce |
无 critic 的 PPO 技巧 | 高效训练,更少内存 |
| REINFORCE++-baseline | reinforce_baseline |
均值奖励基线 | 推理任务(RLVR),对奖励尺度鲁棒 |
| RLOO | rloo |
Per-token KL + PPO-clip | 多样本训练 |
| GRPO | group_norm |
组归一化 | 基于批次的训练 |
| Dr. GRPO | dr_grpo |
简化的 GRPO | 移除局部 /std 归一化 |
参考:知乎文章 | Notion 最佳实践
OpenRLHF 提供完整的 RLHF 流程,具有基于 Agent 的灵活性:
展开基于 Agent 的 RL 训练细节
单轮模式(默认 - 99% 的用例)
- 每个提示单次生成
- 适用于所有 RL 算法:PPO、REINFORCE++/baseline/GRPO/RLOO
- 自定义奖励函数(--reward.remote_url)
- 混合引擎以最大化 GPU 利用率
多轮模式(高级 - 交互式任务)
- 与环境反馈的多步交互
- 适用于所有 RL 算法
- 自定义 Agent 函数(--train.agent_func_path)
- OpenAI 兼容服务器:参见 examples/python/agent_func_openai_server_executor.py(将 vLLM 封装为本地 OpenAI 服务器的 agent executor 示例)
- 异步流水线(--train.async_enable)提高吞吐量:train_reinforce_baseline_ray_agent_async.sh
展开监督训练与偏好学习表
| 方法 | 脚本 | 描述 |
|---|---|---|
| SFT | train_sft.sh | 带打包的监督微调 |
| DPO/IPO/cDPO | train_dpo_llama.sh | 直接偏好优化 |
| 奖励模型 | train_rm.sh | 训练奖励模型 |
展开高级能力
效率优化
- 所有训练模式的样本打包(--ds.packing_samples)
- 快速生成的 vLLM 加速(--vllm.num_engines)
- DAPO 动态过滤(--algo.dynamic_filtering_enable)
- 🎲 Dynamic Sampling:对每个 prompt 生成多条响应,并根据奖励函数/Agent 返回的 0–1 scores 信号进行过滤
- 开启:--algo.dynamic_filtering_enable
- 设置分数范围:--algo.dynamic_filtering_range 0.0 1.0
- 前置条件:--rollout.n_samples_per_prompt > 1,并提供 --reward.remote_url(奖励函数)或 --train.agent_func_path(Agent)
- 示例:./examples/scripts/train_dapo_ray_hybrid_engine.sh
可扩展性
- 张量并行的 DeepSpeed AutoTP(参见训练脚本中的 --ds.tensor_parallel_size)
- 长上下文的 RingAttention(--ds.ring_attn_size)
- 使用 SLURM 的多节点训练
模型支持
- VLM(视觉语言模型) — 支持单轮和含图像反馈的多轮交互(--data.image_key、--data.max_images_per_prompt)
- LoRA/QLoRA(--ds.lora.rank、--ds.load_in_4bit)
- 专家混合(MoE)(--actor.aux_loss_coef)
- FlashAttention(--ds.attn_implementation)
- HuggingFace 聊天模板(--data.apply_chat_template)
优化器
- AdamW(默认):--{actor,critic}.optim adam --{actor,critic}.adam.lr 2e-6
- Muon(需 DeepSpeed ≥ 0.18.2,仅作用于 2D 权重;embedding / head / 1D 参数走辅助 AdamW):--{actor,critic}.optim muon --{actor,critic}.muon.lr 1e-4 --{actor,critic}.muon.momentum 0.95。Newton-Schulz 输出是尺度无关的,因此需通过 --{actor,critic}.max_norm 0 关闭全局梯度裁剪(Adam 默认的 1.0 会把 Muon 更新裁没)。
奖励塑形
- DAPO 风格超长惩罚(--reward.overlong_buffer_len、--reward.overlong_penalty_factor)——对超过 max_new_tokens - overlong_buffer_len 的响应进行软惩罚
- ProRL 风格截断惩罚(--reward.stop_properly_penalty_coef)——对 finish_reason='length' 的样本:coef ∈ [0, 1] 表示乘法缩放奖励;coef < 0 表示将奖励直接覆盖为该固定值(例如 -0.5)
生产特性
- Wandb(--logger.wandb.key)和 TensorBoard(--logger.tensorboard_dir)日志
- 检查点恢复(--ckpt.load_enable、--ckpt.save_steps)
- 基于评估指标保存最佳检查点(--ckpt.best_metric_key)
- 评估数据集(--eval.dataset、--eval.temperature、--eval.n_samples_per_prompt)——支持异步训练中的评估
- 多进程数据加载(--data.dataloader_num_workers,PPO/SFT/RM/DPO 均支持)
- PPO 可观测性:actor/critic grad-norm 以及各阶段耗时细分(timing/make_experience、timing/ppo_train、timing/broadcast、timing/generation、timing/step_total)
推荐:使用 Docker 以实现无忧设置
# 1. 启动 Docker 容器
docker run --runtime=nvidia -it --rm --shm-size="10g" --cap-add=SYS_ADMIN \
-v $PWD:/openrlhf nvcr.io/nvidia/pytorch:26.03-py3 bash
# 2. 清理冲突包
sudo pip uninstall xgboost transformer_engine flash_attn pynvml -y
# 3. 安装 OpenRLHF(选择一个)
pip install openrlhf # 基础
pip install openrlhf[vllm] # + vLLM 0.22.1(推荐)
pip install openrlhf[vllm_latest] # + 最新 vLLM
pip install openrlhf[vllm,ring,liger] # + 所有优化
替代方案:从源码安装
git clone https://github.com/OpenRLHF/OpenRLHF.git
cd OpenRLHF
pip install -e .
[!TIP] 我们推荐 vLLM 0.22.1+ 以获得最佳性能。参见 Dockerfiles 和 Nvidia-Docker 安装脚本。
OpenRLHF 提供灵活的数据处理方法:
关键参数:
- --data.input_key:指定输入数据的 JSON 键名
- --data.apply_chat_template:使用 HuggingFace tokenizer 的聊天模板
- --data.input_template:自定义模板字符串(聊天模板的替代方案)
- --data.prompt_probs / --data.dataset_probs:混合多个数据集(例如 0.1,0.4,0.5)
- --eval.dataset:指定评估数据集路径
聊天模板示例:
```python dataset = [{"input_key": [ {"role": "user", "content": "Hello, how are you?"}, {"role": "assistant", "content": "I'm doing great. How can I help you today?"}
$ claude mcp add OpenRLHF \
-- python -m otcore.mcp_server <graph>