在 LLM 对齐训练中,离线 RLHF(Reinforcement Learning from Human Feedback)已成为高效的选择,避免了在线交互的高成本。volcengine/verl 工具包通过 PPO(Proximal Policy Optimization)actor-critic 架构,提供稳定、可扩展的离线实现,支持大规模数据处理与部署。核心在于 KL 正则化防止策略漂移,以及梯度裁剪确保更新平稳。本文聚焦这些技术点,给出工程化参数与清单,实现 LLM 生产对齐。
verl 与离线 RLHF 概述
verl 是 ByteDance Seed 团队开源的 RL 训练库,专为 LLM 后训练设计,支持 PPO 等算法的离线 RLHF 流程。“verl is a flexible, efficient and production-ready RL training library for large language models (LLMs)。” 该库解耦 rollout(生成)、reward 计算与训练,支持 FSDP/Megatron 后端、vLLM/SGLang 生成引擎。
离线 RLHF 流程:从预存提示数据集采样轨迹,使用 actor 生成响应,critic 估价值,reward model 评分,然后 PPO 更新。verl 通过 Ray 调度 HybridFlow 模型,实现高效数据流:采样 → GAE 优势估计 → actor/critic 并行更新。适用于对齐任务,如数学推理、代码生成,避免在线 rollout 的高开销。
PPO Actor-Critic 核心机制
PPO 使用 actor(策略模型)生成动作,critic(价值函数)估状态价值,结合 GAE(Generalized Advantage Estimation)计算优势。离线模式下,轨迹从固定数据集生成,强调稳定性。
KL 正则化:防止 actor 偏离参考模型(通常 SFT 模型),避免奖励黑客或模式崩溃。verl 支持两种方式:
- 奖励中 KL 惩罚:
algorithm.use_kl_in_reward: true,algorithm.kl_ctrl.type: adaptive,目标 KL 为 0.01–0.02,自适应调整系数(初始 0.001)。
- Actor loss 中 KL:
actor_rollout_ref.actor.use_kl_loss: true,kl_loss_coef: 0.001,类型如 'k1' 或 'low_var_kl'。
参数清单:
| 参数 |
值 |
作用 |
| algorithm.kl_ctrl.kl_coef |
0.001 |
初始 KL 系数 |
| algorithm.kl_ctrl.target_kl |
0.02 |
自适应目标 |
| actor_rollout_ref.actor.kl_loss_coef |
0.001 |
Actor KL 损失权重 |
| actor_rollout_ref.actor.kl_loss_type |
'k1+' |
无偏 KL 估计 |
梯度裁剪:PPO clip 比率限制策略比率 r(θ),r(θ) A_t 与 clip(r(θ), 1-ε, 1+ε) A_t 取 min。verl 支持 dual-clip:当优势 <0 时,下界裁剪。
配置:actor_rollout_ref.actor.clip_ratio: 0.2,clip_ratio_c: 3.0(dual-clip 下界)。额外 grad_norm 裁剪:actor_rollout_ref.actor.max_grad_norm: 1.0。
优势:KL 保持分布相似性,clip 防大步更新。在 GSM8K 等任务,KL coef 0.001 可稳定 15 epochs 训练,提升准确率 20%+。
可扩展数据处理
verl 针对 LLM 海量数据优化:
- 动态批处理:
actor_rollout_ref.actor.use_dynamic_bsz: true,ppo_max_token_len_per_gpu: 3072(3×(prompt+response))。
- 序列打包:
data.use_sequence_packing: true,减少 padding,提升 GPU 利用率 20–30%。
- 分布式:支持数百 GPU,3D-HybridEngine 重分片 actor(训练/生成切换零冗余)。FSDP2:
actor_rollout_ref.actor.strategy: fsdp2,CPU offload:fsdp_config.offload_policy: true。
数据清单:
- 预处理:Parquet 格式,含 prompt、ground_truth(如 GSM8K)。
- 批次:
data.train_batch_size: 256,mini-batch 64。
- Rollout:
actor_rollout_ref.rollout.gpu_memory_utilization: 0.4–0.6,TP=1–2。
- LoRA 支持:
actor_rollout_ref.model.lora_rank: 32–128,内存减 4x。
监控:Wandb/MLflow 记录 KL、clipfrac、reward_mean、grad_norm。阈值:KL >0.05 暂停,clipfrac <0.1 收敛。
LLM 对齐部署策略
部署前:合并 LoRA(verl.model_merger),测试 val_score >0.5。回滚:保存每 10 step checkpoint,若 KL 爆炸加载旧版。
生产参数:
- Inference:vLLM,
gpu_memory_utilization: 0.9。
- 监控:
trainer.test_freq: 10,alert reward 下降。
- 扩展:Multi-turn(SGLang),VLM 支持。
实际案例:Qwen2.5-0.5B 在 GSM8K,PPO 后准确率从 36% 升至 56%。配置见 examples/ppo_trainer。
verl 通过 PPO 的 KL/clip 机制与数据优化,实现可靠离线 RLHF,推动 LLM 对齐部署。
资料来源: