Megatron Core 0.8—0.20:
五次转折,读懂训练引擎的演进

展开本文目录全局地图五段总览0.8–0.110.12–0.130.14–0.160.17–0.180.19–0.20结论来源

训练系统关键环节

模型表示GPTModel / HybridModel · Attention / MLP / MoE / SSM / GDN
↓
并行布局TP / SP / PP / DP / CP / EP · GTP · MIMO 模块级异构
↓
训练执行调度:Microbatch / 1F1B · 计算:Forward / Backward通信:P2P / A2A · MoE Dispatch / Combine(DeepEP / HybridEP)
↓
梯度同步与参数更新梯度归约 / Reduce-Scatter · Optimizer

实际执行中,计算与通信可能交叠。

贯穿训练过程的机制
内存与权重Activation · Recompute · Offload · GTP 权重物化
执行优化与精度Overlap · CUDA Graph · Kernel Fusion · FP8 / FP4
状态与可观测性Distributed Checkpoint · 恢复 · Observability

训练系统重点演进

0.8-0.11:训练对象多样化

随着 MoE、混合模型和多模态任务出现,训练对象从重复的 Transformer Block 扩展到包含专家分支、不同计算层和多种输入的模型;长上下文则对序列处理和分配提出了新要求。

从重复 Block 到路由、混合层和多模态分支
01
Dense Transformer:重复同一种 Block对照基线 · 每一层通常使用 Attention + Dense MLP
输入 Token
→
Block 1Attention → Dense MLP
→
Block 2Attention → Dense MLP
→
… → 输出

同一层的 Token 使用同一套 Dense MLP;不同层的开销仍可能有差异。

02
MoE:同一层出现条件分支变化维度 · 哪个 Token 使用哪些专家权重
输入 Token
→
Attention
→
Router / Top-k按 Token 选择专家
→
Experts专家 A / B / …
→
加权合并

Token 只经过选中的专家;专家跨设备时,需处理数据交换和负载均衡。

03
混合模型:层的计算家族不再相同变化维度 · 同一模型中组合不同类型的序列处理层
输入
→
Mamba-2状态空间计算
→
Attention注意力计算
→
MLP前馈计算
→
… → 输出

不同层的计算与状态不同,组合顺序及并行支持取决于具体模型和配置。

04
多模态:多个输入分支先汇合变化维度 · 不同类型的输入经过不同模块后进入语言模型
图像 → Vision Encoder → 投影 / 连接
文本 → Token Embedding
→
组合表示按模型定义对齐并输入
→
语言模型Attention / MLP / …
→
输出

视觉与语言模块的数据形状和资源需求不同,连接方式取决于具体模型。

0.8:LLaVA 图文训练路径

图文问答等任务需要模型同时理解图像与文本。0.8 初步支持基于 LLaVA 架构的视觉语言模型训练:图像与文本分别编码,图像特征经投影后与文本表示组合,再送入语言模型。同一版本还初步支持 Mamba-2 及其与 Attention、MLP 的混合模型。0.8 Release

图像和文本经过各自的处理路径,再进入语言模型
图像
→
Vision Encoder提取视觉特征
→
投影模块映射到语言模型输入空间
文本
→
Token Embedding文本表示
↓ 按模型定义组合
语言模型处理组合后的输入并生成输出
概念示意:图像特征的具体插入方式、参与训练的模块及支持范围取决于模型与配置;0.8 的多模态支持为初步支持。

与 LLaVA 同期出现的 Mamba-2 混合模型,改变的不是输入模态,而是序列计算的实现方式:Attention 读取历史位置,Mamba-2 使用状态空间机制处理序列。框架需要为不同层准备各自的算子和状态管理路径,不能假定所有层都有相同的 Attention 形状。

Mamba-2 与 Attention 的混合层
AttentionQ/K/V 与注意力
+
Mamba-2状态空间更新
+
MLP前馈计算
层类型示意,不表示所有 Mamba Hybrid 模型以此顺序排列。0.8 的变化是支持更多层家族,并非首次出现混合模型的概念。0.8 Release

0.9:首尾阶段非均匀流水线分层

首尾 Pipeline Stage 除 Transformer 层外,还可能承担 Embedding、输出或 Loss 等工作;各阶段分配相同数量的层,未必均衡。0.9 支持让首尾阶段分配比中间阶段更少的 Transformer 层,为调整负载提供了空间。0.9 Release

根据阶段职责,调整 Transformer 层的分配
首阶段Embedding + 较少层2 层 · 示意
→
中间阶段主要承担 Transformer 层4 层 · 示意
→
末阶段较少层 + 输出 / Loss2 层 · 示意
2 / 4 / 2 仅展示“首尾少、中间多”的分配意图,并非性能测量或已验证的运行配置。0.9 的发布说明描述的是首尾阶段可分配较少层,并不等同于后续任意自定义布局。

0.10:MoE Parallel Folding

MoE 模型中的 Attention 与 Experts 虽然运行在同一批 GPU 上,却不一定适合相同的并行配置:Attention 可能需要张量并行与上下文并行,Experts 则可能更适合不同的专家并行和张量切分方式。0.10 引入的 MoE Parallel Folding,让两部分能够采用不同的逻辑并行映射。0.10 Release

同一批 GPU,Attention 与 Experts 采用不同逻辑网格
统一布局的直觉
AttentionTP / CP / DP
MoE / Experts专家并行受统一配置约束
Attention 与 Experts 的计算和通信需求可能不同。
→
MoE Parallel Folding
Attention 并行网格TP × CP × DP × PP
MoE 并行网格ETP × EP × EDP × PP
分别组织进程组,以适配不同模块的需求。
概念示意:ETP 为 Expert Tensor Parallel,EDP 为 Expert Data Parallel。两套逻辑网格映射到同一批 GPU,不代表复制物理资源;可用组合仍受 Rank 数、布局与实现约束。官方 MoE Parallel Folding 文档
8 Rank 示例:Attention 与 Experts 的通信组
Attention 视角 · TP2 × CP2 × DP2
R0R1R2R3R4R5R6R7
示例:R0 的 TP 同组伙伴是 R1;跨序列计算还需要 CP 组中的其他 Rank。
Expert 视角 · ETP1 × EP4 × EDP2
R0R1R2R3R4R5R6R7
同样的 R0,可以属于 R0–R3 的 EP 通信域;这里的组顺序是示例布局,不代表框架默认 Rank 排序。
8 GPUs = (TP2 × CP2 × DP2) = (ETP1 × EP4 × EDP2)
关键区别:不是分配两批物理 GPU,而是在同一批 GPU 上为 Attention 与 Experts 构造不同的通信视角。
模型示意。实际 process group 取决于 Rank 排序、PP、MoE Folding 配置与版本。

这一变化关注不同模块如何使用设备;专家如何选择 Token、Token 又如何高效跨设备交换,仍需要路由和通信路径配合。

收益并不来自多开几个 Group。在同样 8 Rank 下,Attention 可以把更适合矩阵切分/长序列的 Rank 组织成 TP/CP 组,Expert 则按 ETP/EP 划分。真正价值是让两类模块不必接受同一个并行度的折中。代价是 Group 数量与布局转换增加,某些通信可能跨越原来较近的互联域;必须同时比较 Attention 耗时、Expert GEMM、Token Dispatch 与峰值显存,不能只看某个模块的加速。

0.10:MLA 扩展 Attention 内部的数据路径

