一种面向大规模深度神经网络的分布式训练方法

文档序号:115375 发布日期:2021-10-19 浏览:39次 >En<

阅读说明:本技术 一种面向大规模深度神经网络的分布式训练方法 (Distributed training method for large-scale deep neural network ) 是由 刘楚波 曾子豪 阳王东 于 2021-04-28 设计创作,主要内容包括:本发明属于高性能计算与人工智能的交叉领域,特别涉及一种面向大规模深度神经网络的分布式训练方法,具体为通过逐层调度参数同步过程与反向误差传播实现通信过程与计算过程重叠,进而隐藏通信开销加速模型训练,另外在每层的参数同步过程中,根据不同数据块的稀疏性和数据压缩开销动态地决策所要传输的数据实现对Ring-All-Reduce通信更细粒度的控制,从而最小化参数同步过程的通信开销大幅度提升性能,在不影响模型准确率和收敛率的情况下,使任意深度神经网络的分布式训练接近于线性加速,并利于集群的高效率扩展。(The invention belongs to the crossing field of high-performance calculation and artificial intelligence, and particularly relates to a distributed training method facing a large-scale deep neural network, which specifically comprises the steps of realizing the overlapping of a communication process and a calculation process by scheduling a parameter synchronization process and reverse error propagation layer by layer, further hiding the training of a communication overhead acceleration model, dynamically deciding data to be transmitted according to the sparsity and data compression overhead of different data blocks in the parameter synchronization process of each layer, and realizing the control of finer granularity of Ring-All-Reduce communication, thereby greatly improving the performance of the communication overhead of the parameter synchronization process, enabling the distributed training of the neural network with any depth to be close to linear acceleration under the condition of not influencing the accuracy and the convergence rate of the model, and being beneficial to the high-efficiency expansion of a cluster.)

一种面向大规模深度神经网络的分布式训练方法

技术领域

本发明属于高性能计算与人工智能的交叉领域,特别涉及一种面向大规模深度神经网络的分布式训练方法。

背景技术

深度神经网络是人工智能最有效的技术之一,其在图像分类、语音识别、文本处理等众多应用中有着出色的准确率和泛化性能。在现实应用中,有着数千万甚至数十亿参数的大规模深度神经网络往往能产生更高的准确率和鲁棒性。随着深度神经网络层数的加深以及单层内参数规模的扩大,单个CPU或GPU等硬件加速器的计算和存储能力逐渐不能满足训练需求。打破这一限制的直接方式是使用多个硬件加速器进行分布式深度神经网络的训练。

深度学习训练中各个样本参与的运算是相对独立的,因此数据并行是分布式深度学习中最简单且有效的并行方式。分布式环境中每个节点上都需存储整个神经网络模型参数的副本,并将批量的输入数据基于样本维度划分到各个节点上并行处理,训练过程中每次迭代的反向梯度更新时需要对所有节点的参数进行同步以确保模型训练的准确性与收敛性。数据并行根据不同的通信机制可分为参数服务器架构和AllReduce架构。参数服务器架构需要将各个计算节点的梯度数据汇总到参数服务器,该架构容易收到单点故障的影响,若参数服务器宕机则直接导致模型训练失败。目前更为流行的是AllReduce架构,该架构下各个计算节点之间直接进行数据交换。然而,随着深度神经网络模型参数量的扩大,计算节点间的通信量也成比例增加;另一方面,当应用到更大规模的集群环境中时,梯度汇总期间节点间的通信次数也随之增多,从而使得通信延迟成为分布式深度学习训练的性能瓶颈。

因此,为了降低分布式深度学习训练时的通信开销使之更接近于线性加速。

发明内容

为了解决现有技术中存在的上述技术问题,降低分布式深度学习训练时的通信开销使之更接近于线性加速,本发明提供一种面向大规模深度神经网络的分布式训练方法,以解决现有深度学习并行技术中的通信瓶颈,加速深度学习模型的分布式训练,其具体技术方案如下:

一种面向大规模深度神经网络的分布式训练方法,包括如下步骤:

S1:确定总的服务器数和每台机器可用GPU个数并搭建和初始化深度学习分布式环境,确定训练过程中整体的BatchSize和学习率以及参数更新阶段所有GPU计算节点的通信机制;

S2:各个GPU计算节点从数据集中读取相同批量大小且互不相交的样本数据,同时进行深度神经网络的前向计算;

