这一篇接续上文,将会介绍一下值得一提的当下主流训练框架。
Megatron-LM(NVIDIA)
这是最早的祖师爷级别的预训练框架,也是预训练框架中最大而全的框架。它最早的系统性提出了TP + PP组合方案的预训练框架,定义了整个领域的标准做法。
定位
Megatron-LM的定位是明确的面向大规模的、工业级别的场景,其核心卖点是极致的大规模训练性能,面向的是需要千卡级训练的工业团队和研究机构。代码量大、学习曲线陡峭,但它定义了整个领域的"标准做法"。几乎所有其他框架的TP实现都在模仿Megatron的Column/Row Parallel模式。此外,Megatron-LM同时也是学术界研究大规模并行策略的首选参考实现,它的几篇论文(Megatron-LM 2019、Efficient Large-Scale Training 2021、Reducing Activation Recomputation 2022)本身就是分布式训练领域的经典文献。
它不适合的场景是所有相反的场景:小团队快速实验、硬件资源较少的实验室环境、单机微调,复杂的部署和源码量带来的陡峭学习曲线使其得不偿失,且性能优势无法发挥。
组成
基于Python+PyTorch,依赖NCCL+TransformerEngine(NVIDIA的混合精度库)+CUDA/C++开发和运行。
核心分为两部分:Megatron-LM是包含训练脚本的参考实现,Megatron Core是可复用的组件库。前者包括了预训练脚本、模型定义、数据处理流程,后者提供transformer building blocks、并行策略的封装、混合精度管理等等功能。也因此,许多(实际上是大部分)第三方框架可以(且选择)直接依赖Megatron Core而不用整个 Megatron-LM,例子包括了NeMo、veRL等著名后训练框架。
特性
字面意义上的在预训练这块大而全。
并行策略方面:TP(Column/Row Parallel,定义了行业标准)、PP(1F1B+Interleaved 1F1B)、DP、SP、CP、EP(包括Parallel Folding)。
混合精度方面:FP16、BF16、FP8(通过TransformerEngine)、FP4。
显存优化方面:Activation Checkpointing(full+selective recomputation)、Distributed Optimizer(ZeRO-1级别)。
工程基建方面:分布式Checkpoint(支持不同并行拓扑间的resharding)、和HuggingFace的checkpoint互相转换(Megatron Bridge)。
缺点在于Zero Bubble调度不是原生内置的。后训练能力本身不提供(SFT/RLHF由NeMo-Aligner/NeMo-RL等后训练框架承接)。ZeRO-2/3级别的参数和梯度sharding不是Megatron原生的(其原生Distributed Optimizer只做ZeRO-1,更深的sharding需要和 DeepSpeed 结合)。对非NVIDIA硬件基本不可用。文档不够完善,很多高级功能需要读源码才能理解。
DeepSpeed(Microsoft)
以ZeRO系列优化为核心,通过最小代码改动让PyTorch模型实现大规模训练的库。
定位
面向不想大幅改动模型代码但需要训练大模型的团队。核心卖点是低侵入性,通过修改配置而不是代码本身就能启用ZeRO,不需要重写模型。不适合的场景是追求极致MFU的超大规模训练,因为TP/PP的实现质量和性能不如Megatron。此外也不太适合需要精细控制并行策略的场景。
组成
同样以Python+PyTorch为基础平台,在此基础上有自定义CUDA kernel(fused Adam、fused kernels等),通信层封装了PyTorch的 torch.distributed,支持NCCL后端,也支持ROCm/AMD。核心组件包括ZeRO Optimizer(Stage 1/2/3)、DeepSpeed Engine(训练循环实现的主要组件)、Pipeline Engine、配置系统(JSON config,不需要改代码)。
特性
ZeRO系列是DeepSpeed系列的核心贡献,包括Stage 1(shard 优化器状态)、Stage 2(shard 优化器状态+梯度)和Stage 3(shard 优化器状态+梯度+参数)。ZeRO-Offload(优化器状态offload到CPU)、ZeRO-Infinity(扩展到NVMe)。ZeRO++是后续优化,包含 hierarchical partitioning、quantized all-gather等。
并行策略方面:3D并行(DP(ZeRO)+PP+TP)。值得一提的是社区认为其TP的实现不如Megatron原生。PP支持1F1B调度。Sequence Parallelism采用Ulysses方案,和Megatron的SP不同。Automatic Tensor Parallelism(对HuggingFace模型自动做TP,但仅限推理)。
混合精度方面:FP16、BF16支持。
通信优化方面:1-bit Adam / 0/1 Adam / 1-bit LAMB。这部分梯度通信压缩可以减少通信量最高26x,是其区别于FSDP的重要feature之一。
此外,其也包括了后训练需要的feature,以DeepSpeed-Chat(RLHF pipeline,包括SFT和PPO流程)为主。除此之外,还包括了Activation Checkpointing,Gradient Accumulation,Sparse Attention。
特别值得一提的是,ZeRO论文本身是分布式训练领域引用最高的论文之一。ZeRO的三级sharding思想直接影响了PyTorch FSDP的设计。"改配置而不是改代码"的设计哲学影响了后续很多框架。
DeepSpeed并不包括Context Parallel和Ring Attention。此外,也没有FP8训练支持。有MoE支持但不如Megatron完善。社区维护活跃度近年有所下降,DeepSpeed-Chat被广泛反映问题较多。
Megatron-DeepSpeed(混合方案)
取Megatron的TP/PP+DeepSpeed的ZeRO,组合成工业界实际使用最多的大规模训练方案。
定位
面向需要同时使用高效model parallelism和memory-efficient data parallelism的超大规模训练场景。BLOOM-176B、MT-NLG-530B等知名模型的训练都使用了这个组合。
组成
其实就是Megatron-LM和DeepSpeed的集成方案。TP和PP由Megatron提供,ZeRO(通常是Stage 1,和PP配合时Stage 2/3有性能问题)由DeepSpeed提供,通信压缩等额外优化也来自DeepSpeed。
ZeRO和PP配合时通常只用Stage 1。Stage 2在PP下需要额外的reduce-scatter通信,开销大。Stage 3理论上可以但当时性能不够好。这主要是历史遗留问题,DeepSpeed官方后来承认如果重新评估可能会选Stage 3。
PyTorch FSDP/FSDP2(PyTorch)
PyTorch官方的ZeRO实现,在演化过程中从独立库演变为框架原生组件,是当前PyTorch生态中data parallel的标准方案。准确的说,它不是一个独立框架,而是一个组件,在演化过程中以特殊功能被嵌合在生态内。
定位
不是独立的预训练框架,而是一个并行策略组件。被TorchTitan、TRL、OpenRLHF等框架作为底层使用。面向所有使用PyTorch的训练场景。适合需要ZeRO级别显存优化但不想引入DeepSpeed外部依赖的场景。不适合需要TP/PP的场景,FSDP本身不提供这些,需要配合其他组件。
组成
纯PyTorch原生,不依赖任何外部库。FSDP1基于FlatParameter实现,FSDP2基于per-parameter DTensor sharding实现。
特性
FSDP1等价于ZeRO-3,也支持ZeRO-2和不shard(纯DDP)。支持CPU offload、mixed precision和activation checkpointing。
FSDP2在此基础上额外支持了per-parameter sharding(不再把参数flatten成一大块),和 torch.compile 兼容,显存效率比FSDP1高约7%,性能平均提升约1.5%。
本身不提供TP、PP、SP、CP等model parallelism。不提供训练循环、数据加载、checkpoint管理等框架级功能。不是一个完整的训练解决方案,需要搭配其他组件使用。
此外,值得一提的是FSDP的演化历史。它其实经历了三个阶段,FairScale(Meta的早期实现。这个时候是独立库)→PyTorch FSDP1(被PyTorch吸收进入主库)→FSDP2(用DTensor重写,和TorchTitan共同开发)。作为数学原理和DeepSpeed完全相同(都是 ZeRO 的三级 sharding),但起源和演化历史完全不同的对位存在,其实现方式和API设计与DeepSpeed的异同之处是一件很值得研究的有意思的事情。
实际上,它的生态位和前面的DeepSpeed高度重叠:前者本来就是以最小侵入为卖点,后者索性直接在PyTorch内原生内置,两者的数学原理又相同。FSDP在逐步蚕食DeepSpeed的市场份额。在2026年,对于大多数团队在2-8卡上微调7B-70B模型的场景,PyTorch FSDP已经成为默认推荐。这个转变在过去两年内发生得很快。
其他预训练框架
Nanotron(HuggingFace)
以简洁和教学价值为核心的minimalistic 3D并行预训练库。
定位:面向想理解3D并行实现原理的学习者和研究者,以及需要一个轻量级预训练工具的小团队。配套的Ultrascale Playbook是目前最好的分布式训练实践指南之一。不适合追求极致性能的工业场景,且feature覆盖不如Megatron。
组成:Python + PyTorch,使用torchrun启动,依赖Flash Attention和Triton。核心组件包括DistributedTrainer(训练编排)、ParallelContext(管理DP/TP/PP的process group)、PipelineBlock(PP的stage封装)、NanotronModel(模型基类)。
特性:
具有的特性:TP(模仿Megatron的Column/Row Parallel)、PP(1F1B调度)、DP、ZeRO-1、Activation Checkpointing、支持Llama/Mistral/Qwen等主流架构、支持和HuggingFace checkpoint的互相转换、支持Tied Parameters。
不具有的特性:ZeRO系列没有Stage 2/3的实现、没有EP/CP/SP、没有FP8训练、PP调度只有基础1F1B(没有Interleaved或Zero Bubble)、没有分布式Checkpoint resharding。
TorchTitan(Meta+Pytorch官方)
PyTorch官方的预训练参考实现,是为了展示PyTorch最新分布式特性而开发的showcase实现,同时也是一个clean-room implementation。
定位:面向研究团队和框架开发者,作为PyTorch分布式训练能力的展示平台和最佳实践参考,同时也是可用于生产的预训练系统。不适合的场景是需要MoE/EP支持的场景,以及需要完整后训练pipeline的场景。
组成:完全基于PyTorch原生API,核心抽象是DTensor(分布式tensor表示)和DeviceMesh(设备拓扑抽象)。使用FSDP2作为data parallel层。不依赖Megatron或DeepSpeed。
特性:
具有的特性:ZeRO-1/2/3(通过FSDP2这一原生实现获得)、TP、PP、CP(Context Parallel)、Float8/MXFP8训练(也即对Blackwell GPU硬件特性的支持)、torch.compile集成、Activation Checkpointing(layer级和operator级selective)、异步分布式Checkpoint(DCP)、SymmetricMemory(节点内高效的peer-to-peer通信实现)、AsyncTP(通信计算重叠)、SFT 支持、Flight Recorder(调试工具)、Gradient Accumulation。
不具有的特性:没有MoE/EP支持、PP调度没有Zero Bubble等高级方案、整体feature数量不如Megatron、没有通信压缩。
此外,其重要贡献和卖点之一在于DTensor+DeviceMesh的统一抽象(和FSDP2一样),即让不同并行维度可以作为独立的、可组合的模块叠加,模型代码几乎不需要改动。这个设计思想对整个PyTorch分布式生态有深远影响。
各框架核心特性汇总表
此表有ai辅助排版。感谢ai。如下:
特性 Megatron-LM DeepSpeed FSDP/FSDP2 TorchTitan Nanotron
─────────────────────────────────────────────────────────────────────────────────────────
维护方 NVIDIA Microsoft PyTorch Meta/PyTorch HuggingFace
定位 工业极致性能 低侵入易用 并行原语组件 官方参考实现 教学/轻量
DP ✓ ✓ ✓ ✓(FSDP2) ✓
TP ✓ ✓(弱) ✗ ✓ ✓
PP ✓ ✓ ✗ ✓ ✓
SP ✓ ✓(Ulysses) ✗ ✗ ✗
CP ✓(含Dynamic) ✗ ✗ ✓ ✗
EP (MoE) ✓ ✓ ✗ ✗ ✗
ZeRO-1 ✓(Dist.Opt.) ✓ ✓ ✓(FSDP2) ✓
ZeRO-2 ✗(需DS) ✓ ✓ ✓(FSDP2) ✗
ZeRO-3 ✗(需DS) ✓ ✓ ✓(FSDP2) ✗
ZeRO-Offload ✗ ✓ ✓(CPU) ✗ ✗
ZeRO-Infinity ✗ ✓ ✗ ✗ ✗
PP调度: 1F1B ✓ ✓ ✗ ✓ ✓
PP调度: Interleaved ✓ ✗ ✗ ✗ ✗
PP调度: Zero Bubble ✗ ✗ ✗ ✗ ✗
Activation Ckpt ✓(+selective) ✓ ✓ ✓(+selective) ✓
Mixed Precision-BF16 ✓ ✓ ✓ ✓ ✓
FP8 Train ✓(TE) ✗ ✗ ✓(Float8) ✗
Distr-Checkpoint ✓ ✓ ✗ ✓(DCP,Async) ✗
torch.compile Partial ✗ ✓ ✓ ✗
通信压缩 ✗ ✓(1-bit Adam) ✗ ✗ ✗
SFT支持 ✗(NeMo) ✓(DS-Chat) ✗ ✓ ✗
非NVIDIA硬件 ✗ ✓(ROCm) ✓ ✓(ROCm) ✓
代码简洁度 低 中 高 高 最高
学习曲线 陡峭 中等 平缓 平缓 最平缓
可以看出,即使是最简单的教学类预训练框架,其feature的复杂性也不比一般的推理框架少。对于后训练框架,这个问题还会更明显。也许,训练框架的开发在未来可能比推理框架的开发更具有可持续性。也就是说,Agent Infra的后续发展和完善也许会进一步成为后续几年的热点。不过,究竟会是以什么形式、挑战会是什么,这仍然是一个值得思考的问题。