LLM三大并行方式

为什么要进行并行训练:

模型越来越大,单张显卡张不下

三种并行方式

数据并行,流水线并行,张量并行

数据并行(DP)

原理:

假设我们有 4 张显卡。我们把完整的模型复制 4 份,分别放在 4 张卡上。 然后,如果我们的一批数据(Batch Size)是 32,我们就把它切成 4 份,每张卡领 8 条数据。

总结:其实就是将数据进行了切分,多个模型共同处理大批数据

流程:

1、 每张卡独立进行前向传播(Forward)和反向传播(Backward)。

2、 计算出各自的梯度。

3、关键步骤 所有显卡之间进行通信,把大家的梯度加起来取平均,所有卡使用相同的平均梯度更新参数,保证模型权重始终一致,保证大家的模型更新方向是一致的。

总结:每张卡独立前向反向传播,但是在更新梯度时,需要把所有模型的梯度进行相加求和取平均,每张卡的模型使用平均梯度进行更新,保持一致。

局限性与进阶

  • 局限:它假设单张显卡的显存能装下整个模型。对于 70B+ 的大模型,单卡直接 OOM (Out Of Memory)。
  • 进阶技术 (ZeRO):DeepSpeed 的 ZeRO 系列(零冗余优化器)是对 DP 的改进。它不仅切分数据,还将优化器状态 (Optimizer States)、梯度 (Gradients) 甚至参数 (Parameters) 切分到不同卡上,从而大幅降低单卡显存占用。

流水线并行(PP,我感觉我更想叫管道并行,也就是模型切分)

原理:

LLM 本质是 Transformer Layer 的深层堆叠(例如 GPT-3 有 96 层)。

  • 纵向切分:将模型的层切开。例如,GPU 0 负责第 1-8 层,GPU 1 负责第 9-16 层,以此类推。

流程

数据像流水线上的产品一样流动:

  1. GPU 0 接收 Input,计算前几层,得到中间结果 (Activations)。
  2. GPU 0 将结果发送给 GPU 1。
  3. GPU 1 继续计算... 直到最后一个 GPU 输出 Loss。
  4. 反向传播时,梯度按相反方向回传

这就像工厂流水线:

  • GPU 0 是做“初级特征提取”的工人。
  • GPU 1 是做“中级语义理解”的工人。
  • GPU 2 是做“分类头/生成”的工人、

痛点

最朴素的 PP 效率很低。当 GPU 0 在工作时,下游的 GPU 都在空闲等待。

解决方案:1F1B (One Forward One Backward) 策略。将一个大 Batch 切成很多微批次,让前后向计算交错进行,尽量填满空闲时间。

1F1B具体解决原理及流程请见

张量并行

原理:

这是最“硬核”的切分方式。LLM 的计算核心是矩阵乘法 Y=X·W

  • 横向/纵向切分:不切分层数,而是把每一层内部巨大的权重矩阵 W撕开。
  • Transformer 特性:例如 Multi-Head Attention 有 32 个头,可以让 GPU 0 算前 16 个头,GPU 1 算后 16 个头。

工作流程:

  1. 输入 X 复制到两张卡上。
  2. GPU 0 计算 X·Wpart1,GPU 1 计算 X·Wpart2。
  3. All-Reduce (高频通信):每一层计算结束,必须立刻通信,将两部分结果拼起来(或相加),才能进入下一层的计算。

局限性:

通信量巨大! 因为每一层 Layer 都要通信,所以 TP 通常仅限于同一台机器内部(通过 NVLink 连接)使用,跨机器使用 TP 会导致通信瓶颈,严重拖慢速度。

总结:张量并行意味着把模型权重分别放在不同的GPU上,这也就是意味着把模型撕开了,不是按层分开放,而是把层给撕了,也就是两张卡拼起来才是模型的一个层,这更加友好于矩阵,因为可以拆开嘛

具体详情请看

https://blog.csdn.net/L1uminous/article/details/155913237?fromshare=blogdetail&sharetype=blogdetail&sharerId=155913237&sharerefer=PC&sharesource=L1uminous&sharefrom=from_link

3D并行

在实际的千亿参数模型 (如 Llama-3-70B, GPT-4) 训练中,我们通常混合使用这三种策略:

  1. 单机内部:使用 TP (利用 NVLink 高带宽)。
  2. 机器之间:使用 PP (利用网线/Infiniband,减少通信量)。
  3. 整体扩展:在上述基础上复制多组,使用 DP (增加吞吐量)。

我自己画了一张图方便理解,如果又画的不对的地方,请大家批评指正。

具体详情看

https://blog.csdn.net/L1uminous/article/details/155913261?fromshare=blogdetail&sharetype=blogdetail&sharerId=155913261&sharerefer=PC&sharesource=L1uminous&sharefrom=from_link

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值