verlai/verl

verl – 大模型强化学习训练与推理工具集

前言

verl 是一款聚焦大模型”训练+推理”全流程的工具集,核心定位是降低大模型强化学习(RL)训练与高效推理的门槛,尤其适配企业级大模型落地场景。其本质是通过封装主流深度学习框架(如 PyTorch、Megatron-LM)和推理引擎(如 vLLM、SGLang),让开发者无需手动解决复杂的环境依赖、分布式配置问题,专注于模型优化与业务逻辑。

verl 的核心功能

verl 的能力覆盖”训练”和”推理”两大核心场景,且支持灵活扩展:

大模型训练:主打强化学习与分布式能力

  • 支持多训练后端:适配 FSDP(PyTorch 原生分布式框架,适合快速验证原型)、Megatron-LM(NVIDIA 高性能分布式框架,支持万卡级大模型训练,适合大规模落地)
  • 强化学习(RL)优化:内置 RL 训练流程封装,可直接用于大模型 RLHF(基于人类反馈的强化学习)、RLHF 变种任务,无需从零搭建训练 pipeline
  • 依赖自动兼容:自动适配 PyTorch、CUDA、FlashAttention 等核心依赖版本,避免”版本冲突导致训练崩溃”

大模型推理:高效生成 rollout 结果

  • 支持多推理引擎:集成 vLLM(业界领先的高吞吐推理框架,支持动态批处理)、SGLang(高性能推理引擎,提供丰富的优化特性)、TGI(Hugging Face Text Generation Inference,适合标准 Hugging Face 模型)
  • 聚焦”rollout 生成”:专为强化学习场景设计——快速生成模型输出样本(如 RLHF 中的”模型回答候选”),推理访问表现比原生 Hugging Face pipeline 提升 5-10 倍

高扩展性与定制化

  • 支持自定义训练配置:可通过 YAML 配置文件修改训练参数(如学习率、batch size、分布式策略)
  • 源码级可定制:若使用挂载目录部署,可直接修改 verl 源码(如适配新的 RL 算法、自定义数据集),无需重新构建镜像

verl 的适用场景

用户类型适用场景
算法工程师快速验证大模型 RL 算法、搭建 RLHF 训练流程、测试不同推理引擎的 rollout 效率
企业运维/DevOps为团队快速部署统一的大模型训练/推理环境,避免”一人一环境”的运维混乱
初学者零门槛体验大模型分布式训练与高效推理,无需手动配置 CUDA、PyTorch 等复杂环境
大型团队基于 Megatron-LM 后端搭建大规模分布式训练集群,支撑百亿/千亿参数模型训练

系统要求

  • Python: 版本 >= 3.10
  • CUDA: 版本 >= 12.8
  • cuDNN: 版本 >= 9.10.0(推荐)

快速开始

使用 Docker 镜像(推荐)

verl 提供了预构建的 Docker 镜像,支持 vLLM 和 SGLang 两种基础镜像。您可以从 Docker Hub 拉取最新镜像:

bash# 使用 vLLM 基础镜像
docker pull verlai/verl:vllm011.latest

# 或使用 SGLang 基础镜像
docker pull verlai/verl:sgl055.latest

运行容器

bashdocker create --runtime=nvidia --gpus all --net=host --shm-size="10g" --cap-add=SYS_ADMIN -v .:/workspace/verl --name verl verlai/verl:vllm011.latest sleep infinity
docker start verl
docker exec -it verl bash

安装 verl

在容器内安装 verl:

bash# 安装 nightly 版本(推荐)
git clone https://github.com/volcengine/verl && cd verl
pip3 install --no-deps -e .

# 或安装特定框架支持
pip3 install -e .[vllm]
pip3 install -e .[sglang]

支持的算法

