news 2026/9/12 13:32:28

verl v0.4.x 的 CUDA 12.4 / Torch 2.6 镜像体系:基于 Megatron + vLLM/SGLang 的 RL 后训练环境搭建指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
verl v0.4.x 的 CUDA 12.4 / Torch 2.6 镜像体系:基于 Megatron + vLLM/SGLang 的 RL 后训练环境搭建指南

verl v0.4.x 的 CUDA 12.4 / Torch 2.6 镜像体系:基于 Megatron + vLLM/SGLang 的 RL 后训练环境搭建指南

【免费下载链接】verlverl/HybridFlow: A Flexible and Efficient RL Post-Training Framework项目地址: https://gitcode.com/GitHub_Trending/ve/verl

verl 为 verl v0.4.x 阶段提供了一套与之配套的 Docker 镜像体系,本指南以docker/verl0.4-cu124-torch2.6-fa2.7.4/目录下的 README.md 及其 6 份 Dockerfile 为核心,完整梳理这套镜像的版本矩阵、Base/App/Preview 三层结构、DeepEP 与 NVSHMEM 的构建细节,以及如何在镜像内安装 verl 并运行 Megatron 后端的 PPO/GRPO 训练。读完本文,你将能按需选型镜像标签、理解每个 Dockerfile 层级的职责,并掌握在镜像内落地 RL 训练的最小操作路径。

一、这套镜像解决什么问题

verl 是一个以 HybridFlow 思想为核心的 RL 后训练框架,其训练链路通常同时依赖三类重型组件:训练后端(FSDP 或 Megatron-LM)、推理/rollout 后端(vLLM、SGLang 或 TRTLLM)、以及底层加速库(flash-attn、TransformerEngine、Apex、DeepEP 等)。这些组件之间存在大量版本耦合——例如 SGLang 与 vLLM 的依赖冲突、flashinfer 与 torch 的 ABI 匹配、Megatron-LM 与 TransformerEngine 的配对关系——手工装配极易踩坑。

docker/verl0.4-cu124-torch2.6-fa2.7.4/正是为 verl v0.4.x 定制的镜像工厂:它以 NVIDIA 官方 PyTorch 容器为基础,统一锁定 CUDA 12.4 + torch 2.6.0 + flash-attn 2.7.4 的组合,并在此基础上分别装配 SGLang、vLLM、Megatron-LM、TransformerEngine 与 DeepEP,形成 Base / App / Preview 三个层次的镜像产物,供开发与 CI 直接拉取使用。

二、镜像体系总览与版本矩阵

该目录 README.md 首先给出了整条镜像链路的"骨架版本":

cuda==12.4 cudnn==9.8.0 torch==2.6.0 flash_attn=2.7.4 sglang==0.4.6.post5 vllm==0.8.5.post1 nvidia-cudnn-cu12==9.8.0.87 transformer_engine==2.3 megatron.core==core_v0.12.2 # Preview transformer_engine==2.5 megatron.core==core_r0.13.0

其中transformer_engine/megatron.core有两套取值:正式版配套TE 2.3 + megatron.core core_v0.12.2(Dockerfile 实际锁定的 TE 源码 tag 为v2.2.1、Megatron-LM 分支为core_v0.12.2),Preview 系列则升级为TE 2.5(release_v2.5)+ megatron.core core_r0.13.0,用于提前验证新版本 Megatron 内核。

2.1 镜像标签清单

README 的 Target 一节明确列出了三类发布产物:

类别镜像标签说明
Baseverlai/verl:base-verl0.4-cu124-cudnn9.8-torch2.6-fa2.7.4仅含 CUDA/Torch/FlashAttn/Apex/TransformerEngine 等基础加速栈,不含推理与训练框架
Appverlai/verl:app-verl0.4-sglang0.4.6.post5-vllm0.8.5-mcore0.12.2-te2.2SGLang 与 vLLM 双推理后端 + Megatron core_v0.12.2
Appverlai/verl:app-verl0.4-sglang0.4.6.post5-vllm0.8.5-mcore0.12.2-te2.2-deepep上述基础上额外内置 DeepEP
Appverlai/verl:app-verl0.4-vllm0.8.5-mcore0.12.2-te2.2仅 vLLM 推理后端 + Megatron core_v0.12.2
Appverlai/verl:app-verl0.4-vllm0.8.5-mcore0.12.2-te2.2-deepepvLLM 版 + DeepEP
Previewverlai/verl:app-verl0.4-sglang0.4.6.post5-vllm0.8.5-mcore0.13.0-te2.2-previewSGLang + vLLM + Megatron core_r0.13.0
Previewverlai/verl:app-verl0.4-vllm0.8.5-mcore0.13.0-te2.2-previewvLLM + Megatron core_r0.13.0

