万核归一
你以为分布式训练就是堆 GPU。可在万核阵列前,真正的战场在卡与卡之间——每多一块 GPU,梯度同步的通信开销就吞掉一截算力。通信瓶颈在链路里立赌:你以为加卡就能线性加速,我赌你加到第八块就饱和。
并行之门
并行之门的门楣上刻着八个字:万核齐发,须归于一。门内是一片算力阵列——成千上万块 GPU 排成方阵,每块卡都亮着绿灯。阵列中央横着一道暗蓝色的光带,像一条拥堵的公路。高斯老祖站在光带边,手里只有一块黑板,上面写着:加卡不等于加速。
「左边是算力,右边是通信。你站在光带上——告诉我,分布式训练最大的瓶颈是什么?先猜,猜错了也没关系,通信瓶颈会记账。」
「又来了一个想堆卡的。打个赌——你觉得分布式训练最大的瓶颈是什么?你每猜错一次,链路堵一分,我都记下来。」
瓶颈之赌 · 分布式训练瓶颈预测挑战器
反直觉下注(四选一,可连错)→ 挑战展开 → 分布式训练全景图拼合
分布式训练全景 · 核心瓶颈图谱
数据并行 · 最简之道
光带尽头是一排 GPU,每块卡上都刻着同一个模型。高斯老祖递给你一沓数据卡:「数据并行最简单——每块 GPU 拿一份完整模型,处理不同的数据 batch。前向各算各的,反向各算各的,但梯度必须同步。你拖动 GPU 数,看流程怎么走。」
「数据并行的关键在梯度同步——每块 GPU 算完自己的梯度后,必须把梯度 AllReduce 到所有卡上,保证参数一致。前向和反向是并行的,但梯度同步是串行的瓶颈。GPU 越多,同步的梯度越大,通信越久。」
「你以为复制模型就行?八块卡各算各的梯度,最后还得 AllReduce 同步——这一步走的是我的路。卡越多,我吃得越饱。」
数据并行可视化器 · N 卡复制 + 前向反向 + AllReduce
拖 GPU 数看复制模型 → 切换流程步骤看前向/反向/AllReduce/更新 → 并行天平记录
N 卡复制 · 各持完整模型
训练流程 · 前向 → 反向 → AllReduce → 更新
Ring AllReduce · 环形通信
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 卡接力传递分片
通信复杂度 · O(N) vs O(N²)
第一崩塌 · 通信风暴
环形阵列突然卡顿,链路上燃起赤红色的通信风暴。你把 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通信拓扑诊断 · 全互联 vs 环形
Amdahl 公式 · 通信开销展开
张量并行 · 模型切分
通信风暴后是一座矩阵工坊。工坊里悬着一块巨大的权重矩阵 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 段,每段放在一块 GPU 上。数据像零件一样从第一段流向最后一段。高斯老祖:「流水线并行切的是层——GPU0 放第 1-4 层,GPU1 放第 5-8 层。但一条数据流过去,前面的卡闲着等后面的卡,这就是气泡。用微批缓解——把 batch 切成小块连续灌进去。」
「流水线并行的死敌是气泡——前后级不同步时,快的卡要等慢的卡。GPipe 调度把 batch 切成 M 个微批,正向全灌完再反向,气泡比例 = (N-1)/M。1F1B 调度让正向反向交错,气泡更小。微批越多气泡越小,但显存占用越大。」
「气泡?你以为切层就高效了?前后级要等,等的就是我。微批能填气泡,但填不满——我住在气泡的缝隙里。」
流水线并行可视化器 · 层间分片 + 微批 + 气泡
拖流水级数看层切分 → 拖微批数看气泡填充 → 切换 GPipe/1F1B 调度
流水线 · N 级 × M 微批时序
气泡分析 · 气泡比例 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
GPU 网格 · 三维拓扑
第二崩塌 · 显存之壁
3D 阵列塔轰然崩塌,你跌入一面显存之壁。壁上刻着:70B 模型,140GB 参数(FP16),单卡 80GB 显存放不下。你把 batch 调到 1,还是 OOM。高斯老祖:「这不是通信问题,是显存问题。模型参数、梯度、优化器状态,全堆在一块卡上——放不下。」
「你以为通信是我的全部?显存也是我的领地。70B 模型参数 140GB,加梯度加优化器状态,单卡要 1.4TB——你 80GB 的卡放得下?切了模型有气泡,不切模型放不下。第二笔账,我记下了。」
「显存之壁的根源是冗余——每块卡都存了完整参数、梯度、优化器状态。ZeRO 的思路:把这些统统切分。优化器状态占大头(12 倍参数),先切它;再切梯度;最后切参数。三阶段,显存从 1.4TB 降到几十 GB。」
显存之壁 · 70B 显存拆解 + ZeRO 三阶段预告
拖模型规模看显存爆炸 → 拆解参数/梯度/优化器状态 → ZeRO 三阶段预告
显存爆炸 · 模型规模滑块
70B 模型ZeRO 三阶段预告 · 切什么省什么
ZeRO 优化 · 分而治之
显存之壁后是一座分片工坊。工坊里悬着三块光板,分别刻着:优化器状态、梯度、参数。高斯老祖递给你一把分片刀:「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 通信权衡曲线
显存占用 · 参数/梯度/优化器状态分片
显存 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。账本上的数字,就是这一章所有策略的最终答卷。」