并行编程——Mindspore大规模分布式并行基本概念学习(一)

文章大纲

引言

在当今信息爆炸的时代,大规模分布式并行计算已成为解决复杂计算问题的关键技术。它通过将任务分散到多个处理器上并行处理,极大地提高了计算效率和处理能力。这种技术使得我们能够处理前所未有的大数据量,并在科学研究、商业分析、人工智能等领域发挥着重要作用。随着技术的不断进步,大规模分布式并行计算将继续推动创新的边界,为解决全球性挑战提供强大的计算支持,基于Mindspore官方教程整理。

一、分布式并行的类型

在深度学习中,当数据集和参数量的规模越来越大,训练所需的时间和硬件资源会随之增加,最后会变成制约训练的瓶颈。分布式并行训练,可以降低对内存、计算性能等硬件的需求,是进行训练的重要优化手段。根据并行的原理及模式不同,业界主流的并行类型有以下几种:

分布式并行是在集合通信基础上完成的,并行的类型是基于不同的角度进行划分的,以模型还是数据来进行切分。

1、数据并行(Data Parallel)

对数据进行切分的并行模式,一般按照batch维度切分,将数据分配到各个计算单元(worker)中,进行模型计算。

2、模型并行(Model Parallel)

对模型进行切分的并行模式。模型并行可分为:算子级模型并行、流水线模型并行、优化器模型并行、MOE混合专家并行等。(一张卡塞不下时用,对于切分要求比较高,有一些算法可以找到模型切分的多少块或者数据多少维度)

3、混合并行(Hybrid Parallel)

指涵盖数据并行和模型并行的并行模式(Mindspore上只支持这一种)

二、分布式应用的场景

1、超大规模图像分类与识别

这类网络往往有一个超大FC层以及loss层。在人脸识别和超大规模图像分类领域,分类数可能高达千万,FC层参数量能到达到10B级别。这类网络即使在数万分类

这种场景,模型并行相对数据并行来说性能也能更优,因为数据并行通信的是参数梯度,通信数据量等于参数量,而模型并行通信的是feature map,这类网络

feature map的数据量远小于参数的数据量,进而在通信上能够性能更优。

2、高分辨率3D图像处理

例如医疗领域的3维CT图像处理,典型网络是Unet-3D。这类场景,输入图像往往有亿级像素,模型的Feature Map非常大,叠加上比较深的网络结构,模型也往

往是数百GB;

3、NLP领域

NLP领域,目前基于Transformer结构的网络是SOTA方法,最典型网络的大网络有GPT2/3、Google翻译、FaceBook翻译等模型。基于Transformer结构的网

络,从bert的340M参数,transformer-xl 800M参数,gpt-2 1542M参数,NVIDIA megatron有8B参数、GPT-3的175B参数。往往更大的网络,就需要用更大的

数据来喂,训练这类网络,就需要使用数据并行叠加模型并行的方式,同时处理大规模数据集及大规模参数。

4、推荐网络 Wide&Deep/DeepFM/DCN等

在推荐领域,特征数量是百亿甚至千亿的规模,会有超大Embedding层,内存开销远超单卡内存,就必须使用模型并行把Embedding参数切分到集群。总的来说,不同场景的模型,结构各有不同,如下图所示,不同结构的模型,需要不同的并行策略,才能实现性能的最优。图中方块的大小表示layer的内存开

销。

三、集合通信

集合通信(Collective Communicatlons)是一个进程组的所有进程都参与的全局通信操作,其最为基础的操作有:发送send、接收receive、复制copy、组内进程障同步Barrier以及节点间进程同步(signal+wait)这几个最基本的操作经过组合构成了一组通信模板叫通信原语。

集合通信的难点在于通信效率以及网络硬件连接拓扑结构的最佳适用。

OpenMPI 也是组遵循并实现了这些通信源语。

常见的通信源语:

1、1对多的广播Broadcast

Broadcast属于1对多的通信原语,一个数据发送者,多个数据接收者,可以在集群内把一个节点自身的数据广播到其他节点上。如下图所示,圈圈表示集群中的训练加速卡节点,相同的颜色的小方块则代表相同的数据。当主节点0执行Broadcast时,数据即从主节点0被广播至其他节点。简而言之,相当于是参数复制的过程。

一般应用于:

  • 数据并行的参数初始化,确保每张卡上的初始参数是一致的;
  • All-Reduce里的Broadcast+Reduce组合里的Broadcast操作;
  • 分布式训练parameter server 参数服务器结构里的master节点Broadcast数据到worker节点,再从worker节点Reduce数据回master节点里的Broadcast操作:

2、1对多 Scatter

同Broadcast一样,Scatter也是一个1对多的通信原语,也是一个数据发送者,多个数据接收者,可以在集群内把一个节点自身的数据分发到其他节点上。与Broadcast不同的是Broadcast把主节点0的数据发送给所有节点,而Scatter则是将数据的进行切片再分发给集群内所有的节点,如下图所示,不相同的颜色的小方块代表不相同的数据,主节点0将数据分为四份分发到了节点0-3。其对应的反向操作即Gather。

3、多对1的收集Gather

同Broadcast一样,Scatter也是一个1对多的通信原语,也是一个数据发送者,多个数据接收者,可以在集群内把一个节点自身的数据分发到其他节点上。与

Broadcast不同的是Broadcast把主节点0的数据发送给所有节点,而Scatter则是将数据的进行切片再分发给集群内所有的节点,如下图所示,不相同的颜色的小方

