Chapter 01
项目背景与定位
1.1 一句话定位
OpenRLHF 是开源社区维护的、主打"千亿模型 PPO/GRPO 工业级 RLHF"的高性能分布式框架。它的最大特色是把 Ray(资源调度)+ DeepSpeed(训练后端)+ vLLM(采样推理) 三件套拼成一个统一架构,让 RLHF 中最慢的 rollout 步骤跑在专门的 vLLM 进程上,达到比"全部用 PyTorch 训练 + sample"快几倍的吞吐。
1.2 为什么会有 OpenRLHF
RLHF 这件事的难处不在算法,而在系统:
- PPO 每个训练 step 要走 rollout(生成回复)→ 评估(reward)→ 更新(gradient) 三阶段;
- 其中 rollout 阶段,模型在做自回归推理,不是训练——但传统实现会拿训练框架(HF transformers + DeepSpeed)来跑
generate(),慢、显存占用还高; - 同时 actor / reference / critic / reward 四个模型可能加起来超过一台机器的显存;
- 单机解决不了,必须多机;多机调度需要 Ray。
OpenRLHF 的核心洞察是:rollout 不要用训练框架做,丢给 vLLM 这种专门的高性能推理引擎;训练用 DeepSpeed ZeRO-3;Ray 负责把这些"长得不一样的进程"编排在一起。
flowchart LR
subgraph Ray["Ray Cluster"]
Actor["Actor (训练)
DeepSpeed ZeRO-3"] Ref["Reference
(forward only)"] Critic["Critic"] Reward["Reward Model"] Rollout["vLLM Rollout Workers
(异步生成)"] end Rollout -- "采样输出" --> Reward Rollout -- "采样输出" --> Ref Reward -- "scalar reward" --> Actor Ref -- "logp" --> Actor Critic -- "value" --> Actor Actor -. "权重同步" .-> Rollout
DeepSpeed ZeRO-3"] Ref["Reference
(forward only)"] Critic["Critic"] Reward["Reward Model"] Rollout["vLLM Rollout Workers
(异步生成)"] end Rollout -- "采样输出" --> Reward Rollout -- "采样输出" --> Ref Reward -- "scalar reward" --> Actor Ref -- "logp" --> Actor Critic -- "value" --> Actor Actor -. "权重同步" .-> Rollout
这种设计带来 2-10× 的端到端 RLHF 速度提升,这正是它在工业界被快速采纳的核心原因。
1.3 它和 TRL / verl 的对比
| 维度 | OpenRLHF | TRL | verl |
|---|---|---|---|
| 主战场 | 千亿模型 PPO/GRPO | 算法覆盖最广 | 千亿模型 PPO/GRPO |
| 调度 | Ray | accelerate | Ray + 自家 HybridFlow |
| Rollout | vLLM | transformers generate | vLLM / SGLang |
| 训练后端 | DeepSpeed | accelerate | FSDP / Megatron |
| 入门难度 | 中-高 | 低 | 高 |
| 配置 | argparse + bash 脚本 | Python API | YAML + Hydra |
1.4 设计哲学:异构架构 + 模块化
- Ray 是骨架:每个 actor / critic / reward / rollout 进程都是一个 Ray Actor;
- bash 启动脚本即配置:仓库里大量
examples/scripts/train_ppo_llama_ray.sh这样的脚本; - 算法实现紧贴论文:PPO、GRPO、RLOO、REINFORCE++ 各有清晰的
*Trainer类; - Strategy 抽象:训练后端被抽象成
Strategy(默认是DeepspeedStrategy),未来可以替换成 FSDP / Megatron。
代价:Ray + DeepSpeed + vLLM 任何一个出问题都会 cascade,调试比 TRL 难;最低硬件门槛较高——至少需要 8 卡 A100/H100 才合适。
1.5 它适合用来做什么、不适合做什么
| 判断 | 典型场景 |
|---|---|
| ✅ 适合 | 7B-70B 甚至更大模型的 PPO / GRPO 工业级 RLHF |
| 多机多卡环境,有 Ray 集群运维能力 | |
| 想用 vLLM 加速 RLHF 的 rollout 阶段 | |
| 做"reward 函数自定义"的研究 | |
| ❌ 不适合 | 单机单卡 / 几张消费级卡 |
| 想做 DPO 等 offline 对齐(用 TRL 就够) | |
| 想要 GUI / 极简 YAML 配置 |
1.6 本书将怎么带你走完这趟旅程
- 第 2-3 章装好 Ray + DeepSpeed + vLLM,跑通单机 PPO;
- 第 4 章讲透 RLHF 里 Actor / Critic / Reference / Reward 四种模型的角色;
- 第 5-7 章Ray、vLLM、DeepSpeed 三者在 OpenRLHF 中扮演的角色与配置;
- 第 8 章三种典型部署模式的选择与权衡;
- 第 9 章算法对比:PPO / GRPO / RLOO / REINFORCE++;
- 第 10 章怎么自定义 reward;
- 第 11-12 章踩坑 + 70B 完整 PPO 案例;
- 第 13 章源码导读,重点是 Trainer / Strategy / Engine 三层抽象。
1.7 OpenRLHF 在 2025–2026 的关键节点
仓库 README 顶上的 "Latest News" 透露了 OpenRLHF 这两年的发展主线:从 PPO 工具升级为"千亿 RL + 多模态 + 多轮 agent" 的完整栈。下表按时间倒序整理本书基线 commit 6c6056daa522 当时已合入 main 的关键节点:
| 时间 | 特性 / 事件 | 说明 | 本书章节 |
|---|---|---|---|
| 2026-04 | VLM 多轮 RL | 支持图像反馈的多步交互(截图等);vlm_multiturn_agent.py | ch10.7 |
| 2026-04 | VLM RLHF(Qwen3.5 等) | 端到端 VLM PPO/GRPO;train_vlm_math_hybrid_engine.sh | ch04.7 / ch10.7 |
| 2026-02 | ProRL V2 1.5B 推理 SOTA | 基于 REINFORCE++-baseline;train_prorlv2_math_hybrid_engine.sh | ch09.8 / ch12.7 |
| 2025-10 | ScaleRL 大规模验证 | 万卡规模复现 REINFORCE++ 有效性 | ch09.7 |
| 2025-05 | 异步 RL(async_enable) | generate 与 train 并行;ppo_trainer_async.py | ch08.5 / ch11.6 |
| 2025-04 | vLLM 最佳实践 blog | colocate / sleep mode / NCCL IPC 三个优化的总结 | ch06.7 |
| 2025-Q1 | Ring Attention 集成 | 序列并行 --ds.ring_attn_size,支持长 CoT | ch07.6 |
| 2024-12 | REINFORCE++ 论文 + 实现 | OpenRLHF 团队论文 + 简单高效无 critic 算法 | ch09.4 |
| 2024-Q4 | GRPO / RLOO / DAPO 集成 | 整套 critic-less 算法谱系 | ch09 |
| 2024-Q2 | Hybrid Engine 模式 | actor + rollout 共置同卡,省 GPU 资源 | ch08.3 |
| 2023-08 | OpenRLHF 项目开源 | 第一个开源的 Ray+vLLM+DeepSpeed PPO 框架 | — |
1.8 跟 verl / TRL 在 2025–2026 的具体差异
1.3 那张表是"宏观对比"。下面这张是"实际选型时关键差异点"——只有真正写过两个项目才看得出来的几条:
| 维度 | OpenRLHF | verl | TRL |
|---|---|---|---|
| 异构架构哲学 | 每个角色 = 独立 Ray actor | controller 单进程 + worker 群 | 单 Trainer 进程 |
| vLLM 集成 | 独立 Ray actor + NCCL IPC 权重同步 | Hybrid Engine resharding | colocate / server |
| 千亿模型 | 实战已验证(DeepSeek-V3-671B 等) | 实战已验证(Qwen3-235B 等) | 偏中小 |
| 多模态 RL | ✅ VLM + 图像反馈多轮 agent | ✅ verl-omni 子项目 | 有限支持 |
| 异步 pipeline | async_enable + partial rollout | fully_async / one-step off-policy | — |
| 配置风格 | bash 一长串 --xxx | Hydra YAML | Python 代码 + argparse |
| 论文 followup 速度 | 新算法 1-2 个月内 | 新算法 1-2 个月内 | 新算法 1-3 周内 |
实战经验:
- 千亿 RLHF → OpenRLHF 或 verl,两个都验证过;OpenRLHF 配置直观但要懂 Ray,verl 抽象重但代码更结构化;
- 10B 以内 + 算法实验 → TRL 足够;
- 长 CoT R1 风格 → OpenRLHF 的 ProRL V2 配方是开源 SOTA 参考点。