OpenRLHF
OpenRLHF 是一款高性能、易扩展的开源强化学习框架,专为大语言模型(LLM)及视觉 - 语言模型(VLM)的“人类反馈强化学习”(RLHF)训练而设计。它旨在解决传统 RL 训练框架在分布式环境下效率低、部署复杂以及难以支持多轮智能体交互等痛点,让研究人员和开发者能更轻松地复现前沿算法并投入生产环境。
该工具特别适合 AI 研究人员、算法工程师以及希望探索大模型对齐技术的开发者使用。其核心亮点在于首创性地结合了 Ray 分布式调度与 vLLM 高速推理引擎,构建了统一的“智能体(Agent)”执行范式。这不仅大幅提升了训练吞吐量和资源利用率,还原生支持 PPO、REINFORCE++、GRPO 等多种先进算法。此外,OpenRLHF 具备强大的灵活性,能够处理从单轮奖励优化到复杂的多轮环境交互任务,甚至支持包含图像输入的多模态模型端到端训练。无论是进行基础理论研究还是构建大规模生产级应用,OpenRLHF 都提供了一个轻量且功能完备的技术底座。
使用场景
某自动驾驶初创团队正致力于训练一个能理解路况截图并执行多步决策的视觉语言模型(VLM)代理,以优化车辆在复杂路口的导航策略。
没有 OpenRLHF 时
- 架构搭建困难:团队需手动整合 Ray 分布式框架与 vLLM 推理引擎,耗费数周编写胶水代码,且难以处理图像输入与多轮交互的数据流。
- 算法迭代缓慢:尝试复现最新的 REINFORCE++ 或 PPO 算法时,常因显存溢出或通信瓶颈导致训练中断,调试周期长达数天。
- 多模态支持缺失:现有开源方案大多仅支持文本,无法直接利用车辆摄像头回传的实时截图作为环境反馈,被迫简化为纯文本模拟,严重偏离真实场景。
- 资源利用率低:由于缺乏异步强化学习机制,GPU 在等待环境交互响应时大量空闲,导致昂贵的算力资源浪费,训练成本居高不下。
使用 OpenRLHF 后
- 一键部署分布式架构:直接调用 OpenRLHF 内置的"Ray + vLLM"混合引擎,仅需修改少量配置即可启动支持图像输入的多轮 VLM 训练流程。
- 高效算法落地:内置优化的 REINFORCE++ 和 PPO 算法开箱即用,稳定支撑长序列多步推理,将模型收敛时间从数周缩短至数天。
- 原生多模态闭环:利用其新增的多轮 VLM RL 功能,直接将路口截图作为 Prompt,模型输出驾驶指令并获得环境奖励,实现了端到端的真实场景对齐。
- 极致性能提升:借助异步 RL 机制,推理与训练并行执行,GPU 利用率提升至 90% 以上,在同等硬件条件下训练吞吐量翻倍。
OpenRLHF 通过统一的智能体范式和高性能分布式架构,让复杂的多模态强化学习训练从“造轮子”的噩梦变成了可快速落地的工程实践。
运行环境要求
- Linux
- 必需 NVIDIA GPU
- 支持多卡分布式训练(通过 Ray + DeepSpeed ZeRO-3 + vLLM),可训练 70B+ 参数模型
- 需支持 CUDA 和 NCCL 通信,具体显存需求取决于模型大小及是否使用混合引擎共享资源
未说明(建议根据模型规模配置充足系统内存以支持 Ray 分布式调度)

