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 一节明确列出了三类发布产物:
| 类别 | 镜像标签 | 说明 |
|---|---|---|
| Base | verlai/verl:base-verl0.4-cu124-cudnn9.8-torch2.6-fa2.7.4 | 仅含 CUDA/Torch/FlashAttn/Apex/TransformerEngine 等基础加速栈,不含推理与训练框架 |
| App | verlai/verl:app-verl0.4-sglang0.4.6.post5-vllm0.8.5-mcore0.12.2-te2.2 | SGLang 与 vLLM 双推理后端 + Megatron core_v0.12.2 |
| App | verlai/verl:app-verl0.4-sglang0.4.6.post5-vllm0.8.5-mcore0.12.2-te2.2-deepep | 上述基础上额外内置 DeepEP |
| App | verlai/verl:app-verl0.4-vllm0.8.5-mcore0.12.2-te2.2 | 仅 vLLM 推理后端 + Megatron core_v0.12.2 |
| App | verlai/verl:app-verl0.4-vllm0.8.5-mcore0.12.2-te2.2-deepep | vLLM 版 + DeepEP |
| Preview | verlai/verl:app-verl0.4-sglang0.4.6.post5-vllm0.8.5-mcore0.13.0-te2.2-preview | SGLang + vLLM + Megatron core_r0.13.0 |
| Preview | verlai/verl:app-verl0.4-vllm0.8.5-mcore0.13.0-te2.2-preview | vLLM + 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_JOBS、VLLM_WORKER_MULTIPROC_METHOD=spawn、HF_HUB_ENABLE_HF_TRANSFER=1等环境变量,并通过APT_SOURCE/PIP_INDEX两个构建参数默认指向清华镜像源(mirrors.tuna.tsinghua.edu.cn),方便国内构建加速;同时安装tini、aria2等工具,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+cu126为cxx11abi=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.0、optree>=0.13.0、pydantic>=2.9、grpcio>=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 的装配顺序为:
- 安装
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用于显存管理。 - 安装
vllm==0.8.5.post1(SGLang 0.4.6.post5 的部分操作依赖 vLLM),并注释警告两者存在包冲突风险。 - 重新固定 tensordict 0.6.2、transformers、numpy<2.0.0 等依赖,执行与 Base 相同的 fix 包操作,并补装
nvidia-cudnn-cu12==9.8.0.87。 - 从 GitHub 源码分别安装 TransformerEngine
v2.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.6的cp38-abi3wheel 并安装。Dockerfile 中的注释解释了版本约束的来龙去脉:
torch-2.6.0+cu124为cxx11abi=False,torch-2.6.0+cu126为cxx11abi=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 实现高效的专家并行通信。
构建流程分四步:
- 准备 IBGDA 依赖:将
libmlx5.so.1软链为libmlx5.so; - 克隆源码:拉取
gdrcopy v2.3.1(GPUDirect RDMA 拷贝库)与DeepEP(固定提交a84a248),并下载 NVSHMEM 3.2.5 源码后应用 DeepEP 提供的third-party/nvshmem.patch; - 编译 deepep-nvshmem:通过 cmake 构建,环境变量矩阵值得关注——
NVSHMEM_SHMEM_SUPPORT=0、NVSHMEM_UCX_SUPPORT=0、NVSHMEM_USE_NCCL=0、NVSHMEM_MPI_SUPPORT=0、NVSHMEM_PMIX_SUPPORT=0,仅开启NVSHMEM_IBGDA_SUPPORT=1与NVSHMEM_USE_GDRCOPY=1,并将产物安装到/workspace/deepep-nvshmem/install,随后将NVSHMEM_DIR注入LD_LIBRARY_PATH与PATH; - 安装 DeepEP:进入 DeepEP 目录执行
python setup.py install。
Dockerfile 还提示必须设置 MPI 相关环境变量(CPATH=/usr/local/mpi/include、LD_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=True、kl_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 中的显式注释,整理选型要点如下:
- 推理后端选择:需要同时对比 SGLang 与 vLLM 推理效果时选
sglang0.4.6.post5系列;仅使用 vLLM 时优先vllm0.8.5纯 vLLM 变体,可规避 README 提示的 SGLang/vLLM 包冲突。 - Megatron 内核版本:生产训练用
mcore0.12.2(te2.2)正式版;想提前验证core_r0.13.0新内核时选-preview标签。 - MoE 大模型场景:训练 DeepSeek 系等大规模 MoE 模型时,选
-deepep变体以获得 DeepEP + NVSHMEM 的专家并行通信能力。 - ABI 一致性:torch 2.6.0+cu124 对应
cxx11abi=False,安装 flash-attn、flashinfer 等预编译库时必须匹配该 ABI 标记,这是该版本镜像最容易出错的环节。 - 版本漂移风险: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),仅供参考