verl 内置了多种强化学习算法,包括:

  • PPO (Proximal Policy Optimization)
  • GRPO (Group Relative Policy Optimization)
  • DAPO (Decoupled Clip and Dynamic Sampling Policy Optimization)
  • SPIN (Self-Play Fine-Tuning)
  • SPPO (Self-Play Preference Optimization)
  • OPO (On-Policy RL with Optimal Reward Baseline)

硬件支持

  • NVIDIA GPU: 完整支持 CUDA 12.8+,推荐使用 A100、H100 等高性能 GPU
  • AMD GPU: 支持 ROCm 6.2+,适用于 MI300 系列 GPU(使用 FSDP 训练后端)
  • Ascend: 支持华为昇腾设备

相关资源

  • 官方文档: [***]
  • GitHub 仓库: https://github.com/volcengine/verl
  • Docker Hub: https://hub.docker.com/r/verlai/verl

许可证

verl 采用开源许可证,详情请参阅项目仓库。

更多相关 Docker 镜像与资源

以下是 verlai/verl 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:

部署与使用文档

verl Docker 容器化部署手册

无论你是刚接触大模型工具的初学者,还是需要高效管理训练任务的高级工程师,本教程都将带你一步步完成 verlai/verl 镜像的 Docker 部署——从工具认知、环境搭建到多场景部署实践,每个步骤均配备完整命令与详细说明,确保照着做就能成。

阅读全文

镜像拉取方式

您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面

轩辕镜像加速拉取命令点我查看更多 verl 镜像标签

docker pull docker.xuanyuan.run/verlai/verl:<标签>

Megatron-LM 后端

最后更新:2025 年 06 月 24 日。

我们通过实现 actor、critic、reference、rollout 和 reward 模型的各种 worker 来支持 Megatron 后端。我们还在 megatron_vllm.py 和 megatron_sglang.py 中使用 Megatron-LM 和 vLLM/SGLang 实现 3DHybridEngine

优点

  • 支持 5D 并行(TP、EP、CP、DP、PP)和序列并行,以获得最佳的可扩展性和吞吐量。
  • 3D HybridEngine 可以显著降低峰值内存使用量,并减少 actor 和 rollout 之间的权重同步开销。

缺点

  • Huggingface 模型和 Megatron 检查点需要转换工具。

开发进度

请注意,[Deprecated] 表示该功能在 verl 的最新版本中不受支持。 [To-Optimize] 表示该功能已实现但尚未优化。 [WIP] 表示该功能正在开发中。 [In-Release] 表示该功能已准备就绪并处于审查过程中,随时可能发布。

Megatron Worker 工具

MegatronWorker

MegatronWorker 是不同 megatron worker 类的基类。在此类中,get_megatron_global_info 和 get_megatron_rank_info 函数用于检索运行在特定 GPU 上的每个 Worker 的 3D 并行世界大小和 rank。这些信息将用于 Megatron 后端的传输协议。

以下用于不同模型的 Worker 类将用于构建 WorkerGroup

我们为每个 Worker 类实现了由 @register(dispatch_mode=) 装饰的各种 API。这些 API 可以被 ray driver 进程调用。数据可以根据每个函数上的 dispatch_mode 被正确地收集和分发。支持的 dispatch_model“(即传输协议)可以在 decorator.py 中找到。

ActorRolloutRefWorker

此类是为 Actor/Rollout 混合引擎或引用模型实现其模型初始化和执行计算而实现的。

Actor/Rollout 混合引擎

  1. 混合引擎、Actor 和 Rollout 初始化 API。
@register(dispatch_mode=Dispatch.ONE_TO_ALL)
def init_model(self):

ONE_TO_ALL:当从 driver 进程调用 init_model 函数时,每个 worker(在 GPU 上)将执行以下模型初始化过程。

混合引擎、Actor 和 Rollout 的初始化细节如下:

  1. MegatronPPOActor 在使用 Megatron 构建模型时,实现了简单的 PPO 计算逻辑,包括计算 log prob 和模型更新。
  2. vLLMRollout 支持使用 vLLM 进行生成。我们修改了 vLLM Engine,使其在 SPMD 下运行,以适应我们的 WorkerGroup 设计。
  3. MegatronVLLMShardingManager 是一个上下文管理器,用于在 actor 和 rollout 之间执行实际的权重重分片。