MoE Parallel Folding 解决的是模块之间怎样分配设备;Multi-Latent Attention(MLA) 改变的则是 Attention 模块内部的表示和计算。传统 MHA/GQA 直接使用投影得到的 K、V,而 MLA 引入低维潜在表示及相应的上、下投影路径,减少重复的 KV 表示。其训练性能仍取决于具体投影融合、RoPE 路径和并行策略。

MLA 的低维 KV 表示
常规 MHA / GQA · 简化
Hidden X→Q / K / V 投影→Attention
Key / Value 按注意力实现组织。
MLA · 简化
Hidden X→KV Down → Latent→重建 / 融合计算
低秩 KV 路径结合独立的 RoPE 分量;具体是否显式重建 K/V 依后端实现。
图中仅比较表示路径,不包含完整的 DeepSeek MLA 算子;训练侧的优化与推理侧 KV Cache 节省不应直接等同。0.10 Release
展开 MLA 的 Latent、RoPE 与投影细节
MLA 与 GQA 的 KV 表示差异
输入 X[T, H]
→
KV Down[T, rkv] + RoPE 支路
→
KV Up / Attention重构/参与 QKᵀ 与 AV
GQA 的控制量
以 KV Head 数减少 K/V 的存储与通信规模;注意力主体仍沿常规多头路径展开。
MLA 的控制量
通过低秩潜在表示和分离的位置信息支路改变 KV 投影与表示路径,训练中仍需要完成相应 Attention 计算。
rkv 是潜在维度;未固定模型参数。推理侧 KV Cache 压缩效果不能直接当作训练显存降低比例。

0.11:DeepSeek-V3 的专家路由支持

MoE 微调需要在专家间分配 Token;如果负载倾斜或跨设备通信受限,部分专家与设备可能成为瓶颈。0.11 发布说明列出 DeepSeek-V3 微调支持,其中包括无辅助损失负载均衡,以及 Node-limited 和 Device-limited 路由。0.11 Release

从专家选择到负载与通信范围的约束
输入 Token进入 Router
→
专家路由考虑可用的路由约束
→
选中专家在对应设备执行
负载均衡引导专家接收更均衡的负载
节点 / 设备限制约束路由涉及的节点或设备范围
概念示意:路由约束和负载均衡解决不同问题,具体行为与兼容范围以版本及配置为准;不能据此推断所有网络拓扑都会加速。0.11 的发布说明当时将 MTP 标为即将支持。

模型构建、模块并行和专家路由已经能够分别适配新架构。不过,路由只决定 Token 去往哪个专家;跨设备搬运仍需要更高效的通信实现,Pipeline 的层放置也开始受到不均匀计算负载影响。

0.12-0.13:数据流与流水线布局

MoE 让 Token 在专家之间流动,MTP 为训练增加未来 Token 的预测路径;模型结构不再规整,也让 Pipeline 的层分配更加重要。0.12 和 0.13 分别从通信、预测和布局三个方向扩展训练能力。

0.12:DeepEP 优化专家数据交换

MoE 的 Router 为每个 Token 选择专家。专家分布在不同设备时,Token 需要先被分发到目标专家,再将结果送回原位置。0.12 增加 DeepEP 支持,为细粒度 MoE 的 Dispatch / Combine 提供专门的通信路径。[5]

一个 Token 如何到达专家?

DeepEP 的 Token 路由与跨设备传输
逻辑需求:每个 Token 交给哪个专家?
源设备Token路由目标
GPU0a / bE0 / E2
GPU1c / dE1 / E3
示例假设 E0/E1 与 E2/E3 分别位于不同设备。实际 Top-k 可能为 2 或更大,存在多份专家分配。
真正需要优化的路径
分桶 / 元数据expert ids、位置映射
→
Dispatch本地 / 跨卡 Token
→
Combine恢复源位置与权重
只有目标专家在远端的分配才产生对应的远端 Token 搬运;通信后端还需管理不同目标的收发缓冲区。
可量化:实际收发字节、跨节点比例、Permute/Unpermute 耗时、Dispatch/Combine 耗时与最慢 Rank 等待。
示意为理解数据流而简化了设备/专家数量。通用 A2A 与 DeepEP 都要完成相同的路由语义;差别体现在具体通信实现、缓冲与融合,不能仅靠这张示意推断加速倍数。

这条路径中,Router 决定交给谁处理,Dispatch / Combine 负责数据如何往返,Grouped GEMM 则组织到达专家后的计算。实际通信量取决于远端路由比例、EP 规模和后端实现;图中的逻辑展开量不能直接当成网络发送量。

通用 All-to-All 与 DeepEP 的数据交换路径
常见通用路径
按目标专家排列
→
通用 All-to-All
→
本地专家 GEMM
Combine 需要逆向通信和复位 Token 顺序;重排与通信通常是可独立观察的操作。
DeepEP / Flex 专用后端
路由索引 / 缓冲
→
专用 Dispatch / Combine
→
Experts
优化目标是有效数据搬运、节点内外交换与更合适的融合/流水组织;是否更快依赖 Token 分布、拓扑、版本及后端。
概念性对照,不宣称每一个 DeepEP Kernel 都融合重排,也不宣称每一种网络拓扑都有收益。
逻辑专家分配与跨节点流量

设有 T=8 个源 Token、Top-K=2,则总共有 16 次逻辑专家分配,但它们不等于 16 次跨机发送:如果专家在本地,分配不会产生远端网络负载;若使用节点级去重/压缩路径,还可能改变跨节点的物理发送次数。

路由结果

16 个 (token, expert) 配对;可能包含一个 Token 对多个 Expert 的引用。

节点内实际传输

与本地路由比例和缓冲区布局有关;可能在节点内重排。

跨节点物理发送

与目标所在节点、去重/融合策略和 dtype 有关,不可直接等同 16×H×dtype。

计算侧

Grouped GEMM 负责组织到达本 GPU 的专家工作,不决定跨机网络字节。

适用条件EP 跨机、较大 Top-K、细粒度专家且跨节点流量明显时值得评估。
代价Metadata、Dispatch Buffer、融合 Kernel 的额外资源和后端依赖。
验证统计每 Rank 远端路由计数、实际 NCCL/通信后端 bytes、Dispatch/Combine 时间、Step Time。
这是一个数学上的“逻辑分配 ≠ 物理网络传输”的简化例子;具体字节量必须由所用后端的 Profiler 测得。

在 core_v0.12.0 的 token_dispatcher.py 中,MoEFlexTokenDispatcher 通过后端管理器完成路由元数据准备和 dispatch/combine。随着 HybridEP 加入,接口的分发与回收语义保持一致,但实际通信和重排由不同后端处理。

0.12:MTP 增加未来 Token 的训练信号

普通下一 Token 预测在当前位置学习预测下一个 Token;Multi-Token Prediction(MTP)在训练中增加对更远位置 Token 的预测路径,提供额外训练信号。0.12 发布说明列出 MTP 支持;它改变的是模型训练目标和计算路径,与 DeepEP 的专家通信作用于不同环节。[5]

MTP 的逐深度预测与 Loss
已知上下文 x₁ … xₜ → 主模型隐藏状态 hₜ
主模型预测目标:xₜ₊₁,计算 Lnext
MTP 深度 1hₜ 与移位的 Token Embedding → 目标 xₜ₊₂
MTP 深度 2上一深度表示 + 后续移位输入 → 目标 xₜ₊₃
L = Lnext + λ · (LMTP,1 + … + LMTP,D)/D
实现关键一个 MTP 深度通常包含共享 Embedding、投影、Transformer Block 与共享输出头;不是单个线性分类器同时无条件预测所有未来 Token。
训练代价新增额外的 Forward/Backward、Activation、共享权重的重复调用和 MTP Loss;是否利于推理加速取决于额外的推理方案。
示意预测目标与因果深度链;MTP 输入对齐和共享头机制基于官方设计。不同版本对 CP、PP、特殊 Mask 的支持有差异。

