verl强化学习训练技能Skill verl-rl-training

这个技能提供了使用verl库进行大型语言模型强化学习训练的全面指导,包括RLHF、GRPO、PPO等多种算法,支持分布式训练、多后端切换,适用于数学推理、视觉语言模型等场景。关键词:verl, 强化学习, LLM, RLHF, GRPO, PPO, 分布式训练, 大模型微调。

大模型微调 0 次安装 0 次浏览 更新于 3/21/2026

name: verl-rl-training description: 提供使用verl(火山引擎强化学习)进行大型语言模型强化学习训练的指导。适用于实现RLHF、GRPO、PPO或其他RL算法,用于大规模LLM后训练,并具有灵活的基础设施后端。 version: 1.0.0 author: Orchestra Research license: MIT tags: [强化学习, RLHF, GRPO, PPO, 后训练, 分布式训练] dependencies: [verl>=0.3.0, torch>=2.0.0, ray>=2.41.0, vllm>=0.8.2, transformers>=4.40.0]

verl: 火山引擎大型语言模型强化学习

verl 是一个灵活、高效且生产就绪的强化学习训练库,用于大型语言模型,来自字节跳动的Seed团队。它实现了HybridFlow框架(EuroSys 2025),并驱动如Doubao-1.5-pro等模型,在数学基准测试中达到O1级别性能。

何时使用 verl

选择 verl 当您需要:

  • 生产就绪的大规模RL训练(测试支持高达671B参数)
  • 灵活切换后端(FSDP ↔ Megatron-LM ↔ vLLM ↔ SGLang)
  • 支持多种RL算法(PPO、GRPO、RLOO、REINFORCE++、DAPO)
  • 多轮回放与工具调用,用于智能体工作流
  • 视觉语言模型RL训练

考虑替代方案当:

  • 您需要Megatron原生训练 → 使用 slimemiles
  • 您想要PyTorch原生抽象与Monarch → 使用 torchforge
  • 您只需要简单的SFT/DPO → 使用 TRLAxolotl

主要特性

  • 训练后端: FSDP, FSDP2, Megatron-LM
  • 回放引擎: vLLM, SGLang, HuggingFace Transformers
  • 算法: PPO, GRPO, DAPO, RLOO, ReMax, REINFORCE++, SPIN, SPPO
  • 模型: Qwen-3, Llama-3.1, DeepSeek, Gemma-2(0.5B 到 671B)
  • 高级功能: LoRA RL, 序列并行, 专家并行, 多轮工具

安装

# 选项 1: pip 安装
pip install verl[vllm]  # 或 verl[sglang] 用于 SGLang 后端

# 选项 2: Docker(推荐用于生产)
docker pull verlai/verl:vllm011.latest

# 选项 3: 从源码安装
git clone https://github.com/volcengine/verl.git
cd verl && pip install -e .[vllm,math]

快速开始:GRPO 训练

python3 -m verl.trainer.main_ppo \
    algorithm.adv_estimator=grpo \
    data.train_files=~/data/gsm8k/train.parquet \
    actor_rollout_ref.model.path=Qwen/Qwen2.5-7B \
    actor_rollout_ref.rollout.n=8 \
    actor_rollout_ref.actor.use_kl_loss=True \
    trainer.n_gpus_per_node=8

核心架构

verl 使用 HybridFlow 编程模型,将控制流与计算分离:

┌─────────────────────────────────────────────────────────┐
│ 单进程控制器(Ray)                                     │
│ - 协调:回放 → 奖励 → 训练 → 同步                     │
└─────────────────────┬───────────────────────────────────┘
                      │
┌─────────────────────▼───────────────────────────────────┐
│ 多进程工作者                                           │
│ ├── ActorRolloutRefWorker(策略 + 生成)               │
│ ├── CriticWorker(值估计,仅PPO)                      │
│ └── RewardManager(基于模型或规则的奖励)              │
└─────────────────────────────────────────────────────────┘

工作流 1: 使用GRPO进行数学推理

使用此工作流在数学任务如GSM8K或MATH上训练推理模型。

先决条件清单

  • [ ] 拥有8+ GPU的GPU集群(推荐H100)
  • [ ] 数据集为parquet格式,包含promptreward_model
  • [ ] HuggingFace Hub上的基础模型

步骤 1: 准备数据集

import pandas as pd

data = [
    {
        "prompt": [{"role": "user", "content": "What is 15 + 27?"}],
        "reward_model": {"ground_truth": "42"}
    },
    # ... 更多示例
]
df = pd.DataFrame(data)
df.to_parquet("train.parquet")

步骤 2: 定义奖励函数

# reward_function.py
import re

def compute_reward(responses, ground_truths):
    rewards = []
    for response, gt in zip(responses, ground_truths):
        # 从响应中提取答案
        match = re.search(r'\\boxed{([^}]+)}', response)
        if match and match.group(1).strip() == gt.strip():
            rewards.append(1.0)
        else:
            rewards.append(0.0)
    return rewards

步骤 3: 创建训练配置

# config/grpo_math.yaml
algorithm:
  adv_estimator: grpo
  gamma: 1.0
  lam: 1.0

data:
  train_files: /path/to/train.parquet
  val_files: /path/to/val.parquet
  train_batch_size: 256
  max_prompt_length: 512
  max_response_length: 2048

