Chapter 01

项目背景与定位

📌 本章基于 NVIDIA/Megatron-LM · commit 432d76b2b8bf (2026-05-26)。详见 版本基线 。

1.1 一句话定位

Megatron-LM 是 NVIDIA 出品的、专门为千亿参数级别 Transformer 在 GPU 集群上高效预训练而设计的代码库。它不是一个开箱即用的"训练 SaaS",而更像 NVIDIA 自己用来跑论文、跑客户案例、再不断把"我们当时这样写最快"沉淀回 GitHub 的工程参考实现。

如果你看过 GPT-3、Megatron-Turing NLG 530B、Llama 2、Mixtral、Nemotron、Grok-1 等模型的技术报告,里面频繁出现的"我们采用 TP=8、PP=16、SP、selective activation recomputation……"这些术语,绝大多数都是 Megatron-LM 这一行行代码里冒出来的。它的影响力体现在两个层面:一是直接被使用,二是被其他框架(DeepSpeed-Megatron、Megatron-DeepSpeed、Megatron-Core、NeMo、ColossalAI 的部分模块)当作底座或抄作业的目标。

1.2 为什么要存在这样一个项目

要回答"为什么要专门写一个 Megatron-LM",得回到 2019 年的时间点。当时业界的常态是:

Megatron 当时给出的核心答案是"沿着 Transformer 自身的结构去切":

  1. Attention 的 QKV 投影和 MLP 的两层 Linear 可以按列 / 按行切到不同 GPU,靠 AllReduce 拼起来 —— 这就是张量并行 (Tensor Parallelism, TP)
  2. 不同 Transformer Layer 可以拆到不同 GPU 上,让流水线推着 micro-batch 走 —— 这就是流水线并行 (Pipeline Parallelism, PP)
  3. 再叠加传统的数据并行 (DP),构成"3D 并行"。

所谓 3D 并行的总卡数 $W$ 满足:

$$W = \mathrm{TP} \times \mathrm{PP} \times \mathrm{DP}$$

例如 GPT-3 175B 的标准配置(见 examples/gpt3/train_gpt3_175b_distributed.sh)就是 $\mathrm{TP}=8,\;\mathrm{PP}=16,\;\mathrm{DP}=12$,即 $W = 8\times16\times12 = 1536$ 张卡。

之后几年里,Megatron-LM 又陆续把 Sequence Parallelism(SP)、Context Parallelism(CP)、Expert Parallelism(EP)、Selective Activation Recomputation、Distributed Optimizer 等新点子加了进来。可以说,当下大模型工业训练里能听到的所有"并行词汇",几乎都能在它的代码里找到对应实现

1.3 它和这些项目是什么关系

初学者最容易混淆的就是几个"长得很像"的名字:

名字关系一句话区别
Megatron-LM 本书主角 NVIDIA 的预训练代码库,单仓库内可直接跑端到端 GPT/BERT/T5
Megatron-Core 同一团队 Megatron-LM 内部抽出来的"并行基础库",被 NeMo、Megatron-LM 共享
Megatron-DeepSpeed微软分叉 Microsoft 把 DeepSpeed 的 ZeRO / pipeline 引擎接到 Megatron 上的 fork,曾用来训 MT-NLG 530B
NeMo 同一团队 NVIDIA 端到端框架,封装 Megatron-Core 之上,多模态全包
TransformerEngine同一团队 NVIDIA 的 FP8 / FP16 优化算子库,被 Megatron 调用
学习路径 先 Megatron-LM 把概念吃透,再去看 Megatron-Core 抽象,最后看 NeMo 怎么把这套能力做成"配置文件即一切"。

1.4 设计哲学:硬件友好优先

通读 Megatron 源码会感觉到非常浓的"NVIDIA 工程师味":

这意味着两件事:你想用它,必须接受陡峭的上手曲线;但只要你愿意读,它愿意把所有事情告诉你。这恰恰是写一本中文 tutorial 的价值所在 —— 帮你跨过那条陡峭的曲线。

1.5 它适合用来做什么、不适合做什么

判断典型场景
✅ 适合千亿参数级别的从零预训练(GPT 风格 / Llama 风格 / Mixtral MoE)
几十亿到百亿模型的"工业级继续预训练",需要吃满 H100 集群的场景
想用 FP8 / FlashAttention-3 / Distributed Optimizer 等前沿优化
想看看"千亿模型工业训练代码长什么样"的学习者
❌ 不适合单卡 / 几张消费级卡的微调 —— LLaMA-Factory、Axolotl、Unsloth 更合适
想 5 分钟跑通 demo —— Megatron 的最小复现至少需要几小时上手
跑非标准结构 / 非 NVIDIA GPU 的训练
大量 RLHF —— 它有相关功能但不是首选,可以看 OpenRLHF / verl / TRL

1.6 本书将怎么带你走完这趟旅程

接下来的章节会按这样的顺序展开:

读完这本书的目标,不是你能"从零写一个 Megatron-LM",而是当 Megatron-LM 出现在你的项目里时,你敢动它、读得懂它、改得了它。这就够了。

1.7 2024–2026 重要更新时间线

Megatron-LM 不是 2020 那个 "GPT-3 论文配套代码" 了;最近两年加了一堆新东西。下表按时间倒序,每行附本书后续讨论位置:

时间更新本书位置
2026-Q1 Kitchen Quantization 训练时量化(arguments.py:3335 第 10 章
2025-Q4 异构模型(Heterogeneous)支持(arguments.py:3194 第 9 章
2025-Q4 Multi-Token Prediction(MTP)训练目标 第 4 章 / 第 10 章
2025-Q3 Mamba SSM + Context Parallel 联合(core/ssm/mamba_context_parallel.py第 9 章
2025-Q3 Multi-head Latent Attention(MLA)(arguments.py:3150multi_latent_attention.py:1437第 7 章 / 第 10 章
2025-Q2 Async dist-checkpointing(dist_checkpointing/strategies/filesystem_async.py第 12 章
2025-Q2 Hybrid CP schedule(pipeline_parallel/hybrid_cp_schedule.py 第 8 章 / 第 9 章
2025-Q1 Packed sequence 支持(datasets/packed_seq_params.py 第 6 章 / 第 10 章
2024-Q4 RL 子系统(megatron/rl/arguments.py:2355 第 4 章
2024-Q4 MoE Flex Token Dispatcher(moe/token_dispatcher.py:1395 第 10 章
2024-Q3 FP8 训练(TransformerEngine 深度集成) 第 10 章
2024-Q2 MCore(megatron/core/)成为推荐接口,老 megatron/legacy/ 进入维护第 13 章

1.8 Megatron-LM / Megatron-Core / NeMo:谁是谁

这三个名字经常混用,搞清楚不绕弯:

名字定位仓库位置
Megatron-LM 顶层训练框架(含数据 / launcher / args / pretrain 脚本) NVIDIA/Megatron-LM
Megatron-Core (MCore) 底层并行 + 算子库(Transformer / 并行 / 优化器 / dist-ckpt)同仓库的 megatron/core/ 目录;也单独 pip 发布 megatron-core
NeMo / NeMo-Framework 用 MCore 搭的高层产品框架(多模态 / 语音 / LLM 一站式) NVIDIA/NeMo
NeMo-RL / NeMo-Skills NeMo 之上的 RL / 评测扩展 NVIDIA/NeMo-RL
Megatron-Bridge Megatron ↔ HuggingFace checkpoint 互转工具 独立仓库

本书主线是 Megatron-LM 仓库本体 + 其 core/ 目录。后面提到 "MCore" 时指的就是 megatron/core/