VERL
VERL (Volcano Engine Reinforcement Learning) 是一个专为大语言模型(LLM)后训练设计的灵活、高效且可用于生产环境的强化学习(RL)训练框架。它是发表在 EuroSys 2025 的论文 《HybridFlow: A Flexible and Efficient RLHF Framework》的开源实现。
核心概念与设计理念
VERL 的核心创新在于其 HybridFlow 混合编程范式。该范式通过清晰的关注点分离,巧妙平衡了灵活性与效率。
- 控制流(Control Flow)与计算流(Computation Flow)分离:
- 控制流(“做什么”):运行在单个控制器进程中,负责高级的RL算法逻辑(如PPO的训练步骤序列)。这使得实现和修改算法变得灵活简便。
- 计算流(“如何做”):运行在多个分布式工作进程上,负责执行大规模神经网络计算(模型推理、训练)。这些进程可以为特定任务(如Actor模型生成、Critic模型训练)进行高度优化。
- 优势:这种解耦设计允许用户用更直观的方式组合训练流程,同时计算流可以复用为特定任务(如使用FSDP、Megatron-LM进行训练,或使用vLLM、SGLang进行推理)优化的后端,实现了灵活性和高性能的统一。
系统架构与关键组件
VERL 采用分层和模块化的设计,其架构概览及工作流程如下图所示,它展示了从用户配置到硬件执行的数据流与控制流:
- 编排层(Orchestration Layer):
RayPPOTrainer:这是训练流程的核心协调器。它遵循单控制器模式,负责管理整个PPO训练循环,包括资源分配、工作流调度以及在各个分布式工作器组之间协调数据流。
- 执行层(Execution Layer - Worker Groups):
- ActorRollout Worker:负责使用当前策略模型生成回复。
- Critic Worker:负责估计状态价值,用于计算优势函数。
- Reward Model Worker(可选):如果使用神经网络奖励模型,该工作器负责计算即时奖励。
- Reference Worker:提供参考策略(通常是初始SFT模型),用于计算KL散度以防止策略偏离过远。
工作流程(PPO 迭代详解)
一个完整的PPO训练迭代通常包含以下五个阶段,如架构图所示:
- Phase 1: 数据加载:从数据集中加载一个批次的提示数据。
- Phase 2: 序列生成:ActorRollout Worker 切换到推理模式,使用集成的推理引擎为每个提示生成多个回复。
- Phase 3: 奖励计算:Reward Model Worker (或规则函数)为生成的每个回复计算奖励。
- Phase 4: 优势估计:Critic Worker 估计价值,并结合奖励计算优势函数,以指导策略更新。
- Phase 5: 策略更新:ActorRollout Worker 和 Critic Worker 切换到训练模式,使用生成的数据和计算出的优势函数分别更新策略模型和价值模型。
核心特性与优势
- 3D-HybridEngine 内存优化:
- 这是VERL的关键性能优化技术。它通过在训练和推理阶段之间动态地重整模型参数,消除了通常需要为训练和推理分别维护模型副本所带来的冗余。这种技术预计可减少 30-50% 的GPU内存消耗,从而支持训练更大规模的模型。
- 模块化后端与广泛支持:
- 训练后端:支持 PyTorch FSDP/FSDP2(适用于百亿参数以下模型)和 Megatron-LM(适用于千亿级参数的大模型及MoE架构)。
- 推理引擎:集成 vLLM(高吞吐、单轮)、SGLang(为多轮交互和工具调用设计)以及 HuggingFace Transformers。
- 模型兼容性:良好支持 HuggingFace 生态中的主流模型,如 Qwen、Llama、Gemma、DeepSeek 等。
- 高级功能:
- Agentic RL 与工具调用:VERL提供了专门架构来高效训练能进行多轮推理、使用外部工具的智能体,解决了I/O等待导致的GPU闲置问题。
- 算法灵活性:除了PPO,还支持 GRPO、ReMax、DAPO 等多种先进RL算法。
关键源文件与目录
以下列表涵盖了VERL框架中最核心的源文件,是理解其实现细节的关键:
| 文件/目录路径 | 功能描述 |
|---|---|
verl/trainer/main_ppo.py | 训练入口点,使用Hydra进行配置管理。 |
verl/trainer/ppo/ray_trainer.py | 核心训练协调器,包含RayPPOTrainer类,实现PPO迭代循环。 |
verl/single_controller/ray/base.py | 单控制器模式实现,包含RayWorkerGroup基类,用于管理分布式工作器。 |
verl/workers/fsdp_workers.py | 使用 FSDP/FSDP2 训练后端的Actor、Critic等工作器实现。 |
verl/workers/megatron_workers.py | 使用 Megatron-LM 训练后端的相关工作器实现。 |
verl/workers/sharding_manager/ | 3D-HybridEngine 的核心,包含不同后端组合的分片管理器。 |
verl/trainer/ppo/core_algos.py | RL算法注册中心,包含优势估计器、策略损失函数的实现。 |