S3:各个GPU计算节点基于各自读取的小批量样本数据逐层计算误差和局部梯度,并将局部梯度应用于本地模型参数的更新,同时保存该层的局部梯度数据;

S4:在所有GPU计算节点进入单个网络层参数同步过程时,将局部梯度数据与本地更新后的模型参数都划分为N个数据块,N为此分布式环境中GPU计算节点个数,计算模型参数和局部梯度数据各个数据块的稀疏性,对比将权重数据块或梯度数据块压缩后传输与不压缩直接传输数据的时间开销,并将带标记的数据块发送到相邻GPU计算节点;

S5:收到前一GPU计算节点的数据后,根据压缩标记判断是否需要解压缩,并将其累加到对应的本地权重参数或局部梯度数据存储区,之后根据所述数据块的最大稀疏性判断发送该GPU计算节点汇总的权重参数部分和数据块或局部梯度部分以及将数据块到下一个相邻GPU计算节点;

S6:重复执行S4与S5步骤N-1次,直至第一阶段的scatter-reduce数据通信完成,此时每个GPU计算节点中都有一个权重参数或者梯度数据数据块汇聚了所有GPU计算节点的信息,之后继续第二阶段allgather的数据通信,每个GPU计算节点接收到上一GPU计算节点的数据之后直接用其覆盖本地相同位置的数据块,迭代N-1次之后各个GPU计算节点都汇聚了其它所有GPU计算节点的数据,该阶段完成后所有GPU计算节点的模型参数保持一致;

S7:根据预先定义的模型训练最大迭代次数,重复执行步骤S2至S6,直至模型训练完成。

进一步的,所述步骤1具体包括:

S11:构建GPU计算节点并对每个GPU设备设置一个序列id号,确定深度神经网络训练时的超参数,包括BatchSize、学习率和迭代次数;

S12:构建深度神经网络的计算图,多个GPU计算节点采用数据并行模式,每个GPU计算节点上都保存完整深度神经网络模型的副本,并采用相同的权重参数初始化策略;

S13:确定参数同步阶段多个GPU计算节点的通信机制,数据并行训练的各个GPU计算节点的参数同步采用逐层Ring-All-Reduce通信模式,每个GPU计算节点只与相邻序号的GPU计算节点连接,末端序号的GPU计算节点与起始序号的GPU计算节点连接,使分布式环境中所有GPU计算节点的通信拓扑图构成环状结构,并逐层进行全局参数同步,在每层进行参数同步的通信过程中,各个GPU计算节点同时执行该层之前网络层的误差与局部梯度计算,使得反向传播过程中GPU计算节点的计算过程与通信过程重叠。

进一步的,所述全局参数同步,具体为:

所有GPU计算节点将该网络层需要通信的数据总量分为N个数据块逐个发送至下一相邻GPU计算节点,其中N为此分布式环境中总的GPU设备数,通信期间主要分为scatter-reduce和allgather两阶段,所述scatter-reduce阶段中每个GPU计算节点收到的数据块与相应位置的本地数据块累加并发送该部分和结果至下一相邻GPU计算节点,迭代N-1之后每个GPU计算节点中都有一个数据块汇聚了所有GPU计算节点的局部参数或梯度信息,其他位置的数据块则保存部分GPU计算节点的局部参数或梯度累加结果,所述allgather阶段中每个GPU计算节点将收到数据块覆盖本地相应位置的数据块并发送该数据块,同样迭代N-1次之后每个GPU计算节点的所有数据块都汇总全局信息,同时各个GPU节点的模型参数保持一致,在所述两个阶段的通信过程中所有GPU计算节点均同步发送相应的数据块至相邻GPU计算节点,在不进行数据压缩的情况下同步所有GPU计算节点中单个网络层权重参数的通信开销由下式表示:

式中T表示参数同步过程中的通信开销,N表示此分布式环境中总的GPU节点数,D表示单个网络层权重参数的数据量大小,B表示GPU节点之间的通信带宽。

进一步的,所述步骤S2具体为:每个GPU节点从数据集中随机读取BatchSize/N个样本数据,基于当前模型权重参数并行计算各个网络层的激活值,其中,GPU计算节点使用的模型参数相同,但输入数据不同,任意网络层的激活值在各个GPU计算节点中都不相同。

进一步的,所述步骤S3具体为:误差传递的方向与模型激活值计算的方向相反,每个GPU计算节点同时计算完一层的误差和局部梯度后进行该层的参数同步过程,同时各个GPU计算节点继续并行计算该层之前网络层的误差和局部梯度。

