大模型分布式训练并行技术分享

目前业内解决大模型问题,基本以多节点、分布式方案为主。分布式方案具体的实施时,又分为数据并行、参数并行、流水线并行等,针对具体的业务场景采取合适的并行方案方可带来更高的效率。

后续结合业内主流的分布式框架,具体介绍各种并行的思路以及可能带来的收益。

数据并行

一些基础知识的补充:
Pytorch DDP分布式细节分享

ZeRO(零冗余优化)

零冗余优化的核心思想:用通信换显存 ,数据算完即废,等需要的时候,再同步过来。

从效果来说,零冗余优化属于数据并行+张量并行,从根本来说属于数据并行。

模型在训练时需要的显存大小,假设模型的参数W大小是phi,以byte为单位,存储如下:

结论 :优化器、模型参数、梯度是占据显存的主要数据。

将优化器、模型参数、梯度等数据进行切分可达到不同程度的显存优化,可分为zero1、zero2、zero3

zero1(优化器切分)

由于每块GPU上只保管部分optimizer states,因此只能将相应的W(蓝色部分)进行更新;需要对W做一次All-Gather,从别的GPU上把更新好的部分W取回来,额外产生单卡通讯量phi。

zero2(优化器+梯度切分)
  • 对梯度做一次Reduce-Scatter,保证每个GPU上所维持的那块梯度是聚合梯度。单卡通讯量phi。
  • 每块GPU用自己对应的O和G去更新相应的W。更新完毕后,每块GPU维持了一块更新完毕的W。同理,对W做一次All-Gather,将别的GPU算好的W同步到自己这来。单卡通讯量phi。
zero3(优化器+梯度+参数切分)
  • 做forward时,对W做一次All-Gather,取回分布在别的GPU上的W,得到一份完整的W,单卡通讯量phi 。forward做完,立刻把不是自己维护的W抛弃。
  • 做backward时,对W做一次All-Gather,取回完整的W,单卡通讯量phi。backward做完,立刻把不是自己维护的W抛弃。
  • 做完backward,算得一份完整的梯度G,对G做一次Reduce-Scatter,从别的GPU上聚合自己维护的那部分梯度,单卡通讯量phi。聚合操作结束后,立刻把不是自己维护的G抛弃。

优化效果:

用1.5倍的通讯开销,换回近60倍的显存

基于zero的实现的工具有:

  • 微软Deepspeed
  • Pytorch fsdp(1.11+)

参考论文:

zero-deepspeed.pdf

模型并行

在数据并行训练中,一个明显的特点是每个 GPU 持有整个模型权重的副本,这就带来了冗余问题。如果将模型参数、优化器等分割在一个设备整列,将有效缓解显存的压力和副本冗余。

模型并行,主流上分为张量并行和流水线并行。

张量并行为层内并行,对模型 Transformer 层内进行分割、流水线为层间并行,对模型不同的 Transformer 层间进行分割。

张量并行(TP)

张量并行可视为层内并行,可分为按行进行切分和按列进行切分,分别对应行并行(Row Parallelism)与列并行(Column Parallelism)。

受 GSPMD、Oneflow 和 TF DTensor 的启发,PyTorch 从 2.0.0 开始引入 DTensor,通过DTensor抽象,我们可以无缝构建张量并行。

参考论文:
Megatron-LM 1D 2020-03-13

流水线并行(PP)

经典的流水线并行范式有Google推出的Gpipe,和微软推出的PipeDream。两者的推出时间都在2019年左右,大体设计框架一致。主要差别为:在梯度更新上,Gpipe是同步的,PipeDream是异步的。

多维混合并行

在进行上百亿/千亿级以上参数规模的超大模型预训练时,通常会组合多种并行技术一起使用。

常见的组合方式:

DP+PP

3D 并行(DP + PP + TP)

ZeRO-DP + PP + TP

相关推荐
盼小辉丶1 小时前
PyTorch生成式人工智能——使用MusicGen生成音乐
pytorch·python·深度学习·生成模型
写bug写bug2 小时前
分布式锁的使用场景和常见实现(下)
分布式·后端·面试
Tiger Z3 小时前
《动手学深度学习v2》学习笔记 | 1. 引言
pytorch·深度学习·ai编程
喂完待续14 小时前
Apache Hudi:数据湖的实时革命
大数据·数据仓库·分布式·架构·apache·数据库架构
胡耀超17 小时前
DataOceanAI Dolphin(ffmpeg音频转化教程) 多语言(中国方言)语音识别系统部署与应用指南
python·深度学习·ffmpeg·音视频·语音识别·多模态·asr
HUIMU_17 小时前
DAY12&DAY13-新世纪DL(Deeplearning/深度学习)战士:破(改善神经网络)1
人工智能·深度学习
mit6.82419 小时前
[1Prompt1Story] 注意力机制增强 IPCA | 去噪神经网络 UNet | U型架构分步去噪
人工智能·深度学习·神经网络
Coovally AI模型快速验证19 小时前
YOLO、DarkNet和深度学习如何让自动驾驶看得清?
深度学习·算法·yolo·cnn·自动驾驶·transformer·无人机
科大饭桶20 小时前
昇腾AI自学Day2-- 深度学习基础工具与数学
人工智能·pytorch·python·深度学习·numpy
努力还债的学术吗喽20 小时前
2021 IEEE【论文精读】用GAN让音频隐写术骗过AI检测器 - 对抗深度学习的音频信息隐藏
人工智能·深度学习·生成对抗网络·密码学·音频·gan·隐写