一、前置认知:为什么LLM训练必须用并行计算?——单GPU的Scaling瓶颈
在学习并行技术前,需先明确"痛点":单GPU的计算能力和内存容量已无法满足现代LLM的训练需求,这是并行计算的核心驱动力。
1.1 计算瓶颈:单GPU性能增长有限
- 性能增益来源:单芯片推理性能提升依赖多技术,但增速已达瓶颈,具体包括:
- 数值精度优化(FP32→FP16→BF16/TF32/Int8,约16倍增益)
- 复杂指令支持(DP4/HMMA/IMMA,约12.5倍增益)
- 芯片工艺升级(28nm→16nm→7nm→5nm,约2.5倍增益)
- 稀疏性优化(约2倍增益)
- 模型效率提升(整体增益>1000倍,截至2020年数据)
-
瓶颈体现:全球最快超算已达"艾级算力(Exaflops)“,而单GPU算力仅在"太级(TFlops)-拍级(PFlops)”,差距悬殊,无法支撑千亿参数模型的训练速度需求。

单个GPU无法容纳这些大型模型!
1.2 内存瓶颈:单GPU装不下大模型
- **模型参数爆炸式增长:**2018-2022年,LLM参数从ELMo的94M(百万)飙升至Megatron-Turing NLG的530B(十亿),具体数据如下:
| 模型 | 参数规模 | 发布年份 |
|---|---|---|
| ELMo | 94M | 2018 |
| BERT-Large | 340M | 2018 |
| GPT-2 | 1.5B | 2019 |
| T5 | 11B | 2020 |
| GPT-3 | 175B | 2020 |
| Megatron-Turing NLG | 530B | 2021 |
-
关键结论:
单GPU内存(如A100为80GB、H100为80GB/160GB)无法容纳多数大模型(如175B参数模型用BF16存储需350GB),必须通过多GPU/多机器拆分内存解决。
1.3 解决方案:多GPU/多机器并行
核心思路是"拆分训练任务":将模型的计算需求(如矩阵乘法)和内存需求(如参数、梯度、激活)拆分到多个GPU/机器上,通过"高速互联"同步数据,具体包括:
- 节点内并行(同一机器内多GPU):用NVLink、PCIe 4.0等高速链路(如NVLink 3.0达400 GT/s per lane)
- 节点间并行(多机器):用InfiniBand(如HDR InfiniBand达50 GT/s per lane)等互联技术
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

二、基础铺垫:LLM并行训练的"通信语言"——集体通信原语
多GPU/机器并行的核心是"数据同步",而集体通信原语(Collective Communication Primitives) 是实现同步的"通用工具"。学习者需掌握5个核心原语的功能、流程及关联关系。
2.1 核心原语解析(以4个GPU节点为例,rank0-rank3)
| 原语名称 | 核心功能 | 输入→输出流程(4节点案例) | 应用场景 |
|---|---|---|---|
| Reduce (归约) | 指定"根节点",汇总所有节点的数据(如求和、求平均),仅根节点获得结果 | 输入:rank0(in0)、rank1(in1)、rank2(in2)、rank3(in3)→输出:仅rank0(out=in0+in1+in2+in3) | 梯度汇总(根节点更新参数) |
| AllReduce (全归约) | 所有节点汇总数据,每个节点均获得完整结果(无需指定根节点) | 输入:同上→输出:rank0-rank3均获out=in0+in1+in2+in3 | 数据并行中梯度同步 |
| Broadcast (广播) | 根节点将数据发送至所有其他节点,所有节点最终获得相同数据 | 输入:仅rank0(in)→输出:rank0-rank3均获out=in | 参数初始化后分发 |
| All Gather (全收集) | 每个节点发送本地数据,所有节点汇总所有数据(形成完整数组) | 输入:rank0(in0)、rank1(in1)、rank2(in2)、rank3(in3)→输出:每个节点获out=[in0,in1,in2,in3] | ZeRO3中参数分片后重组 |
| Reduce Scatter (归约散射) | 先归约数据,再将结果"分片"分配给各节点(每个节点获部分结果) | 输入:同上→输出:rank0获out0=in0、rank1获out1=in1、rank2获out2=in2、rank3获out3=in3(归约后分片) | ZeRO中梯度分片处理 |
2.2 关键关联:AllReduce = Reduce Scatter + All Gather
这是并行通信的核心优化点:
传统AllReduce需直接传输完整数据,通信量大;而拆分为"Reduce Scatter(先归约并分片,减少数据量)+ All Gather(再收集分片,重组完整数据)"后,在带宽受限场景(如跨节点通信)下效率更高,这是后续ZeRO、张量并行等技术的通信基础。
三、硬件基础:TPU vs GPU——并行训练的"通信架构差异"
不同硬件的"网络拓扑"决定了并行方案的选择(如GPU适合节点内高带宽,TPU适合大规模密集通信),学习者需理解两者的核心差异。
3.1 TPU的网络架构:环形网格(Toroidal Mesh)
-
拓扑结构
TPU芯片按"环形"连接,形成二维网格(如4x4芯片阵列),每个芯片与相邻芯片直接通信
-
核心优势
支持"全对全(All-to-All)"通信,适合大规模密集数据交换(如大模型的全局注意力计算)
-
适用场景
超大规模训练(如Google的PaLM、Gemma模型),需多TPU Pod协同

