00 NINE LEDGERS
训练系统的核心:把等待、容量和数据移动分别记账
“模型放不下”可能是参数、Adam 状态、激活或临时通信 buffer;“扩展效率低”可能是 GEMM 太小、 网络太慢、最忙专家拖尾或 pipeline 没填满。只有先拆账,才知道优化是在消灭成本,还是把它搬到另一层。
参数、梯度、master weights、optimizer states 各占多少?
Backward 需要的中间量留在 HBM、重算、压缩还是卸载?
切 batch、矩阵、layer、expert 还是 sequence?
哪些 GPU 在等依赖,哪些计算可以挪进空隙?
搬多少字节、调用多频繁、走哪一级网络?
动态路由怎样变成两次 All-to-All 与最慢 rank?
Q/K/V、KV cache 或 recurrent state 怎样跨 rank?
存储、GEMM、累加、归约和更新各用什么精度?
checkpoint、rollout、KV、沙箱和故障怎样恢复?
气泡、长尾、故障恢复、环境等待
NVLink、IB/RoCE、PCIe、存储 I/O
HBM、CPU DRAM、remote GPU、NVMe
Tensor Core、CUDA Core、kernel launch
GPU 算力是厨师;HBM 是手边案台;跨卡网络是传菜通道;pipeline bubble 是厨师在等上一道工序。 增加厨师,如果案台太小、传菜口拥堵或订单全堵在某个专家窗口,仍然不会线性提速。
01 ONE TRAINING STEP
先看一步训练,所有系统优化才有落点
一个同步训练 step 并不是一次“模型运行”。它包含数据进入、forward、保存或处理 activation、 backward、梯度聚合、optimizer update,以及下一步开始前必须完成的同步。不同状态只在特定时间被需要。
读入并 pack Token / 图像 / 视频
storage → CPU → GPU按 layer 产生 activation 与 loss
parameter + compute逆序消费 activation,产生 gradient
recompute / prefetch跨 replica 聚合或分片 gradient
collective用 optimizer states 更新参数
master weights“不是什么状态都要一直在 GPU”
如果一个状态当前不需要,就不必在每张 GPU 上完整常驻。区别在于:ZeRO 把状态放到其他 rank, checkpointing 把中间量变成未来的重计算,offload 则把它放到更慢的存储层。
02 MODEL-STATE MEMORY
“BF16 参数 2P bytes”只是训练账单的第一行
ZeRO用 FP16/FP32 mixed-precision Adam 说明:前反向权重和梯度各 2 字节,更新还保留 FP32 master parameter、 momentum 与 variance,各 4 字节。于是基线是 16P,而不是 2P。
Forward / backward 当前使用的权重
未分片的 gradient buffer
优化器更新的高精度副本
Adam momentum
Adam variance
只属于这套 mixed-precision Adam 配方
这条式子依赖具体 dtype 与状态实现。BF16 gradient、FP32 accumulation、EMA、FP8 scale、flat buffer、 Muon state 或 fused optimizer 都会改变账单。正确做法是逐张量列 byte ledger。
ZeRO:沿数据并行轴逐步取消复制
DP
全部复制16P每步 gradient AllReduce
ZeRO-1
切 optimizer4P + 12P/NReduce/更新后 AllGather
ZeRO-2
再切 gradient2P + 14P/NReduceScatter + AllGather
ZeRO-3
再切 parameter16P/N每层参数 gather,梯度 scatter
ZeRO 论文把 ReduceScatter 与 AllGather 各近似为 P 的数据移动,所以普通 DP 与 ZeRO-2 都约为 2P, ZeRO-3 约为 3P。严格 ring 每 rank 的单向发送量还要乘 `(N−1)/N`。不同口径不能直接相除。
03 ACTIVATION LIFECYCLE
参数按模型大小增长,激活按 batch × sequence × hidden × layers 增长
增大 DP 只切 batch,不会切开一个超长样本的 activation。标准注意力如果显式保存 `S×S` matrix, 还会出现平方级中间量。因而 7B 长上下文训练可能比更大参数的短上下文配置更早撞上 HBM。
留在 GPU
Forward 后原样保留,Backward 直接读取。速度最直接,容量最昂贵。
新账单:HBM丢掉再重算
只留 checkpoint;Backward 前重跑部分 forward。省容量,增加 FLOPs。
新账单:额外 forward压成低精度
以 FP8 或其他表示保存,使用前恢复。省字节,引入 scale、cast 与精度验证。
新账单:数值风险搬到别处
放进 CPU、远端 GPU 或 NVMe;Backward 前预取并尽量与计算重叠。
新账单:PCIe / RDMA / I/OBackward 直接读取;activation memory 随层数线性增长。
只留边界 checkpoint;Backward 经过某段时重跑该段 forward。
关键论文怎样逐步把重计算变细
分段 checkpoint 把 n 层 feature-map memory 从 O(n) 降到 O(√n);递归可继续换内存。
优先重算 memory-heavy、compute-light 中间量,并用 Megatron SP 分片原本复制的 element-wise activation。
用 SRAM tiling 与 online softmax 避免把完整 S×S attention matrix 写回 HBM;dense attention FLOPs 仍是平方级。
把 recompute、FP8、local / remote offload 变成 tensor 粒度的可组合 storage policy。
04 PARALLEL AXES
五种并行,切的是五个不同对象
如果只背缩写,很容易把“更多 GPU”误解成同一种扩展。判断任何配置时,先问: 每张 GPU 持有什么、每次通信发生在哪个频率、哪个维度真的独立。
切 batch
每卡完整模型;每 optimizer step 同步 gradient。
低频大 collective切一层矩阵
同一 layer 的 GEMM 与 heads 分到多卡。
每层高频 collective切 layer 深度
相邻 stage 传 activation 与 gradient。
P2P + bubble切 routed experts
Token 去往远端 expert,再把输出送回。
每 MoE 层 2× A2A切一条长序列
多卡共同完成同一样本的 attention / recurrent state。
A2A 或 P2P ring只有互相正交的 device-mesh axes 才连乘。Megatron SP 与 TP 共组;EP 常只作用于 MoE layer; dense attention、shared expert 和 context group 还可能用另一套 process groups。先画 rank membership。
05 COLLECTIVE COMMUNICATION
通信量必须同时写:消息大小、rank 口径、算法和调用频率
小消息、同步、协议与 kernel launch 更敏感。
大 tensor 搬运由链路吞吐主导。
只减关键路径时间,不减物理传输字节。
为什么相同字节数也可能完全不同
消息大,但能被一整个 batch 的计算摊薄。
高频,强依赖节点内低延迟高带宽。
点对点;stage 越多,消息与 bubble 越复杂。
All-to-All;payload 与 top-k、路由宽度和负载相关。
06 PIPELINE BUBBLES
流水线不改变模型数学,只改变谁在什么时候做哪一段
理想平衡 stage、忽略通信。
m 个 micro-batches 的有效计算。
GPipe / non-interleaved flush 的简化式。
PipeDream / GPipe
Micro-batch 让多个 stage 同时工作;GPipe 保持同步语义,PipeDream 探索异步 1F1B。
留下的债:flush bubble、activation residency、weight version。Interleaved 1F1B / Chimera
virtual chunks 缩短 bubble 单元;双向 pipeline 从两端注入工作。
留下的债:更多消息、更多调度约束,stage 划分仍需平衡。Zero Bubble
把 backward 拆成 input-gradient 与 weight-gradient,用可延后的 W 填空隙。
留下的债:能否零气泡取决于 F/B/W 比例、内存和 optimizer sync。DeepSeek DualPipe
双向 pipeline 配对 F/B,并把 MoE A2A 与 compute 重排、重叠。
留下的债:两份参数;只有被覆盖的通信才不暴露在关键路径。K2 / K3 的不同取舍
K2 选择省状态的 interleaved 1F1B;K3 继续把 ViT、offload 与 gradient reduce 填进不同相位。
留下的债:最佳 schedule 由模型容量、MoE 比例和多模态负载共同决定。两部分绑成一个调度单元,必须一起完成。
先让前一 stage 继续反传,再把 W 放进之后的空隙。
“近零 All-to-All 开销”不是“没有 All-to-All”
V3 把 forward/backward chunk 拆成 attention、dispatch、MLP、combine,再把 input-grad / weight-grad 分开; 双向注入 micro-batches,并手动划分通信与计算使用的 SM。通信字节仍真实经过 IB/NVLink, 只是多数传输在该配置下被相邻计算覆盖,不再暴露在关键路径。
边界:DualPipe 需要两份参数,并比表中的 1F1B 多一个 stage-normalized activation 单位。07 EXPERT PARALLEL
MoE 省的是每 Token 计算,不会自动省通信与等待
逻辑 payload 近似随 `tokens × top-k × routed width × bytes` 增长;但 end-to-end time 还受 capacity、 padding、路由 metadata、跨节点比例和最忙 rank makespan 影响。MoE 专题已详细解释模型路由,本章只聚焦执行系统。
路由、自动分片与跨设备 expert execution 成为一体。
不同专家数、capacity、硬件下切换执行策略。
不靠固定 capacity padding / dropping,但真实不均衡工作仍存在。
高吞吐与低延迟 kernel;不单独保证每 rank token load 相同。
MoonEP:先给 rank 级完美均衡一个上界保证
每 rank 本地 S Tokens,每 Token 选择 K experts。
remote tokens 最多来自一个 source rank。
每个 source rank 本地最多 E/R experts。
固定 buffer,消除逐层 shape host sync。
每 rank 总 assignments 相同以后,rank 内不同 experts 仍可一多一少。K3 还需要 workload-aware scheduler 平衡 SM makespan。MoonEP 的 `S×K` vs DeepEP `S×K×R` 也只适用于报告定义的 worst-case copy-free buffer 对照。
08 CONTEXT PARALLEL
长序列并行不是一种算法,而是一组不同的数据布局
把 sequence shard 转成 head shard;attention 后再转回来。
K/V0Q1
K/V1Q2
K/V2Q3
K/V3
每 rank 固定本地 Q,在线累积对全局 K/V 的精确 softmax。
KDA 是 recurrent linear attention:每 rank 从本地 Token 计算 fixed-size transition/state fragments, 一次 AllGather 后用 prefix scan 恢复 incoming state。它不搬完整历史 KV,但只覆盖 KDA 分支; K3 的 MLA 与视觉 encoder 仍有各自 CP。
09 NUMERICS & OPTIMIZER
低精度训练要分别回答:存什么、算什么、在哪里累加
权重与 activation 占多少 HBM。
Tensor Core 使用何种格式。
大量乘加与 reduction 是否丢失小量。
优化器状态和参数更新精度。
FP8 compute framework
主要 compute-intensive GEMM 使用 FP8;敏感操作保留更高精度;tile/block scaling 管动态范围; WGrad FP8 也让相关 activation 可按 FP8 保存。
FP8 activation storage
部分 MoE / SwiGLU 输入压成 FP8-E4M3,scale 为 FP32;K2 明确没有用 FP8 compute, 因为前期研究观察到潜在性能退化风险。
Muon 改写通信图
Newton–Schulz orthogonalization 需要完整矩阵;K3 不全量 AllGather,而让 owner rank P2P 获取自己更新所需 shards,并按 model chunk pipeline。
10 DEEPSEEK SYSTEMS LINEAGE
DeepSeek 的亮点不是单个 kernel,而是模型、路由、调度与网络共同设计
少 activated parameters + 重计算使其不需 TP;shared expert compute 与 A2A overlap。
DualPipe、node-limited routing、cross-node A2A kernels 与 FP8 协同。
CP 传输对象扩展为压缩/稀疏 attention 与 recurrent state,不能套标准 MHA 单式。
V3 的四层闭环
少 activated parameters;但跨节点 expert traffic 重。
限制 IB fan-out,再在节点内经 NVLink 转发。
warp specialization 与动态任务分配;这是报告集群的实测配置。
把 A2A 与 attention / MLP / backward 重排进同一时间轴。
V3 借助大 EP、ZeRO-1、selective recomputation 与 FP8 把状态放下,避免高频 TP 通信。 换硬件、batch、专家布局或上下文长度后,最优并行配置可能改变。
11 KIMI SYSTEMS LINEAGE
K2 → K3:从“稳定复用一套并行配置”走向统一执行与存储系统
选择 interleaved 1F1B
不采用 DualPipe:两份 parameter+gradient 会迫使 PP/EP 扩大;用更多 warmup 和 WGrad overlap 代替。
DEP 解耦 ViT
视觉 forward 全局均衡、只留输出;backbone 完成后重算 ViT 并 backward。
重构执行与存储层
MoonEP、统一 activation manager、Pipeline ZeRO-2、remote activation、P2P Muon 与 external KV pool。
K2 为什么主动不采用 DualPipe
K2 是 1T total-parameter MoE。报告指出,DualPipe 的额外状态会迫使系统增加 PP 或 EP: 更大 PP 增加 bubble,更大 EP 提高通信与负载成本。因此团队保留 16 PP / 16 EP / ZeRO-1, 用更多 warmup micro-batches 覆盖 EP communication,并让 WGrad 与 PP communication 并行。
K3 3T-class 预训练执行图
在线冗余 expert 规划 → rank perfect balance → static shape
recompute + block FP8 + local/remote offload
GPU double buffer → DP reduce → CPU shards
只取 locally owned matrices 的远端 shards
大图切 patch;大部分 ViT compute 放入 text PP 空隙
12 INTERACTIVE LAB
亲手改变配置,看瓶颈怎样从一张账移动到另一张账
推荐依次尝试:在显存账中把 70B 切到 ZeRO-3;在 device mesh 选择“故意冲突”; 在 pipeline 中比较 1F1B 与 DualPipe 的参数副本;最后把通信 overlap 拉到 95%,观察 bytes 不变、exposed time 下降。
INTERACTIVE / TRAINING SYSTEMS LAB
每次“省下来”,都要问成本被搬去了哪里
四个实验都是确定性教学模型,不是任何厂商集群 benchmark。它们分别核算容量、设备分组、气泡和通信, 刻意不压成一个容易误导的“系统总分”。
MEMORY LEDGER
“BF16 参数只要 2P”为什么还会 OOM?
先把 total parameters 经模型并行折算成每个 DP replica 的近似 shard,再按 ZeRO 阶段切 optimizer、 gradient 和 parameter。MoE 的 shared/dense 路径并不均匀,故这里的 model-shard factor 只是容量规划近似。
FP16 参数 + FP16 梯度 + FP32 master / momentum / variance;不含临时 buffer。
可以放入 80 GB HBM,并留有运行缓冲。
长期驻留或按层 gather
ZeRO-2 reduce-scatter
FP32 三份状态
重计算与卸载之后
需要在 backward 前取回
ZeRO 论文体积口径近似
卸载让 HBM 变小,却把 PCIe / RDMA 带宽和 prefetch 时机加入关键路径。
PARALLEL MESH
先定义哪些轴正交,再谈并行度连乘
三种 group semantics 分开演示 dense PTD-P、MoE PP×EP×DP 和长上下文 TP×PP×CP×DP。 这比把五种缩写无条件相乘更接近真实训练配置。
可用 8 nodes × 8 GPU = 64 GPU,网格完整。
每层每 micro-batch 的高频 AllReduce,优先留在 NVLink 域。
相邻 stage 传 activation / gradient,可跨节点但会产生 bubble。
每 optimizer step 聚合 gradient,频率低于 TP。
同一个 rank 属于多个 communication groups;“组重叠”不表示这些 group 都是独立 mesh 乘数。
PIPELINE SCHEDULER
同一组 layer,换时间顺序就会改变气泡与峰值激活
时间轴按等时 slot 简化,只用于展示依赖关系。真实 stage 的 attention、MLP、dispatch、通信和 ViT 时间并不相等;DualPipe 还需要两份参数,ZeroBubble 则依赖 weight-gradient 能否延后。
理想等时 slot 教学估算
空闲时间相对有效计算
每 stage 的近似上界
DualPipe 为 2×
增加 micro-batches 能摊薄气泡,但 global batch、激活与优化器语义也会一起变化。
COMMUNICATION & EXPERT DISPATCH
字节没有消失,只可能被切分、重排或藏到计算后面
左侧先用 ring 体积和 α–β 模型估 collective;右侧再把 MoE 的 dispatch / combine 与 rank imbalance 分开。网络时间是可解释估算,不含拥塞、协议效率和 kernel contention。
为不可预知目的地预留 `S×K×R` 路径;最忙 rank 决定 makespan。
`S×K` fixed buffer;每 rank 冗余 expert slots 上界为 E/R = 4。
因此 K3 还需要 workload-aware expert-GEMM scheduler;static rank shape 不是所有 kernel 自动同速。
13 MILLION-TOKEN AGENTIC RL
到 Agentic RL,训练系统还要管理 KV、环境和跨迭代长尾
Policy update;model、optimizer 与 gradient 占 GPU/CPU。
训练布局转成 inference layout;K2 用 checkpoint engine。
百万 Token KV、tool latency、partial trajectory 与 sandbox。
Reference / judge forward;权重可能无法常驻 GPU。
K3 的三次“生命周期复用”
active decode blocks 留在 GPU;idle reusable prefix 才进入 external pool,KDA state 与 MLA KV 一起管理。
一个 VPP slot 当前 forward,另一个 prefetch 下一 chunk;真实 backward 前再被 gradient 覆盖。
AgentENV 用 Firecracker microVM,支持 incremental checkpoint、resume、fork 与 snapshot。
报告最低延迟
报告最低延迟
真实 workload 报告
K3 训练与评估累计
系统数字高度依赖镜像、内存 dirty rate、存储层和并发形态。课程保留原始口径,不把最小延迟或最高 overcommit 外推到其他环境。
14 CONFIGURATION PLAYBOOK
没有“最好并行策略”,只有当前最先触顶的约束
先算精确 byte ledger;考虑 ZeRO/FSDP、TP/PP/EP 或 optimizer offload。
减 micro-batch;selective recompute、FlashAttention、SP/CP、压缩或 offload。
检查 GEMM shape、kernel fusion、micro-batch、低精度和 launch overhead。
先定位 collective、频率和拓扑;再谈减少体积、换 group、chunk 或 overlap。
增加 m、virtual chunks、B/W split 或双向 schedule,同时重算 activation 与参数副本。
分开 router balance、rank placement、redundant experts 与 rank 内 GEMM scheduling。
按 attention 类型选择 Ulysses、Ring、USP 或 recurrent-state CP;不要只增 DP。
计算 checkpoint 恢复时间、数据确定性、world-size reshard 与环境状态恢复。
每项优化都要写两句话:它省了什么;它把代价搬到了哪里。
↳ PRIMARY-SOURCE CHAIN
从分布式深度学习到 K3:37 个一手阅读节点
这不是按引用数排序的“必读榜”,而是一条问题链。建议先读带有当前瓶颈的节点: 容量读 ZeRO;层内切分读 Megatron;气泡读 GPipe / ZeroBubble;MoE 执行读 MegaBlocks / DeepEP / MoonEP; 长序列读 Ulysses / Ring / USP;最后回到 DeepSeek 与 Kimi 的整机协同。
DistBelief 与参数服务器。
02One Weird Trick for Parallelizing CNNs数据/模型并行直觉。
03Training Deep Nets with Sublinear Memory Costactivation checkpointing。
04Mixed Precision Trainingmaster weights、loss scaling、FP32 accumulation。
05PipeDream1F1B、异步 pipeline 与 weight stashing。
06Mesh-TensorFlowlayout 到 device mesh。
07GPipe同步 micro-batch pipeline。
08Megatron-LMTransformer tensor parallel。
09ZeRO模型状态三阶段分片。
10GShardMoE expert parallel 与自动分片。
113D Megatron-LMTP + PP + DP 与 interleaved schedule。
12ZeRO-InfinityGPU / CPU / NVMe 异构内存。
13GSPMDgeneral sharding propagation。
14Chimerabidirectional pipeline。
15DeepSpeed-MoE多轴 MoE 系统。
16Alpa自动 inter/intra-operator parallelism。
17Reducing Activation RecomputationMegatron SP 与 selective recompute。
18FlashAttentionIO-aware exact attention。
19Tuteladaptive MoE system。
20MegaBlocksdropless block-sparse MoE。
21PyTorch FSDPfully sharded 实现经验。
22FlashAttention-2attention work partition。
23DeepSpeed-Ulyssessequence ↔ head All-to-All。
24Ring Attentionblockwise P2P context parallel。
25Zero Bubble Pipeline ParallelismB/W 拆分与 schedule search。
26MegaScale10K+ GPU 训练与可靠性。
27DeepSeek-V2zero-bubble PP + EP + ZeRO-1。
28USPUlysses × Ring 二维 SP。
29DeepSeek-V3DualPipe、A2A、FP8。
30DeepEPexpert dispatch / combine kernels。
31Kimi K21T MoE 与 co-located RL。
32Kimi K2.5DEP 与 100K agent tasks。
33DeepSeek-V4百万 Token 系统约束。
34Kimi K32.8T pretraining + 1M agentic RL。
35MoonEP完美 rank balance 与 static shape。
36AgentENVresumable microVM agent environments。
37K2 Checkpoint Enginetrain / inference resharding。
本页机制和数字回查论文、官方技术报告或作者仓库;图均为课程原创简化示意。 性能提升只属于论文的模型、集群和基线,不作跨系统排行榜。