verl-FL 概述#

备注

这是一个预览版本。显示的版本号是预发布标识,最终发布时可能会更改。此预览中的内容仅供参考,不构成对最终产品的承诺或保证。

verl-FL 是 verl 的一个分支,旨在支持多种 AI 加速器。它基于 FlagOS 构建,FlagOS 是一个统一的开源 AI 系统软件栈,集成了训练引擎 Megatron-LM-FLTransformer-Engine-FL,以及推理引擎 vllm-plugin-FL 等关键组件。

上游 verl 与 CUDA 紧密耦合,而 verl-FL 引入了平台抽象层并集成了 FlagOS 生态组件,从而在不修改上游业务逻辑的情况下实现异构分布式训练。

架构#

平台抽象层#

verl-FL 在 verl/plugin/platform/ 下引入了策略模式的平台抽象:

verl/plugin/platform/
├── __init__.py
├── platform_base.py        # PlatformBase 抽象基类(16 个设备无关方法)
├── platform_cuda.py        # CUDA + FlagCX 自动检测
├── platform_metax.py       # MetaX MACA
├── platform_npu.py         # 昇腾 NPU
├── platform_musa.py        # 摩尔线程 MUSA + FlagCX
├── platform_cpu.py         # CPU 回退
├── platform_manager.py     # 单例,VERL_PLATFORM 环境变量覆盖
└── README.md               # 添加新后端的指南

PlatformBase 抽象基类定义了 16 个设备无关方法,涵盖设备分配、内存管理、流操作和分布式初始化。业务逻辑中所有分散的 torch.cuda.* 调用均替换为平台 API。运行时平台选择通过 VERL_PLATFORM 环境变量控制。

引擎插件架构#

verl/plugin/engine/
├── __init__.py             # 引擎注册表
├── fsdp_fl/
│   ├── __init__.py
│   └── transformer_impl.py # 基于 TE-FL 的 FSDP 引擎
└── megatron_fl/
    └── __init__.py         # 基于 Megatron-LM-FL 的引擎

异构训练架构#

FlagCX 作为统一的跨厂商通信后端,在异构场景中替代 NCCL。通过 Ray 运行时上下文实现 CUDA 和 MUSA 节点间的权重同步和设备隔离:

┌─────────────────────────┐              ┌─────────────────────────┐
│  NVIDIA 节点            │              │  MUSA 节点              │
│  (Actor / Critic)       │◄── FlagCX ──►│  (Rollout / vLLM)       │
│  FSDP + NCCL            │              │  torch_musa             │
└─────────────────────────┘              └─────────────────────────┘