跳转至

verl 框架代码教程

面向零基础研究生的 verl 强化学习框架逐文件代码讲解

欢迎

本教程对 verl(字节跳动 Seed 团队开发的大语言模型强化学习训练框架)的 全部源代码 进行了逐文件讲解,共计 411 篇文档,覆盖 397 个 Python 源文件。

即使你完全不懂强化学习和分布式训练,也可以通过本教程从零开始理解整个框架。


框架架构总览

┌─────────────────────────────────────────────────────────────────────┐
│                          verl 框架架构                               │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ┌───────────────────────────────────────────────────────────┐      │
│  │           Single Controller (Driver 进程)                  │      │
│  │                                                           │      │
│  │   Python 编写 RL 训练逻辑 (PPO / GRPO / DAPO ...)        │      │
│  │   控制各 Worker 的执行顺序和数据传递 (DataProto)            │      │
│  └─────┬──────────┬──────────┬──────────┬────────────────────┘      │
│        │          │          │          │                            │
│        ▼          ▼          ▼          ▼                            │
│  ┌──────────┐┌──────────┐┌──────────┐┌──────────────┐               │
│  │  Actor   ││ Critic   ││ Reward   ││  Reference   │               │
│  │  Worker  ││ Worker   ││ Worker   ││  Worker      │               │
│  │ (策略模型) ││ (价值模型) ││ (奖励模型) ││ (参考模型)    │               │
│  └────┬─────┘└────┬─────┘└────┬─────┘└──────┬───────┘               │
│       │           │           │             │                        │
│  ┌─────────────────────────────────────────────────────────┐        │
│  │              计算后端 (可灵活选择)                         │        │
│  │                                                         │        │
│  │  训练: FSDP / FSDP2 / Megatron-LM                      │        │
│  │  推理: vLLM / SGLang / HF Transformers                  │        │
│  │                                                         │        │
│  │  ┌────────────────────────────────────────────────┐     │        │
│  │  │           3D-HybridEngine                      │     │        │
│  │  │  训练模式 ◄──参数重分片(Resharding)──► 推理模式   │     │        │
│  │  │  (FSDP/Megatron)                   (vLLM)      │     │        │
│  │  └────────────────────────────────────────────────┘     │        │
│  └─────────────────────────────────────────────────────────┘        │
│                                                                     │
│  ┌─────────────────────────────────────────────────────────┐        │
│  │                     GPU 资源                             │        │
│  │  ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐    │        │
│  │  │GPU 0  │ │GPU 1  │ │GPU 2  │ │GPU 3  │ │ ...   │    │        │
│  │  └───────┘ └───────┘ └───────┘ └───────┘ └───────┘    │        │
│  └─────────────────────────────────────────────────────────┘        │
└─────────────────────────────────────────────────────────────────────┘

PPO 训练主流程

每一轮 PPO 训练迭代按以下顺序执行:

  Prompts (一批训练提示)
     │
     ▼
 ┌────────────────┐
 │ ① Rollout 阶段  │  Actor 模型生成回复 (调用 vLLM/SGLang 推理引擎)
 │   Actor.generate│
 └───────┬────────┘
         │ responses
         ▼
 ┌────────────────┐
 │ ② 打分阶段      │  Reward Model 对回复质量打分
 │   RM.score      │  Reference Model 计算参考 log_probs (用于 KL 惩罚)
 └───────┬────────┘
         │ rewards + ref_log_probs
         ▼
 ┌────────────────┐
 │ ③ 估值阶段      │  Critic 模型估计每个 token 的价值 V(s)
 │   Critic.value  │
 └───────┬────────┘
         │ values
         ▼
 ┌────────────────┐
 │ ④ 计算优势      │  GAE 算法计算优势函数 A(s,a)
 │   GAE           │  advantage = reward + γV(s') - V(s)  (累积折扣)
 └───────┬────────┘
         │ advantages
         ▼
 ┌────────────────┐
 │ ⑤ PPO 更新      │  用 Clip 目标函数更新 Actor 参数
 │   Actor.update  │  用价值损失更新 Critic 参数
 │   Critic.update │  KL 散度惩罚防止偏离参考模型
 └────────────────┘
         │
         ▼
   回到 ① 开始下一轮

代码与流程的对应关系

训练步骤 对应代码 教程文档
训练主循环 trainer/main_ppo.py 训练入口
Ray 分布式调度 trainer/ppo/ray_trainer.py Ray PPO 训练器
PPO/GAE 核心算法 trainer/ppo/core_algos.py 核心算法
Actor 生成 & 训练 workers/actor/ Actor Worker
Critic 估值 & 训练 workers/critic/ Critic Worker
Rollout 推理引擎 workers/rollout/ Rollout Worker
数据协议 DataProto protocol.py 数据协议
Worker 编排 single_controller/ 单控制器

从哪里开始?

快速入门(约 2 小时)

  1. 背景知识 — RL、RLHF、PPO、分布式训练基础
  2. 核心模块 - protocol.py — 框架的数据传输协议
  3. 训练器 - ray_trainer.py — PPO 训练主循环
  4. 训练器 - core_algos.py — PPO/GRPO 算法实现

完整学习路线

请阅读 阅读指南,其中包含三条不同深度的学习路线和完整文档目录。


模块总览

模块 文档数 说明
核心模块 4 DataProto 数据协议、配置基类
训练器 19 PPO 训练入口、核心算法、SFT
Workers 74 Actor、Critic、Rollout、Engine
单控制器 8 Ray 分布式 Worker 编排
模型 58 LLaMA、Qwen2、Megatron 并行
检查点引擎 8 分布式模型权重传输
工具库 108 数据集、Checkpoint、Profiler 等
工具 16 Tool Use 工具框架
交互 7 多轮对话交互循环
模型合并 6 分布式 Checkpoint 合并
实验性功能 92 异步训练、VLA、Agent Loop
第三方集成 6 PyTorch/vLLM 补丁

背景知识

如果你对以下概念不熟悉,建议先阅读 背景知识文档:

  • 强化学习(RL)基本概念
  • RLHF(人类反馈强化学习)
  • PPO(近端策略优化)算法
  • 分布式训练(DP、TP、PP、FSDP)