Hotdry.
ai-systems

使用 verl 构建离线 RLHF 工具包:PPO Actor-Critic 中的 KL 正则化与梯度裁剪

面向 LLM 对齐部署,详解 volcengine/verl 中 PPO actor-critic 的离线 RLHF 实现,包括 KL 正则化、梯度裁剪参数与可扩展数据处理要点。

在 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: truealgorithm.kl_ctrl.type: adaptive,目标 KL 为 0.01–0.02,自适应调整系数(初始 0.001)。
  • Actor loss 中 KL:actor_rollout_ref.actor.use_kl_loss: truekl_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_tclip(r(θ), 1-ε, 1+ε) A_t 取 min。verl 支持 dual-clip:当优势 <0 时,下界裁剪。

配置:actor_rollout_ref.actor.clip_ratio: 0.2clip_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: trueppo_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

数据清单:

  1. 预处理:Parquet 格式,含 prompt、ground_truth(如 GSM8K)。
  2. 批次:data.train_batch_size: 256,mini-batch 64。
  3. Rollout:actor_rollout_ref.rollout.gpu_memory_utilization: 0.4–0.6,TP=1–2。
  4. 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 对齐部署。

资料来源

查看归档