OpenRLHFRLHF训练技能Skill openrlhf-training

该技能专注于使用OpenRLHF框架进行高性能强化学习人类反馈(RLHF)训练,支持PPO、GRPO、RLOO、DPO等多种算法,用于微调7B至70B+的大型语言模型。通过Ray分布式架构和vLLM推理加速,优化GPU资源使用,提高训练效率。关键词:RLHF、PPO、大模型微调、分布式训练、vLLM加速。

大模型微调 0 次安装 0 次浏览 更新于 3/21/2026

名称: openrlhf-training 描述: 高性能RLHF框架,带有Ray+vLLM加速。用于大型模型(7B-70B+)的PPO、GRPO、RLOO、DPO训练。基于Ray、vLLM、ZeRO-3构建。通过分布式架构和GPU资源共享,比DeepSpeedChat快2倍。 版本: 1.0.0 作者: Orchestra Research 许可证: MIT 标签: [后训练, OpenRLHF, RLHF, PPO, GRPO, RLOO, DPO, Ray, vLLM, 分布式训练, 大型模型, ZeRO-3] 依赖: [openrlhf, ray, vllm, torch, transformers, deepspeed]

OpenRLHF - 高性能RLHF训练

快速开始

OpenRLHF是一个基于Ray的RLHF框架,针对分布式训练和vLLM推理加速进行了优化。

安装:

# 启动Docker容器
docker run --runtime=nvidia -it --rm --shm-size="10g" --cap-add=SYS_ADMIN \
  -v $PWD:/openrlhf nvcr.io/nvidia/pytorch:25.02-py3 bash

# 卸载冲突包
sudo pip uninstall xgboost transformer_engine flash_attn pynvml -y

# 安装带有vLLM的OpenRLHF
pip install openrlhf[vllm]

PPO训练(混合引擎):

ray start --head --node-ip-address 0.0.0.0 --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 ./output/llama3-8b-rlhf \
  --micro_train_batch_size 8 --train_batch_size 128 \
  --micro_rollout_batch_size 16 --rollout_batch_size 1024 \
  --max_epochs 1 --prompt_max_len 1024 --generate_max_len 1024 \
  --zero_stage 3 --bf16 \
  --actor_learning_rate 5e-7 --critic_learning_rate 9e-6 \
  --init_kl_coef 0.01 --normalize_reward \
  --gradient_checkpointing --packing_samples \
  --vllm_enable_sleep --deepspeed_enable_sleep

GRPO训练(组归一化策略优化):

# 与PPO相同命令,但添加:
--advantage_estimator group_norm

常见工作流程

工作流程1:完整RLHF流水线(SFT → 奖励模型 → PPO)

步骤1:训练奖励模型(DPO):

deepspeed --module openrlhf.cli.train_rm \
  --save_path ./output/llama3-8b-rm \
  --save_steps -1 --logging_steps 1 \
  --eval_steps -1 --train_batch_size 256 \
  --micro_train_batch_size 1 --pretrain meta-llama/Meta-Llama-3-8B \
  --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 --flash_attn --gradient_checkpointing

步骤2:PPO训练:

ray start --head --node-ip-address 0.0.0.0 --num-gpus 8

ray job submit --address="http://127.0.0.1:8265" \
  -- 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 \
  --pretrain OpenRLHF/Llama-3-8b-sft-mixture \
  --reward_pretrain ./output/llama3-8b-rm \
  --save_path ./output/llama3-8b-ppo \
  --micro_train_batch_size 8 --train_batch_size 128 \
  --micro_rollout_batch_size 16 --rollout_batch_size 1024 \
  --max_epochs 1 --prompt_max_len 1024 --generate_max_len 1024 \
  --zero_stage 3 --bf16 \
  --actor_learning_rate 5e-7 --critic_learning_rate 9e-6 \
  --init_kl_coef 0.01 --normalize_reward \
  --vllm_enable_sleep --deepspeed_enable_sleep

工作流程2:GRPO训练(无需评论家模型)

内存高效的PPO替代方案:

ray job submit --address="http://127.0.0.1:8265" \
  -- python3 -m openrlhf.cli.train_ppo_ray \
  --advantage_estimator group_norm \
  --ref_num_nodes 1 --ref_num_gpus_per_node 8 \
  --reward_num_nodes 1 --reward_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 \
  --pretrain OpenRLHF/Llama-3-8b-sft-mixture \
  --reward_pretrain OpenRLHF/Llama-3-8b-rm-700k \
  --save_path ./output/llama3-8b-grpo \
  --micro_train_batch_size 8 --train_batch_size 128 \
  --micro_rollout_batch_size 16 --rollout_batch_size 1024 \
  --max_epochs 1 --bf16 \
  --actor_learning_rate 5e-7 \
  --init_kl_coef 0.01 --use_kl_loss --kl_estimator k3 \
  --normalize_reward --no_advantage_std_norm

关键GRPO参数:

  • --advantage_estimator group_norm - 启用GRPO
  • --use_kl_loss - GRPO论文中的KL损失
  • --kl_estimator k3 - 损失函数(k2 ≈ k1)
  • --no_advantage_std_norm - 禁用标准差归一化

工作流程3:DPO训练(偏好优化)

无需奖励模型的更简单替代方案:

deepspeed --module openrlhf.cli.train_dpo \
  --save_path ./output/llama3-8b-dpo \
  --save_steps -1 --logging_steps 1 \
  --eval_steps -1 --train_batch_size 256 \
  --micro_train_batch_size 2 --pretrain meta-llama/Meta-Llama-3-8B \
  --bf16 --max_epochs 1 --max_len 8192 \
  --zero_stage 3 --learning_rate 5e-7 --beta 0.1 \
  --dataset OpenRLHF/preference_dataset_mixture2_and_safe_pku \
  --apply_chat_template --chosen_key chosen \
  --rejected_key rejected --flash_attn --gradient_checkpointing

何时使用与替代方案比较

使用OpenRLHF时:

  • 使用RL训练大型模型(7B-70B+)
  • 需要vLLM推理加速
  • 需要具有Ray的分布式架构
  • 拥有多节点GPU集群
  • 在一个框架中需要PPO/GRPO/RLOO/DPO

算法选择:

  • PPO: 最大控制,适用于复杂奖励
  • GRPO: 内存高效,无需评论家
  • RLOO: 改进的PPO,带有每令牌KL
  • REINFORCE++: 比GRPO更稳定,比PPO更快
  • DPO: 最简单,无需奖励模型

使用替代方案时:

  • TRL: 单节点训练,更简单API
  • veRL: ByteDance的框架,用于671B模型
  • DeepSpeedChat: 集成DeepSpeed生态系统

常见问题

问题: 大型模型导致GPU内存溢出

禁用模型共置:

# 移除 --colocate_all_models 标志
# 为每个模型分配单独的GPU
--actor_num_gpus_per_node 8 \
--critic_num_gpus_per_node 8 \
--reward_num_gpus_per_node 8 \
--ref_num_gpus_per_node 8

问题: DeepSpeed GPU索引超出范围

设置环境变量:

export RAY_EXPERIMENTAL_NOSET_CUDA_VISIBLE_DEVICES=1

问题: 训练不稳定

使用混合引擎而非异步:

--colocate_all_models \
--vllm_enable_sleep \
--deepspeed_enable_sleep

调整KL系数:

--init_kl_coef 0.05  # 从0.01增加

问题: PPO期间生成缓慢

启用vLLM加速:

--vllm_num_engines 4 \
--vllm_tensor_parallel_size 2 \
--vllm_gpu_memory_utilization 0.5

高级主题

混合引擎GPU共享: 参见references/hybrid-engine.md以了解vLLM睡眠模式、DeepSpeed睡眠模式和最优节点分配。

算法比较: 参见references/algorithm-comparison.md以获取PPO vs GRPO vs RLOO vs REINFORCE++基准测试和超参数。

多节点设置: 参见references/multi-node-training.md以了解Ray集群配置和容错。

自定义奖励函数: 参见references/custom-rewards.md以了解强化微调和代理RLHF。

硬件要求

  • GPU: 推荐NVIDIA A100/H100
  • VRAM:
    • 7B模型: 8× A100 40GB(混合引擎)
    • 70B模型: 48× A100 80GB(vLLM:演员:评论家 = 1:1:1)
  • 多节点: 推荐带有InfiniBand的Ray集群
  • Docker: NVIDIA PyTorch容器25.02+

性能:

  • 比DeepSpeedChat快2倍
  • vLLM推理加速
  • 混合引擎最小化GPU空闲时间

资源