[ PROMPT_NODE_22856 ]
hybrid-engine
[ SKILL_DOCUMENTATION ]
# 混合引擎架构
OpenRLHF 的 GPU 资源共享系统完整指南,用于在 RLHF 训练期间最大化利用率。
## 概述
混合引擎允许 Actor、Critic、Reward、Reference 模型和 vLLM 引擎共享 GPU 资源,通过动态休眠/唤醒周期最大限度减少空闲时间并最大化 GPU 利用率。
## 架构
### 核心组件
**启用混合引擎**:
bash
--colocate_all_models # 启用所有模型间的 GPU 共享
**共享 GPU 的组件**:
1. **Actor 模型** - 正在训练的策略
2. **Critic 模型** - PPO 的价值函数
3. **Reward 模型** - 对完成内容评分
4. **Reference 模型** - KL 惩罚基准
5. **vLLM 引擎** - 快速推理生成
### GPU 分配策略
**最佳比例** (vLLM : Actor : Critic = 1:1:1):
bash
# 48× A100 GPU 上的 70B 模型
--vllm_num_engines 4 # 总计 16 个 GPU
--vllm_tensor_parallel_size 4 # 每个引擎 4 个 GPU
--actor_num_nodes 1 # 16 个 GPU
--actor_num_gpus_per_node 16
--critic_num_nodes 1 # 16 个 GPU
--critic_num_gpus_per_node 16
**约束**:`actor_num_nodes * actor_num_gpus_per_node == vllm_num_engines * vllm_tensor_parallel_size`
## vLLM 休眠模式
### 工作原理
**启用 vLLM 休眠**:
bash
--vllm_enable_sleep
**休眠/唤醒周期**:
1. **唤醒**:生成前将 vLLM 引擎加载到 GPU
2. **生成**:vLLM 执行推理
3. **休眠**:生成后将 vLLM 引擎卸载到 CPU
**实现**:
python
# 在 SamplesGenerator.generate_samples() 中
batch_vllm_engine_call(self.vllm_engines, "wake_up") # GPU ← CPU
# ... 生成样本 ...
batch_vllm_engine_call(self.vllm_engines, "sleep") # CPU ← GPU
**使用场景**:
- PPO 滚动过程中的样本生成
- 从 Actor 到 vLLM 的初始权重同步
- 评估阶段
### 内存管理
**控制 GPU 内存**:
bash
--vllm_gpu_memory_utilization 0.5 # 为 vLLM 使用 50% 的 GPU
**示例**:
- A100 80GB × 0.5 = 40GB 给 vLLM
- 剩余 40GB 在共置时供其他模型使用
## DeepSpeed 休眠模式
### 工作原理
**启用 DeepSpeed 休眠**:
bash
--deepspeed_enable_sleep
**休眠/唤醒周期**:
1. **重载状态**:训练前将模型从 CPU 移至 GPU
2. **训练**:DeepSpeed 执行优化
3. **卸载状态**:训练后将模型从 GPU 移至 CPU
**实现**:
python
# 在 PPOTrainer.ppo_train() 中
# 针对 Actor 模型
self.actor.reload_states() # GPU ← CPU
# ... 训练循环