与 DeepEP 的差异在于:MTP 不负责跨 GPU 传输,而是增加训练目标与预测模块。因此它首先影响模型末端的计算、Activation 和 Loss 组织;当 MTP 与 PP 组合时,还会产生额外的阶段负载。不要把训练时的多 Token 监督直接等同于推理阶段一次生成多个 Token。

MTP 增加了模型末端的计算和状态,因此部署到 Pipeline 时,需要关注预测模块的位置以及末端阶段的显存和工作量。0.13 发布时,MTP 与 Flexible Pipeline Layout 尚不兼容,相关组合需按版本核对。[6]

展开 MTP 的计算、显存与梯度代价
MTP 的额外计算与梯度路径
监督粒度

多预测深度意味着更多预测目标、移位输入、Embedding/输出投影及其对应 Loss。

梯度路径

MTP 辅助模块会有自己的反向计算,是否共享权重或停梯度依具体实现。

Pipeline 负载

将 MTP 放到末端可能增加尾端显存与计算,因此 0.16 才继续提供独立 Stage。

工程验证

对比单预测与多预测下的 loss 分项、MFU、末端 Stage Time、Activation/HBM 与梯度一致性。

MTP 并不等价于推理阶段一次生成多个 Token;不同实现的预测深度、输入移位和共享权重需要按版本确认。

0.13:自定义 Pipeline Layout

Embedding、Decoder、输出和 MTP 路径的计算量可能不同,按层数平均切分不一定能平衡各阶段。0.13 引入 --pipeline-model-parallel-layout,支持自定义非对称虚拟 Pipeline 布局,让模型组件可以按受支持的规则重新分配。[6]

0.9 非均匀分层与 0.13 自定义流水线布局
0.9 · 首尾 Stage 层数调整
PP0
2 Decoder + Emb
PP1
4 Decoder
PP2
2 Decoder + Loss
以首尾较少 Decoder 层为主要调节方式;2 / 4 / 2 是概念数量。
0.13 · 用 Layout 描述组件与分段
E + t×2t×3t×3L
Et*2|t*3|t*3|LE=Embedding,t=Decoder,L=Loss;此例展示布局语法,不对应特定性能最优配置。
0.13 的布局还可以描述虚拟 Stage、重复和 MTP 的符号 m;但在当时的版本中,MTP 与 Flexible Pipeline Layout 尚不兼容。示意中的布局不包含 MTP,避免把语法支持误写成组合可运行。官方 Layout 语法 · 0.13 Release
0.13 的兼容限制

0.13 的自定义布局用于描述模型组件如何放入不同 Stage/Virtual Stage;该版本尚不能把 Flexible PP 与 MTP 视为可自由组合。到 0.16 才出现独立 MTP Stage 支持;按 0.20 文档核对布局和 MTP 约束。

专用的专家交换后端改善了数据搬运路径,自定义 Pipeline Layout 则提供了更灵活的层分配方式。当两者进入完整训练过程,通信等待、调度顺序和 Activation 驻留时间进一步成为吞吐瓶颈。

0.14-0.16:计算、通信与显存协同

模型和数据能够分布到 GPU 后,训练效率还取决于通信等待、显存占用和执行开销。0.14–0.16 分别从通信重叠、专家交换、内存卸载和执行调度等方面改善整个训练 Step。

0.14:ModelCommProcessGroup 与 HyperCommGrid

当 Attention、MoE、PP 和 CP 都要建立进程组时,复杂的不仅是通信量,还包括每种模块应该由哪些 Rank 共同通信。0.14 在这一方向集成 ModelCommProcessGroup,并引入 N 维通信网格 HyperCommGrid,使进程组能够基于具名的并行维度创建和管理。它是通信组织层的抽象,并不自动让一次 All-to-All 更快。[7]

HyperCommGrid 的通信组组织
直接维护各类 Group · 概念
TP Group A / BEP Group A / BDP / CP / PP Groups
配置越复杂,Group 的成员关系、创建顺序和复用越难管理。
HyperCommGrid · N 维通信关系
Grid(dim_names = [...])按 TP / EP / DP 等维度选择显式 create_pg() → ProcessGroup
网格描述 Rank 的逻辑坐标;具体分解和合法组合须受模型布局约束。
此图展示逻辑关系,具体 ProcessGroup 的创建遵循相应版本 API。HyperCommGrid 的通信组仍需显式创建;不同维度上的组并不是任意取并集就能安全使用。HyperCommGrid API

0.14:专家并行通信与计算重叠

MoE 的 Token 在专家之间交换时,如果相关计算只能等待通信完成,All-to-All 就可能暴露在训练关键路径上。0.14 增加 Expert Parallel A2A Overlap,尝试让满足依赖条件的计算与通信并行推进。[7]

A2A Overlap 的跨 Microbatch 调度
横向为示意时间片,并非真实 Kernel Trace;同列只表示可能的并行窗口。
执行域
τ1
τ2
τ3
τ4
τ5
通信队列
MB k
Dispatch
依赖 GEMM
MB k
Combine
MB k+1
Dispatch
稍后 Combine
计算队列
MB k−1
Wgrad
MB k
Expert GEMM
其它独立计算
延后的 Wgrad k
MB k+1
Expert GEMM
依赖约束本 MB 的专家 GEMM 必须等本 MB Dispatch 输入就绪
创造重叠窗口跨相邻 MB 排序,延迟可延迟的 Wgrad
观察暴露时间Profiler 中检查 A2A 是否仍落在 Step 关键路径
理想情况下 Tcomm+compute 接近 max(Tcomm, Tcompute),但真实值还受同步、资源争用和依赖限制。
时间片只表示依赖逻辑,不对应 Megatron 某种调度的逐条 Kernel 顺序;实际实现通过合并相邻 Microbatch 的前后向执行并延迟 Wgrad 创建重叠机会。
A2A Overlap 的计算与通信依赖
MB k:本地依赖(不可交换)Router → Dispatch 完成 → Expert GEMM → Combine 完成 → 下游计算
跨 MB:可利用的独立工作MB k 的网络传输 ↔ MB k−1 的可延后 Wgrad / 其它独立计算
调度器改变的是跨 MB 的执行时机在必要的前向/反向依赖不变前提下,拆出 dgrad 与 wgrad 的部分执行窗口,并合并相邻 Microbatch 调度
串行基线:T_comm + T_compute → 理想重叠:max(T_comm, T_compute) + T_extra
为什么有效减少落在关键路径上的通信等待,而非减少 All-to-All 的必要字节。
什么时候会变慢EP group 较小、MB 数不足、Kernel 争 SM/HBM、延后梯度额外占显存、同步打断 overlap。
如何证伪只观察“两个 Stream 重叠”不够;必须同时看 exposed A2A / Step Time / HBM。
概念依赖图,非逐 Kernel 真实 Trace。0.20 参数说明:--overlap-moe-expert-parallel-comm、--delay-wgrad-compute;前者依赖 EP>1 和适当的 CUDA 连接数。0.20 MoE 文档

这一重叠需要训练调度器提供合法的计算窗口,并受到 Full Recompute、CUDA Graph 和 PP/VPP 配置约束。时间轴说明数据依赖,不对应固定的逐 Kernel 执行顺序。

