一种面向卷积神经网络的多机多卡混合并行异步训练方法与流程

文档序号:15273287发布日期:2018-08-28 22:41阅读:328来源:国知局

本发明涉及一种应用于提高深度学习训练效率方法。



背景技术:

深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。目前,深度学习在几个重要领域获得了突破性的进展,分别是语音识别、图像识别领域、自然语言处理。深度学习是最接近人类大脑的智能学习方法,具有模型参数多,计算量大,训练数据的规模大,需要消耗较多的计算资源等特点。因此,对于大规模的训练数据和模型,必须加速训练可以提高工作效率,将难以完成的任务变成可能。

随着nvidia、amd等公司不断推进其gpu的大规模并行架构支持,面向通用计算的gpu(general-purposedgpu,gpgpu)已成为加速可并行应用程序的重要手段。得益于gpu众核(many-core)体系结构,程序在gpu系统上的运行速度相较于单核cpu往往提升几十倍乃至上千倍。利用gpu来训练深度神经网络,可以充分发挥其数以千计计算核心的高效并行计算能力,即使在使用海量训练数据的场景下,所耗费的时间大幅缩短,占用的服务器也更少。

目前大部分服务器都有8个或更多的gpu。原则上,使用更多的gpu可以大幅度地提升效率,但是处理器之间大量的数据交互会造成计算难度,并且通信也会大于计算开销。

所述并行架构包括数据并行、模型并行和混合并行架构。

(1)数据并行

数据并行是指对训练数据做切分,同时采用多个模型实例,对多个分片的数据并行训练。主要通过参数交换完成数据并行,通常由一个参数服务器(parameterserver)来帮助完成。在训练的过程中,多个训练过程相互独立,训练的结果,即模型的变化量δw需要汇报给参数服务器,由参数服务器负责更新为最新的模型w’=w–η·δw,然后再将最新的模型w’分发给训练程序,以便从新的起点开始训练。

数据并行有同步模式和异步模式之分。

同步模式中,所有训练程序同时训练一个批次的训练数据,完成后经过同步,再同时交换参数。参数交换完成后所有的训练程序就有了共同的新模型作为起点,再训练下一个批次。而异步模式中,训练程序完成一个批次的训练数据,立即和参数服务器交换参数,不考虑其他训练程序的状态。异步模式中一个训练程序的最新结果不会立刻体现在其他训练程序中,直到他们进行下次参数交换。参数服务器只是一个逻辑上的概念,不一定部署为独立的一台服务器。有时候它会附属在某一个训练程序上,有时也会将参数服务器按照模型划分为不同的分片,分别部署。

(2)模型并行

模型并行将模型拆分成几个分片,由几个训练单元分别持有,共同协作完成训练。当一个神经元的输入来自另一个训练单元上的神经元的输出时,会产生通信开销。大多数情况下,模型并行带来的通信开销和同步消耗超过数据并行计算,因此加速不及数据并行。但对于单机内存无法容纳的大模型来说,模型并行是一个很好的选择。令人遗憾的是,数据并行和模型并行都不能无限扩展。数据并行的训练程序太多时,不得不减小学习率,以保证训练过程的平稳;模型并行的分片太多时,神经元输出值的交换量会急剧增加,效率大幅下降。

(3)混合并行

同时进行模型并行和数据并行(即混合并行)也是另外一种优化方案。在一个集群中,既有模型并行,又有数据并行,例如,可以在同一台机器上采用模型并行化(在gpu之间切分模型),在机器之间采用数据并行化。

目前深度学习广泛应用在各个领域,随着大数据时代的到来,利用海量数据进行深度学习模型的训练成为主要的方法。当数据量增多,类别数增大,随之学习模型的参数也在增加。传统的深度学习并行方法都是数据并行,将数据划分为几个分片,每个gpu处理其中一份,并且进行参数交互。

假设一个深度神经网络结构有7层,共有4个gpu,图像数据的batch_size为64,图像特征的维度为128,类别数为100万,最后一层softmax层需要处理的数据参数如下:每个gpu处理的数据参数量为64*128w,模型参数量为128*100w,每个gpu针对不同的数据,在同一模型结构上进行训练,gpu间需要交互的参数量为4*128*100w。即,每个gpu利用部分数据,训练完整的模型,由于gpu间数据有差别,所以最后需要将每个gpu上计算的模型参数汇总。