TPU网络环形网格
3.2 GPU的网络架构:NVLink + NVSwitch + InfiniBand
GPU集群通过"分层互联"实现高带宽,以NVIDIA DGX SuperPod为例:
-
节点内(单DGX机器):8个GPU用NVSwitch连接,支持NVLink 3.0(400 GT/s per lane),实现节点内GPU间低延迟、高带宽通信
-
节点间(多DGX机器):用InfiniBand(IB)交换机(如HDR IB)连接,实现跨节点通信(HDR IB达50 GT/s per lane)
-
核心优势
:节点内带宽极高(如DGX H100节点内双分区带宽达3600 GB/s),适合"节点内拆分模型、节点间扩展计算"
3.3 性能对比:A100 SuperPod vs H100 SuperPod
H100在算力和带宽上全面超越A100,是当前大规模训练的主流选择,具体数据如下(以256 GPU集群为例):
| 指标 | A100 SuperPod(32 DGX) | H100 SuperPod(32 DGX) | 性能提升倍数 |
|---|---|---|---|
| 密集算力(Dense PFLOP/s) | 80 | 512 | 6.4x |
| 双分区带宽(Bisection GB/s) | 6400 | 57600 | 9x |
| 归约带宽(Reduce GB/s) | 100 | 450 | 4.5x |
四、核心内容:LLM并行训练的三大范式——数据并行、模型并行、其他并行
这是本文的核心模块,学习者需掌握每种范式的"解决问题"“实现原理”“优缺点”“适用场景”,并理解为何需要组合使用。
4.1 范式1:数据并行——拆分"训练数据",优化参数内存
核心逻辑:将训练批次(Batch)拆分为多个小批次(Micro-Batch),每个GPU处理1个小批次,通过同步梯度更新参数,解决"单GPU内存装不下完整模型"的问题。
4.1.1 基础版本:朴素数据并行(Naive DDP)
- 原理:
- 所有GPU加载完整模型参数(内存冗余)
- 拆分Batch:总Batch=B,M个GPU各处理B/M个样本
- 每个GPU计算梯度后,用AllReduce同步所有梯度
- 所有GPU用同步后的梯度更新参数(参数保持一致)
- 优点:实现简单,适合中小模型(如BERT-Large 340M)
- 致命缺点:
-
内存无Scaling:每个GPU存完整参数+梯度+优化器状态,内存占用=(4+K)*#param(K为优化器状态系数,如Adam需2个状态,K=2)
-
通信成本高:每次迭代需传输2*#param(梯度同步),参数规模越大,通信越慢

4.1.2 优化版本:ZeRO(Zero Redundancy Optimizer)1-3阶段
ZeRO的核心是"分片冗余数据":将模型的"参数、梯度、优化器状态"中冗余的部分拆分到多个GPU,仅保留必要数据,从而降低单GPU内存占用。从Stage1到Stage3,分片对象逐步扩展,内存优化效果逐步增强。
(1)ZeRO各阶段对比(核心表格)
| 对比维度 | ZeRO Stage 1 | ZeRO Stage 2 | ZeRO Stage 3(又称FSDP) | 朴素DDP(对照) |
|---|---|---|---|---|
| 分片对象 | 仅优化器状态(一阶/二阶矩) | 优化器状态+梯度 | 优化器状态+梯度+参数 | 无(全量存储) |
| 单GPU存储 | 参数(全量)+ 梯度(全量)+ 优化器状态(1/M) | 参数(全量)+ 梯度(1/M)+ 优化器状态(1/M) | 参数(1/M)+ 梯度(1/M)+ 优化器状态(1/M) | 参数+梯度+优化器状态(全量) |
| 通信原语 | Reduce Scatter(梯度)+ All Gather(参数) | 增量Reduce(梯度)+ All Gather(参数) | All Gather(参数)+ Reduce Scatter(梯度) | AllReduce(梯度) |
| 通信成本 | 2*#param | 2*#param | 3*#param | 2*#param |
| 内存占用公式 | (4 + K/M)*#param | (2 + K/M)*#param | (12/M)*#param(BF16场景) | (4+K)*#param |
| 核心优势 | 内存免费优化(无额外通信成本) | 进一步降低梯度内存 | 内存线性Scaling(支持最大模型) | 实现简单 |
注:M为GPU数量;12字节/参数(BF16场景)=2B(参数)+2B(梯度)+4B(FP32主权重)+4B(优化器状态)
(2)ZeRO各阶段实际效果(8X A100 80G GPU,BF16训练)
通过分片,单GPU支持的最大模型参数规模显著提升:
| 方案 | 最大支持参数规模 | 每参数字节数 | 计算逻辑(80G GPU内存) |
|---|---|---|---|
| 朴素DDP | 6.66B | 12 | 80G / 12B/param ≈6.66B |
| ZeRO Stage 1 | 16B | 5 | 80G / 5B/param =16B |
| ZeRO Stage 2 | 24.62B | 3.25 | 80G / 3.25B/param≈24.62B |
| ZeRO Stage 3 | 53.33B | 1.5 | 80G / 1.5B/param≈53.33B |
4.1.3 数据并行的局限性
即使是ZeRO3,仍存在两个核心问题:
-
激活内存无法降低
ZeRO仅优化"参数、梯度、优化器状态"的内存,而LLM训练中"激活内存"(前向计算中产生的中间结果)占比超50%(如175B模型激活内存达数百GB),数据并行无法拆分激活
-
计算Scaling有瓶颈
数据并行的GPU数量不能超过Batch大小(否则小批次导致梯度噪声大),且Batch增大到一定程度后,训练效果(如泛化能力)会下降(diminishing returns)
4.2 范式2:模型并行——拆分"模型结构",优化激活内存
为解决数据并行的"激活内存"和"跨节点扩展"问题,模型并行通过"拆分模型结构"实现并行,核心分为三类:流水线并行(按深度拆)、张量并行(按宽度拆)、序列并行(按序列拆)。

