带你认识大模型训练关键算法:分布式训练Allreduce算法

摘要:如今的模型以及其参数越发复杂,仅仅一两张的卡已经没法知足现现在训练规模的要求,分布式训练应运而生。html

本文分享自华为云社区《分布式训练Allreduce算法》,原文做者:我抽签必中。算法

如今的模型以及其参数越发复杂,仅仅一两张的卡已经没法知足现现在训练规模的要求,分布式训练应运而生。服务器

分布式训练是怎样的?为何要使用Allreduce算法分布式训练又是如何进行通讯的?本文就带你了解大模型训练所必须的分布式训练Allreduce算法框架

通讯概念

咱们理解计算机的算法都是基于一个一个函数操做组合在一块儿获得的,那么咱们在讲解分布式算法以前,咱们必须先了解一下组成这种算法所应用于硬件的函数操做——集合通讯的基本概念,分布式

Broadcast(广播):将根服务器(Root Rank)上的数据分发广播给全部其余服务器(Rank)ide

Drawing Drawing

如图所示,当一台服务器计算完成了本身部分的参数数据,在分布式训练中想要把本身这部分数据同时发送给其余全部服务器,那么这种操做方式就叫作广播(broadcast)。函数

Scatter(散射):将根服务器上的数据散射为同等大小的数据块,每个其余服务器获得一个数据块ui

Drawing Drawing

如图所示,当一台服务器计算完成本身部分的参数数据,可是由于有时候服务器上所有的参数数据过大,因而咱们想要把这台服务器上的数据切分红几个同等大小的数据块(buffer),再按照序列(rank index)向其余服务器发送其中的一个数据块,这就叫作散射(Scatter)。url

Gather(汇集):将其余服务器上的数据块直接拼接到一块儿,根服务器(Root Rank)获取这些数据spa

Drawing Drawing

如图所示,当服务器都作了散射以后,每一个服务器得到了其余服务器的一个数据块,咱们将一台服务器得到的数据块拼接在一块儿的操做就叫作汇集(Gather)。

AllGather(全汇集):全部的服务器都作上述Gather的操做,因而全部服务器都得到了所有服务器上的数据

Drawing Drawing

如图所示,全部的服务器都将本身收到的数据块拼接在一块儿(都作汇集的操做),那么就是全汇集(AllGather)。

Reduce(规约):对全部服务器上的数据作一个规约操做(如最大值、求和),再将数据写入根服务器

Drawing

Drawing

如图所示,当全部服务器都作广播或散射的时候,咱们做为接收方的服务器收到各服务器发来的数据,咱们将这些收到的数据进行某种规约的操做(常见如求和,求最大值)后再存入本身服务器内存中,那么这就叫规约(Reduce)

AllReduce(全规约):对全部服务器上的数据作一个规约操做(如最大值、求和),再将数据写入根服务器

Drawing Drawing

如图所示,一样每个服务器都完成上述的规约操做,那么就是全规约(Allreduce)。这也就是分布式训练最基础的框架,将全部的数据经过规约操做集成到各个服务器中,各个服务器也就得到了彻底一致的、包含本来全部服务器上计算参数的规约数据。

ReduceScatter(散射规约):服务器将本身的数据分为同等大小的数据块,每一个服务器将根据index获得的数据作一个规约操做即,即先作Scatter再作Reduce。

image.png

概念中,咱们也经常遇到散射规约(ReduceScatter)这样的名词,简单来说,就是先作散射(Scatter),将服务器中数据切分红同等大小的数据块,再按照序列(Rank Index),每个服务器所得到的参数数据作规约(Reduce)。这就相似于全汇集,只不过咱们将数据不是简单拼接到一块儿而是作了规约操做(求和或最大值等操做)。

理解各类硬件测的基本概念之后,咱们对于分布式训练也应该有有一些理解了,便是分布式经过切分训练数据,让每一台服务器计算他所属的min-batch数据,再经过上述的reduce等操做进行同步,从而使得每一个服务器上的参数数据都是相同的。

分布式通讯算法

Parameter Server(PS)算法:根服务器将数据分红N份分到各个服务器上(Scatter),每一个服务器负责本身的那一份mini-batch的训练,获得梯度参数grad后,返回给根服务器上作累积(Reduce),获得更新的权重参数后,再广播给各个卡(broadcast)。

image.png
这是最初的分布式通讯框架,也是在几卡的较小规模的训练时,一种经常使用的方法,可是显而易见的当规模变大模型上则会出现严重问题:

  1. 每一轮的训练迭代都须要全部卡都将数据同步完作一次Reduce才算结束,并行的卡不少的时候,木桶效应就会很严重,一旦有一张卡速度较慢会拖慢整个集群的速度,计算效率低。
  2. Reducer服务器任务太重,成为瓶颈,全部的节点须要和Reducer进行数据、梯度和参数的通讯,当模型较大或者数据较大的时候,通讯开销很大,根节点收到巨量的数据,从而造成瓶颈。

Halving and doubling(HD)算法:服务器间两两通讯,每步服务器均可以得到对方全部的数据,从而不断进行,使得全部服务器所有数据。

image.png
这种算法规避了单节点瓶颈的问题,同时每一个节点都将它的发送、接受带宽都运用起来,是目前极大大规模通讯经常使用的方式,可是它也有着它的问题,便是在最后步数中会有大量数据传递,使得速度变慢。

若是服务器数为非二次幂的状况下,以下图13台服务器,多出的5台会在以前与以后作单向所有数据的通讯,其他服务器按照二次幂HD的方式进行通讯,详情请参考Rabenseifner R.的Optimization of Collective Reduction Operations论文。可是在实用场景下,最后是将HD计算后含有全部参数数据的最大块的数据直接粗暴地向多出来的那几台服务器发送,致使这步的通讯时间占比极大。

image.png
Ring算法:以环形相连,每张卡都有左手卡和右手卡,一个负责接收,一个负责发送,循环完成梯度累积,再循环作参数同步。分为Scatter Reduce和All Gather两个环节。

image.png

更为详细的图解
image.png

Ring算法在中等规模的运算中很是有优点,较小的传输数据量,无瓶颈,带宽彻底利用起来。
缺点则是在大型规模集群运算中,巨大的服务器内数据,极长的Ring环,Ring的这种切分数据块的方式就再也不占优点。

参考:

  1. http://research.baidu.com/bringing-hpc-techniques-deep-learning/
  2. https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/usage/collectives.html
  3. https://zhuanlan.zhihu.com/p/79030485
  4. Rabenseifner R. (2004) Optimization of Collective Reduction Operations. In: Bubak M., van Albada G.D., Sloot P.M.A., Dongarra J. (eds) Computational Science - ICCS 2004. ICCS 2004. Lecture Notes in Computer Science, vol 3036. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-24685-5_1

 

点击关注,第一时间了解华为云新鲜技术~

相关文章
相关标签/搜索