Skip to main content

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 采用分层和模块化的设计,其架构概览及工作流程如下图所示,它展示了从用户配置到硬件执行的数据流与控制流:

  1. 编排层(Orchestration Layer):
    • RayPPOTrainer:这是训练流程的核心协调器。它遵循单控制器模式,负责管理整个PPO训练循环,包括资源分配、工作流调度以及在各个分布式工作器组之间协调数据流。
  2. 执行层(Execution Layer - Worker Groups):
    • ActorRollout Worker:负责使用当前策略模型生成回复。
    • Critic Worker:负责估计状态价值,用于计算优势函数。
    • Reward Model Worker(可选):如果使用神经网络奖励模型,该工作器负责计算即时奖励。
    • Reference Worker:提供参考策略(通常是初始SFT模型),用于计算KL散度以防止策略偏离过远。

工作流程(PPO 迭代详解)

一个完整的PPO训练迭代通常包含以下五个阶段,如架构图所示:

  1. Phase 1: 数据加载:从数据集中加载一个批次的提示数据。
  2. Phase 2: 序列生成ActorRollout Worker 切换到推理模式,使用集成的推理引擎为每个提示生成多个回复。
  3. Phase 3: 奖励计算Reward Model Worker (或规则函数)为生成的每个回复计算奖励。
  4. Phase 4: 优势估计Critic Worker 估计价值,并结合奖励计算优势函数,以指导策略更新。
  5. Phase 5: 策略更新ActorRollout WorkerCritic Worker 切换到训练模式,使用生成的数据和计算出的优势函数分别更新策略模型和价值模型。

核心特性与优势

  1. 3D-HybridEngine 内存优化
    • 这是VERL的关键性能优化技术。它通过在训练和推理阶段之间动态地重整模型参数,消除了通常需要为训练和推理分别维护模型副本所带来的冗余。这种技术预计可减少 30-50% 的GPU内存消耗,从而支持训练更大规模的模型。
  2. 模块化后端与广泛支持
    • 训练后端:支持 PyTorch FSDP/FSDP2(适用于百亿参数以下模型)和 Megatron-LM(适用于千亿级参数的大模型及MoE架构)。
    • 推理引擎:集成 vLLM(高吞吐、单轮)、SGLang(为多轮交互和工具调用设计)以及 HuggingFace Transformers。
    • 模型兼容性:良好支持 HuggingFace 生态中的主流模型,如 Qwen、Llama、Gemma、DeepSeek 等。
  3. 高级功能
    • 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.pyRL算法注册中心,包含优势估计器、策略损失函数的实现。