进一步的,所述步骤S4具体包括如下步骤:

S41:在单个网络层的参数同步过程中,将局部梯度张量与本地更新后的模型参数张量均划分为N个数据块,之后循环计算此2N个数据块的稀疏性并过滤稀疏性小的数据块,各个数据块的稀疏性由下式表示:

Swi=F(Wi)

Sgi=F(Gi)

式中F(·)表示稀疏性计算函数,Wi与Gi分别表示模型参数张量与局部梯度张量的第i个数据块,Swi与Sgi则分别表示模型参数张量与局部梯度张量第i个张量的稀疏度,其中1≤i≤N,若Swi≥Sgi则保存Wi删除Gi,反之则保存Gi删除Wi,并对保存的数据块打上数据属性标签即标记其属于模型参数张量或局部梯度张量;

S42:针对每个保存的数据块衡量其压缩后再传输与不压缩直接传输所需的时间开销,时间开销如下式所示:

式中Ta为不压缩数据块直接传输的时间开销,D为单个网络层的权重参数或梯度的数据量大小,B为GPU计算节点间的通信带宽;Tb为压缩后再传输数据块的总时间开销,Tc为压缩算法的执行时间,Compres(D)为压缩后该数据块所占的存储空间大小,Td为解压缩所需的时间;

若Ta≥Tb,直接传输该数据块至相邻GPU计算节点,反之则该数据块压缩并打上压缩标签后再传输。

进一步的,所述步骤S5包括如下步骤:

S51:将接受的数据块累加至本地对应的模型参数或梯度数据存储区后,随后进行模型参数部分和与梯度数据部分和的稀疏性对比,在对比稀疏性之前需进行数据转换,若接受到的数据块为模型参数数据,则将数据累加后保存,再将其复制并转换成梯度数据,反之转换成模型参数数据,数据转换公式如下:

Pw=η·(Pg′+Pg″)+(k+1)·W0

式中Pw为转换之后模型参数的部分和,Pg′为本地计算的局部梯度数据块,Pg″为接收到的梯度部分和数据块,η为学习率,k表示当前参数同步过程中已进行通信迭代次数,W0为该层前向计算是的权重参数,Pg为转换之后梯度数据的部分和,Pw′为本地更新后的模型参数,Pw″为接收到的模型参数部分和数据块。

S52:计算Pw和Pg数据块的稀疏性,保留稀疏性大的数据块,评估将其压缩后再传输与不压缩直接传输的时间开销,选择性能最优的方式将该数据块发送至下一相邻的GPU计算节点。

进一步的,所述每个网络层参数同步过程的速度受到环中相邻GPU计算节点之间最慢的数据传输限制。

本发明的有益效果是:

传统的深度神经网络数据并行训练方式通常由于参数同步过程中长时间的通信遭遇到性能瓶颈,尤其当训练更大规模的深度神经网络模型或是扩展到更大规模的集群环境中时,通信开销在整个训练周期中所占比例远高于计算开销。与相关技术相比,本发明提供的面向大规模深度神经网络的高效分布式训练方法采用数据并行模式以及Ring-All-Reduce通信架构,通过逐层调度参数同步过程与反向误差传播实现通信过程与计算过程重叠,进而隐藏通信开销加速模型训练,另外在每层的参数同步过程中,根据不同数据块的稀疏性和数据压缩开销动态地决策所要传输的数据实现对Ring-All-Reduce通信更细粒度的控制,从而最小化参数同步过程的通信开销大幅度提升性能,在不影响模型准确率和收敛率的情况下使任意深度神经网络的分布式训练接近于线性加速并利于集群的高效率扩展。

附图说明

图1为本发明方法的整体流程示意图;

图2为本发明的Ring-All-Reduce通信示意图;

图3为本发明的计算过程与参数同步过程并行执行示意图。

具体实施方式

为了使本发明的目的、技术方案和技术效果更加清楚明白,以下结合说明书附图,对本发明的实施例中的技术方案作进一步清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。

如图1-3所示,本发明提供的一种面向大规模深度神经网络的分布式训练方法,包括如下步骤:

S1:确定总的服务器数和每台机器可用GPU个数并搭建和初始化深度学习分布式环境,确定训练过程中整体的BatchSize和学习率以及参数更新阶段所有计算节点的通信机制。

具体的,总的服务器数以及每台服务器可用GPU个数应根据可用资源自行搭配,为了更加灵活的使用当前深度学习框架PyTorch或TensorFlow编写代码实施案例,每台机器可用的GPU个数应尽量相同,并为每个GPU设备设置一个序列id号,确定深度神经网络模型训练时的BatchSize,每个GPU一次处理的样本量即为BatchSize/N,其中N为此分布式环境中总的GPU个数;确定深度神经网络模型训练时的学习率,每个GPU计算节点在并行处理数据时应保持相同的学习率;定义所有训练的深度神经网络模型的计算图结构,多个GPU计算节点采用数据并行模式,每个计算节点上都保存完整深度神经网络模型的副本,并采用相同的权重参数初始化策略;确定参数同步阶段多GPU计算节点的通信机制,数据并行训练的各个GPU节点的参数同步采用逐层Ring-All-Reduce通信模式,每个GPU计算节点只与相邻序号的GPU计算节点连接,末端序号的GPU计算节点与起始序号的GPU计算节点连接,使分布式环境中所有GPU计算节点的通信拓扑图构成环状结构,并逐层进行同步模型参数的GPU计算节点全局通信,由于深度神经网络任意层的参数更新与该层之前网络层的反向误差传播并无数据依赖,因此在每层进行参数同步的通信过程中,各个GPU计算节点可同时执行该层之前网络层的误差与局部梯度计算,使得反向传播过程中GPU计算节点的计算时间与通信时间重叠,从而降低每轮数据迭代更新模型的时间进而加速整个训练过程。

其中,所述同步模型参数的GPU计算节点全局通信的具体过程为:所有GPU计算节点将该层需要通信的数据总量分为N个数据块逐个发送至下一相邻GPU计算节点,其中N为此分布式环境中总的GPU设备数,通信期间主要分为scatter-reduce和allgather两阶段,scatter-reduce阶段中每个GPU计算节点将收到的数据块与相应位置的本地数据块累加并发送该部分和结果至下一相邻节点,迭代N-1之后每个GPU计算节点中都有一个数据块汇聚了所有GPU计算节点的局部参数或梯度信息,其他位置的数据块则保存了部分GPU计算节点的局部参数或梯度累加结果,而allgather阶段中每个GPU计算节点则将收到数据块覆盖本地相应位置的数据块并发送该数据块,同样迭代N-1次之后每个GPU计算节点的所有数据块都汇总了全局信息,此时各个GPU计算节点的模型参数保持一致,需要说明的是,在两个阶段的通信过程中所有GPU计算节点都是同步发送相应的数据块至相邻节点,因此该通信模式与GPU计算节点数量无关,通信时间不随节点数量的增多而延长,只与所需传输的数据总量和GPU计算节点之间的通信带宽有关,在不进行数据压缩的情况下同步所有GPU计算节点中单个网络层权重参数的通信开销由下式表示:

式中T表示参数同步过程中的通信开销,N表示此分布式环境中总的GPU计算节点数,D表示单个网络层权重参数的数据量大小,B表示GPU计算节点之间的通信带宽。

S2:各个节点从数据集中读取相同批量大小且互不相交的样本数据同时进行深度神经网络的前向计算。

具体的,每个GPU计算节点从数据集中随机读取BatchSize/N个样本数据,基于当前模型权重参数并行计算各个网络层的激活值。可以理解的是,各个GPU计算节点使用的模型参数相同而输入数据不同,因此任意网络层的激活值在各个GPU计算节点中都不相同。

S3:各个节点基于各自读取的小批量样本数据逐层计算误差和局部梯度,并将局部梯度应用于本地模型参数的更新,同时保存该层的局部梯度数据。

具体的,误差传递的方向与模型激活值计算的方向相反,每个GPU计算节点同时计算完一层的误差和局部梯度后即可开始进行该层的参数同步过程,同时各个GPU计算节点继续并行计算该层之前网络层的误差和局部梯度,该方式使得计算与通信开销重叠,达到降低总的通信延迟加速网络模型训练的效果。

S4:所有GPU计算节点进入单个网络层参数同步过程,将局部梯度数据与本地更新后的模型参数都划分为N个数据块,N为此分布式环境中GPU计算节点个数,计算模型参数和局部梯度数据各个数据块的稀疏性,对比将权重数据块或梯度数据块压缩后传输与不压缩直接传输数据的时间开销并将带标记的数据块发送到相邻GPU计算节点。

