[ PROMPT_NODE_22858 ]
multi-node-training
[ SKILL_DOCUMENTATION ]
# 多节点训练
使用 OpenRLHF 在多台机器上进行分布式 Ray 集群训练的完整指南。
## 概述
OpenRLHF 使用 Ray 进行分布式调度,允许 Actor、Critic、Reward 和 Reference 模型跨多个节点运行。通过检查点和自动任务重调度支持容错。
## Ray 集群设置
### 1. 启动头节点 (主控机)
**在 Docker 容器中**:
bash
# 在主节点上启动容器
docker run --runtime=nvidia -it --rm --shm-size="10g"
--cap-add=SYS_ADMIN -v $PWD:/openrlhf
nvcr.io/nvidia/pytorch:25.02-py3 bash
# 启动 Ray 头节点
ray start --head --node-ip-address 0.0.0.0 --num-gpus 8
**输出**:
Ray runtime started.
Dashboard: http://0.0.0.0:8265
### 2. 连接工作节点
**在每台工作机上**:
bash
# 启动容器
docker run --runtime=nvidia -it --rm --shm-size="10g"
--cap-add=SYS_ADMIN -v $PWD:/openrlhf
nvcr.io/nvidia/pytorch:25.02-py3 bash
# 连接到头节点
ray start --address {MASTER-NODE-IP}:6379 --num-gpus 8
**将 `{MASTER-NODE-IP}` 替换为**头节点的 IP 地址。
### 3. 验证集群
bash
# 在头节点上
ray status
**输出**:
Nodes: 4
- 1 head node (8 GPUs)
- 3 worker nodes (8 GPUs each)
Total GPUs: 32
## 分布式训练配置
### 多节点 PPO 训练
**4 节点集群 (32 GPU)** - 70B 模型:
bash
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 2 --vllm_tensor_parallel_size 4
--pretrain meta-llama/Llama-2-70b-hf
--reward_pretrain ./reward-model-70b
--save_path ./output/llama-70b-ppo
--ckpt_path ./checkpoints/llama-70b-ppo
--save_steps 100 --logging_steps 1
--micro_train_batch_size 2 --train_batch_size 128
--micro_rollout_batch_size 4 --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 --flash_attn
**GPU 分配**:
- **节点 1**: Reference 模型 (8 GPU)
- **节点 2**: Reward 模型 (8 GPU)
- **节点 3**: Critic 模型 (8