一文读懂:AI大模型分布式训练并行技术

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

img

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

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

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

img

1、数据并行

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

img

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

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

2、流水线并行

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

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

img

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

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

img

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

3、张量并行

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

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

img

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

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

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

img

4、序列并行

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

img

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

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

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

img

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

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

5、多维混合并行

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

img

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

img

6、自动并行

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

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

7、MOE 并行

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

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

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

img

8、分布式训练并行策略选择

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

单机单卡场景

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

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

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

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

img

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

单机多卡场景

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

DDP: 分布式 DP。

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

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

PP

ZeRO

TP

img

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

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

多机多卡场景

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

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

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

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

img

这里采用 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进行组合使用。

img

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

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

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

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

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

img

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

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

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

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

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

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

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

img

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

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

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

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值