0.15:HybridEP 扩展专家交换路径

MoE 通信效率与专家数量、Token 分布以及节点内外网络有关。0.15 为 Flex Dispatcher 增加 HybridEP 后端,提供另一种组织专家 Token 交换的实现。它与前面的 A2A Overlap 分别关注交换路径和执行时序。[8]

HybridEP 面向不同通信域组织 Token 交换
节点内
GPU 0↔GPU 1 / 2
通常是更高带宽、更低延迟的本地互联。
节点之间
Node A↔Node B
跨节点交换具有不同网络带宽、延迟与资源约束。
这里强调 Dispatcher 必须适应不同层次的通信开销;并不表示 HybridEP 必然按图中固定两次交换,也不保证在所有 EP 规模下都优于 DeepEP 或 NCCL 后端。[8]
DeepEP 与 HybridEP 的适用条件

Flex Dispatcher 支持不同后端。HybridEP 的官方定位包括 TMA、IBGDA、降低通信占用 SM 以及 MNNVL 支持;DeepEP 也服务于高效 Token Dispatch/Combine。选型需要核查硬件、依赖库、拓扑、CUDA Graph 和 Token 规模,而不是在名称上判断谁更快。

同一条 Dispatcher API,三次版本演进
0.12Flex Dispatcher / DeepEP确定路由 Metadata,调用专用 Dispatch / Combine 后端
0.15HybridEP 后端加入接口仍抽象为 Dispatch / Combine,后端侧组织方式不同
0.18融合 Token 重排在 HybridEP 中把 Permute/Unpermute 合入 Dispatch/Combine 路径

重要区别不在“单机 vs 多机”,而在后端的通信内核、重排融合、SM 使用、硬件特性与网络拓扑。HybridEP 以 TMA、IBGDA 和 NVLink 域支持为代表;不是所有设备或软件栈都能使用。

收益成立条件Token 重排或跨节点交换在 Step 关键路径上;后端能够使用支持的硬件/驱动。
额外代价专用编译/运行库、Buffer、内核并发和可能的模型/Shape 限制。
测量方式同样 Token 路由固定 seed,分别记录 Permute、Dispatch、Grouped GEMM、Combine、Unpermute;比较 E2E。
历史事实以 0.12、0.15、0.18 Releases 为准;实现路径按固定 Tag 阅读,不能用 main 的新接口反推早期版本。

0.15:将部分 Activation 卸载到 CPU

长序列和大模型训练需要保存反向传播所需的激活,显存不足时会限制模型或批次规模。0.15 增加通过 Transformer Engine 进行 CPU Activation Offload 的能力:将选定激活移到 CPU,在需要时再传回 GPU,以额外传输换取显存空间。[8]

Activation Offload 的显存与预取时序
HBM 占用示意(统一刻度,不代表测量 GB 数)
不卸载:激活一直保存在 GPU 显存中
权重等Activation空余
卸载后:被选中的 Activation 暂时移入主机内存
权重等其余激活空余
位置
τ1
τ2
τ3
τ4
τ5
GPU 计算
Forward A
Forward B
其他计算
等待风险
Backward A
CPU↔GPU
—
D2H: A
A 在 CPU
H2D: A
—
判断收益要同时看峰值 reserved/allocated HBM、CPU pinned memory、D2H/H2D 带宽、Backward stall 与 Step Time。
容量和时间轴按统一相对比例绘制。D2H 释放 GPU 拷贝的时机、H2D 预取和反向使用之间存在严格的生命周期依赖。
Offload 的显存收益与传输开销
T_copy ≳ bytes_D2H / BW_D2H + bytes_H2D / BW_H2D(不含调度与同步)
可能划算

GPU 显存成为硬约束;有足够计算窗口预取,D2H/H2D 没有拖慢关键路径。

可能不划算

PCIe 带宽不足、CPU pinned memory 竞争、反向开始时激活尚未回传,造成硬等待。

一个粗略例子:卸载并回传 4 GiB 激活,假定单向有效带宽 24 GiB/s,理想的两个方向传输总时长已经约 0.33s;若能被计算重叠隐藏则暴露时间更少,若拷贝并发或带宽打折则更久。

4 GiB 与 24 GiB/s 仅为算术示例,不对应任何实际 H200/2XX 测量;实际有效带宽和同步条件应通过 CUDA Timeline 取得。

0.16:Optimizer State Offloading

历史边界:0.14 已出现面向 DeepSeek-V3 FP8 场景的 Optimizer Offloading;0.16 Release 进一步列出 Optimizer State Offloading。这里讨论的是能力扩展,不是 0.16 才首次想到把优化器状态放到 CPU。

Activation Offload 面向反向传播需要保存的中间结果;Optimizer State Offloading 则把优化器状态及 Master Weights 移向 CPU 内存。这些状态通常会跨整个训练 Step 持续存在,因此降低的是另一类常驻显存压力。0.16 官方发布说明明确列出这项支持。[9]

Activation 与 Optimizer State Offload 的区别
Activation Offload
Forward 激活→CPU 暂存→Backward 取回
关注激活峰值;成本是 D2H / H2D 与同步。
Optimizer State Offload
Adam Moments / Master→CPU 内存↔更新所需数据
关注优化器及 Master 状态;成本是更新路径和数据搬运。
重计算是“多算来省显存”,Offload 是“传输来省显存”;二者都可能降低有效吞吐,需要同时记录 GPU 峰值、CPU 内存、传输量与 Step Time。
两类 Offload 的开销

Activation Offload 主要影响前向保存与反向取回的临时激活;Optimizer State Offload 影响 Optimizer Step 的状态访问,通常在参数更新阶段对主机带宽、PCIe/NVLink 和 CPU 侧内存提出不同要求。

0.16:细粒度卸载与部分 CUDA Graph

显存与执行开销常常同时出现。0.16 发布说明列出细粒度 Activation Offloading,以及用于 EP Overlap 的 Partial CUDA Graph:前者针对部分激活管理内存,后者在选定范围使用 Graph,以减少相应 CPU 调度压力。两者各有适用条件,不能简单视为同一优化。[9]

在局部控制显存与执行开销
细粒度 Activation Offload选择需要卸载的激活,在 GPU 与 CPU 内存之间转移。
Partial CUDA Graph对选定执行范围使用 Graph,并与 EP 通信重叠相关路径配合。
两种机制需要分别验证显存、通信、同步和 Graph 的组合支持;实际效果以训练作业为准。

0.16:MTP 独立 Pipeline Stage

前一阶段的 MTP 增加了额外预测计算,可能使末端 Pipeline Stage 承担更多工作。0.16 增加将 MTP 层放入独立 Pipeline Stage 的支持,为调整虚拟 Pipeline 负载提供另一种方式。[9]

为 MTP 预测路径安排独立阶段
Decoder 阶段模型主体前向 / 反向
→
MTP 独立阶段额外预测层
→
训练目标按配置计算 Loss
概念示意:实际层放置与 Loss 路径依模型和配置而定;独立阶段不会自动保证负载均衡。

此时 MTP 的演进就更清楚了:0.12 先引入训练目标,0.13 的自定义布局尚不能与它自由组合,到 0.16 才进一步提供独立 Stage 的组织能力。这里应按具体版本确认 PP/VPP、Checkpoint 和重计算的兼容范围,不应把“独立 Stage”理解为自动消除尾端负载。

通信组、A2A Overlap 和 Offload 主要优化同一训练流程内的资源使用。视觉编码器与语言模型等模块采用不同 TP/DP 布局时,还需要额外解决跨模块的数据重分布、调度和梯度回传。