actor_rollout_ref:
  model:
    path: Qwen/Qwen2.5-7B-Instruct
  actor:
    use_kl_loss: true
    kl_loss_coef: 0.001
    ppo_mini_batch_size: 64
  rollout:
    name: vllm
    n: 8  # 每个提示的样本数
    temperature: 0.7
    top_p: 0.95

trainer:
  total_epochs: 3
  n_gpus_per_node: 8
  save_freq: 100

步骤 4: 启动训练

python3 -m verl.trainer.main_ppo \
    --config-path config \
    --config-name grpo_math \
    trainer.experiment_name=grpo_math_qwen7b

步骤 5: 监控和验证

  • [ ] 检查WandB/TensorBoard中的损失曲线
  • [ ] 验证奖励随着步数增加而提高
  • [ ] 在保留测试集上运行评估

工作流 2: 使用Critic模型的PPO

当您需要基于值的优势估计(GAE)时,使用此工作流。

与GRPO的关键区别

  • 需要单独的critic模型
  • 使用广义优势估计(GAE)
  • 更适合密集奖励任务

配置

algorithm:
  adv_estimator: gae  # 使用GAE而非GRPO
  gamma: 0.99
  lam: 0.95

critic:
  model:
    path: Qwen/Qwen2.5-7B-Instruct  # 可与actor相同或不同
  ppo_mini_batch_size: 64

actor_rollout_ref:
  actor:
    use_kl_loss: true
    kl_loss_coef: 0.02
    clip_ratio: 0.2  # PPO剪裁

启动带Critic的训练

python3 -m verl.trainer.main_ppo \
    algorithm.adv_estimator=gae \
    critic.model.path=Qwen/Qwen2.5-7B-Instruct \
    trainer.n_gpus_per_node=8

工作流 3: 使用Megatron的大规模训练

用于大于70B参数的模型或需要专家并行时,使用此工作流。

先决条件

  • [ ] 安装Megatron-LM桥:pip install mbridge
  • [ ] 将模型转换为Megatron格式
  • [ ] 多节点集群,带NVLink/InfiniBand

70B+模型的配置

actor_rollout_ref:
  model:
    path: /path/to/megatron/checkpoint
    backend: megatron
  actor:
    strategy: megatron
    tensor_model_parallel_size: 8
    pipeline_model_parallel_size: 2
  rollout:
    name: vllm
    tensor_parallel_size: 8

启动多节点训练

# 在头节点上
ray start --head --port=6379

# 在工作节点上
ray start --address='head_ip:6379'

# 启动训练
python3 -m verl.trainer.main_ppo \
    trainer.nnodes=4 \
    trainer.n_gpus_per_node=8

配置参考

算法选择

算法 adv_estimator 使用场景
GRPO grpo 无critic,数学/推理
PPO/GAE gae 密集奖励,值估计
REINFORCE++ reinforce_plus_plus 方差减少
RLOO rloo 留一基线
ReMax remax 最大奖励基线
OPO opo 最优策略优化

关键参数

# 回放参数
actor_rollout_ref.rollout.n: 8              # 每个提示的样本数
actor_rollout_ref.rollout.temperature: 0.7  # 采样温度
actor_rollout_ref.rollout.top_p: 0.95       # 核采样

# 训练参数
actor_rollout_ref.actor.lr: 1e-6            # 学习率
actor_rollout_ref.actor.ppo_mini_batch_size: 64
actor_rollout_ref.actor.clip_ratio: 0.2     # PPO剪裁范围

# KL控制
actor_rollout_ref.actor.use_kl_loss: true
actor_rollout_ref.actor.kl_loss_coef: 0.001
algorithm.kl_ctrl.target_kl: 0.1            # 用于自适应KL控制

常见问题与解决方案

问题:回放期间内存溢出(OOM)

症状: 生成阶段CUDA内存不足

解决方案:

# 减少批量大小
actor_rollout_ref.rollout.log_prob_micro_batch_size: 4

# 启用梯度检查点
actor_rollout_ref.model.enable_gradient_checkpointing: true

# 使用带CPU卸载的FSDP2
actor_rollout_ref.actor.strategy: fsdp2
actor_rollout_ref.actor.fsdp_config.offload_policy: true

问题:训练不稳定

症状: 损失峰值,奖励崩溃

解决方案:

# 降低学习率
actor_rollout_ref.actor.lr: 5e-7

# 增加KL惩罚
actor_rollout_ref.actor.kl_loss_coef: 0.01

# 启用梯度剪裁
actor_rollout_ref.actor.max_grad_norm: 1.0

问题:权重同步缓慢

症状: 回放与训练间长时间暂停

解决方案:

# 使用FSDP2加速重分片
actor_rollout_ref.actor.strategy=fsdp2

# 启用异步权重传输
trainer.async_weight_update=true

问题:vLLM版本不匹配

症状: 导入错误或生成失败

解决方案: 使用兼容版本:

pip install vllm>=0.8.5,<=0.12.0
# 避免vLLM 0.7.x(已知错误)

高级主题

多轮工具调用

查看 references/multi-turn.md 获取带工具使用的智能体工作流。

视觉语言模型

actor_rollout_ref:
  model:
    path: Qwen/Qwen2.5-VL-7B-Instruct
  rollout:
    name: vllm
    enable_vision: true

LoRA训练

actor_rollout_ref:
  actor:
    lora:
      enabled: true
      r: 16
      alpha: 32
      target_modules: ["q_proj", "v_proj"]

资源