用通俗易懂的方式讲解大模型分布式训练并行技术:序列并行

近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此,我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。

而利用AI集群,使深度学习算法更好地从大量数据中高效地训练出性能优良的大模型是分布式机器学习的首要目标。为了实现该目标,一般需要根据硬件资源与数据/模型规模的匹配情况,考虑对计算任务、训练数据和模型进行划分,从而进行分布式存储和分布式训练。因此,分布式训练相关技术值得我们进行深入分析其背后的机理。

码字不易,如果觉得我的文章能够能够给您带来帮助,期待您的点赞收藏加关注~~

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

  • 用通俗易懂的方式讲解大模型分布式训练并行技术:概述

  • 用通俗易懂的方式讲解大模型分布式训练并行技术:数据并行

  • 用通俗易懂的方式讲解大模型分布式训练并行技术:流水线并行

  • 用通俗易懂的方式讲解大模型分布式训练并行技术:张量并行

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

建立了大模型技术交流群,面试资料、技术文档、技术交流提升,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2060,备注:来自CSDN + 技术交流

在这里插入图片描述

本文为分布式训练并行技术的第五篇:序列并行。目前,有两篇关于序列并行的文章:

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

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

虽然两者都叫序列并行(Sequence Parallelism),但是实际上解决的问题、方法都不一样。前者主要是解决模型的输入长度(sequence length)限制,而后者是主要是减少模型显存的。下面将一一讲对其进行解。

序列并行(Colossal-AI)

Colossal-AI 序列并行诞生的背景是 self-attention 的内存需求是输入长度(sequence length)的2次方。其复杂度为 ,其中,n 是序列长度。换言之,长序列数据将增加中间activation内存使用量,从而限制设备的训练能力。

而现有的工作侧重于从算法的角度降低时间和空间复杂度。因此,作者提出了序列并行,这是一种内存高效的并行方法,可以帮助我们打破输入序列长度限制,并在 GPU 上有效地训练更长的序列;同时,该方法与大多数现有的并行技术兼容(例如:数据并行、流水线并行和张量并行)。

更重要的是,我们不再需要单个设备来保存整个序列。即在稀疏注意力的情况下,我们的序列并行使我们能够训练具有无限长序列的 Transformer。

图片

image.png

具体来说,我们将输入序列分割成多个块,并将每个块输入到其相应的设备(即 GPU)中。为了计算注意力输出,我们将环状通信与自注意力计算相结合,并提出了环自注意力(RSA)如下图所示。

图片

image.png

实验表明,当按批量大小和序列长度进行缩放时,序列并行表现良好。

图片

image.png

图片

image.png

当扩展到 64 个 NVIDIA P100 GPU 时,与张量并相比,该法分别实现了 13.7 倍和 3.0 倍的最大批量大小和序列长度。

通过稀疏注意力,序列可以处理具有超过 114K 个 Token 的序列,这比现有的在单个设备上保存整个序列的稀疏注意力运行长度超过 27 倍。

除此之外,与张量并行和流水线并行不同,序列并行不受超参数(例如:注意力头数、层数)限制。因此,只要序列长度能被序列并行大小整除,我们的序列并行就可以使用。

序列并行(Megatron-LM)

Megatron-LM 的初衷是考虑通过其他方式分摊张量并行中无法分摊的显存,因此提出了序列并行的方法。

虽然 Megatron-LM 引用了 Colossal-AI 的序列并行的这篇文章,但是这两者其实并不是一个东西。

Megatron-LM 只是借用了 Colossal-AI 把 Sequence 这个维度进行平均划分的思想。在 张量的基础上,将 Transformer 层中的 LayerNorm 以及 Dropout 的输入按输入长度(Sequence Length)维度进行了切分,使得各个设备上面只需要做一部分的 Dropout 和 LayerNorm 即可。

这样做的好处有:

  1. LayerNorm 和 Dropout 的计算被平摊到了各个设备上,减少了计算资源的浪费;

  2. LayerNorm 和 Dropout 所产生的激活值也被平摊到了各个设备上,进一步降低了显存开销。

在 Megatron-LM 序列并行的这篇论文中,首先分析了 Transformer 模型运行时的显存占用情况。

图片

image.png

假设输入长度为 s ,batch size为 b ,hidden dim为 h ,attention head数量为 a ,则每一层 Transformer(上图的灰色区域)的显存占用:

图片

image.png

当我们开启了张量并行之后,上述Transformer层中的部分模块的显存可以被分摊到不同的设备之间。如下图所示,不能被分摊的部分主要是两个 LayerNorm 块的输入和输出:4bsh ;两个 dropout mask 块:2bsh ;一共是 10bsh。

图片

image.png

假设张量并行大小为t,因此,每个设备每一层 Transformer 的显存占用为:

图片

image.png

下面开启张量并行以及序列并行,Transformer 层中的 LayerNorm 和 Dropout 块也会被切分,对 Tensor 在 Sequence 维度进行切分,切分数量等于张量并行大小。