如图3所示,a,b,c,d分别为每个gpu计算的模型参数,a+b+c+d为需要交互的参数。而4*128*100w这个数量级,严重影响模型的学习效率。

但对于类别数很多的数据,在深度神经网络结构中的最后一层全连接层上,进行参数交互的通信成本太高,花费的通信时间远高过参数计算的时间,成为大类别深度学习并行运算的瓶颈。以及多gpu的情况下,同步等待的时间过长,导致gpu利用率不高。



技术实现要素:

本发明设计目的是:针对多核gpu可以大幅度地提升效率,但是核与核之间大量的数据交互会增加计算难度,在最后一层全连接层上,由于进行参数交互的通信成本太高,超过了计算开销,因此采用数据并行和模型并行的混合架构,保持原有深度学习效果的同时,大幅度提升模型学习效率。同步式的参数通信交互方式严重影响gpu之间的参数共享,因此采用异步的通信方式,减少gpu等待的时间。

为实现上述目的,本发明采用如下技术方案:

一种面向卷积神经网络的多机多卡混合并行异步训练方法,包括如下步骤:

步骤s1:构建cnn(卷积神经网络)模型,包括输入层(inputlayer)、若干卷积层(convolutionlayer)、若干池化层(poolinglayer)、全连接层(fullyconnectedlayer,简称fc)和softmax层,并设置训练参数,保证各机各gpu能正常运行,网络通信没有异常;

步骤s2:将softmax层的数据并行改为模型并行,则一个完整模型划分为若干分片,分别对应在若干个gpu上进行计算,采用gpu的all-gather算法,使每个gpu上都能获得所有的数据信息,不再需要进行模型参数的通信;

步骤s3:改写softmax层的源代码,不在计算结果之前交换参数数据,而是将计算结果执行ringall-reduce通信算法操作;所述ringall-reduce通信算法将gpu卡的通信模式拼接成一个环形,从而减少随着卡数增加而带来的资源消耗;

步骤s4:多机多卡之间选出一块gpu作为参数服务器,其余所有的gpu都作为训练用。主要采用mxnet开源框架,提供支持其分布式训练特性parameterserver模型;

步骤s5:在parameterserver模型中,每个server只负责分到的部分参数(servers共同维持一个全局的共享参数),而每个work也只分到部分数据和处理任务;每个子节点都只维护自己分配到的参数,自己部分更新之后,将计算结果传回到主节点,进行全局的更新,主节点再向子节点传送新的参数,依此完成训练。

进一步地,所述输入层将数据内容识别为若干均匀矩阵架构,卷积层的激活函数为relu,其公式为

relu(x)=max(0,x);

其中,x为输入。

进一步地,所述softmax采用激活函数来做数据信息识别的分类,所述激活函数公式定义如下:假设一组数组,元素i的softmax值为

其中,vi表示v中的第i个元素,为所有元素指数的和。

进一步地,所述parameterserver模型与gpu之间的通信采用异步的方式,异步通信不需要停下来等一些机器执行完一个iteration(迭代),这大大减少了延时。为机器学习任务做了一些优化,能够大大减少网络流量和开销。

与现有技术相比,该面向卷积神经网络的多机多卡混合并行异步训练方法具有以下有益效果:

1.模型并行和数据并行混用,大幅度减少了通信开销,提高了gpu运行效率;

2.借助ringallreduce通信算法,以前都是一个一个向单个处理器发送数据,速度很慢,而ringall-reduce算法是同时发送,这样发送时间就大大减少,提高训练效率;

3.gpu之间的数据通信方式由同步换成异步,减少gpu等待的时间,不需要停下来等一些机器执行完一个迭代,这大大减少了延时,为机器学习任务做了一些优化,能够大大减少网络流量和开销;

4.可以线性增加gpu数量,集群增加更能提高训练效率。

附图说明

为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。

图1为本实施例数据并行的基本架构图;

图2为本实施例模型并行的基本架构图;