有关更多信息,请参阅 源代码

# 构建 actor 模型
self.actor = MegatronPPOActor(config=self.config.actor,
                              model_config=self.actor_model_config,
                              megatron_config=megatron_config,
                              actor_module=self.actor_module,
                              actor_optimizer=self.actor_optimizer,
                              actor_optimizer_config=self.actor_optim_config)

# 构建 rollout
# rollout 初始化
rollout = vLLMRollout(actor_module=params,
                     config=self.config.rollout,
                     tokenizer=self.tokenizer,
                     model_hf_config=self.actor_model_config,
                     train_tp=mpu.get_tensor_model_parallel_world_size())
# 在 actor 和 rollout 之间执行权重重分片
sharding_manager = MegatronVLLMShardingManager(module=self.hybrid_engine,
                                               inference_engine=rollout.inference_engine,
                                               model_config=self.actor_model_config,
                                               layer_name_mapping=layer_name_mapping)
...
  1. 生成序列并重新计算 log prob
@register(dispatch_mode=Dispatch.MEGATRON_PP_AS_DP_PROTO)
def generate_sequences(self, prompts: DataProto):
  • Dispatch.MEGATRON_PP_AS_DP_PROTO:actor 模型的 PP 维度将被视为 DP 维度。然后,driver 进程将根据此重组来分发和收集数据。这是因为,在混合引擎中,通常应用较大 3D 并行尺寸的 actor 权重将沿着 PP 维度和 TP 维度进行聚合。因此,相应的数据应该通过 rollout 模型的 3D 并行组而不是 actor 模型进行分发和收集。但是,world_size 和 rank 信息只能从 get_megatron_global_info 和 get_megatron_rank_info 中检索,它们记录了 actor 模型的 3D 信息。此外,TP 维度内的重分片将在混合引擎中处理。
  • 在此函数中,rollout 模型将执行自回归生成,actor 模型将重新计算旧 log prob 以用于生成的响应。
  1. 更新 actor 模型
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def update_actor(self, data: DataProto):
  • Dispatch.MEGATRON_COMPUTE_PROTO:用户传入按 DP 维度分区的数据。数据将被分发到同一 dp 组内的所有 tp/pp rank,最终只收集 tp=0 和最后一个 pp 的输出数据。
  • 使用 PPO 和熵损失更新 actor 模型权重。

..note:

目前,训练 Tensor Parallel Size 可以不同于推理 Tensor Parallel Size。

ReferenceModel

  1. 引用模型初始化

引用模型使用与 actor 模型相同的函数进行初始化,但不初始化混合引擎和优化器。然后 actor 模型也由 MegatronPPOActor 包装。

  1. 计算引用 log prob
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def compute_ref_log_prob(self, data: DataProto):
  • 在此函数中,引用模型将调用 MegatronPPOActor 中的计算 log prob 函数来计算引用 log prob。

CriticWorker 和 RewardWorker

  1. 模型初始化

与引用模型非常相似。CriticWorker 将为优化器执行额外的初始化。

  1. 计算 CriticWorker 的值
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def compute_values(self, data: DataProto):
  1. 更新 Critic
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def update_critic(self, data: DataProto):
  1. 计算 Reward
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def compute_rm_score(self, data: DataProto):

训练优化工具

Offload (卸载)

当资源紧张时,卸载方法可以降低 GPU 内存使用量,帮助训练和推理框架在 verl 下良好运行。它将参数、梯度和优化器移至 CPU 内存,仅在需要时将其加载回 GPU。

如果要使用卸载,可以分别为 actor 和 ref 添加以下参数。

