SICI · 蕴灵宗 · 第十八章 · 元婴三层

分布式训练 · 元婴三层

你以为分布式训练就是堆 GPU。可在万核阵列前,真正的战场在卡与卡之间——每多一块 GPU,梯度同步的通信开销就吞掉一截算力。通信瓶颈在链路里立赌:你以为加卡就能线性加速,我赌你加到第八块就饱和。

通信瓶颈低语:「你觉得堆 GPU 就行?随便猜。你说分布式训练最大的瓶颈是什么?」
序章

并行之门

瓶颈之赌 · 核心挑战四选 · 分布式训练全景

并行之门的门楣上刻着八个字:万核齐发,须归于一。门内是一片算力阵列——成千上万块 GPU 排成方阵,每块卡都亮着绿灯。阵列中央横着一道暗蓝色的光带,像一条拥堵的公路。高斯老祖站在光带边,手里只有一块黑板,上面写着:加卡不等于加速。

部署之台,模型部署到边缘设备
高斯老祖 高斯老祖

「左边是算力,右边是通信。你站在光带上——告诉我,分布式训练最大的瓶颈是什么?先猜,猜错了也没关系,通信瓶颈会记账。」

通信瓶颈 通信瓶颈

「又来了一个想堆卡的。打个赌——你觉得分布式训练最大的瓶颈是什么?你每猜错一次,链路堵一分,我都记下来。」

瓶颈之赌 · 分布式训练瓶颈预测挑战器

反直觉下注(四选一,可连错)→ 挑战展开 → 分布式训练全景图拼合

通信瓶颈逼你下注:分布式训练最大的瓶颈是什么?逐个点击。
第一幕 · 自信→崩塌 前奏

数据并行 · 最简之道

完整模型复制 · 不同数据 batch · 梯度 AllReduce

光带尽头是一排 GPU,每块卡上都刻着同一个模型。高斯老祖递给你一沓数据卡:「数据并行最简单——每块 GPU 拿一份完整模型,处理不同的数据 batch。前向各算各的,反向各算各的,但梯度必须同步。你拖动 GPU 数,看流程怎么走。」

高斯老祖 高斯老祖

「数据并行的关键在梯度同步——每块 GPU 算完自己的梯度后,必须把梯度 AllReduce 到所有卡上,保证参数一致。前向和反向是并行的,但梯度同步是串行的瓶颈。GPU 越多,同步的梯度越大,通信越久。」

通信瓶颈 通信瓶颈

「你以为复制模型就行?八块卡各算各的梯度,最后还得 AllReduce 同步——这一步走的是我的路。卡越多,我吃得越饱。」

数据并行可视化器 · N 卡复制 + 前向反向 + AllReduce

拖 GPU 数看复制模型 → 切换流程步骤看前向/反向/AllReduce/更新 → 并行天平记录

N 卡复制 · 各持完整模型

训练流程 · 前向 → 反向 → AllReduce → 更新

N=4
第一幕 · 自信→崩塌 前奏

Ring AllReduce · 环形通信

环形拓扑 · 梯度分片传递 · O(N) 复杂度

GPU 排成一圈,首尾相连成环。高斯老祖:「朴素 AllReduce 是全互联——N 块卡两两通信,通信量 O(N²)。Ring AllReduce 把梯度切成 N 片,沿环形接力传递,每块卡只跟左右邻居说话,通信量降到 O(N)。你拖动环大小,看分片怎么跑。」

高斯老祖 高斯老祖

「Ring AllReduce 分两阶段:Reduce-Scatter 让每块卡汇总一个分片,All-Gather 把汇总结果广播给所有卡。每阶段 N-1 步,每步传一个分片。通信量 = 2(N-1)/N × 梯度大小——接近 2 倍梯度,与 N 几乎无关。这就是 O(N) 的魔法。」

通信瓶颈 通信瓶颈

「环形?你以为绕圈就快了?是快了点——但你卡再多,通信量也不会消失,只是不再爆炸。我退一步,没退完。」

Ring AllReduce 动画器 · 环形 + 分片 + 复杂度对比

拖环大小 N 看环形拓扑 → 切换 Reduce-Scatter/All-Gather 看分片流动 → O(N) vs O(N²) 曲线

环形拓扑 · N 卡接力传递分片

N=4

通信复杂度 · O(N) vs O(N²)

第一幕 · 第一崩塌

第一崩塌 · 通信风暴

加速比饱和复现 · 通信开销线性增长 · Amdahl 之壁

环形阵列突然卡顿,链路上燃起赤红色的通信风暴。你把 GPU 从 1 加到 64,加速比曲线先陡升后趋平——8 卡之后几乎不再增长。高斯老祖沉默了。链路里传来一个不带温度的声音:

通信瓶颈 通信瓶颈

「你只是加了卡,没加带宽。算力翻倍,但每步训练都要等梯度同步——同步时间随 GPU 数线性增长。加到第八块,通信追上计算,加速比就饱和。第一笔账,我记下了。」

高斯老祖 高斯老祖

「加速比 = 1 / ((1-p) + p/N + comm(N))。p 是可并行比例,comm(N) 是通信开销。N 越大,p/N 越小但 comm(N) 越大。当 comm(N) 追上 p/N,加卡就不再加速。这就是 Amdahl 定律在分布式训练里的化身。」

通信风暴 · 加速比饱和复现 + 通信开销诊断

拖 GPU 数看加速比饱和 → 展开通信开销曲线 → Amdahl 公式

加速比饱和复现 · GPU 数滑块

N=1
第二幕 · 挣扎→再崩塌 前奏

张量并行 · 模型切分

矩阵列切分 · 前向 All-Gather · 反向 Reduce-Scatter

通信风暴后是一座矩阵工坊。工坊里悬着一块巨大的权重矩阵 Y = XW。高斯老祖拿起一把切刀:「数据并行是切数据,张量并行是切模型——把权重矩阵 W 按列切到 N 块 GPU,每块卡只算一部分输出。前向各算各的,最后 All-Gather 拼起来;反向再 Reduce-Scatter 回去。」

高斯老祖 高斯老祖

「张量并行切的是单层权重——把 W 按列切成 [W₁, W₂, ..., Wₙ],每块卡持有 Wᵢ,算 Yᵢ = X·Wᵢ。前向后 All-Gather 把 [Y₁,...,Yₙ] 拼成完整 Y;反向 Reduce-Scatter 把梯度分发回去。通信嵌在每一层里,但单层就能跨卡。」

通信瓶颈 通信瓶颈

「切模型?你切得越细,每层都要通信一次。层越深,我吃得越饱。你以为切了就并行了——切的是模型,连的是我的路。」

张量并行可视化器 · 矩阵列切分 + 前向反向通信

拖切分数看矩阵分块 → 切换前向/反向看通信模式 → 并行天平记录

矩阵乘法 · Y = XW 按列切分

通信模式 · 前向 All-Gather / 反向 Reduce-Scatter

N=2
第二幕 · 挣扎→再崩塌 前奏

流水线并行 · 层间分片

按层切分 · 微批处理 · 流水线气泡

矩阵工坊后是一条流水线——模型被按层切成 N 段,每段放在一块 GPU 上。数据像零件一样从第一段流向最后一段。高斯老祖:「流水线并行切的是层——GPU0 放第 1-4 层,GPU1 放第 5-8 层。但一条数据流过去,前面的卡闲着等后面的卡,这就是气泡。用微批缓解——把 batch 切成小块连续灌进去。」

高斯老祖 高斯老祖

「流水线并行的死敌是气泡——前后级不同步时,快的卡要等慢的卡。GPipe 调度把 batch 切成 M 个微批,正向全灌完再反向,气泡比例 = (N-1)/M。1F1B 调度让正向反向交错,气泡更小。微批越多气泡越小,但显存占用越大。」

通信瓶颈 通信瓶颈