需要说明的是,模型参数和梯度数据占有相同的存储空间而稀疏性可能不同,根据网络层不同数据块的稀疏性动态地决策所要传输的数据和是否对数据进行压缩,该策略相比之前的技术能够更细粒度的控制参数同步过程,从而最小化参数同步过程中的通信开销并大幅度加速深度神经网络模型的训练。

具体的,所述步骤S4包括如下步骤:

S41:在单个网络层的参数同步过程中,将局部梯度张量与本地更新后的模型参数张量都被划分为N个数据块,之后循环计算此2N个数据块的稀疏性并过滤稀疏性小的数据块,各个数据块的稀疏性由下式表示:

Swi=F(Wi)

Sgi=F(Gi)

式中F(·)表示稀疏性计算函数,Wi与Gi分别表示模型参数张量与局部梯度张量的第i个数据块,Swi与Sgi则分别表示模型参数张量与局部梯度张量第i个张量的稀疏度,其中1≤i≤N,若Swi≥Sgi则保存Wi删除Gi,反之则保存Gi删除Wi,并对保存的数据块打上数据属性标签即标记其属于模型参数张量或局部梯度张量;

S42:针对每个保存的数据块衡量其压缩后再传输与不压缩直接传输所需的时间开销,时间开销如下式所示:

式中Ta为不压缩数据块直接传输的时间开销,D为单个网络层的权重参数或梯度的数据量大小,B为GPU计算节点间的通信带宽;Tb为压缩后再传输数据块的总时间开销,Tc为压缩算法的执行时间,Compres(D)为压缩后该数据块所占的存储空间大小,Td为解压缩所需的时间;

若Ta≥Tb,直接传输该数据块至相邻节点,反之则该数据块压缩并打上压缩标签后再传输。

需要说明的是,上述的压缩算法并不局限于一种,可根据不同压缩算法的时间复杂度和能达到的压缩率进行灵活选择。

S5:收到前一节点的数据后,根据压缩标记判断是否需要解压缩,并将其累加到对应的本地权重参数或局部梯度数据存储区,之后根据该数据块的最大稀疏性判断发送该节点汇总的权重参数部分和数据块或局部梯度部分和数据块到下一个相邻节点。

可以理解的是,若接收到的数据块为梯度数据块则将其累加到本地的局部梯度数据存储区,反之则累加到本地权重参数存储区。

具体的,所述步骤S5包括如下步骤:

S51:将接受的数据块累加至本地对应的模型参数或梯度数据存储区后,随后进行模型参数部分和与梯度数据部分和的稀疏性对比,在对比稀疏性之前需进行数据转换,若接受到的数据块为模型参数数据,则将数据累加后保存,再将其复制并转换成梯度数据,反之转换成模型参数数据,数据转换公式如下:

Pw=η·(Pg′+Pg″)+(k+1)·W0

式中Pw为转换之后模型参数的部分和,Pg′为本地计算的局部梯度数据块,Pg″为接收到的梯度部分和数据块,η为学习率,k表示当前参数同步过程中已进行通信迭代次数,W0为该层前向计算是的权重参数,Pg为转换之后梯度数据的部分和,Pw′为本地更新后的模型参数,Pw″为接收到的模型参数部分和数据块。

S52:计算Pw和Pg数据块的稀疏性,并保留稀疏性大的数据块,评估将其压缩后再传输与不压缩直接传输的时间开销,选择性能最优的方式将该数据块发送至下一相邻的GPU节点。

S6:重复执行S4与S5步骤N-1次,直至第一阶段的scatter-reduce数据通信完成,此时每个计算节点中都有一个权重参数或者梯度数据数据块汇聚了所有计算节点的信息,之后继续第二阶段allgather的数据通信,与scatter-reduce阶段不同的是每个节点接收到上一节点的数据之后直接用其覆盖本地相同位置的数据块,同样迭代N-1次之后各个节点都汇聚了其它所有节点的数据,该阶段完成后所有节点的模型参数又保持一致。

需要说明的是,由于稀疏性不同使得每个数据块被压缩后的数据量大小也不相同,从而导致各个相邻GPU计算节点间的通信时间存在差异,因此每个网络层参数同步过程的速度受到环中相邻GPU节点之间最慢的数据传输限制。

S7:根据预先定义的模型训练最大迭代次数,重复执行步骤S2至S6,直至模型训练完成。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种云资源的划分方法、装置、设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!