4.2.1 流水线并行(Pipeline Parallelism)——按"模型深度"拆层
解决问题:跨节点扩展时,数据并行通信成本高(2*#param),流水线并行通过"拆分层"降低通信量(仅传输激活)。

- 原理:
- 拆分模型层:将L层Transformer拆分为P个"流水线阶段(Stage)",每个Stage分配给1个GPU(如L=24,P=4,每个GPU处理6层)
- 微批次(Micro-Batch)处理:将总Batch拆分为M个微批次,先发送第1个微批次到Stage1,Stage1处理完后发送到Stage2,同时Stage1开始处理第2个微批次,通过"重叠计算"减少GPU空闲时间
- 通信内容:仅传输"激活"(如输入特征、注意力输出),通信量为bs h(b=微批次大小,s=序列长度,h=隐藏层维度),远小于数据并行的2*#param
-
关键指标:气泡率(Bubble Rate)
流水线并行的GPU空闲时间称为"气泡",计算公式:
气泡率 = (P-1)/M(P=阶段数,M=微批次数)因此,流水线并行依赖大微批次,否则性能骤降
- 当M=1(无重叠):气泡率=P-1,GPU大部分时间空闲
- 当M增大(如M=32):气泡率≈0,GPU利用率接近100%
- 优缺点:
- 优点:通信量小(仅激活),适合跨节点扩展(慢网络链路)
- 缺点:依赖大微批次(小批次气泡率高),实现复杂(需调度微批次)
4.2.2 张量并行(Tensor Parallelism)——按"模型宽度"拆矩阵
解决问题:流水线并行依赖大批次,而张量并行通过"拆分矩阵乘法"实现无气泡并行,适合节点内高带宽场景。

-
原理(以Transformer的MLP层为例):
MLP层的核心是两次矩阵乘法:Y=GeLU(XA),Z=Dropout(YB)(A为输入→隐藏层权重,B为隐藏层→输出层权重)。
- GPU0计算XA1→Y1,GPU1计算XA2→Y2
- 用AllReduce汇总Y1+Y2→完整Y,两个GPU均获得Y
- GPU0计算YB1→Z1,GPU1计算YB2→Z2
- 用AllReduce汇总Z1+Z2→完整Z
- 拆分权重:将A按列拆分为A1、A2(A=[A1,A2]),B按行拆分为B1、B2(B=[B1;B2]),分配给2个GPU
- 前向计算:
- 反向计算:与前向相反,先汇总梯度,再拆分计算权重梯度
- 通信成本:8bsh*(M-1)/M(M为GPU数量),虽比流水线并行高,但节点内NVLink带宽足够(如H100的NVLink达400 GT/s),可无延迟同步
- 优缺点:
- 优点:无气泡(GPU持续计算),不依赖大批次,实现简单(仅需拆分矩阵)
- 缺点:通信量大,仅适合节点内高带宽场景(一般≤8 GPU/节点)
4.2.3 序列并行(Sequence Parallelism)——按"序列长度"拆激活
解决问题:张量并行仍无法降低"激活内存"(如LayerNorm、Dropout的激活),序列并行通过拆分"序列维度"优化激活内存。

-
原理:
Transformer中的LayerNorm、Dropout是"按序列维度的点wise操作"(每个token独立计算),可按序列长度s拆分为s1、s2(s=s1+s2):
- 每个GPU独立计算LayerNorm/Dropout(无通信)
- 进入注意力/MLP层前,用All Gather汇总完整序列→进行张量并行计算
- 拆分输入序列:GPU0处理前s1个token,GPU1处理后s2个token
- 前向计算:
- 反向计算:用Reduce Scatter拆分梯度,每个GPU仅更新对应序列的梯度
-
激活内存优化效果:
以175B模型为例,序列并行结合张量并行后,每层激活内存显著降低:
| 配置 | 每层激活内存公式 | 优化比例(vs无并行) |
|---|---|---|
| 无并行 | sbh(34 + 5as/h) | 100% |
| 张量并行 | sbh(10 + 24/t + 5as/(ht)) | ~30%(t=8时) |
| 张量+序列并行 | sbh(34/t + 5as/(ht)) | ~10%(t=8时) |
(注:t为张量并行GPU数量,a为注意力头数,s为序列长度,b为微批次大小,h为隐藏层维度)
4.3 范式3:其他并行策略(补充)
除上述三大核心范式外,针对特殊场景还有两类并行方案:
-
上下文并行/环形注意力(Context Parallel/Ring Attention)
长序列场景(如s=128k)下,激活内存随s²增长,可按"序列块"拆分激活,跨GPU存储注意力矩阵,降低单GPU内存
-
专家并行(Expert Parallelism)
针对MoE(混合专家模型),将"专家层"拆分到多个GPU,每个GPU仅存储部分专家,通过"门控网络"分配样本到对应专家,解决MoE模型专家数量过多导致的内存问题

五、实践落地:大规模LLM训练的"3D并行"策略——组合范式实现线性Scaling
单一并行范式无法满足千亿参数模型的训练需求,实际中需组合"数据并行+模型并行(张量+流水线)"形成3D并行,并遵循明确的规则。

5.1 3D并行的核心规则(从文献总结的最佳实践)
- 第一步:确保模型"装得下"(内存优先)
- 先用张量并行:在每个节点内用8个GPU(或更少)拆分模型参数,利用NVLink高带宽实现无气泡并行
- 再用流水线并行:若张量并行后模型仍装不下,跨节点拆分层(如16个节点,每个节点处理1个Stage),用InfiniBand传输激活
- 第二步:确保训练"跑得够快"(计算扩展)
- 剩余GPU用数据并行(FSDP) 扩展计算能力,拆分训练批次,提升迭代速度
- 第三步:优化小批次问题
- 若数据并行导致微批次过小(如Batch<32),用梯度累积:将多个微批次的梯度累积后再更新参数,等价于增大Batch,提升通信效率

更多GPU,利用率相同且平稳!

在64台机器上进行并行处理时,最佳选择是采用8×8的配置。
5.2 实际案例:Llama3 405B的并行配置
Llama3 405B是典型的3D并行案例,使用8192个GPU训练,配置如下:
| 并行维度 | 配置参数 | 作用说明 |
|---|---|---|
| 张量并行(TP) | 8 | 每个节点内8个GPU拆分模型参数,用NVLink同步 |
| 流水线并行(PP) | 16 | 跨16个节点拆分层,每个节点处理1个Stage |
| 数据并行(DP) | 64 | 剩余GPU拆分批次,64路数据并行 |
| 序列长度 | 8192 | 结合序列并行优化激活内存 |
| 全局Batch | 16M tokens | 用梯度累积确保Batch足够大 |
5.3 大规模训练的挑战:硬件故障
千亿参数模型的训练周期长达数周(如Llama3 405B训练54天),硬件故障是主要中断原因,具体故障分布如下:
| 故障类型 | 中断次数 | 占比 | 关键启示 |
|---|---|---|---|
| 故障GPU | 148 | 30.1% | 需选用高可靠性GPU,如H100 |
| GPU HBM3内存 | 72 | 17.2% | 内存需冗余设计,支持故障检测 |
| 网络交换机/线缆 | 35 | 8.4% | 节点间链路需冗余,如双IB交换机 |
| 软件Bug | 54 | 12.9% | 需完善日志和故障恢复机制(如Checkpoint) |
关键结论:约78%的中断源于硬件问题,大规模训练需"硬件冗余+软件容错"双重保障
六、总结与核心考点
6.1 核心知识点梳理
-
并行的必要性
单GPU受限于计算(性能增长有限)和内存(装不下大模型),必须用多GPU/多机器并行
-
通信基础
集体通信原语是并行的"语言",AllReduce可拆分为Reduce Scatter+All Gather以优化带宽
-
并行范式对比
- 数据并行(ZeRO1-3):优化参数内存,适合中小模型
- 模型并行(流水线+张量+序列):优化激活内存,适合大模型
- 3D并行:组合数据+模型并行,适合千亿参数模型
-
实践规则
先张量(节点内)→再流水线(跨节点)→最后数据并行,平衡内存、带宽、批次大小
6.2 常见问题答疑
Q1:ZeRO3(FSDP)比ZeRO1/2好,为什么不直接用ZeRO3?
A1:ZeRO3的通信成本更高(3*#param vs 2*#param),且实现复杂度高(需动态加载参数分片)。对于中小模型(如7B),ZeRO1/2已能满足内存需求,无需额外付出通信成本;仅当模型超大规模(如175B)时,ZeRO3的内存优势才会覆盖通信成本的劣势。
Q2:张量并行和流水线并行,什么时候选哪个?
A2:根据"网络带宽"和"批次大小"选择:
- 节点内(高带宽,如NVLink)+ 小批次:选张量并行(无气泡,不依赖批次)
- 跨节点(低带宽,如IB)+ 大批次:选流水线并行(通信量小,大批次可隐藏气泡)
Q3:3D并行中,为什么数据并行要放在最外层?
A3:数据并行(FSDP)的通信是"参数分片同步",可通过"异步预取参数"容忍高延迟;而张量并行(节点内)需低延迟同步,流水线并行(跨节点)需中等带宽。因此按"延迟容忍度从低到高"排序并行维度:TP(内层)→ PP → DP(外层),最小化通信开销。
通过本文,学习者可系统掌握LLM并行计算的"背景→基础→核心→实践",并能根据模型规模和硬件环境选择合适的并行方案。
七、如何学习AI大模型?
如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
100套AI大模型商业化落地方案

大模型全套视频教程

200本大模型PDF书籍

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
LLM面试题合集

大模型产品经理资源合集

大模型项目实战合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

4514

被折叠的 条评论
为什么被折叠?