# 对于 actor
actor_rollout_ref.actor.megatron.param_offload=True \
actor_rollout_ref.actor.megatron.grad_offload=True \
actor_rollout_ref.actor.megatron.optimizer_offload=True \
# 对于 ref(不带梯度和优化器)
actor_rollout_ref.ref.megatron.param_offload=True \

对于 critic,可以包含这些参数。

# 对于 critic
critic.megatron.param_offload=True \
critic.megatron.grad_offload=True \
critic.megatron.optimizer_offload=True \

相关的 MCore 文档

此外,还有一份关于使用 MCore 训练不同类型模型的详细文档,请参考 MCore 文档

Megatron-LM 后端

最后更新:2025年12月01日。

我们通过为 actor、critic、reference、rollout 和 reward 模型实现各种 worker 来支持 Megatron 后端。我们还在 megatron_vllm.py 和 megatron_sglang.py 中使用 Megatron-LM 和 vLLM/SGLang 实现了 3DHybridEngine

优点

  • 支持 5D 并行(TP、EP、CP、DP、PP)和序列并行,以实现最佳的可扩展性和吞吐量。
  • 3D 混合引擎可以显著降低峰值内存使用,并减少 actor 和 rollout 之间的权重同步开销。

缺点

  • Huggingface 模型和 Megatron 检查点需要转换工具。

开发进展

请注意,[Deprecated] 表示该功能在 verl 的最新版本中不受支持。[To-Optimize] 表示该功能已实现但尚未优化。[WIP] 表示该功能正在开发中。[In-Release] 表示该功能已准备就绪并正在审核中,随时可能发布。

[Deprecated]Megatron 3D 并行与自定义模型
[Done]Megatron 0.11.0 GPTModel 支持
[Done]Megatron GRPO 支持
[Done]Megatron 与 vLLM 0.8.2,支持逐张量权重加载
[Done]Megatron 与上下文并行
[Done]Qwen2MoE 模型支持
[To-Optimize]Megatron 分布式检查点
[To-Optimize]Huggingface 和 Megatron 检查点转换器
[To-Optimize]高效融合的线性、熵和交叉熵
[Done]Megatron 卸载(参数、梯度、优化器)
[Done]Megatron 性能分析器
[In-Release]Megatron 0.12.0, TE 2.2 与 vLLM 0.8.3 和 Fused Attn
[WIP]Moonlight/DeepSeek-V3 模型支持
[WIP]专家并行支持
[WIP]Megatron 支持动态批次大小
[To-Do]性能调优
[MileStone]DeepSeek-V3 671B 训练后可运行

Megatron Worker 工具

MegatronWorker

MegatronWorker 是不同 Megatron worker 类的基类。在此类中,get_megatron_global_info 和 get_megatron_rank_info 函数用于检索运行在特定 GPU 上的每个 Worker 的 3D 并行全局大小和排名。这些信息将用于 Megatron 后端的传输协议。

以下用于不同模型的 Worker 类将用于构建 WorkerGroup

我们为每个由 @register(dispatch_mode=) 装饰的 Worker 类实现了各种 API。这些 API 可以由 Ray 驱动进程调用。数据可以根据每个函数上的 dispatch_mode 正确收集和分发。支持的 dispatch_model(即传输协议)可在 decorator.py 中找到。

ActorRolloutRefWorker

该类用于 Actor/Rollout 混合引擎或参考模型初始化其模型并执行计算。

Actor/Rollout 混合引擎

  1. HybridEngine、Actor 和 Rollout 初始化 API。
@register(dispatch_mode=Dispatch.ONE_TO_ALL)
def init_model(self):

ONE_TO_ALL:当从驱动进程调用 init_model 函数时,每个 worker(在 GPU 上)将执行以下模型初始化过程。

HybridEngine、Actor 和 Rollout 的初始化细节如下所示

  1. MegatronPPOActor 实现了当模型使用 Megatron 构建时的简单 PPO 计算逻辑,包括计算 log prob、模型更新。
  2. vLLMRollout 支持使用 vLLM 进行生成。我们修改了 vLLM 引擎,使其在 SPMD 下执行,以适应我们的 WorkerGroup 设计。