README 特别提示了 SGLang 与 vLLM 的耦合关系:SGLang 0.4.6.post5 的某些操作依赖 vLLM,因此 SGLang 版镜像会同时装入 vLLM 0.8.5.post1,但两者在部分包(如 flashinfer)上存在冲突风险,这也是 App 镜像要拆出"纯 vLLM"变体的原因。

三、Base 镜像:从 NVIDIA 官方容器重建 CUDA 12.4 栈

Base 镜像由 Dockerfile.base 构建,起点是 NVIDIA 官方nvcr.io/nvidia/pytorch:24.08-py3(Ubuntu 22.04 + CUDA 12.6 + Python 3.10),其构建逻辑可分为几个关键阶段。

3.1 基础环境与镜像源配置

Dockerfile 开头统一设置MAX_JOBSVLLM_WORKER_MULTIPROC_METHOD=spawnHF_HUB_ENABLE_HF_TRANSFER=1等环境变量,并通过APT_SOURCE/PIP_INDEX两个构建参数默认指向清华镜像源(mirrors.tuna.tsinghua.edu.cn),方便国内构建加速;同时安装tiniaria2等工具,aria2 用于后续大文件下载。

3.2 卸载官方镜像自带的 PyTorch 全家桶并重建

关键一步是彻底卸载 nv-pytorch 容器预装的 fork 版本,避免版本漂移:

RUN pip uninstall -y torch torchvision torchaudio \ pytorch-quantization pytorch-triton torch-tensorrt \ xgboost transformer_engine flash_attn apex megatron-core grpcio

随后通过 apt 仓库安装 CUDA 12.4 工具链(cuda-toolkit-12-4),并通过update-alternatives将默认 CUDA 切换到/usr/local/cuda-12.4、删除残留的 CUDA 12.6,再以 pip 安装标准发布版torch==2.6.0及配套torchvision==0.21.0/torchaudio==2.6.0

3.3 flash-attn 与 C++ ABI 匹配

flash-attn 采用预编译 wheel 安装,版本为flash_attn-2.7.4.post1+cu12torch2.6cxx11abiFALSE。这里的cxx11abiFALSE非常关键:torch 2.6.0+cu124 对应cxx11abi=False(而torch 2.6.0+cu126cxx11abi=True),安装前必须核对 wheel 的 ABI 标记与 torch 构建一致,否则会出现符号链接错误。这一 ABI 约束在 App 镜像的 flashinfer 安装注释中也被再次强调(详见下文)。

3.4 依赖修复与 cudnn/Apex

Base 镜像还包含一系列"fix 包"操作:卸载易冲突的pynvml/nvidia-ml-py后统一升级为nvidia-ml-py>=12.560.30,并锁定fastapi>=0.115.0optree>=0.13.0pydantic>=2.9grpcio>=1.62.1;随后安装 cudnn 9.8.0(cudnn-cuda-12)与从源码编译的 Apex(启用--cpp_ext/--cuda_ext)。此外还预装 Nsight Systems 2025.3.1 性能剖析工具、修复 opencv 的opencv-fixer,并安装 tensordict 0.6.2、ray、transformers、datasets、peft、liger-kernel、xgrammar 等 verl 训练所需的 Python 依赖。

四、App 镜像:推理后端与 Megatron 训练栈的装配

App 镜像以 Base 镜像为FROM,负责装入推理后端(SGLang/vLLM)、训练后端(Megatron-LM + TransformerEngine)以及 DeepEP。目录中共有 5 份 App/Preview Dockerfile,差异集中在推理后端与 Megatron 版本组合上。

4.1 SGLang + vLLM 组合版

Dockerfile.app.sglang.vllm.mcore0.12 的装配顺序为:

  1. 安装sglang[all]==0.4.6.post5,并通过--find-links https://flashinfer.ai/whl/cu124/torch2.6/flashinfer-python指定 flashinfer 的 cu124/torch2.6 专用 wheel 源;同时安装torch-memory-saver用于显存管理。
  2. 安装vllm==0.8.5.post1(SGLang 0.4.6.post5 的部分操作依赖 vLLM),并注释警告两者存在包冲突风险。
  3. 重新固定 tensordict 0.6.2、transformers、numpy<2.0.0 等依赖,执行与 Base 相同的 fix 包操作,并补装nvidia-cudnn-cu12==9.8.0.87
  4. 从 GitHub 源码分别安装 TransformerEnginev2.2.1--no-deps --no-build-isolation)与 Megatron-LMcore_v0.12.2,最后安装mbridge(verl 与 Megatron 之间的桥接库)。