0.17-0.18:多模块异构执行

复杂模型可能同时包含视觉编码器、语言模型和不同类型的计算层。这些模块对并行布局、通信和训练状态的要求不同,需要协调模块之间的数据和执行。

0.17:MIMO 多模块异构并行

不同模块可能适合不同的 TP、DP 等配置。0.17 的 MIMO 支持多模块异构并行,并包含多模块 1F1B、优化器和分布式 Checkpoint 等相关能力。[10]

MIMO Bridge 连接两种 TP/DP 布局
Vision:TP2 × DP4(8 ranks)
R0R1R2R3R4R5R6R7
示例:每个 TP 组有 2 个 Rank。假设模块输出的某个隐藏维度 H 沿 TP 分片,各 Rank 持有自己的分片及样本子集。
LLM:TP4 × DP2(同一批 8 ranks)
R0R1R2R3R4R5R6R7
示例:LLM TP 组变成 4 Rank,同一 Tensor 不能把 Vision 的 2 份分片直接当成 LLM 期望的 4 份分片。
Vision 输出全局语义 X[B,S,H];本地可能是 H/2
→
Bridge重排、通信、必要的对齐 / 映射
→
LLM 输入按模块期望形成 H/4 或其他布局
前向确认输出的逻辑 Tensor 语义和 Rank 到数据切片的映射;必要时 Gather / Scatter / All-to-All / Send-Recv 或其他原语。
反向梯度必须按前向映射的伴随路径回传至正确的 Vision 分片;否则即使前向 Shape 正确,也可能出现数值错误。
Rank 分组、隐藏维切分及 [B,S,H] 均为简化假设,不是特定 MIMO 模型的实际 Bridge 内核序列。真实视觉 Token、投影和样本分配方式以模块实现为准。
MIMO Bridge:8 Rank 的 Tensor 重分布

考虑一个 Tensor X[B=4,S=2,H=8],其中 x0~x3 各是一条样本,先只看每条样本某个 S 位置的隐藏维切片。Vision 采用 TP2×DP4,每个 DP 组负责 1 条样本;LLM 采用 TP4×DP2,每个 DP 组负责 2 条样本。两种布局使用同一批 8 个 Rank,且每 Rank 理想数据元素数量保持相同。

RankVision 本地 (每个 S 位置)Bridge 后 LLM 本地
R0x0 · h[0:4]x0,x1 · h[0:2]
R1x0 · h[4:8]x0,x1 · h[2:4]
R2x1 · h[0:4]x0,x1 · h[4:6]
R3x1 · h[4:8]x0,x1 · h[6:8]
R4x2 · h[0:4]x2,x3 · h[0:2]
R5x2 · h[4:8]x2,x3 · h[2:4]
R6x3 · h[0:4]x2,x3 · h[4:6]
R7x3 · h[4:8]x2,x3 · h[6:8]
Vision 局部:[1,2,4]Bridge:按样本与 H 重新分配LLM 局部:[2,2,2]

例如 R0 原来只持有 x0 的 h[0:4],后面需要同时持有 x0、x1 的 h[0:2];它既需把 x0 的 h[2:4] 交给其它 Rank,也需收取 x1 的 h[0:2]。对 R0~R3 来说,这相当于同一物理 Rank 集合内的一次重分布;R4~R7 类似。

反向传播必须执行这一线性重分布算子的伴随操作:把 LLM 侧的梯度切片回传/汇总到 Vision 对应的 x_i、h 区间。仅检查前向输出 Shape 正确,无法证明梯度语义正确。

收益不同子模块可以针对各自计算和显存选择 TP/DP,不强行共享全局最小公倍数式布局。
成本Bridge 通信、同步、重排缓冲区;跨模块流水线存在额外等待和显存占用。
测试对比单卡参考的逐 Token 输出/梯度;固定 B,S,H 逐 Rank 校验,再测 Bridge 时间、PP Idle 和 E2E。
示例 Rank 映射;实际 MIMO Bridge 未必采用上表的物理 Rank 顺序,也不应未经源码验证便声称唯一使用 All-to-All。

关键设计区别:布局转换不等于模型投影。Vision 到 LLM 可能先有 learned projector,改变语义/维度;Bridge 负责在分布式布局间移动同一个逻辑 Tensor。若将两者混为一谈,就无法准确计算通信量或追踪梯度。

0.17:多模块流水线调度

当一个模型包含多个子模块时,不仅要决定每个模块放在哪里,还要协调不同模块的前向、反向与跨模块通信。0.17 发布说明列出多模块 1F1B 流水线相关支持。[10]

跨模块 1F1B 的前后向调度
Encoder / VisionMB0、MB1 先后产生模态表示
Bridge / Layout跨模块重新分布、按需缓冲
LLM / Loss消费表示并计算预测目标
模块
τ1
τ2
τ3
τ4
τ5
Encoder
F0
F1
待回传
等待 g0
B0
Bridge
—
送 MB0
送 MB1
回传 g0
—
LLM
—
依赖 MB0
F0 / B0
后续 MB
—
多模块流水线关键问题是:哪个模块先空闲、跨模块缓冲区何时可释放、Backward 梯度何时可抵达上游?
只跟踪 MB0 的完整反向回路,MB1 的前向演进到 Bridge 后省略后续步骤;这是满足依赖的概念时序,不代表官方 MIMO 1F1B 的逐 Kernel 调度,也不用于计算 Bubble。

0.18:异构 TP/DP 的 MIMO Core Primitive 与 Colocated Bridge

0.17 建立了多模块异构并行的基础,0.18 进一步补齐异构 TP/DP 核心原语和共置模块间的 Bridge Communication。关键不在于“两个模块都能训练”,而在于从一个模块交出的逻辑 Tensor,能够在下一模块的 Rank 网格里保持相同语义,并且梯度能逆向回到正确的上游分片。0.19 继续把非共置执行、Encoder Prefetch 和 DDP Overlap 扩展进来,因此这一能力并非 0.18 就覆盖了所有部署形态。0.19 Release

0.17–0.19:MIMO Bridge 与非共置执行
0.17多模块 1F1B / 异构配置先把训练模块组织进同一循环,具备相关优化器和 Checkpoint 支持。
0.18Heterogeneous TP/DP Primitive + Colocated Bridge把布局转换提升为可复用的通信能力。
0.19Non-colocated End-to-End + Prefetch / DDP Overlap将模块放置扩展到非共置资源,必须处理边界状态和同步。
源码证据 A

逐版本阅读 0.17/0.18 的 pipeline_parallel/schedules.py,观察多模块调度入口与通信边界。

源码证据 B

对照 0.18 MIMO Core Primitive PR #1375/#4368 与 0.19 非共置端到端 PR #5602,跟踪 Bridge 行为。

这里只提供经发布记录确认的代码/PR 入口和检查方向,不声称已经做了完整源码 Diff 或单测复现。

0.18:GDN 支持 Packed Sequence

不同长度的样本可以通过 Packed Sequence 组织,以减少填充;但新型计算层必须理解序列边界并正确处理自身状态。0.18 增加 Gated Delta Network(GDN)的 Packed Sequence 支持。[11]

将不同样本打包后交给 GDN
样本 A / B不同长度
→
Packed Sequence保留序列边界信息
→
GDN按支持的路径处理
概念示意:Packed Sequence 支持不等同于所有 CP、PP 或 CUDA Graph 配置都兼容。

0.18:GDN 的 Context Parallel 扩展