图片

image.png

每个设备每一层 Transformer 的显存占用为:

图片

image.png

当然,做了额外的切分就会带来通信方式的改变。

Transformer 层的张量并行通信是由正向传播两个All-Reduce以及反向传播两个All-Reduce组成。

而序列并行由于对 Sequence 维度进行了划分,All-Reduce在这里已经不合适了。

为了收集在各个设备上进行序列并行所产生的结果,需要插入All-Gather算子;而为了使得张量并行所产生的结果可以传入序列并行层,需要插入Reduce-Scatter算子。

在下图中, 所代表的就是前向传播的 All-Gather,反向传播的 Reduce-Scatter, 则是相反的操作。

图片

image.png

因此,我们可以清楚地看到,在 Megatron-LM 同时开启序列并行和模型并行时,每一个 Transformer 层完成一次前向传播和反向传播一共有 4 个 All-Gather 和 4 个 Reduce-Scatter 算子。乍一看,通信的操作比 Megatron-LM 仅开启张量并行多,但其实不然。因为,一个All-Reduce就相当于一个 Reduce-Scatter 和一个 All-Gather ,所以他们的总通信量是一样的。

通过添加序列并行并没有增加额外的通信开销,反而在后向传播代码的实现上,还把 Reduce-Scatter 和权重梯度的计算做了重叠,进一步减少了通信所占用的时间,使得提高设备的FLOPs Utilization成为了可能。

通过对Transformer层中所有Activation的消耗进行计算,发现在Transformer层里有一些操作是产生的激活值大,但计算量小。因此,就考虑干掉这一部分的激活值,通过选择性的进行激活重新计算(Selective Activation Recomputation)来进一步降低显存。与此同时,其他的激活值就通通保存,以节省重计算量。

通过对激活值的占比分析,序列并行降低了4成左右的激活值开销。选择性激活重新计算(selective activation recompute)也降低了4成左右的激活值开销。当两个特性都打开的时候,总共可以降低8成左右的激活值开销,尽管比全部激活值重计算的结果要稍高,但是在吞吐率上的提升还是非常的明显的。

图片

image.png

Pytorch 中的序列并行

上一篇张量并行的文章中提到 Pytorch 从 2.0.0 开始已经开始支持张量并行了。参考 Megatron-LM 的序列并行,目前在 Pytorch 中,也已经支持序列并行了,不过还没有 Release,具体示例如下所示:

# 通过设备网格根据给定的 world_size 创建分片计划
device_mesh = DeviceMesh("cuda", torch.arange(0, args.world_size))# 创建模型并移动到GPU
model = ToyModel().cuda(rank)# 为并行化模块创建优化器
LR = 0.25
optimizer = torch.optim.SGD(model.parameters(), lr=LR)# 根据给定的并行风格并行化模块,这里指定为序列并行
model = parallelize_module(model, device_mesh, SequenceParallel())# 对分片模块执行多次前向/后向传播和优化器对参数进行更新。
for _ in range(args.iter_nums):# 对于 SP,所有rank的输入可以不同。inp = torch.rand(20, 10).cuda(rank)output = model(inp)output.sum().backward()optimizer.step()

结语

总的来说,Colossal-AI 的序列并行是为了打破单设备上序列长度的限制。而 Megatron-LM 的序列并行是在显存上面下了功夫,可以用更少的设备去运行大模型。除此之外,从文章细节里面可以看到,部分的计算的冗余被消除了,且重叠了一部分的通信,使得设备可以花更多的时间用于计算上面。虽然,Colossal-AI 和 Megatron-LM 都有序列并行,但是两者解决的问题、方法都不一样。除此之外,在Pytorch中,也已经支持序列并行了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven_下载_安装_配置

文章参考:https://zhuanlan.zhihu.com/p/615382243 Maven简介 Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、测试、打包和发布等工作。 maven优点:…

31K+ stars 超炫酷的 Docker 可视化开源工具

31K stars 超炫酷的 Docker 可视化开源工具 原创 小奇 爱编程爱技术 2024-01-10 09:02 发表于北京 今天给大家分享一个适合开发人员使用的 Docker 可视化工具:LazyDocker。基于终端的一个可视化管理工具,支持健盘操作和鼠标点击。 相比 Portainer 功能没…

CCF模拟题 202309-2 坐标变换(其二)

问题描述 试题编号: 202309-2 试题名称: 坐标变换(其二) 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 对于平面直角坐标系上的坐标 (x,y),小 P 定义了如下两…

为什么推荐大家使用动态住宅ip?怎么选择?

编辑代理ip的类型有很多,本文来介绍什么是动态住宅ip,为什么很多博主都推荐使用动态住宅ip,他到底有什么好处呢,接下来我们来学习一下。 一、什么是动态住宅ip 网络上的代理供应商很多,通常我们接触的比较多的几种类…

Springboot3+EasyExcel由浅入深