图3为本实施例gpu间数据并行ringall-reduce算法模型示意图;

图4为本实施例所述all-gather算法模型示意图;

图5为本实施例gpu分布式计算结构示意图;

图6为本实施例gpu卡环形通信模型示意图。

具体实施方式

下面将结合本发明实施例附图,对本发明实施例中的技术方案进行清楚、完整地描述。

实施例

本实施例提出的一种面向卷积神经网络的多机多卡混合并行异步训练方法,包括如下步骤:

步骤s1:构建cnn模型,设置训练参数,保证各机各gpu能正常运行,网络通信没有异常。

步骤s2:将最后一层改为模型并行,则一个完整模型划分为4个分片,分别在4个gpu上进行计算,不再需要进行模型参数的通信。传统的gpu并行方法中,最后一层同样是数据并行,而本发明采用gpu的all-gather算法,使每个gpu上都能获得所有的数据信息(本实施例为所有的图片特征)。gpu可以根据所有的数据信息来训练自己的模型分片,保证了模型的每个部分都是由所有的数据学习得到的。

进一步的实施步骤是:改写softmax层的源代码,不在计算结果之前交换参数数据,而是将结果计算得出之后,执行all-reduce操作。减少中间不必要的通信开销,即变为模型并行,非数据并行。

请参照图4,a,b,c,d视为每个gpu上处理的数据部分(指图片特征),数据量即为上述的64*128w,本实施例通过all-gather算法,将数据部分(即图片特征)传输至每块gpu上,以保证各个gpu上的数据完全一致。每个gpu只计算自己的模型分片,而传输的信息由模型参数变为特征参数,数据量上由4*128*100w变为4*128*25w。最后4个gpu上的模型分片组合为一个完整的模型。

步骤s3:多机多卡之间选出一块gpu作为参数服务器,其余所有的gpu都作为训练用。采用mxnet开源框架,提供支持其分布式训练特性parameterserver。通用的分布式系统通常都是:每次迭代都强制同步,通常在几十个节点上,它们的性能可以表现的很好,但是在大规模集群中,这样的每次迭代强制同步的机制会因为木桶效应变得很慢。由于是异步的通信,因此不需要停下来等一些机器执行完一个iteration,这大大减少了延时。为机器学习任务做了一些优化,能够大大减少网络流量和开销;宽松的一致性要求进一步减少了同步的成本和延时。parameterserver有诸多优点:允许算法设计者根据自身的情况来做算法收敛速度和系统性能之间的trade-off;使用了一个分布式hash表使得新的server节点可以随时动态的插入到集合中,因此新增一个节点不需要重新运行系统。

步骤s4:与parameterservergpu之间通信采用异步的方式,减少gpu等待的时间。由于是异步的通信,因此不需要停下来等一些机器执行完一个iteration(迭代),这大大减少了延时。为机器学习任务做了一些优化,能够大大减少网络流量和开销。

步骤s5:在parameterserver中,每个server实际上都只负责分到的部分参数(servers共同维持一个全局的共享参数),而每个work也只分到部分数据和处理任务;每个子节点都只维护自己分配到的参数,自己部分更新之后,将计算结果传回到主节点,进行全局的更新,主节点再向子节点传送新的参数,依此完成训练。

进一步的实施步骤是:将softmax层改为模型并行,则一个完整模型划分为4个分片,分别在4个gpu上进行计算,不再需要进行模型参数的通信。传统的gpu并行方法中,最后一层同样是数据并行,而本实施例采用gpu的all-gather算法,使每个gpu上都能获得所有的数据信息(本实施例为所有的图片特征)。gpu可以根据所有的数据信息来训练自己的模型分片,保证了模型的每个部分都是由所有的数据学习得到的。

进一步的实施步骤是:本实施例将softmax层由数据并行改为模型并行。对于网络结构中的其他层,需要交互的参数量不多,在gpu并行过程中,产生的通信成本不高,可以继续沿用传统的数据并行方法。但在softmax层中,模型参数的数量与数据类别数关系紧密,因此在大类别的深度学习中,最后一层的参数交互就成了提升算法性能的瓶颈。

上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1