Hotdry.
ai-systems

VERL中KL正则化PPO的多GPU数据并行:离线RLHF偏好蒸馏与千卡扩展

VERL框架下KL正则化PPO的多GPU数据并行训练,支持离线RLHF偏好蒸馏,提供高效扩展到千卡规模的工程参数与监控要点。

在 VERL 框架中,KL 正则化 PPO 的多 GPU 数据并行训练是实现离线 RLHF 偏好蒸馏的高效路径,尤其适用于扩展到千卡规模的场景。这种设计通过 HybridFlow 编程模型解耦控制流与计算流,支持灵活的设备映射和 SOTA 吞吐量,避免传统 RL 框架的耦合瓶颈。

KL 正则化是 PPO 稳定训练的核心机制,用于防止策略过度偏离参考策略(reference policy)。VERL 提供两种 KL 控制方式:KL loss 直接加到 actor 损失中,或 in-reward KL penalty 融入奖励信号。配置 KL loss 时,设置actor_rollout_ref.actor.use_kl_loss=True,系数kl_loss_coef=0.001,类型可选kl(k1)absmse(k2)low_var_kl(k3)full,后缀+启用 straight-through 梯度估计以减少偏差。对于 in-reward penalty,启用algorithm.use_kl_in_reward=Truekl_penalty同上,KL 控制器类型algorithm.kl_ctrl.type='adaptive''fixed',初始系数kl_ctrl.kl_coef=0.001,目标 KLkl_ctrl.target_kl=0.01,horizon=1000 步动态调整。这些参数确保 KL 散度控制在 0.001~0.02 区间,避免策略崩溃。实际落地时,从小 KL coef 起步,监控平均 KL divergence,若 > 0.05 则增大 coef 或 clip ratio(默认 0.2)。

多 GPU 数据并行通过 WorkerGroup 实现,controller 单进程调度,workers 多进程分担计算。核心是 ActorRolloutRefWorkerGroup 管理 actor、rollout、ref 模型,支持 FSDP/FSDP2 后端数据并行(DP)。global train_batch_size(如 256)拆分:rollout 生成 trajectories 数 = train_batch_size * n_responses(默认 1),然后 ppo_mini_batch_size(如 64)进一步拆分。per-GPU micro_batch_size_per_gpu 调优为 1~4,避免 OOM;FSDP2 启用strategy=fsdp2,结合 cpu offload offload_policy=True。Dispatch 模式如 DP_COMPUTE_PROTO 自动 split/collect 数据,确保 global batch 语义。证据显示,Qwen2.5-0.5B PPO 训练中,bsz=256、mini=64、micro=2/GPU 达 56.7% 提升。

离线 RLHF 偏好蒸馏流程:准备 prompt 数据集(HF datasets),RewardManager 融合 RM scores 与 rule-based(如 math 验证),rollout 生成 responses,compute logprobs/values/rewards/advantages(GAE,lam=0.95,discount=0.99)。PPO epochs=4~8/actor&critic,adv_estimator='gae'。离线特性体现在数据预取与 replay buffer(PF-PPO 扩展),支持偏好对(chosen/rejected)蒸馏为 token-level reward。配置data.train_batch_size=512,sequence packing use_remove_padding=True,动态 bsz use_dynamic_bsz=True与 max_token_len_per_gpu=4096*3 提升效率。

千卡扩展关键参数清单:

  • 并行策略:FSDP2 DP + Megatron TP/SP/EP(DeepSeek-671B 数百 GPU),ulysses_sequence_parallel_size=2~4 长上下文。
  • Perf 调优:vLLM rollout gpu_memory_util=0.7,max_num_batched_tokens>2048;actor.entropy_from_logits_with_chunking=True 减内存;forward_prefetch=True 重叠 comm/comp。
  • 监控点:wandb 追踪 KL div(目标 <0.02)、clip frac(>0.1 正常)、policy loss(降至 - 0.1 稳定)、throughput(tokens/s/GPU>1000 目标)。
  • 回滚策略:OOM 时减 micro_bsz 50%、禁用 dynamic_bsz;KL 爆炸增大 kl_coef 2x 或减 lr=1e-6。
  • 资源映射:Ray cluster 分离 head(controller),专用 GPU 池 actor/critic/reward;3D-HybridEngine resharding 零内存冗余。

实际部署示例:8xH100 上 Qwen2-7B,train_bsz=1024,mini=256,micro=4/GPU,KL adaptive,1.4x speedup vs v0.3。扩展至 1024 卡,expert parallelism 分 MoE 专家,结合 LoRA RL 减内存 50%。这些参数确保稳定扩展,避免通信瓶颈。

资料来源:VERL GitHub 仓库与官方文档,包括 PPO 算法页与性能调优指南。

(正文约 1250 字)

查看归档