Packed Sequence 解决的是同一批次中如何组织不同长度的样本;Context Parallel(CP) 解决的是同一条长序列如何跨设备分布。对于 Attention,跨片依赖可以从 Q/K/V 的可见范围理解;对于 GDN 这类带状态递推的层,序列分片还必须保证状态依赖的正确性,因此不能直接套用 Attention 的通信逻辑。0.18 的代码变更中包含 GDN CP 实现。[11]

GDN 的两种序列问题:边界重置与跨设备状态依赖
Packed Sequence:样本 A 与 B 不能串状态
A₁ A₂ A₃同一个样本
→
状态重置 / 隔离A 结束 ≠ B 开始
→
B₁ B₂另一独立样本
Packed 消除 Padding,但需要保留 cu_seqlens / 边界信息,避免 B 使用 A 的历史状态。
Context Parallel:同一条长序列跨设备连续
GPU0x₁…xₘ,产生边界状态
→
跨块依赖通信 / 前缀信息
→
GPU1xₘ₊₁…x₂ₘ,依赖前块
跨 CP Rank 的不是独立样本,而是同一序列的连续片段;状态依赖必须等价于未切分的计算。
概念递推:sₜ = F(sₜ₋₁, xₜ);跨片需要保持正确的 s 边界语义
该递推表示状态依赖,并非 GDN 的完整 Delta-rule 方程。实际 GDN CP 可采用并行扫描/分块表示,不能据图推断每 Token 都跨 GPU 通信。
GDN 的数值一致性

固定样本和权重,比较未 Packed 与 Packed 的有效 Token 输出及梯度;再比较 CP1 与 CP2 的分片结果,重点检查样本边界、跨片状态、Loss Mask 与梯度归约。不能仅用“训练能跑通”来确认状态依赖正确。

GDN 的跨分片状态依赖
分片 A:s₀ → s₁ → … → sₖ状态信息必须按算法语义传递分片 B:sₖ₊₁ → …

对带递推状态的层,可以抽象成 state[t+1] = F(state[t], x[t])。如果每个 CP 分片都从同一零状态独立启动,第二段往往就丢失第一段累积的信息;反向也必须处理跨段状态相关的梯度。Packed Sequence 则是反方向的约束:不同样本的状态不能错误串起来。

数值检查单卡完整序列 vs 多 CP 分片;比较有效 Token 输出、Loss 与输入/参数梯度。
边界测试把样本切在 Packed 边界与任意长序列内部,分别检查状态延续与状态重置。
性能代价额外的跨片状态协调与同步,不应仅看单个 GDN Kernel 的算力。
公式仅表达状态依赖的原则,不等同于具体 GDN 的精确更新公式或 0.18 的特定通信算法。

0.18:HybridEP 融合重排与通信

MoE Token 交换除了网络通信,还涉及数据排列。0.18 在 HybridEP 中融合 Permute / Unpermute 与 Dispatch / Combine,以减少相关步骤的额外开销。[11]

专家计算前后分别融合数据处理
Router决定专家
→
Permute + Dispatch重排并分发
→
Experts执行专家计算
→
Combine + Unpermute回收并恢复顺序
概念示意:前后两端分别融合;收益取决于后端、负载和网络。

不同模块能够在各自的并行网格中运行,Bridge 连接它们的数据流;GDN 等新层也扩展到 Packed Sequence 和 CP。模型层类型和并行布局不断增加后,层的组织方式与 Checkpoint 状态映射开始成为新的系统约束。

0.19-0.20:模型表示与状态管理

模型结构和并行布局继续变得多样,训练系统需要更灵活地描述层、组织专家负载,并管理权重和训练状态。

0.19:HybridModel 以独立层组合模型

0.19 发布新一代 HybridModel,并支持直接加载 GPTModel Checkpoint。它以独立层组织 Attention、MLP 等模型组件;早期已有 Mamba Hybrid,这里的变化是模型表示方式的进一步演进。[12][15]

GPT Block 到 Hybrid Layer 的权重与索引映射
原 GPTModel:按 Block 编号
Block 0attention + MLP
Block 1attention + MLP
等价 HybridModel:独立 Layer
L0:* Attention
L1:- MLP
L2:* Attention
L3:- MLP
Checkpoint同一组参数需要重新映射 Layer Index 和权重 Key;部分配置可直接读取 GPTModel Checkpoint,但不能假定所有模型与并行布局都无缝兼容。
Pipeline原来“1 个 GPT Block”的分层粒度变为“2 个 Hybrid Layer”;Stage 边界、重计算与 Layer Count 也要按新的层序列校验。
两层 GPT Block 对应 *-*- 是保留原架构的一种映射;真实的混合模型可插入 M/G/D/E 等其它层家族。

HybridModel 的改变不只是将一个 GPT Block 拆成两个符号。它允许将不同层家族直接排成序列,并让 Layer Index、Pipeline 边界和权重映射统一围绕该层序列描述。例如 M、G、*、D、-、E 分别表示 Mamba-2、GDN、普通 Attention、DeepSeek Sparse Attention、Dense MLP、MoE。

HybridModel 的层家族与布局模式
M · MambaG · GDN* · AttentionE · MoED · DSA- · MLP
原 GPTModel · 两层
Attn+MLP→Attn+MLP
两个 Decoder Block,对应两个原始层号。
等价的 HybridModel · 四个位置
*→-→*→-
*-*-Attention 与 MLP 各占一个 Hybrid 层位置。
新增层家族不是任意混搭都受支持:例如 0.20 迁移文档对从 GPT 权重转换为 GDN/DSA、混合 Dense/MoE 位置、含 MTP 模式等列出了限制。迁移指南

0.19 还继续增强 DeepSeek Sparse Attention(DSA) 的 CP、THD 与融合计算路径。它与 MLA、GDN 一样说明:训练框架不仅需要“知道存在某层”,还必须把该层的计算、长序列表示、PP 以及 Checkpoint 一起接入。[12]

0.20 的复杂模型结构
DeepSeek V4

0.20 Release 将其列入下一代 HybridModel 支持范围;复杂层组合成为真实模型交付要求。

mHC / Wide Residual Streams

改变残差连接和流数,需同时考虑 PP/VPP 的 Tensor 宽度、Checkpoint 与重计算。

Gated Delta Product(GDP)

引入新的层家族,不能假设所有序列层等价于 Attention。

架构边界

Wide Residual Streams 在 0.20 Release 的条件为 PP=1 且禁用 CUDA Graph;不能把 mHC 的 PP 能力直接套给它。

根据 core_v0.20.0 Model Architecture and Support;列出的是支持范围与架构意义,不代表这些功能适用于全部并行组合。0.20 Release

GPTModel 转换到 HybridModel 后,原先同一个 Block 中的 Attention 与 MLP 分属不同层号。Checkpoint 加载时不仅要映射权重 Key,还涉及 Pipeline 划分和优化器状态;仅能完成前向计算,并不能证明旧 Checkpoint 可完整恢复。

0.19:Quantile Balancing 调整专家负载

MoE 中平均 Token 数相同,也可能因个别专家过载而拖慢执行。0.19 增加 Quantile Balancing Router,以负载分位数估计调整专家偏置,试图改善路由负载分布。[12]