「气泡?你以为切层就高效了?前后级要等,等的就是我。微批能填气泡,但填不满——我住在气泡的缝隙里。」

流水线并行可视化器 · 层间分片 + 微批 + 气泡

拖流水级数看层切分 → 拖微批数看气泡填充 → 切换 GPipe/1F1B 调度

流水线 · N 级 × M 微批时序

N=4
M=4

气泡分析 · 气泡比例 vs 微批数

第二幕 · 挣扎→再崩塌 前奏

3D 并行 · 三管齐下

数据 + 张量 + 流水线 · 三维组装 · 配置权衡

流水线尽头是一座三维阵列塔。塔的三个轴分别是数据并行(DP)、张量并行(TP)、流水线并行(PP)。高斯老祖:「单用一种并行都有极限——数据并行卡通信,张量并行层通信,流水线并行有气泡。3D 并行把它们组合:同一节点内张量并行(NVLink 快),节点间数据并行,层间流水线并行。三管齐下。」

高斯老祖 高斯老祖

「3D 并行的配置是艺术:TP 放节点内利用 NVLink 高带宽,PP 切层减少单卡显存,DP 跨节点扩规模。总 GPU 数 = DP × TP × PP。比如 1024 卡 = 8(DP) × 8(TP) × 16(PP)。每个维度都有 trade-off,没有最优解,只有最适配。」

3D 并行组装器 · DP × TP × PP 三维配置

拖三个维度看 GPU 网格 → 实时计算总卡数与通信量 → 配置权衡

三维配置 · DP × TP × PP

数据并行 DP
8
张量并行 TP
8
流水线 PP
16

GPU 网格 · 三维拓扑

第二幕 · 第二崩塌

第二崩塌 · 显存之壁

70B 单卡放不下 · 显存拆解 · ZeRO 三阶段预告

3D 阵列塔轰然崩塌,你跌入一面显存之壁。壁上刻着:70B 模型,140GB 参数(FP16),单卡 80GB 显存放不下。你把 batch 调到 1,还是 OOM。高斯老祖:「这不是通信问题,是显存问题。模型参数、梯度、优化器状态,全堆在一块卡上——放不下。」

通信瓶颈 通信瓶颈

「你以为通信是我的全部?显存也是我的领地。70B 模型参数 140GB,加梯度加优化器状态,单卡要 1.4TB——你 80GB 的卡放得下?切了模型有气泡,不切模型放不下。第二笔账,我记下了。」

高斯老祖 高斯老祖

「显存之壁的根源是冗余——每块卡都存了完整参数、梯度、优化器状态。ZeRO 的思路:把这些统统切分。优化器状态占大头(12 倍参数),先切它;再切梯度;最后切参数。三阶段,显存从 1.4TB 降到几十 GB。」

显存之壁 · 70B 显存拆解 + ZeRO 三阶段预告

拖模型规模看显存爆炸 → 拆解参数/梯度/优化器状态 → ZeRO 三阶段预告

显存爆炸 · 模型规模滑块

70B 模型
第三幕 · 顿悟→突破 前奏

ZeRO 优化 · 分而治之

ZeRO-1 优化器状态 · ZeRO-2 +梯度 · ZeRO-3 +参数

显存之壁后是一座分片工坊。工坊里悬着三块光板,分别刻着:优化器状态、梯度、参数。高斯老祖递给你一把分片刀:「ZeRO 的哲学——能切的都切。ZeRO-1 切优化器状态,省最多;ZeRO-2 再切梯度;ZeRO-3 连参数都切,单卡只持 1/N。你切换阶段,看显存怎么降。」

高斯老祖 高斯老祖

「ZeRO-3 把参数也切了——前向时 All-Gather 拉参数,算完即弃;反向时再 All-Gather 拉参数算梯度,Reduce-Scatter 同步梯度。显存从 16×参数(Ψ) 降到 4×Ψ/N。但代价是通信——ZeRO-3 的通信量是 ZeRO-1 的 1.5 倍。省显存,花通信。」

通信瓶颈 通信瓶颈

