一种数据并行的深度学习的参数交换方法和系统转让专利

申请号 : CN201810048349.0

文献号 : CN108304918B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 严欢夏正勋吕阿斌

申请人 : 中兴飞流信息科技有限公司

摘要 :

本发明实施例涉及人工智能领域,公开了一种数据并行的深度学习参数交换方法和系统。本发明中的数据并行的深度学习参数交换方法,包括:多个设备分别根据权值参数对数据样本进行训练,分别获得每个设备对应的梯度参数,多个设备位于至少一个节点中;根据第一预设规则,每个设备分别提取各自梯度参数的一部分;多个设备中存在一个第一类根设备,第一类根设备集合多个设备所提取的梯度参数,得到第一类模型参数;第一类根设备对第一类模型参数进行参数更新,获得用于下一次迭代计算的权值参数,并将用于下一次迭代计算的权值参数分发给除第一类根设备以外的其他设备,使得加快参数交换的速度,减少参数交换时间,提升深度学习训练性能。

权利要求 :

1.一种数据并行的深度学习的参数交换方法,其特征在于,包括:多个设备分别根据权值参数对数据样本进行训练,分别获得每个所述设备对应的梯度参数,所述多个设备位于至少一个节点中;

根据第一预设规则,每个所述设备分别提取各自梯度参数的一部分;

所述多个设备中存在一个第一类根设备,所述第一类根设备集合所述多个设备所提取的梯度参数,得到第一类模型参数;

所述第一类根设备对所述第一类模型参数进行参数更新,获得用于下一次迭代计算的权值参数,并将所述用于下一次迭代计算的权值参数分发给除所述第一类根设备以外的其他设备;

其中,所述第一预设规则包括所述设备对梯度参数的提取比例,和所述设备对梯度参数的提取位置。

2.根据权利要求1所述的数据并行的深度学习的参数交换方法,其特征在于,所述多个设备具体位于至少两个节点中,除所述第一类根设备所属节点外的每个节点的设备中存在一个第二类根设备;

所述第一类根设备集合所述多个设备所提取的梯度参数,得到第一类模型参数,具体包括:所述第一类根设备和所述第二类根设备分别集合所属节点中所有设备所提取的梯度参数,获得各自所属节点对应的第二类模型参数;

根据第二预设规则,所述第一类根设备和所述第二类根设备分别提取各自对应的第二类模型参数的一部分;

所述第一类根设备集合所述第一类根设备和所述第二类根设备所提取的第二类模型参数,得到所述第一类模型参数;

其中,所述第二预设规则包括所述第二类根设备对所述第二类模型参数的提取比例,和所述第二类根设备对所述第二类模型参数的提取位置。

3.根据权利要求2所述的数据并行的深度学习的参数交换方法,其特征在于,所述第一类根设备和所述第二类根设备分别集合所属节点中其他设备所提取的梯度参数,具体为:所述第一类根设备和所述第二类根设备分别通过总线集合所属节点中其他设备所提取的梯度参数。

4.根据权利要求2所述的数据并行的深度学习的参数交换方法,其特征在于,所述第一类根设备集合所述第二类根设备所提取的第二类模型参数,具体为:所述第一类根设备通过网络集合所述第二类根设备所提取的第二类模型参数。

5.根据权利要求2所述的数据并行的深度学习的参数交换方法,其特征在于,所述第一类根设备将用于下一次迭代计算的权值参数分发给除所述第一类根设备以外的其他设备,具体包括:所述第一类根设备将用于下一次迭代计算的权值参数分发给除所述第一类根设备所属节点以外的其他节点的第二类根设备;

所述第一类根设备将所述用于下一次迭代计算的权值参数分发给所属节点中除所述第一类根设备外的其他设备;

所述第二类根设备将所述用于下一次迭代计算的权值参数分发给所属节点中除所述第二类根设备外的其他设备。

6.根据权利要求2所述的数据并行的深度学习的参数交换方法,其特征在于,所述第一类根设备和所述第二类根设备分别集合所属节点中所有设备所提取的梯度参数,获得各自所属节点对应的第二类模型参数,具体包括:所述第一类根设备和/或所述第二类根设备在收到一个设备所提取的梯度参数后,根据所收到的梯度参数的位置,将所收到的梯度参数与所述第二类根设备对应位置的梯度参数进行累加平均,并在将收到的每个设备所提取的梯度参数分别累加平均后进行组合,获得第二类模型参数。

7.根据权利要求1所述的数据并行的深度学习的参数交换方法,其特征在于,所述第一类根设备集合所述多个设备所提取的梯度参数,得到第一类模型参数,具体包括:所述第一类根设备在收到一个设备所提取的梯度参数后,根据所收到的梯度参数的位置,将所收到的梯度参数与所述第一类根设备对应位置的梯度参数进行累加平均;

所述第一类根设备在将收到的各设备所提取的梯度参数分别累加平均后进行组合,获得第一类模型参数。

8.根据权利要求2所述的数据并行的深度学习的参数交换方法,其特征在于,所述提取比例和所述第二类根设备的数量有关。

9.根据权利要求1所述的数据并行的深度学习的参数交换方法,其特征在于,所述多个设备分别根据权值参数对数据样本进行训练中,每个设备所训练的数据样本不相同。

10.根据权利要求1所述的数据并行的深度学习的参数交换方法,其特征在于,所述设备为图形处理器GPU。

11.根据权利要求1所述的数据并行的深度学习的参数交换方法,其特征在于,所述节点为计算机。

12.根据权利要求1所述的数据并行的深度学习的参数交换方法,其特征在于,所述第一类根设备为预先从所述多个设备中确定出。

13.一种数据并行的深度学习的参数交换系统,其特征在于,包括:位于至少一个节点中的多个设备,所述多个设备中的一个为第一类根设备;

所述设备,用于根据权值参数对数据样本进行训练,获得与所述设备对应的梯度参数;

所述设备,还用于根据第一预设规则,提取所对应的梯度参数的一部分;

所述第一类根设备,用于集合所述多个设备所提取的梯度参数,得到第一类模型参数;

所述第一类根设备,还用于对所述第一类模型参数进行参数更新,获得用于下一次迭代计算的权值参数,并将所述用于下一次迭代计算的权值参数分发给除所述第一类根设备以外的其他设备;

其中,所述第一预设规则包括所述设备对梯度参数的提取比例,和所述设备对梯度参数的提取位置。

14.根据权利要求13所述的数据并行的深度学习的参数交换系统,其特征在于,所述多个设备具体位于至少两个节点中,除所述第一类根设备所属节点外的每个节点的设备中存在一个第二类根设备;

所述第二类根设备,用于集合所属节点中其他设备所提取的梯度参数,获得对应的第二类模型参数;

所述第二类根设备,还用于根据第二预设规则,分别提取所对应的第二类模型参数的一部分;

所述第一类根设备,具体用于集合所属节点中其他设备所提取的梯度参数,获得对应的第二类模型参数;

所述第一类根设备,还具体用于根据第二预设规则,分别提取所对应的第二类模型参数的一部分;

所述第一类根设备,还具体用于集合所述第一类根设备和所述第二类根设备所提取的第二类模型参数,得到所述第一类模型参数;

其中,所述第二预设规则包括所述第二类根设备对所述第二类模型参数的提取比例,和所述第二类根设备对所述第二类模型参数的提取位置。

15.根据权利要求14所述的数据并行的深度学习的参数交换系统,其特征在于,所述第一类根设备,具体通过网络集合所述第二类根设备所提取的第二类模型参数。

16.根据权利要求14所述的数据并行的深度学习的参数交换系统,其特征在于,所述第一类根设备,具体用于将用于下一次迭代计算的权值参数分发给除所述第一类根设备所属节点以外的其他节点的第二类根设备;

所述第一类根设备,具体用于将所述用于下一次迭代计算的权值参数分发给所属节点中除所述第一类根设备外的其他设备;

所述第二类根设备,具体用于将所述用于下一次迭代计算的权值参数分发给所属节点中除所述第二类根设备外的其他设备。

17.根据权利要求13所述的数据并行的深度学习的参数交换系统,其特征在于,所述设备为图形处理器GPU。

说明书 :

一种数据并行的深度学习的参数交换方法和系统

技术领域

[0001] 本发明实施例涉及人工智能领域,特别涉及数据并行的深度学习的参数交换技术。

背景技术

[0002] 深度神经网络(Deep Neural Networks,简称DNN)是近年来深度学习领域中的研究热点,在各个行业产生了广泛的应用。DNN具有深层结构、数千万参数需要学习,这导致训练非常耗时。目前用于深度学习网络的加速方式主要有“数据并行”和“模型并行”两种。
[0003] (1)数据并行:指对源数据集合中的元素同时(即并行)执行相同操作的情况。在数据并行操作中,将对源数据集合进行分区,以便多个并行处理单元能够同时对不同的子数据集合进行操作。(2)模型并行:适当拆分模型到不同的计算单元上,利用任务可并行性达到整个模型在计算过程中并行化效果。
[0004] 现在主流的计算框架一般都支持数据并行方式。数据并行方式下每个GPU设备训练一次迭代(也称为mini-batch)需要将参数交换到其它GPU设备上,所以如何提高单机多卡和多机多卡的参数交换性能成为重点。现在一般采用同步或者异步(或者是半同步)的方式来进行参数交换,提高参数交换的性能。
[0005] 发明人发现现有技术中至少存在如下问题:在现有参数交换的过程中,每次都需要交换模型的全部参数,如果在模型较大的情况下,尤其是在跨节点通过网络来进行交换的情况下,交换的时间会成为整个模型训练的性能瓶颈。

发明内容

[0006] 本发明实施方式的目的在于提供一种数据并行的深度学习的参数交换方法和系统,使得加快参数交换的速度,减少参数交换时间,提升深度学习训练性能。
[0007] 为解决上述技术问题,本发明的实施方式提供了一种数据并行的深度学习的参数交换方法,包括:多个设备分别根据权值参数对数据样本进行训练,分别获得每个所述设备对应的梯度参数,所述多个设备位于至少一个节点中;根据第一预设规则,每个所述设备分别提取各自梯度参数的一部分;所述多个设备中存在一个第一类根设备,所述第一类根设备集合所述多个设备所提取的梯度参数,得到第一类模型参数;所述第一类根设备对所述第一类模型参数进行参数更新,获得用于下一次迭代计算的权值参数,并将所述用于下一次迭代计算的权值参数分发给除所述第一类根设备以外的其他设备。
[0008] 本发明的实施方式还提供了一种数据并行的深度学习的参数交换系统,包括:位于至少一个节点中的多个设备,所述多个设备中的一个为第一类根设备;所述设备,用于根据权值参数对数据样本进行训练,获得与所述设备对应的梯度参数;所述设备,还用于根据第一预设规则,提取所对应的梯度参数的一部分;所述第一类根设备,用于集合所述多个设备所提取的梯度参数,得到第一类模型参数;所述第一类根设备,还用于对所述第一类模型参数进行参数更新,获得用于下一次迭代计算的权值参数,并将所述用于下一次迭代计算的权值参数分发给除所述第一类根设备以外的其他设备。
[0009] 本发明实施方式相对于现有技术而言,在深度学习的参数交换过程中,利用根设备集合各设备的部分参数时,无需交换设备中所有的模型参数,所以模型参数的传输量大大减小。本发明实施方式中在一次训练完成后,具体利用第一类根设备获取所有设备训练后的部分梯度参数,并将收到的所有梯度参数集合,获得一份完整的模型参数,再利用集合后的模型参数进行参数更新,获得用于下一次迭代计算的权值参数,并将权值参数进行分发,使得各设备获得更新后的参数,准备下一次训练。其中,虽然各设备在传输梯度参数时,仅需传输部分,而之后根设备在集合后集合仍能获得所需数量的模型参数,不会影响到模型训练过程及其效果,保证了模型训练的准确性,同时提升了效率。
[0010] 作为进一步改进,所述多个设备具体位于至少两个节点中,除所述第一类根设备所属节点外的每个节点的设备中存在一个第二类根设备;所述第一类根设备集合所述多个设备所提取的梯度参数,得到第一类模型参数,具体包括:所述第一类根设备和所述第二类根设备分别集合所属节点中所有设备所提取的梯度参数,获得各自所属节点对应的第二类模型参数;根据第二预设规则,所述第一类根设备和所述第二类根设备分别提取各自对应的第二类模型参数的一部分;所述第一类根设备集合所述第一类根设备和所述第二类根设备所提取的第二类模型参数,得到所述第一类模型参数。进一步限定在应用于跨节点的参数交换时,不仅各节点之间的参数可以采用部分传输再集合的方式进行交换,同一节点中各设备的参数也可以采用部分传输再集合的方式进行交换,进一步加快参数交换的速度,减少参数交换时间,提升深度学习训练性能。
[0011] 作为进一步改进,所述第一类根设备和所述第二类根设备分别集合所属节点中其他设备所提取的梯度参数,具体为:所述第一类根设备和所述第二类根设备分别通过总线集合所属节点中其他设备所提取的梯度参数。进一步限定在同一节点内采用总线传输方式,进一步提升参数的传输速度。
[0012] 作为进一步改进,所述第一类根设备集合所述第二类根设备所提取的第二类模型参数,具体为:所述第一类根设备通过网络集合所述第二类根设备所提取的第二类模型参数。进一步限定在不同节点间采用网络传输方式,使得不同节点间的参数传输更为简便易行。
[0013] 作为进一步改进,所述第一类根设备将用于下一次迭代计算的权值参数分发给除所述第一类根设备以外的其他设备,具体包括:所述第一类根设备将用于下一次迭代计算的权值参数分发给除所述第一类根设备所属节点以外的其他节点的第二类根设备;所述第一类根设备将所述用于下一次迭代计算的权值参数分发给所属节点中除所述第一类根设备外的其他设备;所述第二类根设备将所述用于下一次迭代计算的权值参数分发给所属节点中除所述第二类根设备外的其他设备。进一步限定在分发更新后的参数时,采用根设备层层分发的方式进行传输,提升参数的传输效率。
[0014] 作为进一步改进,所述第一类根设备和所述第二类根设备分别集合所属节点中所有设备所提取的梯度参数,获得各自所属节点对应的第二类模型参数,具体包括:所述第一类根设备和/或所述第二类根设备在收到一个设备所提取的梯度参数后,根据所收到的梯度参数的位置,将所收到的梯度参数与所述第二类根设备对应位置的梯度参数进行累加平均,并在将收到的每个设备所提取的梯度参数分别累加平均后进行组合,获得第二类模型参数。进一步限定在同一节点内集合参数的过程中,采用先累加平均再组合的方式进行,使得集合后的参数包含各设备训练后的更多结果,进一步保证训练结果的准确性。
[0015] 作为进一步改进,所述第一类根设备集合所述多个设备所提取的梯度参数,得到第一类模型参数,具体包括:所述第一类根设备在收到一个设备所提取的梯度参数后,根据所收到的梯度参数的位置,将所收到的梯度参数与所述第一类根设备对应位置的梯度参数进行累加平均;所述第一类根设备在将收到的各设备所提取的梯度参数分别累加平均后进行组合,获得第一类模型参数。进一步限定在集合参数的过程中,采用先累加平均再组合的方式进行,使得集合后的参数包含各设备训练后的更多结果,进一步保证训练结果的准确性。
[0016] 作为进一步改进,所述第二预设规则包括:所述第二类根设备对第二类模型参数的提取比例,和所述第二类根设备对第二类模型参数的提取位置。进一步限定提取时需要包含提取比例和提取位置的提取规则,使得各设备提取的参数提取方式统一,便于操作。
[0017] 作为进一步改进,所述提取比例和所述第二类根设备的数量有关。限定提取时的比例和设备数量有关,实现多设备的参数被平均提取,提升深度学习模型的准确性。
[0018] 作为进一步改进,所述第一预设规则包括:所述设备对梯度参数的提取比例,和所述设备对梯度参数的提取位置。进一步限定提取时需要包含提取比例和提取位置的提取规则,使得各设备提取的参数提取方式统一,便于操作。
[0019] 作为进一步改进,所述多个设备分别根据权值参数对数据样本进行训练中,每个设备所训练的数据样本不相同。利用不同的设备训练不同的样本,减少每个设备所需训练的样本数量,加快训练速度。
[0020] 作为进一步改进,所述设备为图形处理器GPU。图形处理器(Graphics Processing Unit,简称GPU)有强大的计算能力,适合于加速深度神经网络训练。
[0021] 作为进一步改进,所述节点为计算机。利用计算机作为节点,实现更为简便。

附图说明

[0022] 一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
[0023] 图1是根据本发明第一实施方式中的一种数据并行的深度学习的参数交换方法流程图;
[0024] 图2是根据本发明第一实施方式中的一种数据并行的深度学习的参数交换方法所应用的深度学习系统结构示意图;
[0025] 图3是根据本发明第二实施方式中的一种数据并行的深度学习的参数交换方法流程图;
[0026] 图4是根据本发明第二实施方式中的一种数据并行的深度学习的参数交换方法所应用的深度学习系统结构示意图;
[0027] 图5是根据本发明第三实施方式中的一种数据并行的深度学习的参数交换方法流程图;
[0028] 图6是根据本发明第三实施方式中的一种数据并行的深度学习的参数交换方法所应用的深度学习系统结构示意图;
[0029] 图7是根据本发明第三实施方式中另一种数据并行的深度学习的参数交换方法所应用的另一种深度学习系统结构示意图。

具体实施方式

[0030] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。
[0031] 本发明的第一实施方式涉及一种数据并行的深度学习的参数交换方法。其流程如图1所示,具体如下:
[0032] 步骤101,预设第一类根设备。
[0033] 具体的说,本实施方式中具有多个设备,在这多个设备中,设定一个设备作为第一类根设备。
[0034] 更具体的说,这多个设备位于至少一个节点中,实际应用中的节点可以是计算机,设备可以是GPU,且计算机数有四个,同时,GPU数也可以是四个,分别位于四个计算机中,也就是说,这四个计算机中,每个计算机具有一个GPU用于深度学习训练,四个GPU中有一个作为第一类根设备。
[0035] 还需说明的是,本步骤中还包括对每个计算节点上的GPU设备进行初始化,具体如:对每个计算机的GPU进行唯一编号(cluster_rank),将cluster_rank为0的节点确定为整个集群的第一类根设备,参见图2所示的设备编号示意图,cluster_rank为0的为A机,cluster_rank为1的为B机,cluster_rank为2的为C机,cluster_rank为3的为D机,其中,A机中的GPU即作为本实施方式中的第一类根设备。
[0036] 步骤102,各设备分别获取数据样本。
[0037] 实际应用中,可以针对每个计算节点的GPU设备启动一个计算线程,并绑定相应的GPU设备。具体的说,本步骤中每个设备用于获取待训练的数据样本,具体可以通过两种方式获取数据。一种是直接从本地磁盘中读取数据,针对本地磁盘中的训练数据集,每个计算节点的数据集是相同的情况下,每个GPU设备根据自己的编号计算得到偏移量,然后数据集中根据偏移量获取本GPU设备需要读取的数据,通过这种方式可以将数据集分发到不同的设备上,且保证数据在各个GPU设备上不重复。另一种是从分布式的存储系统,可以先让每个计算节点从分布式文件系统中下载数据,然后按照从本地磁盘读取数据的方式进行处理。比如HDFS获取训练或者测试数据。每次从外部读取一个batch(供一次迭代计算所用数据量),并可以传输到每个GPU设备的显存中供计算。其中,数据样本可以是外部的训练或者测试数据集,如40万张图片集。
[0038] 值得一提的是,本实施方式中每个设备获取到的待训练的数据样本可以不相同。
[0039] 步骤103,各设备分别根据权值参数对数据样本进行训练。
[0040] 具体的说,首先各GPU下发初始权值w,具体如:A机中的GPU设备负责将初始化权值w参数分别下发给B机、C机和D机的GPU设备,然后每个GPU设备根据读取的batch个图片,进行深度学习的前向和后向计算,并计算出相应的梯度w'。具体的说,本步骤中GPU对样本数据根据深度学习网络进行前向和后向处理,具体包括模型的初始权值的生成和分配、网络的前向(Forward)和网络的后向(Backward)训练,目的是得到每轮迭代的梯度值(Gradient)。也就是说,本步骤中每个设备在训练完成后,将分别获得每个设备对应的梯度参数w’。
[0041] 步骤104,根据第一预设规则,每个设备分别提取各自梯度参数的一部分。
[0042] 具体的说,第一预设规则包括:设备对梯度参数的提取比例,和设备对梯度参数的提取位置。更具体的说,提取比例和提取位置可以和设备的数量有关。
[0043] 需要说明的是,每个GPU设备将梯度值w'按照设备数量分成C等份(C为计算节点的数量),并将1/C梯度参数发送给集群中的第一类根设备。
[0044] 步骤105,第一类根设备集合多个设备所提取的梯度参数。
[0045] 具体的说,集合可以是直接组合,也可以是经过处理后组合,从而得到第一类模型参数。
[0046] 实际应用中可以具体如:A机、B机、C机和D机中的GPU设备分别将大小为M的梯度参数w’分成1/4等份,A机的GPU(即第一类根设备)将收到的3份M/4大小的梯度参数,其中3份梯度参数分别来自B机、C机和D机,再结合自己的M/4梯度参数,将梯度参数合并成为一份完整的大小为M的梯度参数。
[0047] 其中还可增加具体做法是将收到的梯度参数和第一类根设备对应位置的梯度进行累加平均,也就是说,在第一类根设备集合多个设备所提取的梯度参数,得到第一类模型参数的过程中:第一类根设备在收到一个设备所提取的梯度参数后,根据所收到的梯度参数的位置,将所收到的梯度参数与第一类根设备对应位置的梯度参数进行累加平均,在将收到的各设备所提取的梯度参数分别累加平均后进行组合,获得第一类模型参数。
[0048] 举例来说,假设A机、B机、C机和D机分别将梯度参数w’分为四等分,并设定先后顺序,A机从B机处收到的M/4参数为四等分中处于第二顺序位的部分,A机中的GPU收到后将自身第二顺序位的参数与B机处收到的参数进行累加平均运算,之后,A机中的GPU利用相同的方法处理来自C机和D机的梯度参数,在均处理完后,A机中的GPU将第一顺序位的梯度参数部分与分别进行累加平均运算后的第二顺序位、第三顺序位和第四顺序位的梯度参数组合,最终获得第一类模型参数。
[0049] 步骤106,第一类根设备对第一类模型参数进行参数更新,获得用于下一次迭代计算的权值参数w,并将w分发给除第一类根设备以外的其他设备。
[0050] 具体的说,A机中的GPU设备负责根据最新的梯度值(即第一类模型参数)和学习率参数进行计算,得到新的权值参数w,该w值用于整个集群的其它设备进行下一轮迭代计算。A机将w值通过网络传输发送到集群内的其它节点的GPU设备。至此,下一轮迭代计算的参数已经发送到所有计算机的GPU设备上。
[0051] 之后,各GPU设备可以读取下一批数据,并根据新的权值参数进行训练,直至迭代次数达到上限。
[0052] 本实施方式相对于现有技术而言,在深度学习的参数交换过程中,利用根设备集合各设备的部分参数时,无需交换设备中所有的模型参数,所以模型参数的传输量大大减小。本实施方式中在一次训练完成后,具体利用第一类根设备获取所有设备训练后的部分梯度参数,并将收到的所有梯度参数集合,获得一份完整的模型参数,再利用集合后的模型参数进行参数更新,获得用于下一次迭代计算的权值参数,并将权值参数进行分发,使得各设备获得更新后的参数,准备下一次训练。其中,虽然各设备在传输梯度参数时,仅需传输部分,而之后根设备在集合后集合仍能获得所需数量的模型参数,不会影响到模型训练过程及其效果,保证了模型训练的准确性,同时提升了效率。另外,进一步限定在集合参数的过程中,采用先累加平均再组合的方式进行,使得集合后的参数包含各设备训练后的更多结果,进一步保证训练结果的准确性。此外,进一步限定提取时需要包含提取比例和提取位置的提取规则,使得各设备提取的参数提取方式统一,便于操作。同时,限定提取时的比例和设备数量有关,实现多设备的参数被平均提取,提升深度学习结果的准确性。而且还利用不同的设备训练不同的样本,减少每个设备所需训练的样本数量,加快训练速度。
[0053] 本发明的第二实施方式涉及一种数据并行的深度学习的参数交换方法。第二实施方式与第一实施方式大致相同,主要区别之处在于:在第一实施方式中,多设备位于多个节点,每个节点中具有一个设备。而在本发明第二实施方式中,多设备位于同一个节点,本申请中的方案同样适用于一个节点中的数据并行的深度学习的参数交换方法,应用场景广泛,实用性强。
[0054] 本实施方式中的流程图如图3所示,具体如下:
[0055] 步骤301,预设根设备。
[0056] 具体的说,本实施方式中的多设备编号示意图如图4所示,其中,给计算节点内的每个GPU设备进行唯一编号(solver_rank),编号为0的设备为根设备,solver_rank为0的为计算机中的GPU0,solver_rank为1的为GPU1,solver_rank为2的为GPU2,solver_rank为3的为GPU3。需要说明的是,由于本实施方式不涉及跨计算节点的设备,所以该根设备同样是第一类根设备。
[0057] 步骤302,各设备分别获取数据样本。
[0058] 实际应用中,同样可以针对每个计算节点的GPU设备启动一个计算线程,并绑定相应的GPU设备。
[0059] 需要说明的是,针对数据样本的获取方法,和第一实施方式中的步骤102相类似,在此不再赘述。另外,本实施方式中每个设备获取到的待训练的数据样本可以不相同。
[0060] 步骤303,各设备分别根据权值参数对数据样本进行训练。
[0061] 具体的说,在获取初始化权值w时,solver_rank为0的设备将权值w分别下发给其他设备。具体如:GPU0将权值w分发给GPU1、GPU2和GPU3。
[0062] 需要说明的是,具体训练方法与第一实施方式中的步骤103相类似,训练后获得对应各设备的第二类权值参数。
[0063] 步骤304,根据第二预设规则,每个设备分别提取各自梯度参数的一部分。
[0064] 具体的说,第二预设规则可以包括:第二类根设备对第二类模型参数的提取比例,和第二类根设备对第二类模型参数的提取位置。其中,提取比例可以和第二类根设备的数量有关。
[0065] 举例来说,每个GPU设备将梯度值w'按照设备数量分成N等份(N为计算机中的GPU数量),并将1/N梯度参数发送给本计算机中的第一类根设备。
[0066] 步骤305,第一类根设备集合多个设备所提取的梯度参数。
[0067] 具体的说,本步骤中集合可以是直接组合,也可以是经过处理后组合,从而得到第二类模型参数。
[0068] 举例来说,各GPU分别将大小为M的梯度参数w’分成1/4等份,GPU0(即第一类根设备)将收到的3份M/4大小的梯度参数,其中3份梯度参数分别来自GPU1、GPU2和GPU3,再结合自己的M/4梯度参数,将梯度参数合并成为一份完整的大小为M的梯度参数,其中还可增加具体做法是将收到的梯度参数和第一类根设备对应位置的梯度进行累加平均,也就是说,在第一类根设备集合多个设备所提取的梯度参数,得到第二类模型参数的过程中:第一类根设备在收到一个设备所提取的梯度参数后,根据所收到的梯度参数的位置,将所收到的梯度参数与第一类根设备对应位置的梯度参数进行累加平均,在将收到的各设备所提取的梯度参数分别累加平均后进行组合,获得第二类模型参数。具体方法与第一实施方式中步骤105中提到的方法相类似,在此不再赘述。
[0069] 需要说明的是,第一类根设备通过总线集合所属节点中其他设备所提取的梯度参数。
[0070] 步骤306,第一类根设备对第二类模型参数进行参数更新,获得用于下一次迭代计算的权值参数w,并将w分发给除第一类根设备以外的其他设备。
[0071] 具体的说,GPU0对步骤305中集合后的梯度参数进行参数更新,获得用于下一次迭代计算的权值参数w,并将w分发给GPU1、GPU2和GPU3。
[0072] 可见,本实施方式在深度学习的参数交换过程中,利用根设备集合各设备的部分参数时,无需交换设备中所有的模型参数,所以模型参数的传输量大大减小。本发明实施方式中在一次训练完成后,具体利用第一类根设备获取所有设备训练后的部分梯度参数,并将收到的所有梯度参数集合,获得一份完整的模型参数,再利用集合后的模型参数进行参数更新,获得用于下一次迭代计算的权值参数,并将权值参数进行分发,使得各设备获得更新后的参数,准备下一次训练。其中,虽然各设备在传输梯度参数时,仅需传输部分,而之后根设备在集合后集合仍能获得所需数量的模型参数,不会影响到模型训练过程及其效果,保证了模型训练的准确性,同时提升了效率。和第一实施方式结合,说明本申请中的方案同样适用于一个节点中的数据并行的深度学习的参数交换方法,应用场景广泛,实用性强。
[0073] 本发明的第三实施方式涉及一种数据并行的深度学习的参数交换方法。第三实施方式是在第一实施方式的基础上做了进一步改进,主要改进之处在于:在第一实施方式中,多设备位于多个节点,每个节点中具有一个设备。而本实施方式中多设备分别在多个节点,且每个节点具有多个设备。
[0074] 本实施方式中的流程图如图5所示,具体如下:
[0075] 步骤501,预设第一类根设备和第二类根设备。
[0076] 具体的说,本实施方式中的多设备编号示意图如图6所示,双机四GPU系统中,给每个计算节点内的每个GPU设备进行唯一编号(solver_rank),编号为0的设备为根设备,solver_rank为0的为计算机中的GPU0,solver_rank为1的为GPU1,solver_rank为2的为GPU2,solver_rank为3的为GPU3。需要说明的是,由于本实施方式涉及跨计算节点的设备,所以继续为每个计算节点中编号为0的设备再进行一次编号(cluster_rank),将cluster_rank为0的节点确定为整个集群的根节点。也就是说,本实施方式中E机的GPU0为第一类根设备,F机的GPU0为第二类根设备。
[0077] 步骤502,各设备分别获取数据样本。
[0078] 具体的说,针对本地磁盘中的训练数据集,每个计算节点的数据集是相同的情况下,每个GPU设备根据自己的编号计算得到偏移量,然后数据集中根据偏移量获取本GPU设备需要读取的数据。
[0079] 以双机4GPU为例,一共有8个GPU设备,分别通过solver_rank和cluster_rank进行区分。每个GPU的偏移量等于solver_rank+cluster_rank*4,其中4为每个计算节点的GPU的数量。每个GPU读取数据集文件时,如果当前数据为第n行,则用n除以8(8为整个集群的GPU的总数量)得到的余数为m,那么偏移量等于m的GPU设备则会获取到该数据。通过这种方式可以将数据集分发到不同的设备上,且保证数据在各个GPU设备上不重复。另外针对分布式的文件系统存储的数据集,还可以先让每个计算节点从分布式文件系统中下载数据,然后按照从本地磁盘读取数据的方式进行处理,在此不再赘述。
[0080] 步骤503,各设备分别根据权值参数对数据样本进行训练。
[0081] 具体的说,每个GPU设备根据初始权值w进行前向和后向计算,并得到梯度值w’。具体如:E机中solver_rank为0的设备负责将初始化权值w参数下发给F机的solver_rank为0的设备,F机的solver_rank为0的设备接受到w参数以后,下发给本节点的其它设备。然后每个GPU设备根据读取的batch个图片,进行深度学习的前向和后向计算,并计算出相应的梯度w'。
[0082] 步骤504,根据第一预设规则,每个设备分别提取各自梯度参数的一部分。
[0083] 具体的说,本步骤中的每个设备指的是E机中的四个GPU和F机中的四个GPU,一共为八个GPU。其中的具体提取方法和第一实施方式中的步骤104相类似,在此不再赘述。
[0084] 步骤505,第一类根设备和第二类根设备分别集合所属节点中所有设备所提取的梯度参数,获得各自所属节点对应的第二类模型参数。
[0085] 具体的说,E机中的GPU0集合E机中GPU1、GPU2和GPU3所提取的梯度参数,获得对应E机的第二类模型参数,F机中的GPU0集合F机中GPU1、GPU2和GPU3所提取的梯度参数,获得对应F机的第二类模型参数。
[0086] 步骤506,根据第二预设规则,第一类根设备和第二类根设备分别提取各自对应的第二类模型参数的一部分。
[0087] 步骤507,第一类根设备集合第一类根设备和第二类根设备所提取的第二类模型参数,得到第一类模型参数。
[0088] 针对步骤506和507具体的说,E机和F机中的solver_rank为0的设备将大小为M的第二类模型参数分成N/2等份,然后cluster_rank不等于0的节点将参数发送给cluster_rank为0的节点。在实施例中,F机中的GPU0从第二类模型参数中提取M/2,之后将第M/2到M的梯度值(总量是M/2)发送给E机的GPU0。E机中的GPU0将收到的M/2梯度结合自己的M/2梯度,将上述梯度合并为一份完整的大小为M的梯度参数,即获得第一类模型参数。
[0089] 在第一类模型参数和第二类模型参数集合的过程中,第一类根设备和/或第二类根设备在收到一个设备所提取的梯度参数后,根据所收到的梯度参数的位置,将所收到的梯度参数与第二类根设备对应位置的梯度参数进行累加平均,并在将收到的每个设备所提取的梯度参数分别累加平均后进行组合,获得第二类模型参数。
[0090] 步骤508,第一类根设备对第一类模型参数进行参数更新,获得用于下一次迭代计算的权值参数w,并将w分发给除第一类根设备以外的其他设备。
[0091] 本步骤具体包括:第一类根设备将用于下一次迭代计算的权值参数分发给除第一类根设备所属节点以外的其他节点的第二类根设备;第一类根设备将用于下一次迭代计算的权值参数分发给所属节点中除第一类根设备外的其他设备;第二类根设备将用于下一次迭代计算的权值参数分发给所属节点中除第二类根设备外的其他设备。
[0092] 举例来说,E机中的GPU0将用于下一次迭代计算的权值参数w通过网络传输分发给F机中的GPU0,E机中的GPU0还可以将权值参数w通过主板上的PCIe总线分发给E机中的GPU1、GPU2和GPU3,F机中的GPU0在收到权值参数w后,也可以通过主板上的PCIe总线将权值参数w分发给F机中的GPU1、GPU2和GPU3。
[0093] 值得一提的是,本实施方式中的数据并行的深度学习的参数交换方法还可以应用于如图7所示的参数交换系统,该系统包括:数据获取模块1,模型训练模块2,参数交换模块3,设备管理模块4和数据传输模块5。
[0094] 其中,数据获取模块1,用于获取外部的训练或者测试数据集。数据获取模块1具体可以通过两种方式获取数据。一种是直接从本地磁盘中读取数据;另一种是从分布式的存储系统,比如HDFS获取训练或者测试数据。数据获取模块1每次从外部读取一个batch(这些数据供一次迭代计算),并传输到每个GPU设备的显存中供计算。模型训练模块2,用于对GPU中的数据根据深度学习网络进行前向和后向处理,具体包括模型的初始权值的生成和分配、网络的前向(Forward)和网络的后向(Backward)训练,目的是得到每轮迭代的梯度值(Gradient)。参数交换模块3,用于将每轮迭代的梯度值根据GPU的数量进行切分,并将切分后的参数传递到其它GPU设备,并完成参数更新。更新后的参数供每个GPU设备进行下一轮迭代计算使用。设备管理模块4,用于对GPU设备进行全局管理,包括分配单个计算节点内多个GPU设备的ID,确定根设备;同时还包括在多个计算节点之间,给各计算节点的根设备进行ID分配,确定整个集群的根设备。数据传输模块5,用于对需要交换的模型参数进行传输,涉及单个计算节点内的多个GPU设备之间的传输,同时也涉及在多个计算节点之间的参数传输。
[0095] 可见,本实施方式实现在多节点多GPU并行系统中,采用由参数提取和集合的方式减少参数的传输量,从而加快参数交换速度,提升深度学习性能。具体通过对训练数据集的偏移读取,可以让GPU设备实现“数据并行”读取,同时每轮迭代前向和后向计算完成以后,本计算节点内的GPU之间交换的参数只有1/N(N为本计算节点内的GPU数量),跨节点之间GPU之间交换的参数只有1/C(C为集群的计算节点的数量)。通过对每轮迭代计算的参数交换的数据量的“压缩”,极大的提升了参数交换的性能,并且“压缩”过的参数在节点内或者跨节点传输后的总量依然为M,不会影响到模型训练的效果,保证了模型训练的结果,同时提升了效率。
[0096] 同时,通过第一实施方式至第三实施方式,本申请中的方案可以应用于多种不同的应用场景,使得本申请应用范围十分广泛。
[0097] 上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
[0098] 本发明第四实施方式涉及一种数据并行的深度学习的参数交换系统,如图2所示,具体包括:位于四个节点中的四个设备,每个节点中分别有一个设备,四个设备中的一个为第一类根设备。
[0099] 其中,设备,用于根据权值参数对数据样本进行训练,获得与设备对应的梯度参数,还用于根据第一预设规则,提取所对应的梯度参数的一部分。
[0100] 第一类根设备,用于集合多个设备所提取的梯度参数,得到第一类模型参数,还用于对第一类模型参数进行参数更新,获得用于下一次迭代计算的权值参数,并将用于下一次迭代计算的权值参数分发给除第一类根设备以外的其他设备。
[0101] 需要说明的是,本实施方式中的设备为图形处理器GPU,节点为计算机。
[0102] 不难发现,本实施方式为与第一实施方式相对应的系统实施例,本实施方式可与第一实施方式互相配合实施。第一实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第一实施方式中。
[0103] 本发明第五实施方式涉及一种数据并行的深度学习的参数交换系统。第五实施方式与第四实施方式大致相同,主要区别之处在于:第四实施方式中,多设备位于多个节点,每个节点中具有一个设备。而在本发明第五实施方式中,多设备位于同一个节点,本申请中的方案同样适用于一个节点中的数据并行的深度学习的参数交换方法,应用场景广泛,实用性强。
[0104] 具体的说,本实施方式中的系统结构图如图4所示,需要说明的是,在参数交换时,同一节点中各个设备间可以采用总线方式传输。
[0105] 由于第二实施方式与本实施方式相互对应,因此本实施方式可与第二实施方式互相配合实施。第二实施方式中提到的相关技术细节在本实施方式中依然有效,在第二实施方式中所能达到的技术效果在本实施方式中也同样可以实现,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第二实施方式中。
[0106] 本发明第六实施方式涉及一种数据并行的深度学习的参数交换系统。第六实施方式是在第三实施方式的基础上做了进一步改进,主要改进之处在于:在第三实施方式中,多设备位于多个节点,每个节点中具有一个设备。而本实施方式中多设备分别在多个节点,且每个节点具有多个设备。
[0107] 具体的说,本实施方式中的系统结构图如图6所示,本实施方式中多个设备具体位于至少两个节点中,除第一类根设备所属节点外的每个节点的设备中存在一个第二类根设备。
[0108] 其中,第二类根设备,用于集合所属节点中其他设备所提取的梯度参数,获得对应的第二类模型参数,还用于根据第二预设规则,分别提取所对应的第二类模型参数的一部分。
[0109] 第一类根设备,具体用于集合所属节点中其他设备所提取的梯度参数,获得对应的第二类模型参数,还具体用于根据第二预设规则,分别提取所对应的第二类模型参数的一部分,还具体用于集合第一类根设备和第二类根设备所提取的第二类模型参数,得到第一类模型参数。
[0110] 需要说明的是,第一类根设备,具体用于将用于下一次迭代计算的权值参数分发给除第一类根设备所属节点以外的其他节点的第二类根设备;具体用于将用于下一次迭代计算的权值参数分发给所属节点中除第一类根设备外的其他设备。
[0111] 第二类根设备,具体用于将用于下一次迭代计算的权值参数分发给所属节点中除第二类根设备外的其他设备。
[0112] 值得一提的是,第一类根设备具体通过网络集合第二类根设备所提取的第二类模型参数。
[0113] 不难发现,本实施方式为与第三实施方式相对应的系统实施例,本实施方式可与第三实施方式互相配合实施。第三实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第三实施方式中。
[0114] 本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(RON,Read-OCly NeNory)、随机存取存储器(RAN,RaCdoN Access NeNory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0115] 本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。