环境介绍 技术栈 springboot3easyexcel 软件 版本 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、…

【JVM的相关参数和调优】

文章目录 JVM 调优的参数类型一、标配参数二、X参数三、XX参数 JVM 调优的常用参数 JVM 调优的参数类型 一、标配参数 这类此参数在jdk的各个版本之间很少会变化,基本不改变 java -version,查看当前电脑上的jdk的版本信息 java -help,查看…

安卓(雷电)模拟器清除屏幕密码[亲测可用]

1、设置磁盘可写 启动模拟器,然后在模拟器的设置界面,设置磁盘共享为可写入,重启模拟器,如下图: 2、找到模拟器目录 返回桌面,右键模拟器图标,打开文件所在目录,如下图&#xff1a…

Casper Network (CSPR)2024 年愿景:通过投资促进增长

Casper Network (CSPR)是行业领先的 Layer-1 区块链网络之一,通过推出了一系列值得关注的技术改进和倡议,已经为 2024 年做好了准备。 在过去的一年里,Casper Network (CSPR)不断取得里程碑式的进展,例如推…

Paddle模型转ONNX

深度学习模型在硬件加速器上的部署常常要用到ONNX(Open Neural Network Exchange,开放神经网络交换)格式,也可以通过ONNX实现不同AI框架(如Pytorch、TensorFlow、Caffe2、PaddlePaddle等)之间的模型转换。 …

Transformer详解【学习笔记】

文章目录 1、Transformer绪论2、Encoders和Decoder2.1 Encoders2.1.1 输入部分2.1.2 多头注意力机制2.1.3 残差2.1.4 LayNorm(Layer Normalization)2.1.5 前馈神经网路 2.2 Decoder2.2.1 多头注意力机制2.2.2 交互层 1、Transformer绪论 Transformer在做…

为什么企业容易陷入“自嗨式营销”,媒介盒子分析

互联网时代,各类信息都传播的非常快,同时信息技术的成熟也让许多企业可以监测广告效果,比如曝光、互动、转化等都可以通过数据体现,然而很多企业在营销过程中却发现,大部分的钱、精力、人力等都被浪费了。出现这种情况…

Git的简单使用说明

Git入门教程 git的最主要的作用:版本控制,协助开发 一.版本控制分类 ​​ 1.本地版本控制 ​​ 2.集中版本控制 ​​ 所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不…

制作 Kali 可启动 USB 驱动器

Kali USB驱动器,轻松安全,获取最新镜像,开始强大的安全测试! Kali 可启动 USB 驱动器的优点: 不会更改主机系统的硬盘驱动器或已安装的操作系统,并且要返回正常操作,您只需删除“Kali Live”U…

小手也能用的高性能鼠标,自定义空间还挺高,雷柏VT9Pro mini上手

今年搭载PAW3395传感器的电竞鼠标很受欢迎,雷柏就出了不少型号,满足各种喜好的玩家选择,像是近期新出的搭载3395高定版的VT9Pro和VT9Pro mini,就在轻量化的基础上,满足了各种手型的玩家的使用需要,而且价格…

Whale 帷幄创始人叶生晅:AIGC 时代,营销的范式变了丨未来 AI 谈

「未来 AI 谈」是「Marteker 营销技术官」联合「Digital Frontier 首席数字官」共同发起的一档对话栏目,旨在探讨生成式 AI 的崛起对泛营销技术和营销自动化带来的影响,以期帮助全行业探索 AIGC 时代的新营销之路。 本期嘉宾:「Whale 帷幄」创…

Linux中DNS域名解析服务及实验

一、DNS介绍 1、DNS 是域名系统,应用层协议,是互联网的一项服务,是将域名转换成网络可以识别的IP地址,再通过IP地址访问主机。这种由文字组成的名称更容易记忆。 DNS是“域名系统"的英文缩写。它作为将域名和IP地址相互映…

如何提高匹配的精确度(多次学习)

我们工业自动化中,视觉软件匹配,都是学习一次,比如找到轮廓,旋转360度,也就是有360个轮廓,然后到图像中去找任意角度的目标。 这样的学习并不能一而概括全。 所以,我借鉴ai的方法,…

C#超市管理系统源码

C#超市管理系统源码 功能齐全的超市管理系统,专门美化过UI 请先附加数据库,否则无法进入系统 默认拥有最高权限账户为经理,密码为admin 压缩包内有使用说明

Cdd诊断数据控中的zz rc yy

如上图所示的Cdd Candela Diagnostic Descriptions 诊断数据库会话定义中有许多的标识符缩写,如zz rc LL xx 等 其实这些字母没有意义,它们只是唯一地标识对话框中的组合组件。

snmp协议配置

引言 SNMP(Simple Network Management Protocol)是一种网络管理协议,用于管理和监控网络设备、操作系统和应用程序。它提供了一组用于检索和修改网络设备配置、监视设备状态和性能的标准化方法。 SNMP 是一个客户端-服务器协议,…