「切参数?你切得越彻底,前向反向都要 All-Gather 拉参数——通信量翻倍。省显存是省了,但我又回来了。ZeRO-3 牺牲的,是我的代价。」

ZeRO 优化器可视化器 · 三阶段分片 + 显存通信对比

切换 ZeRO 阶段看分片 → 拖 GPU 数看显存下降 → 显存 vs 通信权衡曲线

显存占用 · 参数/梯度/优化器状态分片

N=8

显存 vs 通信 · 权衡曲线

第三幕 · 最高潮

Boss 战 · 通信瓶颈

分布式三问 · 通账清算 · 排除刻痕收网

分片工坊尽头暗蓝色雾气重新合拢,温度骤降——通信瓶颈凝聚成形。它不是人形,是一张横亘万核之间的拥堵光网,网里映着无数卡顿的梯度流。它翻开一本账册:「你来了。带着你的两道刻痕,和你的通账。三问。答对,我疏通。答错,你的元婴修为归零。」

通信瓶颈 通信瓶颈

「你说加卡就能加速——它不能。我住在你"以为堆 GPU 就线性加速"的地方。你每多加一块卡,我就堵一截。证明给我看:你的两道刻痕不是耻辱,是你的排除法——每一条"此路不通",都在告诉你正确的路在哪里。」

通账累计 0 笔 · 三问全对后清零

第三幕 · 收束 · 元婴三层巩固

顿悟 · 万核归一

知识图谱点亮 · 分布式方法论 · 境界突破 元婴三层巩固

拥堵光网疏通,你站在万核之巅。山脚是你走过的路——数据并行、Ring AllReduce、通信风暴、张量并行、流水线并行、3D 并行、显存之壁、ZeRO 优化。山顶放着一面万核镜,镜中映着所有并行策略交织成的知识图谱。高斯老祖:「你想驾驭万核。面前有三道认知:加卡不等于加速、切分对抗瓶颈、显存与通信是永恒权衡。」

高斯老祖 高斯老祖

「分布式训练的全部,是在算力、通信、显存三者间寻找平衡。数据并行切数据,张量并行切单层,流水线并行切层间,3D 并行三管齐下,ZeRO 切冗余。没有免费的午餐——每切一刀都换来新的通信代价。万核归一,不是消灭瓶颈,是承认瓶颈后找到最优配比。元婴三层,万核归一——你已巩固。但元婴之路的下一阶,在推理加速。」

万核归一 · 三道认知 + 知识图谱 + 境界突破

点亮三道认知 → 点亮分布式知识图谱 → 境界突破动画(元婴三层巩固)

三道认知 · 各三选一

万核之外 · 三道进阶议题

高斯老祖临别赠三言——万核归一之后,还有三件事,等你进入实战再细修。

高斯老祖 高斯老祖

「其一,专家并行(MoE)。数据 / 张量 / 流水线切的是同一份模型;MoE 则把"不同子网络"分到不同卡——每个 token 只激活少数专家,靠路由(Router)分配。容量上去了,计算却省了。代价是负载均衡:热门专家拥塞、冷门闲置,得用 auxiliary loss 逼路由均匀。Mixtral、DeepSeek-V3 都是这条路。」

「其二,容错与弹性训练。万卡跑几周,必有卡挂。靠检查点(Checkpoint)定期存全量状态——优化器、参数、学习率、数据指针;挂了从最近点续训,不从头来。进阶有异步检查点(后台保存不阻塞训练)与弹性恢复(剔除坏卡继续)。没有容错,万卡训练就是赌命。」

「其三,实战账本。GPT-3:175B 参数,约 1 万张 V100,499B token,总算力约 3.14×10²³ FLOPs。LLaMA-2 70B:2 万张 A100,2T token。LLaMA-3 405B:超 1.6 万张 H100,15T token。账本上的数字,就是这一章所有策略的最终答卷。」

专家并行切"稀疏激活"、容错保"长跑不中断"、训练案例定"规模与算力"。三者不在主线,但实战绕不过。