需要注意,Dockerfile 中安装了transformers[hf_xet]<4.52.0以规避 transformers 4.53.0 带来的兼容问题。

4.2 纯 vLLM 版

Dockerfile.app.vllm.mcore0.12 不含 SGLang,其差异化步骤是 flashinfer 的手动安装:从 GitHub Release 下载flashinfer_python-0.2.2.post1+cu124torch2.6cp38-abi3wheel 并安装。Dockerfile 中的注释解释了版本约束的来龙去脉:

  • torch-2.6.0+cu124cxx11abi=Falsetorch-2.6.0+cu126cxx11abi=True,需按实际 torch 版本选择 flashinfer 构建;
  • vLLM 0.8.3 不支持flashinfer>=0.2.3,因此锁定 flashinfer0.2.2.post1

4.3 Preview 版:升级 Megatron 内核

Dockerfile.app.sglang.vllm.mcore0.13.preview 与 Dockerfile.app.vllm.mcore0.13.preview 仅将 TransformerEngine 换为release_v2.5、Megatron-LM 换为core_r0.13.0,其余步骤与对应正式版完全一致,用于验证新版 Megatron 内核的兼容性。

五、DeepEP 变体:NVSHMEM + GDRCopy 的完整编译链

-deepep后缀的镜像(如 Dockerfile.app.sglang.vllm.mcore0.12.deepep、Dockerfile.app.vllm.mcore0.12.deepep)在完成上述装配后追加了 DeepEP 的编译链。DeepEP 是 DeepSeek 开源的 MoE 全对全通信内核,verl 的 Megatron 后端借助它与 NVSHMEM 实现高效的专家并行通信。

构建流程分四步:

  1. 准备 IBGDA 依赖:将libmlx5.so.1软链为libmlx5.so
  2. 克隆源码:拉取gdrcopy v2.3.1(GPUDirect RDMA 拷贝库)与DeepEP(固定提交a84a248),并下载 NVSHMEM 3.2.5 源码后应用 DeepEP 提供的third-party/nvshmem.patch
  3. 编译 deepep-nvshmem:通过 cmake 构建,环境变量矩阵值得关注——NVSHMEM_SHMEM_SUPPORT=0NVSHMEM_UCX_SUPPORT=0NVSHMEM_USE_NCCL=0NVSHMEM_MPI_SUPPORT=0NVSHMEM_PMIX_SUPPORT=0,仅开启NVSHMEM_IBGDA_SUPPORT=1NVSHMEM_USE_GDRCOPY=1,并将产物安装到/workspace/deepep-nvshmem/install,随后将NVSHMEM_DIR注入LD_LIBRARY_PATHPATH
  4. 安装 DeepEP:进入 DeepEP 目录执行python setup.py install

Dockerfile 还提示必须设置 MPI 相关环境变量(CPATH=/usr/local/mpi/includeLD_LIBRARY_PATH追加/usr/local/mpi/lib/usr/local/x86_64-linux-gnu),否则构建会报错。这套 DeepEP 栈主要面向大规模 MoE 模型的 Megatron 训练场景。

六、在镜像内安装 verl 并启动 Megatron 训练

6.1 镜像启动与 verl 安装

仓库顶层 docker 说明 给出了标准操作流程:拉取镜像后创建容器并以sleep infinity保持存活,随后docker exec进入容器,将仓库挂载到/workspace/verl

docker create --runtime=nvidia --gpus all --net=host --shm-size="10g" \ --cap-add=SYS_ADMIN -v .:/workspace/verl --name verl <image:tag> sleep infinity docker start verl docker exec -it verl bash

由于这套镜像已内置 SGLang、vLLM、Megatron-LM、TransformerEngine、Apex、flash-attn、DeepEP 等全部运行时依赖,进入容器后只需以无依赖方式安装 verl 本体即可:

git clone https://github.com/verl-project/verl && cd verl pip3 install --no-deps -e .

若希望切换推理框架,则用带 extra 的安装方式分别装配 vLLM 或 SGLang 侧依赖(pip3 install -e .[vllm]/pip3 install -e .[sglang])。

6.2 运行 Megatron 后端的 RL 训练

镜像内可运行的典型任务是 examples/grpo_trainer/run_qwen3_8b_megatron.sh 这类脚本——它演示了 verl 在Megatron 训练 + vLLM/SGLang rollout混合拓扑下的 GRPO 训练配置。脚本中以model_engine=megatron指定训练后端,通过actor_rollout_ref.actor.megatron.tensor_model_parallel_size(默认 2)与pipeline_model_parallel_size(默认 2)设置 Megatron 的张量/流水线并行度,rollout 侧则用actor_rollout_ref.rollout.name=${INFER_BACKEND}(vllm/sglang/trtllm 可选)与tensor_model_parallel_size独立配置推理并行度,并通过actor_rollout_ref.actor.use_kl_loss=Truekl_loss_coef=0.001等参数开启 KL 惩罚。