Quantile Balancing 的负载反馈机制
① 观察收集各 Expert 的 Token 负载统计
② 估计从负载分布计算分位数信息
③ 调整更新每个 Expert 的 Routing Bias
④ 再路由后续 Token 按新 Bias 参与选择
反馈关注的不只是均值,还要看最慢专家的尾部负载。路由偏置改变后仍需验证模型 Loss、专家使用率和 End-to-End Step Time。
Router Score(e, token) = 原路由分数 + bias(e)(仅示意作用位置)
官方 0.19 的版本记录描述为由分位数估计导出的逐专家路由偏置;这里没有虚构具体量化估计公式或更新频率。
Expert 负载的尾部不均衡

假设 4 个 Expert 接收的 Token 数为 [100,100,100,300],平均是 150,但最慢 Expert 的工作量近似由 300 决定。此时只报告均值会掩盖尾部负载。

反馈观测

从专家负载分布估计分位数,对不同专家计算调节信号。

作用路径

更新逐专家 routing bias,影响后续 Token 的专家选择概率/排序。

收益判定

对比 max/mean tokens per expert、p95/p99 负载、最慢 Rank GEMM、Step Time。

潜在副作用

Bias 更新速率过大可能造成负载振荡;负载均衡还应监测任务 loss/路由分布。

数值为简化例子;官方 0.19 机制使用负载分位数的偏置调整,不应把表中的阈值当成源码公式。

0.19:Packed-sequence MoE Dispatch

此前 DeepEP/HybridEP 解决的是专家之间的 Token 交换,但变长训练的数据可能是 Packed Sequence 的 THD 表示。0.19 扩展这两个后端,使 Dispatcher 在进行专家路由与回收时能够处理带序列边界的打包输入。其价值不只是减少 Padding,而是让变长数据布局与高性能 EP 通信路径可以一起使用。[12]

Packed Sequence 的路由与位置恢复
Padding 表示
A₁A₂PADPADB₁B₂B₃PAD
PAD Token 可增加不必要计算与路由工作,通常靠 Mask 排除无效位置。
THD Packed:Token 连续且有边界
A₁A₂B₁B₂B₃
逻辑 Token 数 T=5,配套边界索引,例如 cu_seqlens=[0,2,5],让样本 A、B 的序列语义不被混淆。
Dispatcher 要从 T 个有效 Token 中构造 Top-k 专家分配;Combine 还要把结果恢复到 Packed 原位置,不得将不同样本的状态、Loss Mask 混为一体。
序列边界数据为示例。Packed-sequence 支持改善数据布局兼容性,不代表所有 EP 后端和模型组件都自动支持每种 Packing 组合。

0.20:GTP 按需物化权重

Generalized Tensor Parallelism(GTP)通过额外的权重分片与按需物化,在显存和通信之间进行权衡。0.20 的发布说明进一步列出 GTP 的配置和模型支持;官方文档将该设计标为实验性。[13][14]

GTP:沿 Remat 轴按需物化 TP 权重切片
权重 W[O,I];示例 TP=2、GTP_remat=2 → 每 Rank 长期保存约 1/4 的权重
Column Parallel Linear
TP 沿 O 切每个 TP Rank 的矩阵先变成 [O/2, I]
Remat 再沿 O 切常驻 [O/4,I] → 临时 AG 到 [O/2,I]
Row Parallel Linear
TP 沿 I 切每个 TP Rank 的矩阵先变成 [O,I/2]
Remat 沿 O 切常驻 [O/2,I/2] → 临时 AG 到 [O,I/2]
轨道
τ1
τ2
τ3
τ4
τ5
GEMM
W0 计算
W0 计算
W1 计算
W1 计算
后续计算
Remat Comm
AG(W1)
W1 就绪
AG(W2)
W2 就绪
后续通信
理解重点:GTP_remat = 权重重新物化,不是 Activation Recompute。预取只有被前一权重计算遮住时才不增加明显暴露延迟;Backward 还要对相应权重梯度 Reduce-Scatter。
依据 GTP 设计文档给出的权重形状示例;示意时序不代表特定 CUDA Graph 下逐 Kernel 顺序。GTP 属实验性能力,要求相应 Transformer Engine 版本。
GTP 的异步预取与暴露通信
计算
GEMM(W₀)
GEMM(W₁)
GEMM(W₂)
GTP_remat 传输
AG(W₁)
AG(W₂)
AG(W₃)

先持有 1/(TP×GTP_remat) 的常驻权重;执行 GEMM(Wᵢ) 前,在 GTP_remat 组重建当前所需的 TP 切片,而不是重建完整未切分权重。理想情况下 AG(Wᵢ₊₁) 与 GEMM(Wᵢ) 并行。反向则需要相应的权重物化与梯度 Reduce-Scatter。

单权重等待 ≈ max(0, T_AG(next) − 可用的 GEMM 重叠窗口) + 同步/争用
为什么省显存常驻权重、相关梯度与状态按 GTP_remat 继续分片;复用的物化 Buffer 临时存放当前 TP 切片。
为什么可能更慢GEMM 较短、网络较慢、参数使用顺序动态变化或 Buffer 争用,都会使 AG 暴露;首个 AG 通常无法被前一层隐藏。
源码检查0.20 generalized_tensor_parallelism.py 中关注 GTPShardedParam、all_gather_and_prefetch、wgrad_reduce_scatter;TE 扩展负责对接 Linear。
时间轴表达“一步提前预取”而非比例真实的 GPU Trace。GTP 的 remat 是权重物化,与 Activation Recompute 不同;实验能力需核对所用 TE 版本。

0.20:Megatron-FSDP v2 管理分片状态

训练状态包括参数、梯度与优化器状态。0.20 增加实验性的 Megatron-FSDP v2 适配器和 Hybrid Sharding 支持,可针对互联域以及 Dense / MoE 部分配置不同的分片策略。[13]

GTP 与 Megatron-FSDP v2 的分片域
GTP:模型权重并行轴
TP 切片GEMM 仍分片
→
GTP_remat逐权重异步 AG/RS
重点:在 TP 局部权重上继续划分 remat 轴;能利用 Megatron 已有 DDP/DistOpt。不是普通 DP 组的整层参数聚合。
Megatron-FSDP v2:数据并行状态轴
DP 组参数分片参数/梯度/优化器状态
→
参数使用生命周期按配置 Gather / Reduce
重点:可以按互联域与 Dense/MoE 模块设置不同 Sharding 策略;0.20 适配器仍有 TP=1、Expert TP=1 的限制。
比较维度GTP_rematMegatron-FSDP v2
关键分片域TP 权重的额外模型并行轴DP / Hybrid DP 的训练状态轴
临时物化单权重 TP 切片按 FSDP 策略使用的参数
主要验证权重预取、AG/RS 暴露与 Loss 对齐生命周期、参数同步、Checkpoint 兼容
概念比较。两者不是在所有配置下的直接替代品;0.20 的 Megatron-FSDP v2 适配器为实验性,Optimizer Checkpoint 暂不覆盖 EP 布局。
GTP 与 Hybrid-FSDP 的通信时机
GTP_remat

相对于 TP 正交的权重子轴:每个 TP 切片继续分片,GEMM 前只还原该 TP 切片。

FSDP / Hybrid-FSDP

以数据并行分片参数、梯度、优化器,并区分 DP-Inner / DP-Outer(如机内与机间)两种通信域。

通信代价

GTP 的 AG/RS 主要随权重使用时机发生;FSDP 可在参数生命周期和更新时机上调整多级通信。

0.20 明确限制

实验性 Megatron-FSDP v2 适配器要求 TP=1 且 Expert TP=1;优化器 Checkpoint 暂不支持 EP 布局。

如果计算已经被 TP 切得很细,GTP 的额外权重 AG 可能难以隐藏;如果网络存在跨机高延迟,Hybrid-FSDP 的分级通信策略也并非零开销。比较时应固定 GPU 数、TP/DP 语义、有效 Batch 与模型状态,避免因为改变并行布局而偷换实验条件。

结合 0.20 Release、0.20 FSDP 用户指南和 GTP 文档;“GTP vs FSDP”是不同分片组织的对比,不代表两者始终互斥。FSDP 0.20 文档

0.20:DeepEP v2、Fused GDN 与 MTP-only Training

0.20 中,MoE 的 Flex Dispatcher 增加了实验性的 DeepEP v2 后端,GDN 的部分前处理与核心计算得到融合实现;MTP 支持冻结主模型、单独训练预测头。GTP 也扩展到 Batch/Sequence Partitioning、部分投影层切分和 MTP 组合。这些功能继续扩展既有执行路径,适用范围仍由具体后端与并行配置决定。

0.20:训练观测与 Checkpoint

模型和并行组合增多后,除了能够执行,还需要定位慢在哪里、训练中断后能否恢复。0.20 引入可选的 OpenTelemetry 训练观测,并在已有 Distributed Checkpoint 基础上继续完善模型和分片状态管理。Checkpoint 本身并不是这一版本首次支持的能力。[13]

记录执行状态并验证恢复路径
训练执行Step / 通信 / 状态
→
观测与保存Trace / Metrics / Checkpoint
→
恢复与验证加载并继续训练
Checkpoint 跨布局恢复与状态类型有关;应分别验证支持范围和恢复后的训练行为。

分布式 Checkpoint 的重要性,不只是“保存成功”,而是能否正确恢复同一次训练:加载后的模型权重、优化器、随机数状态和数据进度都可能影响后续 Loss。对于混合层、GTP 或 FSDP v2 这些复杂布局,应分别验证同布局恢复与跨布局 Reshard,并区分权重可加载和 Bitwise Determinism 两个不同目标。

HybridModel 将模型组件组织为独立层,Quantile Balancing 调节专家路由,GTP 与 Megatron-FSDP v2 则从不同分片域管理训练状态。它们分别改变模型表示、负载分配和参数生命周期,而不是一组具有共同加速倍数的优化开关。

回看 0.8–0.20:模型、并行与训练状态

0.8 已经能够训练 MoE、Mamba Hybrid 和初步的多模态模型。后续变化并不是从 Dense 训练突然跨入混合模型,而是在既有分布式并行基础上,逐步适配不同模块的计算路径、并行域与数据表示。0.10 的 MoE Parallel Folding 是一个具体例子:Attention 与 Experts 可以使用不同的逻辑通信组,而不必共享完全一致的并行切分。[1][3]

模型结构逐渐复杂后,训练效率开始更多地受到数据搬运和执行顺序影响。DeepEP 处理专家间的 Token 往返,自定义 Pipeline Layout 调整层的放置;随后 A2A Overlap、HybridEP、Offload 和通信组抽象进一步改变通信、计算与显存的组织方式。它们都可能优化训练 Step 的一部分,但瓶颈不同,收益也取决于模型、负载与硬件拓扑。[5][7][8]

从相对规则的执行骨架,到更灵活的训练系统
相对规则的组织方式
相似的 Transformer Block
相对统一的并行布局
相对固定的执行路径
→
需要进一步表达与协调的对象
不同层类型与模块
不同并行域、模块桥接与灵活布局
通信重叠、权重物化与状态恢复
这是对架构演进的概念归纳,不表示早期版本没有 MoE 或多模态支持,也不表示新版本的所有功能组合均已兼容。

0.17–0.18 的 MIMO 将这种差异扩展到多个模块之间:Vision Encoder 和语言模型可以采用不同的并行布局,再通过 Bridge 交换数据与梯度。0.19 的 HybridModel 进一步调整层的表示形式,0.20 的 GTP 与 Megatron-FSDP v2 则从不同分片域管理权重和训练状态。其共同难点不再只是把模型切到更多设备上,而是让层、进程组、调度和参数生命周期在同一次训练中保持一致。[10][12][13]

参考资料

[1] NVIDIA. Megatron Core 0.8.0 发布说明.

Mamba-2、LLaVA 与 MoE + CP。

[2] NVIDIA. Megatron Core 0.9.0 发布说明.

非均匀 Pipeline 与多模态支持。

[3] NVIDIA. Megatron Core 0.10.0 发布说明.

MLA、MoE Parallel Folding 与 NVLM,展示模型组件与并行域的差异化扩展。

[4] NVIDIA. Megatron Core 0.11.0 发布说明.

DeepSeek-V3 微调与专家路由。

[5] NVIDIA. Megatron Core 0.12.0 发布说明.

DeepEP、MTP 与 MoE CUDA Graph。

[6] NVIDIA. Megatron Core 0.13.0 发布说明.

自定义 Pipeline Layout 与版本限制。

[7] NVIDIA. Megatron Core 0.14.0 发布说明.

ModelCommProcessGroup、HyperCommGrid 与 Expert Parallel A2A Overlap。

[8] NVIDIA. Megatron Core 0.15.0 发布说明.

HybridEP 与 CPU Activation Offload。

[9] NVIDIA. Megatron Core 0.16.0 发布说明.

Optimizer State Offloading、细粒度 Activation Offload、Partial CUDA Graph 与独立 MTP Stage。

[10] NVIDIA. Megatron Core 0.17.0 发布说明.

MIMO 异构并行与多模块流水线。

[11] NVIDIA. Megatron Core 0.18.0 发布说明.

GDN Packed Sequence、GDN CP 代码支持与 HybridEP 融合。

[12] NVIDIA. Megatron Core 0.19.0 发布说明.

HybridModel、Quantile Balancing、THD Packed-sequence MoE Dispatch 与 DSA。

[13] NVIDIA. Megatron Core 0.20.0 发布说明.

GTP、Megatron-FSDP v2 与训练观测。

[14] NVIDIA. Generalized Tensor Parallelism(GTP).

GTP 的 TP × GTP_remat 分片、逐权重预取/物化与 FSDP 差异。

[15] NVIDIA. 从 GPTModel 迁移到 HybridModel.

层表示和 Checkpoint 迁移。

[16] NVIDIA. MoE Parallel Folding.

Attention 与 MoE 的并行映射。

[17] NVIDIA. Custom Pipeline Layout 文档.

布局语法、虚拟 Stage 和初期实验性接口。

[18] NVIDIA. HyperCommGrid API.

N 维进程组的具名维度与显式创建方式。此链接是现行 API,历史版本以 0.14 Release 为准。

[19] NVIDIA. Gated Delta Net Context Parallel PR #2642.

0.18 合入记录中的 GDN CP 实现。

[20] NVIDIA. MoE 通信优化与 A2A Overlap.

跨微批次重叠、延后 Wgrad 和相关开关。

[21] NVIDIA. Multi-Token Prediction(0.20 文档)

原始来源 · 逐深度目标、共享 Embedding / Output Head 与 MTP Loss;版本级兼容说明。

[22] NVIDIA. MoE Feature Guide

原始来源 · Dispatcher 后端差异、A2A Overlap 的依赖与性能调优。

[23] NVIDIA. Megatron Core v0.19.0 Release

原始来源 · Packed EP Dispatch、Quantile Balancing、MIMO 非共置执行。

[24] NVIDIA. Megatron Core v0.20.0 Release

原始来源 · GTP、FSDP v2、Fused GDN、DeepEP v2、MTP-only 的版本锚点。