有关更多信息,请参阅 源代码

# build actor model
self.actor = MegatronPPOActor(config=self.config.actor,
                              model_config=self.actor_model_config,
                              megatron_config=megatron_config,
                              actor_module=self.actor_module,
                              actor_optimizer=self.actor_optimizer,
                              actor_optimizer_config=self.actor_optim_config)

# build rollout
# rollout initialization
rollout = vLLMRollout(actor_module=params,
                     config=self.config.rollout,
                     tokenizer=self.tokenizer,
                     model_hf_config=self.actor_model_config,
                     train_tp=mpu.get_tensor_model_parallel_world_size())
...
  1. 生成序列并重新计算 log prob
@register(dispatch_mode=Dispatch.MEGATRON_PP_AS_DP_PROTO)
def generate_sequences(self, prompts: DataProto):
  • Dispatch.MEGATRON_PP_AS_DP_PROTO:actor 模型的 PP 维度将被视为 DP 维度。然后驱动进程将根据此重组分发和收集数据。这是因为,在 HybridEngine 中,actor 权重(通常应用较大的 3D 并行尺寸)将沿 PP 维度和 TP 维度聚合。因此,相应的数据应通过 rollout 模型的 3D 并行组进行分发和收集,而不是 actor 模型。然而,world_size 和 rank 信息只能从 get_megatron_global_info 和 get_megatron_rank_info 中检索,这些信息记录了 actor 模型的 3D 信息。此外,TP 维度内部的数据重新分片将在 HybridEngine 内部处理。
  • 在此函数中,rollout 模型将执行自回归生成,actor 模型将重新计算生成响应的旧 log prob。
  1. 更新 actor 模型
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def update_actor(self, data: DataProto):
  • Dispatch.MEGATRON_COMPUTE_PROTO:用户传入按 DP 维度划分的数据。数据被分发到同一 DP 组内的所有 TP/PP 排名,并最终仅从 TP=0 和最后一个 PP 收集输出数据。
  • 使用 PPO 和熵损失更新 actor 模型权重。

..note

Currently, training Tensor Parallel Size can be different from inference
Tensor Parallel Size.

ReferenceModel

  1. 参考模型初始化

参考模型使用与 actor 模型相同的函数进行初始化,而不初始化 HybridEngine 和优化器。然后 actor 模型也被 MegatronPPOActor 封装。

  1. 计算参考 log prob
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def compute_ref_log_prob(self, data: DataProto):
  • 在此函数中,参考模型将调用 MegatronPPOActor 中的计算 log prob 函数来计算参考 log prob。

CriticWorker 和 RewardWorker

  1. 模型初始化

与参考模型非常相似。CriticWorker 将为优化器执行额外的初始化。

  1. 为 CriticWorker 计算值
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def compute_values(self, data: DataProto):
  1. 更新 Critic
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def update_critic(self, data: DataProto):
  1. 计算奖励
@register(dispatch_mode=Dispatch.MEGATRON_COMPUTE_PROTO)
def compute_rm_score(self, data: DataProto):

训练优化工具

卸载

当资源紧张时,卸载方法可以降低 GPU 内存使用,帮助训练和推理框架在 verl 下良好运行。它将参数、梯度和优化器移动到 CPU 内存,并仅在需要时将其加载回 GPU。

如果您想使用卸载功能,您可以为 actor 和 ref 分别添加以下参数。

# For the actor
actor_rollout_ref.actor.megatron.param_offload=True \
actor_rollout_ref.actor.megatron.grad_offload=True \
actor_rollout_ref.actor.megatron.optimizer_offload=True \
# For the ref w/o grad and optimizer
actor_rollout_ref.ref.megatron.param_offload=True \

对于 critic,您可以包含这些参数。

# For the critic
critic.megatron.param_offload=True \
critic.megatron.grad_offload=True \
critic.megatron.optimizer_offload=True \

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注