项目背景与定位
1.1 一句话定位
verl(Volcano Engine Reinforcement Learning)是字节跳动火山引擎团队 2024 年开源、2026 年迁移到独立 verl-project 组织维护的、面向大模型的高性能、灵活、可扩展的强化学习训练框架。它的核心理论支撑是字节同时发布的 HybridFlow 论文(NeurIPS 2024):通过把 "单线程的 controller" 和 "多进程的 worker" 解耦,把 RLHF 的算法逻辑写成"看起来像单进程脚本,但跑起来是分布式"的样子。
verl 已经被字节内部用于 Doubao、Skylark 等模型的 RLHF 训练,也是开源社区里和 OpenRLHF 并列的"大规模 RLHF"事实选项。R1 风格的"长思考链 GRPO"训练有不少团队就是基于 verl 做的。
1.2 为什么会有 verl
字节做 RLHF 遇到的问题和 OpenRLHF 类似,但他们的回答方式有差异:
- OpenRLHF 的方案:"用 Ray 编排 vLLM + DeepSpeed + reward 模型"——好处是直观,缺点是用户要懂 Ray Actor 模型才能改算法;
- verl/HybridFlow 的方案:把 RL 算法的"控制流"从分布式里抽出来。控制流跑在单进程上(看起来是普通 Python 代码),数据流通过一组高性能 worker 自动并行。
论文里给的例子大致是:
output = actor.generate(prompts)
rewards = reward_model.compute(output)
actor.train(output, rewards)
看起来就是顺序执行,但 verl 在背后自动把这些调用调度到不同的 worker group 上、自动做数据并行、自动管理通信。这种抽象在大规模 RL 训练里非常有价值——算法工程师和系统工程师可以解耦,互不打扰。
1.3 它的"三个核心抽象"
| 抽象 | 作用 | 类比 |
|---|---|---|
| Controller | 跑控制流的单进程,调度 actor / critic / reward / rollout | 主线程 |
| WorkerGroup | 一组同质 worker(比如所有 actor worker) | 分布式数据并行组 |
| ResourcePool | 一片 GPU 资源池 | 物理硬件抽象 |
单进程算法主控] -->|RPC| AG[Actor WorkerGroup] C -->|RPC| RG[Rollout WorkerGroup
vLLM / SGLang] C -->|RPC| RM[Reward WorkerGroup] C -->|RPC| CR[Critic WorkerGroup] AG -.- RP1[ResourcePool GPU 0-7] RG -.- RP2[ResourcePool GPU 8-11] RM -.- RP3[ResourcePool GPU 12-13] CR -.- RP1
调度逻辑:ResourcePool 提供 GPU;WorkerGroup 在 ResourcePool 上跑;Controller 调用 WorkerGroup 上的方法,背后是 Ray 远程调用。可以做"actor 用 8 卡 ZeRO-3、reward 用 2 卡、rollout 用 4 卡 vLLM"的精细调度。
1.4 它和 OpenRLHF / TRL 的对比
| 维度 | verl | OpenRLHF | TRL |
|---|---|---|---|
| 背后理论 | HybridFlow 论文 | 工程驱动 | HF Trainer 延伸 |
| 控制流 | 单进程 + 远程调用 | Ray Actor 间消息传递 | Trainer.step() 顺序 |
| 训练后端 | FSDP / Megatron 两条 | DeepSpeed | accelerate |
| 配置 | Hydra YAML | bash 脚本 | Python API |
| Megatron 集成 | 一等公民 | 没有 | 没有 |
| 入门难度 | 高 | 中-高 | 低 |
1.5 设计哲学:算法 / 系统解耦 + Megatron 友好
- 算法工程师看到的是"顺序代码":在
verl/trainer/ppo/ray_trainer.py里能看到 PPO 主循环几乎就像单机版本; - 系统工程师维护的是 worker 实现:在
verl/workers/actor/等目录下,每种角色都是一个 worker 实现; - Megatron 后端是 first-class:verl 是少有的开源 RLHF 框架里 Megatron 是真的能用、性能优化做了不少功夫的;
- 配置是 Hydra:所有参数走 YAML + override,结构化、易复现。
代价:抽象层多,初学者难以一眼看清调用栈;对 Hydra / Ray 不熟悉时调试复杂度高;版本迭代快,0.1 / 0.2 之间 API 变化不少。
1.6 它适合用来做什么、不适合做什么
| 判断 | 典型场景 |
|---|---|
| ✅ 适合 | 大规模 PPO/GRPO/DAPO 训练(百亿 - 千亿模型) |
| 已经使用 Megatron-Core 的团队做 RL 训练 | |
| 长思考链 RL(R1 风格)研究 | |
| 想做"算法新颖度高 + 系统性能也够"的研究工程结合 | |
| ❌ 不适合 | 单机 / 单卡环境,不需要分布式调度 |
| 只做 offline 对齐(DPO 等) | |
| 不愿意花时间搞清楚 controller / worker 这套抽象的应用层用户 |
1.7 本书将怎么带你走完这趟旅程
- 第 2-3 章装环境、跑通单机 GRPO;
- 第 4 章讲透 Controller / WorkerGroup / ResourcePool 三大抽象;
- 第 5 章完整剖析 HybridFlow 架构,给一张端到端时序图;
- 第 6-7 章训练后端(FSDP / Megatron)+ 采样后端(vLLM / SGLang)的接入;
- 第 8 章Hydra 配置怎么写;
- 第 9 章算法对比 PPO / GRPO / DAPO 等;
- 第 10 章怎么自定义算法 / reward;
- 第 11-12 章性能调优 + 长思考链 GRPO 案例;
- 第 13 章源码导读。
1.8 verl 在 2025–2026 引入了什么
verl 的演进速度比 DeepSpeed / Megatron-LM 都更激进。下表按时间倒序,列出本书基线 commit 9c38b8bb1876(2026-05-26)当时已经在 master 的关键节点——每个都有源码可查、本书有对应小节:
| 时间 | 事件 / 特性 | 是什么 | 本书章节 |
|---|---|---|---|
| 2026-05 | VeRL-Omni 预发布 | 扩散 + 全模态(文本/图像/音频)后训练统一栈;独立仓库 verl-project/verl-omni | ch05.9 / ch06.6 |
| 2026-05 | vexact 零失配 HF rollout | 用 batch-invariant kernel 让训练侧和 rollout 侧输出完全一致,调试黄金标准 | ch07.10 |
| 2026-04 | Megatron LoRA + Router Replay | PyTorch Conference Europe 上展示;DeepSeek-671B / Qwen3-235B MoE 训练支持 | ch06.9 / ch11.11 |
| 2026-03 | NVIDIA GTC26 / verl-project 组织迁移完成 | 原 volcengine/verl 已转 verl-project,旧 URL 走重定向 | ch01 元信息 |
| 2026-01 | recipe/ 拆成独立子模块 | 外部 recipe 不再随主仓发布;本仓 git submodule update --init recipe 才拿得到 | ch02.5 |
| 2025-12 | Mind Lab × Megatron-bridge 万亿模型 LoRA | 1T 参数 GRPO LoRA 训练在 64 H800 上 10 小时完成 | ch11.10 |
| 2025-11 | SAPO / GSPO 新 policy loss | SAPO 用 sigmoid soft-clip;GSPO 走序列级 IS × token-level ratio | ch09.11 / ch09.12 |
| 2025-10 | PyTorch Conference 2025 verl 专题 | Fully Async Policy 与 NCCL 参数同步首次公开 benchmark | ch05.7 |
| 2025-08 | Fully Async Policy | rollout/train 分到独立资源池,NCCL 参数同步;128 卡 Qwen2.5-7B DAPO 提速 2.35–2.67× | ch05.8 / ch11.10 |
| 2025-06 | DeepSeek-671B / Qwen3-235B MoE 正式支持 | Megatron 路径 + Router Replay R2/R3 模式 | ch06.7 |
| 2025-05 | PF-PPO(ICML25)+ VAPO | Priority Filtering PPO;VAPO 在 Qwen-32B-base 上 60.4 AIME | ch09.13 |
| 2025-03 | DAPO SOTA 50 AIME(Qwen2.5-32B) | 超过 DeepSeek-R1-Zero-Qwen-32B;DAPO clip + filter groups 落地 | ch09.7 / ch12 |
结论:verl 的版本基线每隔 3-6 个月会带来一次能力跃迁。读这本书时,重点把 ch04–ch09 这条主线吃透,新特性都建立在那套抽象上。