MCPcopy Index your code
hub / github.com/OpenRLHF/OpenRLHF

github.com/OpenRLHF/OpenRLHF @v0.10.4 sqlite

repository ↗ · DeepWiki ↗ · release v0.10.4 ↗
496 symbols 1,817 edges 63 files 143 documented · 29%
README
<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>

[ English | 中文 | 日本語 ]

OpenRLHF 是首个结合 Ray + vLLM 分布式架构统一 Agent 设计范式的高性能、生产就绪的开源 RLHF 框架,用于可扩展和可扩展的人类反馈强化学习。

📚 了解更多文档 | PPT | 技术报告 | 视频

📖 目录


新闻

展开新闻


🏗️ 架构基础:Ray + vLLM 分布式

OpenRLHF 是首个基于 Ray + vLLM 分布式架构构建的 RLHF 框架,可高效地跨 GPU 编排多个组件:

OpenRLHF 架构(Ray + vLLM)

核心基础设施组件

Ray - 分布式调度器和控制器
OpenRLHF 利用 Ray 实现高效的分布式调度。它将 Actor、Reward、Reference 和 Critic 模型分布到不同的 GPU 上,支持训练高达 70B+ 参数的模型。

混合引擎调度:所有模型和 vLLM 引擎可以共享 GPU 资源,最大限度地减少空闲时间并提高 GPU 利用率。这允许在有限的硬件上运行完整的 RLHF 流程。

vLLM - 高性能推理引擎
RLHF 训练中 80% 的时间花在样本生成上。通过 vLLM 与自动张量并行(AutoTP)和流水线并行(PP),OpenRLHF 提供高吞吐量、内存高效的生成。

DeepSpeed - 内存高效训练
基于 DeepSpeed ZeRO-3、deepcompileAutoTP 和 RingAttention。支持大模型训练而无需重量级框架,直接与 HuggingFace 模型配合使用。

Transformers - 模型接口
与 HuggingFace Transformers 原生集成,可无缝加载模型、状态管理和微调预训练模型。

NCCL / CUDA IPC - 高速通信
高效的 GPU 间通信,用于分布式训练和推理。


🎯 设计范式:基于 Agent 的执行

在 Ray 分布式架构之上,OpenRLHF 是首个实现统一 Agent 范式的 RLHF 框架。无论是标准 PPO 还是复杂的多轮推理,每次训练运行都遵循一致的 Agent 执行流程。

为什么采用 Agent 范式?

OpenRLHF 通过 token-in-token-out 的 Agent 执行统一生成和训练,确保完美一致性、轻松的单轮/多轮扩展,以及零文本级别不匹配。

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 执行器解耦 任何算法适用于任何模式
可扩展 轻松插入自定义奖励/环境 快速实验
生产就绪 支持同步/异步/混合引擎 从研究到部署

两种执行模式(与 RL 算法正交)

Agent 执行模式与您选择的 RL 算法独立。您可以将任何算法(PPO、REINFORCE++、GRPO 等)与任何执行模式配合使用:

模式 使用场景 接口 复杂度
单轮 标准 RLHF、自定义奖励函数 可选 reward_func() ⭐ 默认(99% 用例)
多轮 多步推理、交互式环境 reset() + step() ⭐⭐ 高级

🚀 最先进的 RL 算法

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 训练(核心创新)

展开基于 Agent 的 RL 训练细节

单轮模式(默认 - 99% 的用例) - 每个提示单次生成 - 适用于所有 RL 算法:PPOREINFORCE++/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_experiencetiming/ppo_traintiming/broadcasttiming/generationtiming/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+ 以获得最佳性能。参见 DockerfilesNvidia-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?"}

Core symbols most depended-on inside this repo

append
called by 66
openrlhf/trainer/ray/ppo_actor.py
is_rank_0
called by 40
openrlhf/utils/deepspeed/deepspeed.py
print
called by 35
openrlhf/utils/deepspeed/deepspeed.py
update
called by 22
openrlhf/trainer/ppo_utils/kl_controller.py
all_reduce
called by 17
openrlhf/utils/deepspeed/deepspeed.py
get_rank
called by 15
openrlhf/utils/deepspeed/deepspeed.py
tensor_field
called by 15
openrlhf/trainer/ppo_utils/experience.py
aggregate_loss
called by 15
openrlhf/models/loss.py

Shape

Method 283
Function 145
Class 63
Route 5

Languages

Python100%

Modules by API surface

openrlhf/utils/deepspeed/deepspeed.py29 symbols
openrlhf/utils/math_utils.py28 symbols
openrlhf/trainer/ray/launcher.py23 symbols
openrlhf/utils/seqlen_balancing.py20 symbols
openrlhf/trainer/ray/ppo_actor.py20 symbols
openrlhf/trainer/ppo_trainer.py20 symbols
openrlhf/models/loss.py20 symbols
openrlhf/trainer/ppo_trainer_async.py19 symbols
openrlhf/trainer/ray/vllm_engine.py18 symbols
tests/test_ray_env_vars.py16 symbols
examples/python/agent_func_openai_server_executor.py16 symbols
openrlhf/utils/logging_utils.py15 symbols

Dependencies from manifests, versioned

deepspeed0.19.1 · 1×
flash-attn2.8.3 · 1×
grpcio1.74.0 · 1×
huggingface_hub1.0.0 · 1×
optree0.15.0 · 1×
pynvml12.0.0 · 1×
transformers5.7.0 · 1×

For agents

$ claude mcp add OpenRLHF \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact