简介

本文系统介绍大模型分布式训练中的七大并行技术:数据并行、流水线并行、张量并行、序列并行、多维混合并行、自动并行和MOE并行,详细分析各种技术的实现原理、优缺点及适用场景。同时提供不同硬件环境下并行策略的选择指南,以及FP16与BF16混合精度训练的对比分析,为开发者提供完整的大模型分布式训练技术路线图。


近年来,随着Transformer、MOE架构的提出,深度学习模型的参数量级已快速攀升至十万亿级别,传统单机单卡的训练范式在超大规模模型面前显得捉襟见肘。

为此,业界开始广泛采用单机多卡乃至跨节点多卡协同的分布式训练方案。通过构建高性能AI计算集群,实现海量训练数据的高效吞吐与模型参数的快速更新,已成为当前分布式机器学习研究的核心课题。

为达成这一目标,通常需要依据硬件算力与数据/模型体量的适配关系,对计算负载、训练样本及模型结构进行系统性切分,进而实现存储与计算资源的分布式调度。

深入探究分布式训练技术的底层实现原理具有重要价值,本文将重点剖析大模型分布式训练中的并行技术。

数据并行

数据并行因其实现原理较为直观,成为当前应用最广泛的分布式并行方法。这种技术不仅能够对训练数据进行并行处理,还能同时对模型梯度、参数权重以及优化器状态等数据进行并行运算。

先以PyTorch框架下的数据并行演进路径(DataParallel、DistributedDataParallel、FullyShardedDataParallel)为核心线索,系统阐述了数据并行的技术实现机制。

此外,还对DeepSpeed框架中改进的数据并行方案ZeRO进行了简要说明。

流水线并行

流水线并行技术是指当模型规模过大而无法完整加载到单个GPU时,通过将模型的不同层分配到多个计算设备上,从而降低单个设备的显存占用,实现超大规模模型训练,这种技术也被称为层间模型并行。

我们首先介绍了基础的朴素流水线并行方法,然而该方法存在较大的Bubble问题,造成GPU利用率低下。

为改善Bubble问题,随后介绍了GPipe这种微批次流水线并行方案,尽管GPipe能有效提升GPU利用率,但其采用的F-then-B模式(先执行前向计算再进行反向计算)需要保存多个micro-batch的中间结果和梯度,导致显存使用效率仍然不够理想。

为此,我们进一步探讨了采用1F1B模式(前向和反向计算交替执行,可及时释放冗余中间变量)的PipeDream系列方案(包括PipeDream-2BW、PipeDream-Flush等变体),这些方法能更高效地利用显存以支持更大模型的训练。

同时,还提到了常见的AI训练框架中采用的流水线并行方案。

张量并行

通过将计算层内部的参数(张量)分配到不同计算设备上(即实现层内并行),使得每个设备仅存储模型的部分参数,从而降低内存占用,这种方法被称为张量模型并行。

根据切分维度的不同,可以采用行切分或列切分的方式,分别对应行并行和列并行。最初我们阐述了Megatron-LM提出的仅划分权重的1D张量并行方案。

针对超大规模AI模型的训练需求,后续又详细说明了Colossal-AI研发的多维度(2/2.5/3维)张量并行技术。其中,2D张量并行创新性地实现了对激活值的切分处理。

虽然这种并行策略有效节约了内存资源,但同时也带来了额外的通信开销。2.5D张量并行则通过扩充计算设备规模来优化通信效率。

为了更彻底地解决内存冗余和通信损耗问题,研究人员继而开发了3D张量并行方案。另外,我们还提及PyTorch2.0框架已开始原生支持张量并行技术。

序列并行

序列并行,目前并没有一个统一的定义。我们主要介绍了两篇关于序列并行的工作。

第一篇是 Colossal-AI发表的论文: Sequence Parallelism: Long SequenceTraining from System Perspective

第二篇是 Megatron-LM 发表的论文:Reducing Activation Recomputation inLarge Transformer Models

虽然两者都叫序列并行(Sequence Parallelism),但是实际上解决的问题、方法都不一样。

前者主要是解决模型的输入长度(sequencelength)限制,而后者是主要是减少模型显存的。

同时,还谈到了在PyTorch2.0的版本中提供了对序列并行的支持,不过目前还没有realease.

多维混合并行

前面讲述了数据并行、张量并行、流水线并行等多种并行技术,但在进行上百亿/千亿级以上参数规模的超大模型预训练时,我们通常会组合多种并行技术一起使用。

我们对目前常见的分布式并行技术组合策略进行了探讨,同时,还讲述了目前业界知名大模型中所采用的多维混合并行方案。

自动并行

大模型的分布式训练是一个非常复杂的问题,目前的绝大多数的分布式训练系统,都依赖用户人工反复尝试以及系统专家经验来进行部署,造成严重的资源利用效率低下的问题。

因此,我们讲述了自动并行技术。主要针对目前一些经典的半自动(Mesh-tensorflow、GSPMD)或全自动(FlexFlow、Alpa)并行方案进行了相应的探讨。但目前自动并行方案在工业界落地的应用比较少。

MOE 并行

现在的模型越来越大,训练样本越来越多,每个样本都需要经过模型的全部计算,这就导致了训练成本的平方级增长。

而当我们希望在牺牲极少的计算效率的情况下,把模型规模提升上百倍、千倍,通常就需要使用 MOE并行。

我们对带MOE结构的分布式并行策略进行了讲解,同时,也讲述了业界的一些超大模型(Switch-Transformer、GLaM)的MOE并行方案。

分布式训练并行策略选择

上面讲述了各种分布式并行策略,以下是进行分布式训练时针对不同的服务器资源类型(单机多卡、多机多卡),如何选择并行策略非常粗略的概述。

单机单卡场景

当你的模型可以在单张 GPU 卡进行训练时,正常使用。

当你的模型不能在单张 GPU 卡进行训练时。

ZeRO+Offload CPU和 NVMe(可选的)。

启用以内存为中心的平铺。

如果最大层无法放置在单张GPU,则使用 ZeRO-启用以内存为中心的平铺(MCT)。它允许您通过自动分割层并按顺序执行来运行任意大的层。MCT减少了GPU上实时参数的数量,但不影响激活内存。

单机多卡场景

当你的模型可以在单张 GPU 卡进行训练时,可以选择 DDP或ZeRO:

DDP: 分布式 DP。

ZeR0: 可能会更快,也可能不会更快,具体取决于所使用的情况和配置。

当你的模型不能在单张 GPU卡进行训练时,可以选择PP、ZeRO、TP:

PP

ZeRO

TP

如果使用 NVLINK或 NVSwitch 进行节点内通信,这三者应该基本处于同等水平。如果没有这些,PP 将比TP或ZeRO 更快。TP的大小也可能产生影响,最好在您特定设置上进行试验以找到最优的方式。

注意:TP 几乎总是在单个节点内进行使用。即:TP 大小<=每个节点的 GPU 数。

多机多卡场景

当您服务器节点间网络通信速度较快时,可以选择ZeR0、PP+TP+DP:

ZeRO-因为它几乎不需要对模型进行任何修改。

PP+TP+DP-通信较少,但需要对模型进行大量更改。

当您服务器节点间网络通信速度较慢,并且 GPU内存仍然不足时,可以选择DP+PP+TP+ZeRO-1.

这里采用 PP 与 ZeR0-1进行混合并行,那么PP 能与 DeepSpeedZeR0 2/3一起训练吗?

答:PP+ZeRO 2/3不推荐一起训练。PP需要累积梯度(accumulategradients),但ZeR02需要对梯度进行分块(chunk)。即使能够实现,也没有真正的性能提升。

将两者结合使用来提高效率并不容易,PP+ZeR02实际上比ZeR02(无PP)更慢且内存效率低。

如果用户内存不足,用户可以使用ZeR03代替ZeRO2+PP。而正因为如此,在 DeepSpeed中,PP+ZeR02/3之间不兼容。但可以将PP与ZeRO1进行组合使用。

这里多说一点: 即使该方法效率不高,但是ColossalAl为了支持更多的并行训练方法。ColossalAl还是提供了ZeRO3+PP+TP一起组合的方案。

大模型混合精度训练 FP16 与 BF16 的对比

目前,进行大模型训练的时候,为了节约显存,混合精度训练基本上已经成为了标配。

而FP16混合精度已经成为主流大规模模型训练框架的默认选项,用于训练十亿到百亿规模的模型。但是用 FP16 训练巨型 LLM 模型却是一个禁忌,它将面临更多的稳定性挑战。

FP16 会经常溢出,导致数值不稳定、模型不收敛的情况!

为了避免溢出,这意味着你的权重必须保持很小。一种称为损失缩放(lossscaling)的技术有助于缓解这个问题,但是当模型变得非常大时,FP16较小的数值范围仍然是一个问题。

因此,你需要采用一些训练策略来稳定巨型模型的训练。

作为补救措施,NVIDIAAmpere GPU 提供了BF16浮点格式来缓解FP16的问题。但目前,但目前,BF16在一些平台上不被支持(因此,它的使用的可能广泛性会被限制)。

当使用 BF16 时,BF16 为指数保留了8位(与 FP32相同),为小数保留了7位。这意味着使用 BF16 我们可以保留与 FP32 相同的动态范围。但代价就是它的精度非常差(相对于FP16,损失了3位精度)。

但是在训练时,采用的随机梯度下降法及其变体,该方法有点像蹒跚而行,如果你这步没有找到完美的方向其实没关系你会在接下来的步骤中纠正自己。

无论使用 BF16还是 FP16,都有一个权重副本始终在 FP32 中 – 这是由优化器更新的内容。

16 位格式仅用于计算,优化器以全精度更新 FP32 权重,然后将它们转换为 16 位格式以用于下一次迭代。因此,不会发生精度损失。

虽然,之前有一些巨型大模型使用了 FP16 进行混合进行训练,但是从OPT-175、Bloom-176B、GLM130B的训练报告来看,BF16是更佳的一个解决方案,可以规避很多不必要的烦恼。

AI大模型从0到精通全套学习大礼包

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

只要你是真心想学AI大模型,我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!

如果你也想通过学大模型技术去帮助就业和转行,可以扫描下方链接👇👇
大模型重磅福利:入门进阶全套104G学习资源包免费分享!

在这里插入图片描述

01.从入门到精通的全套视频教程

包含提示词工程、RAG、Agent等技术点
在这里插入图片描述

02.AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线

在这里插入图片描述
在这里插入图片描述

03.学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

在这里插入图片描述
在这里插入图片描述

04.大模型面试题目详解

在这里插入图片描述

在这里插入图片描述

05.这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

在这里插入图片描述
在这里插入图片描述

智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

在这里插入图片描述
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

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

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