快速开始
OpenRLHF是首个高性能、生产就绪的开源RLHF框架,它将Ray + vLLM分布式架构与统一的基于智能体的设计范式相结合,实现了可扩展且可扩展的人类反馈强化学习。
📖 目录
- 🗞️ 新闻
- 🏗️ 架构基础 - Ray + vLLM + DeepSpeed分布式基础设施
- 🎯 设计范式 - 统一的基于智能体的执行流水线
- 🚀 RL算法 - PPO、REINFORCE++、GRPO、RLOO
- 📋 功能概览 - 完整的RLHF流水线功能
- 🎬 快速入门 - 安装与典型工作流程
- 🎓 训练指南 - SFT、奖励模型、RL训练
- 🎯 单轮智能体 - 自定义奖励函数
- 🤖 多轮智能体 - 复杂环境
- 🔧 高级主题 - LoRA、性能调优
新闻
显示新闻
- [2026/4] OpenRLHF 0.10新增多轮VLM RL——在提示和环境反馈中(如截图)进行多步图像交互。示例:vlm_multiturn_agent.py
- [2026/4] OpenRLHF 0.10新增VLM(视觉-语言模型)RLHF支持——端到端训练像Qwen3.5这样的带有图像输入的VLM。训练脚本:train_vlm_math_hybrid_engine.sh
- [2026/2] ProRL V2使用REINFORCE++基线,通过长时间的RL训练,训练出一个最先进的1.5B推理模型。训练脚本:train_prorlv2_math_hybrid_engine.sh
- [2025/10] ScaleRL验证了REINFORCE++基线在大规模训练场景中的有效性。发布了REINFORCE++幻灯片
- [2025/6] Magistral采用与REINFORCE++基线非常相似的方法来训练推理模型。
- [2025/5] MARTI作为OpenRLHF的分支发布。它旨在通过整合集中式的多智能体交互与分布式策略训练,利用RL训练基于LLM的多智能体系统。
- [2025/5] OpenRLHF 0.8.0支持通过
--async_train进行异步RLHF训练,以及通过--agent_func_path进行异步智能体RLHF。请参阅runnable example。 - [2025/4] 发布博客使用vLLM加速RLHF,来自OpenRLHF的最佳实践
- [2025/4] 清理OpenRLHF:根据单控制器和统一打包样本重构了源代码
- [2025/3] CMU的高级自然语言处理春季2025课程将OpenRLHF作为RLHF框架的教学案例。
- [2025/2] Logic-RL和PRIME证明,与GRPO相比,REINFORCE++在训练中更加稳定,速度也比PPO更快。
- [2025/2] LMM-R1是OpenRLHF的一个分支,旨在为在多模态任务上复现DeepSeek-R1提供高性能的RL基础设施。
- [2025/2] MIT和微软提出了关于LLM中思维涌现的研究 I:寻找正确的直觉,并使用了OpenRLHF。
- [2025/1] HKUST复现了DeepSeek-R1-Zero及使用OpenRLHF在小型模型上训练DeepSeek-R1
- [2024/12] 我们“提出”了😊REINFORCE++:一种简单高效的大型语言模型对齐方法。
- [2024/12] 我们在Notion博客文章中分析了PPO、REINFORCE++、GRPO和RLOO。
- [2023/8] OpenRLHF正式开源。
🏗️ 架构基础:Ray + vLLM分布式架构
OpenRLHF是首个基于Ray + vLLM分布式架构构建的RLHF框架,能够高效地协调跨GPU的多个组件:
核心基础设施组件
Ray - 分布式调度器和控制器
OpenRLHF 利用 Ray 实现高效的分布式调度。它将 Actor、奖励模型、参考模型和 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 通过 “token-in-token-out” 的智能体执行方式 将生成与训练统一起来,确保完美的一致性、易于单轮或多轮扩展,并且完全避免文本级别的不匹配。
智能体架构
┌─────────────────────────────┐
│ 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. │
└───────────────────┘
核心设计原则
展示核心设计原则
| 原则 | 描述 | 优势 |
|---|---|---|
| Token-in-Token-out | 所有采样都生成 token 级别的轨迹 | 完全避免文本级别不匹配 |
| 统一接口 | 所有模式使用相同的 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 算法与智能体执行模式 解耦。所有算法都能无缝对接单轮和多轮智能体执行器,通过统一的 “token-in-token-out” 流水线运行,从而保证行为的一致性。
展示算法对比表
| 算法 | --advantage_estimator |
关键特性 | 最佳使用场景 |
|---|---|---|---|
| PPO | (默认) | 完整的 critic 网络 | 稳定训练,效果可靠 |
| REINFORCE++ | reinforce |
应用 PPO 技巧但无需 critic | 训练高效,内存占用低 |
| REINFORCE++-baseline | reinforce_baseline |
使用平均奖励作为基准 | 推理任务(RLVR),对奖励尺度不敏感 |
| RLOO | rloo |
每个 token 的 KL 散度 + PPO 截断 | 多样本训练 |
| GRPO | group_norm |
使用组归一化 | 基于批次的训练 |
| Dr. GRPO | dr_grpo |
简化版 GRPO | 去除了局部 /std 归一化 |
参考资料:知乎文章 | Notion 最佳实践
📋 全面的功能特性
OpenRLHF 提供了一个基于智能体的灵活完整 RLHF 流水线:
🎯 基于智能体的强化学习训练(核心创新)
显示基于智能体的强化学习训练详情
单回合模式(默认 - 99% 的用例)
- 每个提示一次性生成
- 适用于所有强化学习算法:PPO、REINFORCE++/baseline/GRPO/RLOO
- 自定义奖励函数 (
--remote_rm_url) - 混合引擎 实现 GPU 利用率最大化
多回合模式(进阶 - 交互式任务)
- 多步交互并获取环境反馈
- 适用于所有强化学习算法
- 自定义智能体函数 (
--agent_func_path) - 兼容 OpenAI 的服务器:参见
examples/python/agent_func_openai_server_executor.py,该脚本将 vLLM 封装为本地 OpenAI 智能体服务器 - 异步流水线 (
--async_train) 提高吞吐量:train_reinforce_baseline_ray_agent_async.sh
🎓 监督式训练与偏好学习
显示监督式训练与偏好学习表格
| 方法 | 脚本 | 描述 |
|---|---|---|
| SFT | train_sft.sh | 带打包的监督微调 |
| DPO/IPO/cDPO | train_dpo_llama.sh | 直接偏好优化 |
| 奖励模型 | train_rm.sh | 训练奖励模型 |
⚡ 高级功能
显示高级功能
效率优化
- 所有训练模式下的样本打包 (
--packing_samples) - vLLM 加速 (
--vllm_num_engines) 用于快速生成 - DAPO 动态筛选 (
--dynamic_filtering)- 🎲 动态采样:对每个提示生成多个响应,并根据你的奖励或智能体提供的
0–1分数信号进行筛选- 启用:
--dynamic_filtering - 分数范围:
--dynamic_filtering_reward_range 0.0 1.0 - 要求:
--n_samples_per_prompt > 1且需同时具备--remote_rm_url或--agent_func_path - 示例:
./examples/scripts/train_dapo_ray_hybrid_engine.sh
- 启用:
- 🎲 动态采样:对每个提示生成多个响应,并根据你的奖励或智能体提供的
可扩展性
- DeepSpeed AutoTP 实现张量并行(参见训练脚本中的
--ds_tensor_parallel_size) - RingAttention 用于长上下文处理 (
--ring_attn_size) - 使用 SLURM 进行多节点训练
模型支持
- VLM(视觉-语言模型) — 单回合及 带图像反馈的多回合 模式 (
--image_key,--max_images_per_prompt) - LoRA/QLoRA (
--lora_rank,--load_in_4bit) - 专家混合模型 (MoE) (
--aux_loss_coef) - FlashAttention (
--attn_implementation) - HuggingFace 对话模板 (
--apply_chat_template)
奖励塑造
- DAPO 风格的过长惩罚用于控制长度 (
--overlong_buffer_len,--overlong_penalty_factor) — 对超过max_new_tokens - overlong_buffer_len的响应进行软性惩罚 - ProRL 风格的截断惩罚 (
--stop_properly_penalty_coef) — 对于finish_reason='length'的样本:coef ∈ [0, 1]会按比例缩放奖励;coef < 0则将奖励固定为该值(如-0.5)
生产级特性
- Wandb (
--use_wandb) 和 TensorBoard (--use_tensorboard) 日志记录 - 检查点恢复 (
--load_checkpoint,--save_steps) - 根据评估指标保存最佳检查点 (
--best_metric_key) - 评估数据集 (
--eval_dataset,--eval_temperature,--eval_n_samples_per_prompt) — 支持异步训练 - 多进程数据加载 (
--dataloader_num_workers, 适用于 PPO/SFT/RM/DPO`) - PPO 可观测性:演员/评论家梯度范数及各阶段耗时记录(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:25.11-py3 bash
# 2. 清除冲突包
sudo pip uninstall xgboost transformer_engine flash_attn pynvml -y
# 3. 安装 OpenRLHF(任选其一)
pip install openrlhf # 基础版
pip install openrlhf[vllm] # + vLLM 0.19.0(推荐)
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.19.0+ 以获得最佳性能。请参阅 Dockerfile 和 Nvidia-Docker 安装脚本。
准备数据集
OpenRLHF 提供灵活的数据处理方法:
关键参数:
--input_key:指定输入数据的 JSON 键名--apply_chat_template:使用 HuggingFace 分词器的 聊天模板--input_template:自定义模板字符串(作为聊天模板的替代方案)--prompt_data_probs/--dataset_probs:混合多个数据集(例如0.1,0.4,0.5)--eval_dataset:指定评估数据集路径
聊天模板示例:
dataset = [{"input_key": [
{"role": "user", "content": "你好,最近怎么样?"},
{"role": "assistant", "content": "我很好,今天有什么可以帮您的吗?"},
{"role": "user", "content": "我想展示一下聊天模板的功能!"},
]}]
tokenizer.apply_chat_template(dataset[0]["input_key"], tokenize=False)
# 输出:"<s>[INST] 你好,最近怎么样? [/INST]我很好...</s> [INST] 我想展示一下... [/INST]"
有监督微调
OpenRLHF 的模型检查点与 HuggingFace 模型完全兼容。你可以使用 --pretrain {name or path}、--reward_pretrain {name or path} 和 --critic_pretrain {name or path} 来指定模型名称或路径。我们在 HuggingFace OpenRLHF 上提供了一些预训练的检查点和数据集。
然后,你可以使用我们在 examples/scripts 目录中提供的启动脚本,或者使用以下命令开始训练。
SFT 命令
deepspeed --module openrlhf.cli.train_sft \
--max_len 4096 \
--dataset Open-Orca/OpenOrca \
--input_key question \
--output_key response \
--input_template $'User: {}\nAssistant: ' \
--train_batch_size 256 \
--micro_train_batch_size 2 \
--max_samples 500000 \
--pretrain meta-llama/Meta-Llama-3-8B \
--save_path ./checkpoint/llama3-8b-sft \
--save_steps -1 \
--logging_steps 1 \
--eval_steps -1 \
--zero_stage 2 \
--max_epochs 1 \
--packing_samples \
--param_dtype bf16 \
--learning_rate 5e-6 \
--gradient_checkpointing \
--use_wandb {wandb_token}
# 其他选项:
# --apply_chat_template # 使用 HF 分词器聊天模板
# --ring_attn_size 2 # 启用 RingAttention(需先安装 ring_flash_attn)
# --multiturn # 多轮微调损失
# --pretrain_mode # 继续预训练模式
奖励模型训练
奖励模型训练命令
deepspeed --module openrlhf.cli.train_rm \
--save_path ./checkpoint/llama3-8b-rm \
--save_steps -1 \
--logging_steps 1 \
--eval_steps -1 \
--train_batch_size 256 \
--micro_train_batch_size 1 \
--pretrain OpenRLHF/Llama-3-8b-sft-mixture \
--param_dtype bf16 \
--max_epochs 1 \
--max_len 8192 \
--zero_stage 3 \
--learning_rate 9e-6 \
--dataset OpenRLHF/preference_dataset_mixture2_and_safe_pku \
--apply_chat_template \
--chosen_key chosen \
--rejected_key rejected \
--packing_samples \
--gradient_checkpointing \
--use_wandb {wandb_token}
建议将奖励模型的 --value_prefix_head 选项设置为 score,这样我们就可以使用 AutoModelForSequenceClassification 加载模型:
reward_model = AutoModelForSequenceClassification.from_pretrained(
reward_model_path,
num_labels=1,
torch_dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
use_cache=False,
)
inputs = xxxx (左填充输入标记)
reward = reward_model.model(*inputs).last_hidden_state
reward = reward_model.score(reward)[:, -1]
RL 训练:使用 Ray 和 vLLM 的 PPO/REINFORCE++
OpenRLHF 中的所有 RL 训练都通过 智能体执行流水线 运行。下面的例子展示了使用混合引擎以获得最佳性能的单回合智能体执行(默认模式):
# 在容器中启动 Ray 主节点
ray start --head --node-ip-address 0.0.0.0 --num-gpus 8
# 如果你想在更多节点上启动 Ray,可以使用
ray start --address {MASTER-NODE-ADDRESS}:6379 --num-gpus 8
ray job submit --address="http://127.0.0.1:8265" \
--runtime-env-json='{"working_dir": "/openrlhf"}' \
-- python3 -m openrlhf.cli.train_ppo_ray \
--ref_num_nodes 1 \
--ref_num_gpus_per_node 8 \
--reward_num_nodes 1 \
--reward_num_gpus_per_node 8 \
--critic_num_nodes 1 \
--critic_num_gpus_per_node 8 \
--actor_num_nodes 1 \
--actor_num_gpus_per_node 8 \
--vllm_num_engines 4 \
--vllm_tensor_parallel_size 2 \
--colocate_all_models \
--vllm_gpu_memory_utilization 0.5 \
--pretrain OpenRLHF/Llama-3-8b-sft-mixture \
--reward_pretrain OpenRLHF/Llama-3-8b-rm-700k \
--save_path /openrlhf/examples/test_scripts/final/llama3-8b-rlhf \
--ckpt_path /openrlhf/examples/test_scripts/ckpt/llama3-8b-rlhf \
--save_hf_ckpt \
--train_batch_size 128 \
--rollout_batch_size 1024 \
--use_dynamic_batch \
--n_samples_per_prompt 1 \
--max_epochs 1 \
--prompt_max_len 1024 \
--max_samples 100000 \
--generate_max_len 1024 \
--zero_stage 3 \
--param_dtype bf16 \
--actor_learning_rate 5e-7 \
--critic_learning_rate 9e-6 \
--init_kl_coef 0.01 \
--prompt_data OpenRLHF/prompt-collection-v0.1 \
--input_key context_messages \
--apply_chat_template \
--normalize_reward \
--gradient_checkpointing \
--packing_samples \
--vllm_sync_backend nccl \
--enforce_eager \
--vllm_enable_sleep \
--deepspeed_enable_sleep \
--use_wandb {wandb_token}
# 算法变体(均采用单回合智能体执行):
# --advantage_estimator reinforce # REINFORCE++
# --advantage_estimator rloo # RLOO
# --advantage_estimator reinforce_baseline # REINFORCE++-baseline(最适合 RLVR)
# --advantage_estimator group_norm # GRPO
# --advantage_estimator dr_grpo # Dr. GRPO
# 高级选项:
# --init_kl_coef 0 # 无参考模型
# --remote_rm_url http://host:5000/get_reward # HTTP 奖励模型
# --n_samples_per_prompt 4 # 每个提示生成多个样本
# --vllm_generate_batch_size 2048 # 生成时超采样(大于 rollout_batch_size);需要 --async_train
# --enable_vllm_is_correction # vLLM 对于离策略回放的重要性采样修正
# --vllm_is_correction_type tis # 修正类型:tis(token clamp)| icepop(token filter)| seq-mask-tis(序列级几何平均)
# --vllm_is_truncated_threshold 0.5 5.0 # IS 截断区间:[低, 高]
# --best_metric_key eval_default_pass1 # 根据评估指标保存最佳检查点(空值表示自动检测第一轮 pass1,'none' 表示禁用)
# --policy_loss_type gspo # 使用 GSPO 策略损失变体( vs 默认的 'ppo')
[!TIP] 对于推理任务(RLVR):使用
--advantage_estimator reinforce_baseline作为 REINFORCE++-baseline——它对不同的奖励尺度具有鲁棒性。
[!NOTE] Ray 环境设置:让 Ray 自动部署,使用
--runtime-env-json='{"setup_commands": ["pip install openrlhf[vllm]"]}'
[!NOTE] 解决 GPU 索引错误:如果遇到 DeepSpeed GPU 设备设置问题,可以设置
export RAY_EXPERIMENTAL_NOSET_CUDA_VISIBLE_DEVICES=1。
📚 更多示例:请参阅 examples/scripts 和 文档
🎯 单轮智能体:使用自定义奖励进行强化微调
单轮智能体执行(默认模式)支持自定义奖励函数,非常适合在没有训练好的奖励模型的情况下进行强化微调。您无需使用预训练的奖励模型,而是提供一个 Python 函数来实时计算奖励。
适用场景:
- 基于规则的奖励(长度、格式、代码执行、数学验证)
- 外部 API 奖励(裁判模型、编译器、测试套件)
- 混合奖励(结合多种信号)
示例:自定义奖励函数
# reward_func.py
import torch
def reward_func(queries, prompts, labels):
"""
为生成的响应计算自定义奖励。
参数:
queries: List[str] - 完整文本(提示 + 响应)
prompts: List[str] - 仅原始提示
labels: List[str] - 真实标签(来自 --label_key)
返回:
包含以下键的字典:
- rewards: 用于优势计算的张量
- scores: 用于动态筛选的张量(0-1 范围)
- extra_logs: 用于 wandb 日志记录的字典
"""
batch_size = len(queries)
# 示例:随机奖励(请替换为您自己的逻辑)
# 实际应用:代码执行、数学验证、格式检查
reward = torch.randint(0, 2, (batch_size,)).float()
return {
"rewards": reward, # 用于强化学习中的优势计算
"scores": reward, # 用于动态筛选 (--dynamic_filtering)
"extra_logs": { # 记录到 wandb
"custom_metric": reward.mean().item(),
},
}
使用方法
ray job submit --address="http://127.0.0.1:8265" \
--runtime-env-json='{"working_dir": "/openrlhf"}' \
-- python3 -m openrlhf.cli.train_ppo_ray \
--pretrain meta-llama/Meta-Llama-3-8B \
--use_dynamic_batch \
--remote_rm_url /path/to/reward_func.py \
--label_key answer \
--prompt_data your_prompt_dataset \
... # 其他训练参数
关键参数:--label_key answer 将数据集中的“answer”字段作为 labels 传递给 reward_func。
[!TIP] 应用场景:代码生成(执行测试)、数学(验证解题结果)、格式化(检查结构)、多目标优化(结合多种信号)
📖 完整示例:examples/scripts/train_ppo_with_reward_fn.sh
🤖 多轮智能体:复杂环境交互
对于需要多步交互的任务(推理链、带反馈的编程、游戏对战),OpenRLHF 提供了多轮智能体执行模式。
构建自定义多轮智能体
实现 AgentInstanceBase 类,并定义 reset/step 方法:
# agent_func.py
import random
from typing import Any, Dict
import torch
from openrlhf.utils.agent import AgentInstanceBase, MultiTurnAgentExecutor
# 一个简单的 n 步随机环境
class AgentInstance(AgentInstanceBase):
async def __init__(self, *args, **kwargs):
self.step_idx = 0
self.max_steps = random.randint(1, 3) # 1-3 步
async def reset(self, states: dict, **kwargs):
return {"observation": states["observation"]} # 返回原始文本观测值
async def step(self, states: dict, **kwargs) -> Dict[str, Any]:
print(f"step_idx: {self.step_idx}, max_steps: {self.max_steps}")
observation_text = states["observation_text"]
action_text = states["action_text"]
label = states["label"]
# 检查是否结束回合
done = self.step_idx >= self.max_steps
reward = torch.randint(0, 2, (1,)).float() if done else torch.tensor(0)
# 根据是否结束回合生成环境反馈
environment_feedback = (
"\n\nHuman: [CORRECT]\n</s>"
if done
else "\n\nHuman: [INCORRECT]\n请分析问题并重试。\n</s>\n\nAssistant: "
)
self.step_idx += 1
return {
"rewards": reward, # 用于优势计算的奖励
"scores": reward, # 用于动态筛选的分数(0-1 Beliebt
### OpenAI 兼容代理服务器
对于需要 OpenAI 兼容聊天 API 的多轮对话代理(例如集成外部工具使用框架),[`agent_func_openai_server_executor.py`](./examples/python/agent_func_openai_server_executor.py) 将 vLLM 包装为本地的 `/v1/chat/completions` 服务器,同时收集用于强化学习训练的 token 级别追踪信息。
- 暴露标准的 OpenAI 端点(`/v1/chat/completions`、`/v1/models`、`/tokenize`)
- 自动为每个会话收集 token ID 和 logprobs,用于强化学习训练
- Delta-tokenization 在多轮调用中复用前缀 token
- 可以通过重写 `run_agent()` 来接入您自己的多轮工作流
```bash
python3 -m openrlhf.cli.train_ppo_ray \
--agent_func_path examples/python/agent_func_openai_server_executor.py \
... # 其他训练参数
🔧 高级主题
LoRA:合并适配器
在使用 LoRA/QLoRA 时,OpenRLHF 只保存适配器权重。要部署或继续训练,需将适配器与基础模型合并:
python -m openrlhf.cli.lora_combiner \
--model_path meta-llama/Meta-Llama-3-8B \
--lora_path ./checkpoint/llama3-8b-rm \
--output_path ./checkpoint/llama-3-8b-rm-combined \
--is_rm \
--param_dtype bf16
性能调优指南
根据您的硬件和工作负载,使用以下建议优化 OpenRLHF:
🎯 执行模式:吞吐量 vs. 稳定性
根据您的优先级选择执行模式——OpenRLHF 提供了一个清晰的权衡选项:
| 模式 | 标志 | 特性 | 何时使用 |
|---|---|---|---|
| 混合引擎(共置) | --colocate_all_models--vllm_enable_sleep--deepspeed_enable_sleep |
最稳定 — 严格策略内,每次 rollout 都使用最新权重。串行生成→训练循环。 | 研究、敏感的强化学习算法、可重复性、配方验证 |
| 异步训练 | --async_train--async_queue_size N |
最高吞吐量 — 生成和训练并行运行。通过 --async_queue_size 调整离策略程度(越大越离策略)。 |
生产环境下的高吞吐量,当收敛已验证时 |
| 异步 + 部分 rollout | --async_train--partial_rollout |
最大重叠 — vLLM 使用暂停/恢复而非锁定,进行中的样本可能混合新旧权重。最激进的离策略方式。 | 进一步提升异步吞吐量;可与 --enable_vllm_is_correction 搭配使用 |
⚡ 其他速度优化
| 优化 | 标志 | 何时使用 |
|---|---|---|
| 样本打包 | --packing_samples |
始终使用(尤其是训练时) |
| 动态批次 | --use_dynamic_batch |
序列长度可变时 |
| DeepCompile | --deepcompile |
PyTorch 2.0+ 时 |
| 通信重叠 | --overlap_comm |
GPU 内存充足时 |
| 前缀缓存 | vLLM 配置 | n_samples_per_prompt > 1 时 |
| 过采样 | --vllm_generate_batch_size > --rollout_batch_size |
异步模式下,用于摊销生成成本 / 支持动态过滤 |
💾 内存管理
内存充足时:
- ✅ 禁用
--adam_offload - ✅ 启用
--overlap_comm - ✅ 使用
--colocate_critic_reward和--colocate_actor_ref
遇到 OOM 时:
- ❌ 禁用所有
--colocate_*选项 - ✅ 减少批次大小
- ✅ 启用梯度检查点
🎮 批次大小调整
- 生成阶段:最大化
--micro_rollout_batch_size,最小化 vLLM TP 大小 - 训练阶段:最大化
--micro_train_batch_size,启用--packing_samples - vLLM:始终使用
--vllm_sync_backend nccl
[!TIP] 快速入门模板:对于 8x A100(80GB),可以尝试混合引擎 +
--vllm_gpu_memory_utilization 0.5+--colocate_all_models
📖 更多详情:性能调优文档
使用 OpenRLHF 的公司和组织
- 字节跳动
- 腾讯
- 阿里巴巴
- 百度
- 中国电信
- 维沃
- Allen AI
- NexusFlow
- Jülich 超级计算中心(JSC)
- 伯克利星雀团队
- M-A-P
- ...
加入我们
如何加入?
- 发送邮件至 janhu9527@gmail.com 或加入 GitHub 组织。请提供以下信息:
- 您的姓名
- 您的 GitHub 用户名
- 您感兴趣的领域
- 您在 NLP 和/或 AI 方面的技能和经验
- 您也可以通过官方 GitHub OpenRLHF ↗ 项目页面加入我们。只需创建一个关于您贡献兴趣的问题,我们会尽快回复您。
您可以做什么?
- 加入团队,参与 OpenRLHF 项目的开发。
- 通过提交拉取请求为项目做出贡献。
- 帮助改进文档、修复 bug 或开发新功能。
- 分享该项目,帮助我们扩大社区。
赞助我们
您的赞助可以帮助我们维护和改进 OpenRLHF。如果您觉得这个项目很有用,请考虑赞助我们。您可以在 Open Collective ↗ 上进行赞助。
星级图
贡献者
非常感谢所有贡献者!如果您想参与贡献,欢迎随时提交拉取请求或创建问题。
参考文献与致谢
我们衷心感谢以下项目和组织对 AI 和 NLP 领域的贡献:
我们的项目还要感谢 ColossalChat 和 DeepSpeedChat。在项目早期,我们参考了他们的代码设计。此外,我们还要感谢 Netmind.AI 为环形注意力机制的开发提供的 GPU 支持。
(2024年7月)我们的 GitHub 组织已从 OpenLLMAI 更名为 OpenRLHF。
引用
OpenRLHF
@article{hu2024openrlhf,
title={OpenRLHF:一个易于使用、可扩展且高性能的RLHF框架},
author={Jian Hu和Xibin Wu和Zilin Zhu和Xianyu和Weixun Wang和Dehao Zhang和Yu Cao},
journal={arXiv预印本arXiv:2405.11143},
year={2024}
}
REINFORCE++-基线
@article{hu2025reinforce++,
title={Reinforce++:一种简单高效的大型语言模型对齐方法},
author={Hu, Jian},
journal={arXiv预印本arXiv:2501.03262},
year={2025}
}
OpenRLHF © 2025 OpenRLHF。保留所有权利。
版本历史
v0.10.1.post22026/04/15v0.10.12026/04/14v0.10.02026/04/12v0.9.102026/04/04v0.9.92026/03/30v0.9.82026/03/25v0.9.72026/03/24v0.9.62026/03/19v0.9.52026/03/08v0.9.42026/03/03v0.9.32026/02/05v0.9.22026/02/03v0.9.1.post12026/01/06v0.9.12026/01/05v0.9.02025/10/31v0.8.112025/09/22v0.8.102025/08/27v0.8.9.post12025/08/08v0.8.92025/08/06v0.8.82025/07/30常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