与 v0.4.x 镜像对应的训练入口为python3 -m verl.trainer.main_ppo(v0.4 时代的经典入口,后续版本演进为verl.trainer.main),该入口在 verl/trainer/main_ppo.py 中实现。使用这套镜像时需注意:先确认所选 App 镜像是否包含目标模型与目标后端所需组件——纯 vLLM 变体不含 SGLang 与 DeepEP,Preview 变体面向 Megatron core_r0.13.0 内核,普通训练应优先选择 mcore0.12.2 正式版。

七、选型建议与注意事项

基于 README 与 Dockerfile 中的显式注释,整理选型要点如下:

  1. 推理后端选择:需要同时对比 SGLang 与 vLLM 推理效果时选sglang0.4.6.post5系列;仅使用 vLLM 时优先vllm0.8.5纯 vLLM 变体,可规避 README 提示的 SGLang/vLLM 包冲突。
  2. Megatron 内核版本:生产训练用mcore0.12.2(te2.2)正式版;想提前验证core_r0.13.0新内核时选-preview标签。
  3. MoE 大模型场景:训练 DeepSeek 系等大规模 MoE 模型时,选-deepep变体以获得 DeepEP + NVSHMEM 的专家并行通信能力。
  4. ABI 一致性:torch 2.6.0+cu124 对应cxx11abi=False,安装 flash-attn、flashinfer 等预编译库时必须匹配该 ABI 标记,这是该版本镜像最容易出错的环节。
  5. 版本漂移风险:Base 镜像会卸载 NVIDIA 官方容器自带的 PyTorch fork 与加速库后重建,因此不要在官方nvcr.io/nvidia/pytorch:24.08-py3之上直接叠加 verl,而应使用本目录提供的分层构建结构,保证版本矩阵一致。

八、总结

docker/verl0.4-cu124-torch2.6-fa2.7.4/目录是 verl v0.4.x 时代一套结构完整、版本锁定的镜像工程:Base 层负责从 NVIDIA 官方容器重建 CUDA 12.4 + torch 2.6.0 + flash-attn 2.7.4 基础栈,App 层在其上装配 SGLang/vLLM 推理后端与 Megatron-LM/TransformerEngine 训练栈,-deepep变体进一步内置 DeepEP + NVSHMEM 通信内核,Preview 变体则前瞻性地验证 Megatron core_r0.13.0。理解这套分层与标签语义,即可为 verl v0.4.x 的 PPO/GRPO 训练快速选择最合适的镜像,规避推理后端冲突、ABI 不匹配等典型装机问题,直接进入训练配置与调优环节。

【免费下载链接】verlverl/HybridFlow: A Flexible and Efficient RL Post-Training Framework项目地址: https://gitcode.com/GitHub_Trending/ve/verl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 13:29:50

Raspberry Pi Pico硬件开发实战:GPIO模式、PWM调光与USB Host固件详解

1. 这不是“又一本MicroPython教程”&#xff0c;而是一份Pico硬件开发的实操入场券 你手头刚拆开那个带着绿色PCB、两排20针脚、标着“Raspberry Pi Pico”的小板子&#xff0c;USB线插上去&#xff0c;电脑识别成一个U盘——但接下来呢&#xff1f;网上搜“Pico入门”&#x…

作者头像 李华
网站建设 2026/9/12 13:26:21

SpringBoot任务管理系统开发实战与毕业设计指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 13:18:26

Qt+C++雷达数据处理软件:界面、链路与跟踪算法

简介&#xff1a;基于Qt/C的雷达数据处理完整项目&#xff0c;面向毕业设计、课程设计与工程二次开发&#xff0c;覆盖界面显示、参数下发、数据接收、目标跟踪全链路。界面使用shapelib读取shapefile地图&#xff0c;绘制圆形刻度并配合定时器实现动态扫描&#xff1b;参数通过…

作者头像 李华
网站建设 2026/9/12 13:18:24

Android AMS中TaskStackListener机制与应用实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 13:15:14

C8051F330驱动OV7670图像采集实战:解决无图像、丢行与色彩偏移

简介&#xff1a;本资源是面向嵌入式初学者与单片机开发者的C8051F330单片机驱动OV7670摄像头的完整工程源码&#xff0c;解决图像采集硬件适配与底层通信开发难题&#xff0c;适用于安防监控、智能视觉终端等低功耗嵌入式图像应用开发场景。压缩包共15个文件&#xff0c;含核心…

作者头像 李华