在 VERL 框架中实现离线 RLHF 时,PPO 算法的核心在于通过 actor-critic 架构优化策略,同时确保训练循环低方差和高稳定性。VERL 支持离线数据驱动的 PPO 训练,利用预存 Parquet 数据集(如 GSM8K),无需在线 rollout 生成新轨迹,避免了传统 PPO 的高计算开销和分布偏移风险。这种工程化路径特别适用于 MLOps 场景,能在数百 GPU 上扩展至 70B+ 模型。
PPO 超参调优是成功的关键起点。VERL 默认 clip_ratio=0.2 限制策略更新幅度,防止剧烈震荡;学习率 lr=1e-6(比 SFT 小 10-20 倍),结合 cosine 或 constant 调度器,避免破坏 SFT 预训练权重。KL 惩罚系数 kl_coef=0.005-0.08 是稳定性核心,太小(如 0.01)导致模型“跑飞”输出乱码,太大(如 0.2)则策略僵化无进步。推荐动态 KL:前 20% 训练用 0.08 起步、中间 0.05 优化、末尾 0.06 防过拟合。批次设置上,train_batch_size=1024、ppo_mini_batch_size=256、ppo_epochs=4,确保充分学习小批次数据(mini_batch_size=16)。梯度裁剪 grad_clip=1.0(或 0.5)防爆炸。实证显示,这些参数在 Qwen2.5-7B 上将 GSM8K 准确率从 36.4% 提升至 56.7%。
actor-critic 稳定性依赖模型匹配与控制机制。奖励模型(RM)和 actor 大小需一致(如 7B RM 配 7B actor),否则大 RM(如 70B)导致训练崩溃——腾讯实验证实 7B 匹配最稳。VERL 通过 kl_loss_type=low_var_kl(或 k3+)和 use_kl_loss=True 实现低方差 KL 估计,结合 GAE(gamma=1.0, lam=1.0)计算优势,减少方差偏置权衡。双剪裁(dual-clip,clip_ratio_c=3.0)进一步下界负优势比率,避免熵坍缩。回滚策略:监控 KL 散度(target_kl=0.1),超阈值暂停更新;启用 rollout_correction(IS/RS 阈值 2.0)修正 rollout-训练分布不匹配。
低方差训练循环需优化数据流与计算。VERL 的 RayPPOTrainer 在 driver 进程协调 worker_group:加载 RLHFDataset(max_prompt_length=512, max_response_length=512),分发至 actor_rollout、critic、ref worker。启用 sequence packing(use_remove_padding=True),动态批次(use_dynamic_bsz=True, ppo_max_token_len_per_gpu=16384=3x(提示+响应)),FSDP2(strategy=fsdp2)减 7% 内存提 1.5% 吞吐。Critic 先训(critic_warmup 步),后 actor 更新;优势在 driver 计算,减少通信。性能调优清单:gpu_memory_utilization=0.5-0.7;ulysses_sequence_parallel_size=2 长上下文;forward_prefetch=True 重叠通信;entropy_from_logits_with_chunking=True 分块熵计算防 OOM。Nsight Systems 剖析瓶颈,目标:rollout 吞吐 >50% GPU 利用。
落地参数清单:
- 数据:train_files=gsm8k.parquet, shuffle=True, seed=42。
- Actor:lr=1e-6, clip_ratio=0.2, kl_loss_coef=0.001, ppo_epochs=4, entropy_coeff=0.0。
- Critic:匹配 actor 大小,ppo_epochs=actor 的。
- 算法:adv_estimator=gae, kl_ctrl.type=fixed/adaptive。
- 优化:enable_gradient_checkpointing=True, use_torch_compile=True。
- 监控:wandb/swamlab,track KL/熵/loss;每 1000 步 val acc。
风险:reward hacking(混入长度/重复惩罚);mode collapse(entropy_coeff>0);OOM(动态 bsz + offload)。回滚:固定 KL=0.05,小 lr 渐进。
资料来源:VERL GitHub(https://github.com/volcengine/verl),PPO 文档(https://verl.readthedocs.io/en/latest/algo/ppo.html),“HybridFlow: A Flexible and Efficient RLHF Framework”(arXiv:2409.19256)。