块代表不相同的数据,主节点0将数据分为四份分发到了节点0-3。其对应的反向操作即Gather

一般应用于All-Gather組合里的Gather操作。

4、多对多的收集All-Gather

All-Gather属于多对多的通信原语,具有多个数据发送者,多个数据接收者,可以在集群内把多个节点的数据收集到一个主节点上(Gather),再把这个收集到的数据广播到其他节点上(Broadcast),即收集集群内所有的数据到所有的节点上。其反向操作对应ReduceScatter。

一般应用于:

  • All-Gather可应用于模型并行
  • 模型并行里前向计算里的参数全同步,需要用All-Gather把模型并行里将切分到不同的XPU上的参数全同步到一张XPU上才能进行前向计算。

5、多对1 Reduce

Reduce属于多对1的通信原语,具有多个数据发送者,一个数据接收者,可以在集群内把多个节点的数据规约运算到一个主节点上,Reuduce操作从集群内每个节点上获取一个输入数据,通过规约运算操作后,得到精简数据,如下图的SUM求累加和:节点0数值5、节点1数值6、节点2数值7、节点3数值8,经过SUM运算后累积和为26,即得到更为精简的数值,在Reduce原语里回会去调用Reduce SUM算子来完成这个求和累加。

一般应用于

  • All-Reduce里的Broadcast+Reduce组合里的reduce操作;
  • ReduceScatter组合里的Reduce操作;
  • 分布式训练parameter server 参数服务器结构里的master节点Broadcast数据到worker节点,再从worker节点Reduce数据回master节点里的Reduce操作;

6、多对多 ReduceScatter

ReduceScatter属于多对多的通信原语,具有多个数据发送者,多个数据接收者,其在集群内的所有节点上都按维度执行相同的Reduce规约运算,再将结果分发到集群内所有的节点上,Reduce-Scatter等价于节点个数次的Reduce规约运算操作,再后面执行节点个数的Scatter次操作,其反向操作是AllGather。如下图所示,先Reduce操作XPU 0-3的数据ReduceA(A0+A1+A2+A3)+B(B0+B1+B2+B3)+C(CO+C1+C2+C3)+D(D0+D1+D2+D3)到一张XPU上,再进行切分并Scatter到集群内所有的XPU卡上。

一般应用于:

  • ReduceScatter即可应用于数据并行也可应用于模型并行;
  • 数据并行All-Reduce里的ReduceScatter+Allgather组合里的ReduceScatter操作;
  • 模型并行里在前向AllGather后的反向计算里的ReduceScatter;

7、多对多的规约All-Reduce

All-Reduce属于多对多的通信原语,具有多个数据发送者,多个数据接收者,其在集群内的所有节点上都执行相同的Reduce操作,可以将集群内所有节点的数据规约运算得到的结果发送到所有的节点上。All-Reduce操作可通过在主节点上执行Reduce+Broadcast或Reduce-Scatter+All-Gather实现,如下图所示:先在主节点上执行Reduce得到规约累加和26,再把这个累加和26 Broadcast到其他的节点,这样整个集群内,每个节点的数值就都保持一致。

一般应用于

  • All-Reduce应用于数据并行;
  • 数据并行各种通信拓扑结构比如Ring All-Reduce、Tree All-Reduce里的All-Reduce操作;

8、All-To-All

All-To-All操作每一个节点的数据会Scatter到集群内所有节点上,同时每一个节点也会Gather集群内所有节点的数据。All-To-All是对All-Gather的扩展,区别是All-Gather操作中,不同节点向某一节点收集到的数据是相同的,而在All-To-All中,不同的节点向某一节点收集到的数据是不同的,如下图所示:

一般应用于

  • All-To-AIl应用于模型并行;
  • 横型并行里的矩阵转置;
  • 数据并行到模型并行的矩阵转置;

如下图是业界用于集合通信的常用通信源语和MindSpore框架的支持情况,可以看到MindSpore框架不仅支持业界所有主流的通信算子,也支持了一些自研的通

信算子如NeighborExchange和NeighborExchangeV2用于大Tensor切分的。

其中XPU代指的是业界一些常用的人工智能芯片设备,如GPU、NPU、TPU等

规约运算包含的操作符有:求累加和SUM、求累乘积PROD、求最大值MAX、求最小值MIN、逻辑与LAND、按位与BAND、逻辑或LOR、按位或BOR、逻辑异或LXOR、按位异或BOXR、求最大值和最小大的位置MAXLOC、求最小值和最小值的位置MINLOC等,这些规约运算也需要加速卡支持对应的算子才能生效。

未完待续...

相关推荐
长河11 小时前
Kafka系列教程 - Kafka 生产者 -2
分布式·kafka
小马爱打代码11 小时前
Kafka 可观测性最佳实践
分布式·kafka
FLGB11 小时前
Kafka topic消息被自动删除 排查
分布式·kafka
机智阳13 小时前
介绍一个InnoDB的数据页,和B+树的关系是什么?
java·数据结构·分布式·后端·b树
说淑人13 小时前
分布式 & CAP理论 & 总结
分布式
AI有温度14 小时前
图解大模型分布式训练:流水线并行
分布式
阿里技术14 小时前
HNSW 分布式构建实践
分布式·算法·方案·hnsw·向量检索
Java 第一深情14 小时前
分布式全文检索引擎ElasticSearch-基本概念介绍
分布式·elasticsearch·全文检索
说淑人14 小时前
分布式 & 分布式事务 & 总结
分布式·分布式事务
明达技术14 小时前
MR30分布式IO在新能源领域加氢站的应用
分布式