VERL(Volcano Engine Reinforcement Learning for LLMs)作为字节跳动 Seed 团队开源的 RLHF 框架,提供完整的离线 RLHF pipeline,专为生产级 LLM 对齐设计。通过 HybridFlow 编程模型,它将控制流与计算流解耦,支持从数据准备到 PPO 优化的端到端工程化流程,确保高吞吐与稳定性。
VERL 离线 RLHF Pipeline 核心数据流
VERL pipeline 的核心是 on-policy RL 循环:Rollout 生成轨迹 → Reward 计算得分 → PPO 更新 Actor/Critic。数据以 Parquet 格式输入,包含 prompt、ground_truth 等字段。首先预处理数据集,如 GSM8K 数学题,使用examples/data_preprocess/gsm8k.py转换为 RLHF 格式,支持 HDFS 路径加载。
Rollout 阶段使用 vLLM 或 SGLang 引擎生成多条响应轨迹。配置actor_rollout_ref.rollout.name=vllm,设置gpu_memory_utilization=0.6、max_num_batched_tokens=8192,实现动态批处理。启用use_dynamic_bsz=True,根据序列长度自动调整批次,最大化 GPU 利用率,避免填充浪费。
Reward 计算是 pipeline 关键,支持规则函数或模型基奖励。对于离线 RLHF,优先规则奖励如 GSM8K 答案提取匹配。“VERL 支持函数式奖励(verifiable reward),用于数学和编码任务。” 典型实现:compute_gsm8k_reward提取 #### 后答案,若匹配返回 1.0,否则 0.0。生产中集成自定义 manager,如verl.workers.reward_manager,支持批量并行计算。
训练循环由 RayPPOTrainer 驱动,每步采集data.train_batch_size=1024样本,分ppo_mini_batch_size=256更新。Actor(策略模型)与 Critic(价值模型)并行训练,支持 FSDP2 后端:actor.strategy=fsdp2,减少 7% 内存,提升 1.5% 吞吐。
奖励模型训练工程实践
奖励模型(RM)训练是 RLHF 上游,通常先 SFT 后 DPO/GRPO 对齐偏好数据。VERL 集成 SFT trainer:python -m verl.trainer.main_sft,配置model.path=Qwen/Qwen2.5-7B,optim.lr=1e-6。为离线 pipeline,RM 从 HF 加载或从头训练,使用规则 + 模型混合。
生产参数:
- RM 路径:
reward_model.path=your_rm_model - 批次:
reward_micro_batch_size_per_gpu=4 - 优化:启用
param_offload=True,支持梯度累积。
稳定性保障:监控critic/score/mean,阈值 <0.1 时暂停;KL>0.1 触发早停。
PPO Actor-Critic 优化与生产参数
PPO 核心:Actor 生成响应,Critic 估计价值,Reference 提供 KL 正则。配置:
algorithm:
adv_estimator: gae # 或grpo
kl_ctrl:
type: fixed
kl_coef: 0.001 # 初始0.001,动态调整target_kl=0.1
actor_rollout_ref:
actor:
clip_ratio: 0.2
ppo_epochs: 4
entropy_coeff: 0.01 # 探索平衡
critic:
vf_coef: 0.5 # 价值损失权重
Actor-Critic 优化清单:
- 超参调优:Actor lr=1e-6,Critic lr=1e-5;gamma=0.99,lam=0.95。
- 内存优化:LoRA rank=32,
enable_gradient_checkpointing=True;Ulysses 序列并行ulysses_sequence_parallel_size=2(长上下文)。 - 分布式:8GPU 示例,TP=2,DP=4;
n_gpus_per_node=8。 - 监控点:
指标 阈值 异常处理 KL_mean 0.01-0.1 减小 kl_coef reward_mean >0.3 正常 pg_loss <1.0 收敛 OOM - 降 micro_batch=2
回滚策略:trainer.resume=True,从global_step_XXX续训;wandb/mlflow 日志回溯。
性能落地:FSDP2 + 动态批,GSM8K 上 Qwen2.5-7B 达 50% 准确率提升。VERL 的 3D-HybridEngine 消除训练 - 生成切换冗余,支持 671B MoE 模型。
生产级稳定性保障
- 容错:Ray 自动重启 worker;
save_freq=10检查点。 - 监控:集成 wandb,追踪
timing/gen、mfu(模型 FLOPS 利用率 > 50%)。 - 风险:KL 爆炸→clip_kl=True;过拟合→val_freq=5,早停 delta=0.01。
通过以上参数,VERL 确保 pipeline 在百 GPU 集群稳定运行,吞吐提升 1.4x。
资料来源:
- GitHub: https://github.com/volcengine/verl
- 文档: https://verl.readthedocs.io/en/latest/
- 示例: examples/ppo_trainer/run_qwen2-7b.sh
(正文约 1250 字)