OpenRLHF 是一个基于 Ray 的 RLHF(基于人类反馈的强化学习)框架,针对分布式训练进行优化,并使用 vLLM 进行推理加速。它构建在 Ray、vLLM 和 ZeRO-3 之上。
用途
OpenRLHF 用于大模型(7B-70B+)的强化学习训练,支持 PPO、GRPO、RLOO、DPO 等算法。适用于需要 vLLM 推理加速、希望采用 Ray 分布式架构、拥有多节点 GPU 集群,或需要在同一框架内使用 PPO/GRPO/RLOO/DPO 的场景。据资料描述,其性能为 DeepSpeedChat 的 2 倍,并配有 vLLM 推理加速和 Hybrid Engine 以减少 GPU 空闲时间。
主要能力
框架支持多种强化学习算法:PPO 提供最大控制力,适合复杂奖励;GRPO 内存高效,无需 critic 模型;RLOO 是带逐 token KL 的改进版 PPO;REINFORCE++ 比 GRPO 更稳定、比 PPO 更快;DPO 最简单,无需奖励模型。框架还支持 Hybrid Engine GPU 共享、多节点训练、自定义奖励函数等高级主题。
使用方式
安装流程包括启动 Docker 容器(使用 nvcr.io/nvidia/pytorch:25.02-py3 镜像),卸载冲突包(xgboost、transformer_engine、flash_attn、pynvml),然后执行 pip install openrlhf[vllm]。
PPO 训练(Hybrid Engine)需先通过 ray start 启动 Ray head 节点,再用 ray job submit 提交 train_ppo_ray 模块,并配置 ref、reward、critic、actor 的节点数和每节点 GPU 数,以及 vllm_num_engines、vllm_tensor_parallel_size 等 vLLM 参数,配合 colocate_all_models、vllm_enable_sleep、deepspeed_enable_sleep 等选项。
GRPO 训练命令与 PPO 相同,但需添加 --advantage_estimator group_norm。关键 GRPO 参数包括:--advantage_estimator group_norm(启用 GRPO)、--use_kl_loss(来自 GRPO 论文的 KL 损失)、--kl_estimator k3(损失函数,k2 约等于 k1)、--no_advantage_std_norm(禁用标准差归一化)。
DPO 训练使用 deepspeed --module openrlhf.cli.train_dpo,无需奖励模型,需配置 --beta 参数。
奖励模型训练(DPO)使用 deepspeed --module openrlhf.cli.train_rm。
适用场景
常见工作流包括:完整 RLHF 流程(SFT → 奖励模型 → PPO),其中第一步训练奖励模型,第二步进行 PPO 训练;GRPO 训练(无需 critic 模型,作为 PPO 的内存高效替代);DPO 训练(偏好优化,无需奖励模型,更简单)。
限制与硬件要求
GPU 推荐 NVIDIA A100/H100。显存需求:7B 模型使用 8× A100 40GB(Hybrid Engine);70B 模型使用 48× A100 80GB(vLLM:Actor:Critic = 1:1:1)。多节点推荐使用带 InfiniBand 的 Ray 集群。Docker 需 NVIDIA PyTorch 容器 25.02+。
常见问题处理:GPU 显存溢出时可禁用模型共置(移除 --colocate_all_models 标志,为每个模型分配独立 GPU);DeepSpeed GPU 索引越界时设置环境变量 export RAY_EXPERIMENTAL_NOSET_CUDA_VISIBLE_DEVICES=1;训练不稳定时可使用 Hybrid Engine 替代 async,或调整 KL 系数(如从 0.01 提高到 0.05);PPO 生成缓慢时可启用 vLLM 加速。
替代方案:TRL(单节点训练,API 更简单)、veRL(字节跳动为 671B 模型设计的框架)、DeepSpeedChat(与 DeepSpeed 生态集成)。
资源:文档、论文(arXiv:2405.11143)、示例和 Discord 社区支持。