在 RLHF 训练中,Actor 模型需频繁在生成(rollout)和训练(train)阶段切换,不同并行策略导致的内存冗余与通信开销已成为吞吐瓶颈。VERL 通过 FSDP-3D 零冗余重分片与 HybridEngine 通信重叠,消除冗余,实现 1.4x 吞吐提升,支持 671B MoE 模型在数百 GPU 集群高效运行。
FSDP-3D 零冗余重分片机制
传统 RLHF 框架在 rollout 使用低 TP(如 TP=4)节省内存,而 train 需高 TP(如 TP=8)+PP/EP 提升计算效率,导致切换时需全量 all-gather 参数,通信量达模型大小的数倍,内存峰值超 2.5x 模型规模。VERL 的 3D-HybridEngine 引入 MegatronVLLMShardingManager,实现动态 resharding:train 阶段用 FSDP+3D 并行(DP/TP/PP/EP),rollout 切换至 vLLM 等推理引擎,仅加载必要分片。
核心流程:
- Train → Rollout:保存 train 随机状态,转换权重至 vLLM 格式(per-tensor generator),加载至推理引擎,清理 train 缓存。
- Rollout → Train:释放 vLLM KV cache,恢复 train 参数 / 优化器状态,确保随机一致性(manual_seed + set_rng_state)。
- 零冗余:无完整模型备份,PP 维度映射为额外 DP,EP 独立保持;通信仅限分片差异,减少 80% 开销。
证据:在 671B DeepSeek 模型上,峰值内存降 60%,切换时间从 500ms 至 50ms。VERL 支持 FSDP2,进一步兼容 CPU offload + 梯度累积。
HybridEngine 通信重叠优化
FSDP 默认通信串行,VERL HybridEngine 通过 forward_prefetch 在当前 forward 前预取下一层 all-gather,实现 comm-comp overlap。配置示例:
actor_rollout_ref:
actor:
fsdp_config:
forward_prefetch: true
额外优化:
- 动态批处理:use_dynamic_bsz=true,ppo_max_token_len_per_gpu=2-3x (max_prompt+max_response),平衡 token 负载。
- NCCL 调优(高性能集群):NCCL_PROTO=Simple, CUDA_DEVICE_MAX_CONNECTIONS=1,通信降 40%。
- 去除 padding:model.use_remove_padding=true,减少无效计算。
在 Qwen2-7B GRPO 训练(2x H800),吞吐升 35%,内存降 20%。
KL-PPO 无冗余落地配置
KL-regularized PPO 避免偏离参考模型,VERL 无冗余下 ref/actor 共享分片:
trainer:
n_gpus_per_node: 8
nnodes: 2
actor_rollout_ref:
actor:
strategy: fsdp
fsdp_config:
forward_prefetch: true
param_offload: true # >7B 推荐
ref:
strategy: fsdp # 共享分片
reward_model:
strategy: fsdp
algorithm:
kl_coef: 0.02 # KL 正则阈值
cliprange: 0.2
可落地参数清单:
| 参数 | 推荐值 | 作用 |
|---|---|---|
| fsdp_size | -1 (auto) | 自动分片组 |
| min_num_params | 0 | 全层 wrap |
| cpu_offload | true (>7B) | 参数 / 优化器卸载 |
| forward_prefetch | true | comm-comp 重叠 |
| ppo_max_token_len_per_gpu | 2-3x seq_len | 动态 bsz |
| NCCL_PROTO | Simple | 简化协议 |
监控要点:
- 性能:NCCL 时间 <10% 总时,all-gather <5ms(Ray 调试器)。
- 内存:峰值 <1.2x 模型大小,切换监控 torch.cuda.max_memory_allocated。
- 异常:梯度 NaN(dtype 不匹配),随机不一致(check rng_state)。
风险与回滚策略
风险:resharding 随机漂移(概率 <1e-5),fallback 全备份(内存 +50%);通信抖动,回滚 NCCL 默认。测试阈值:671B 下 EP=2,TP=8→4,验证吞吐>1.2x 基线。
VERL 使 RLHF 工程化,适用于多 GPU 集群。
资料来源:
- VERL GitHub: https://github.com/volcengine/verl
- VERL 文档与 CSDN 解析(3D-HybridEngine 性能数据)。
(正文字数:1028)