이 애플리케이션의 일부 콘텐츠는 현재 사용할 수 없습니다.
이 상황이 계속되면 다음 주소로 문의하십시오피드백 및 연락
1. (WO2018099085) NEURAL NETWORK MODEL TRAINING METHOD AND DEVICE, AND CHIP
Document

说明书

发明名称 0001   0002   0003   0004   0005   0006   0007   0008   0009   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085   0086   0087   0088   0089   0090   0091   0092   0093   0094   0095   0096   0097   0098   0099   0100   0101   0102   0103   0104   0105   0106   0107   0108   0109   0110   0111   0112   0113   0114   0115   0116   0117   0118   0119   0120   0121   0122   0123   0124   0125   0126   0127   0128   0129   0130   0131   0132   0133   0134   0135   0136   0137   0138   0139   0140   0141   0142   0143   0144   0145   0146   0147   0148   0149   0150   0151   0152   0153   0154   0155   0156   0157   0158   0159   0160   0161   0162   0163   0164   0165   0166   0167   0168   0169   0170   0171   0172   0173   0174   0175   0176   0177   0178   0179   0180   0181   0182   0183   0184   0185   0186   0187   0188   0189   0190   0191   0192   0193   0194   0195   0196   0197   0198   0199   0200   0201   0202   0203   0204   0205   0206   0207  

权利要求书

1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21  

附图

0001   0002   0003   0004   0005   0006   0007   0008   0009   0010   0011  

说明书

发明名称 : 一种神经网络模型的训练方法、装置及芯片

[0001]
本申请要求在2016年11月29日提交中国专利局、申请号为201611076461.2、发明名称为“一种神经网络模型的训练方法、装置及芯片”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。

技术领域

[0002]
本申请实施例涉及神经网络模型训练领域,尤其涉及一种神经网络模型的训练方法、装置及芯片。

背景技术

[0003]
自深度学习在大规模图像分类数据集上获得巨大成功之后,无论是学术界、政府还是工业界都在大力推动深度学习的发展,并不断取得新的成绩。前馈神经网络模型作为深度学习中主要的一种模型形式,目前开始广泛应用于人脸识别、图像分类、目标检测、视频分析等任务,正在迅速被各大机器视觉厂商所采用用于智能化图像、视频处理等产品。目前前馈神经网络模型的深度越来越深,结构越来越复杂,例如,在很多智能图像、视频处理的任务中,数据每时每刻都在不断增加,这就要求训练系统的训练速度足够快且快速更新以满足最新的任务需求。
[0004]
目前前馈神经网络模型的训练加速主要依靠大规模分布式并行计算系统进行。目前较为常用的是参数服务器(英文可称为parameter sever)计算架构,配合有效的随机梯度下降算法(英文可称为Stochastic gradient descent)进行训练。图1示例性示出了现有技术中一种分布式系统架构示意图,如图1所示,包括服务器模块集合(英文可称为servers)101和工作模块集合(英文可称为workers)102,服务器模块集合可包括多个服务器模块(英文可称为server),工作模块集合可包括多个工作模块(英文可称为worker),服务器模块与主服务器(英文可称为master)节点类似,工作模块可指代计算执行器。分布式系统架构中包括多个分布式的节点,每个节点可包括一个或多个工作模块,也还可包括一个或多个服务器模块。
[0005]
以图1为例,对分布式系统架构下服务器模块和工作模块之间的信令交互过程进行详细介绍。图1中包括N个工作模块以及M个服务器模块,N和M为大于等于1的整数。神经网络模型包括L层,L为大于等于1的整数,每层包括多个模型参数。每个工作模块进行多次迭代计算,在每次迭代计算中,工作模块通过对L层进行前向算法和后向算法,得到神经网络模型中的模型参数的局部梯度,之后每个工作模块将所有模型参数的局部梯度上传至服务器模块,服务器模块计算出每个模型参数的全局梯度,并将全局梯度从服务器模块下拉至每个工作模块,每个工作模块根据得到的每个模型参数的全局梯度更新各个模型参数,并根据更新后的各个模型参数进行下一次迭代。
[0006]
上述方案中,由于神经网络模型的L层中包括大量的模型参数,因此应用该方案将导致各个工作模块向服务器模块上推大量的模型参数的局部梯度,以及从服务器模块下拉大量的模型参数的全局梯度,导致服务器模块和各个工作模块之间存在较大的信息通讯量的问题。
[0007]
发明内容
[0008]
本申请实施例提供一种神经网络模型的训练方法、装置及芯片,用以降低神经网络模型训练过程中的服务器模块和各个工作模块之间的通讯量,从而提高神经网络模型训练速度。
[0009]
第一方面,本申请实施例提供一种神经网络模型的训练方法,方法用于包括M个工作模块的训练系统,神经网络模型包括L层,M和L为大于等于1的整数;针对神经网络模型的L层中的每层,都使用M个工作模块中的至少一个工作模块对该层进行训练;方法包括:针对神经网络模型的L层中的每层,至少一个工作模块中的每个工作模块根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式;其中,模型训练方式包括数据并行训练方式和模型并行训练方式;模型参数集合包括该层的所有模型参数。至少一个工作模块中的每个工作模块都执行以下操作以对该层进行训练:
[0010]
在进行从第一层计算至第L层的前向算法、且j为大于1且小于等于L的整数的情况下:
[0011]
在该层为神经网络模型中的第一层的情况下:第一层为数据并行训练方式的情况下:工作模块将第一输入数据作为第一层的输入数据,对第一层的模型参数进行数据并行训练,第一输入数据为工作模块对应的初始训练数据;在第一层为模型并行训练方式的情况下:工作模块将第二输入数据作为工作模块第一层的输入数据,对第一层的模型参数进行模型并行训练,第二输入数据为至少一个工作模块对应的初始训练数据;
[0012]
在该层为神经网络模型中的第j层的情况下:在第j层为数据并行训练方式的情况下,工作模块将第一输出数据作为第j层的输入数据,对第j层的模型参数进行数据并行训练,第一输出数据为工作模块第j-1层训练的输出数据;在第j层为模型并行训练方式的情况下,工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,第二输出数据为m个工作模块第j-1层训练的输出数据,m个工作模块为第j-1层训练使用的一个或多个工作模块;m为大于等于1且小于等于M的整数;其中,L层中至少一层的m的值大于1。
[0013]
本申请实施例中,根据每层的模型参数集合中的预估数据量和输出数据的预估数据量,确定每层的模型训练方式,如此,在第j层为模型并行训练方式的情况下,工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练。由于第二输出数据为m个工作模块第j-1层训练的输出数据;也就是说,针对模型并行训练方式对应的第j层,工作模块接收m个工作模块的输出数据,该数据可称为全量数据,工作模块根据全量数据进行模型参数训练,可直接得到模型参数的全局梯度,相比于现有技术中工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度之后才得到模型参数的全局梯度的方案,减少了工作模块和服务器模块之间的通讯量。
[0014]
进一步,由于在神经网络训练中,工作模块和服务器模块之间的通讯会占用较长的时间,因此随着本申请实施例中工作模块和服务器模块之间的通讯量的减少,本申请实施例中对神经网络模型进行训练的速度也随之提升。
[0015]
可选地,根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式,包括:在该层的模型参数集合中的预估数据量不大于输出数据的预估数据量的情况下,确定该层的模型训练方式为数据并行训练方式;在该层的模型参数集合中的预估数据量大于输出数据的预估数据量的情况下,确定该层的模型训练方式为模型并 行训练方式。
[0016]
具体实施中,针对输出数据的预估数据量较大的层,采用数据并行的训练方式。由于数据并行的训练方式下,工作模块将神经网络模型中上一层的输出数据作为自己下一层的输入数据,工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度,由于数据并行的训练方式对应的层中模型参数集合中的预估数据量较小,因此工作模块与服务器模块之间传输的通讯量较小。相对应地,针对模型参数集合中的预估数据量较大的层,采用模型并行的训练方式。由于在模型并行的训练方式下,工作模块根据全量数据进行模型参数训练,可直接得到模型参数的全局梯度,相比于现有技术中工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度之后才得到模型参数的全局梯度的方案,很大程度上减少了工作模块和服务器模块之间的通讯量。
[0017]
可选地,在第j层为模型并行训练方式的情况下:工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,包括:工作模块根据第j层的模型参数的集合,确定工作模块所训练的第j层的模型参数的子集;工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数的子集进行模型并行训练;其中,至少一个工作模块中的任两个工作模块所训练的第j层的模型参数的子集之间交集为空,至少一个工作模块中所有工作模块所训练的第j层的模型参数的子集的并集等于第j层的模型参数的全集。如此,为对该层进行训练的m个工作模块中的每个工作模块分配一个模型参数的子集,通过m个工作模块中的各个工作模块对模型参数子集进行训练,从而提高模型参数训练的速度。
[0018]
可选地,在第j层为模型并行训练方式的情况下:至少一个工作模块中的每个工作模块都执行以下操作以对该层进行训练之前,方法还包括:
[0019]
步骤A,取i的值为一大于等于1、且小于等于M的整数,预估i个工作模块进行训练所消耗的第一总时长,并执行步骤B;其中,第一总时长为i个工作模块中的每个工作模块接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所预估消耗的总时长;步骤B,更新i的赋值,更新后的i的值为另一大于等于1、且小于等于M的整数,并执行步骤C;步骤C,预估更新后的i个工作模块进行训练所消耗的第二总时长;其中,第二总时长为更新后的i个工作模块中的每个工作模块接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所预估消耗的总时长;其中,每个i的取值对应一个总时长;若第一总时长和第二总时长的数量之和小于数量阈值,则执行步骤B;若第一总时长和第二总时长的数量之和等于数量阈值,则执行步骤D;步骤D,从第一总时长和第二总时长中确定出值最小的总时长,将值最小的总时长所对应的i的取值作为:确定用于对第j层的进行训练的至少一个工作模块的数量的值。
[0020]
通过该方案,本申请实施例中在工作模块对该层进行训练以及输入数据的传输之间寻找一个平衡点,以使确定出的对第j层的模型参数进行训练的工作模块的数量所对应的该层的训练时间和输入数据的传输时间之和尽可能的缩短。
[0021]
可选地,在第j层为模型并行训练方式的情况下:第二输出数据分为第一子输入数据块和第二子输入数据块;工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,包括:工作模块接收第一子输入数据块;工作模块并行执行:根据第一子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第一子输 出数据;以及接收第二子输入数据块;工作模块并行执行:根据第二子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第二子输出数据;以及向第j+1层传输第j层的第一子输出数据。通过将通讯模块的通讯进程和训练模块的训练进程进行并行执行,即训练进程与通讯进程并行执行,提升了神经网络模型的训练速度。
[0022]
可选地,通过以下方式预估m个工作模块分别接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所消耗的总时长t:
[0023]
t=max{t 1,t 3}+max{t 2,t 3};
[0024]
其中,t1为m个工作模块接收第二子输入数据块的时长;
[0025]
t2为m个工作模块向第j+1层传输第j层的第一子输出数据的时长;
[0026]
t3为m个工作模块根据第二子输入数据块对第j层的模型参数进行模型并行训练,得到第j层的第二子输出数据的时长;或者t3为m个工作模块根据第二子输入数据块对第j层的模型参数进行模型并行训练,得到第j层的第二子输出数据的时长。如此,可更加准确的确定出m个工作模块分别接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所消耗的总时长t。
[0027]
可选地,至少一个工作模块中的每个工作模块根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式之后,还包括:在进行从第L层计算至第一层的后向算法、且j为大于等于1且小于L的整数的情况下:在该层为神经网络模型中的第L层的情况下:在第L层为数据并行训练方式的情况下,工作模块将第三输入数据作为第L层的输入数据,对第L层的模型参数进行数据并行训练,第三输入数据为工作模块对应的前向算法中第L层的输出数据;在第L层为模型并行训练方式的情况下,工作模块将第四输入数据作为工作模块第L层的输入数据,对第L层的模型参数进行模型并行训练,第四输入数据为至少一个工作模块在前向算法中对第L层的模型参数进行训练的输出数据;在该层为神经网络模型中的第j层的情况下:在第j层为数据并行训练方式的情况下,工作模块将第三输出数据作为第j层的输入数据,对第j层的模型参数进行数据并行训练,第三输出数据为工作模块第j+1层训练的输出数据;在第j层为模型并行训练方式的情况下,工作模块将第四输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,第四输出数据为m个工作模块第j+1层训练的输出数据,m个工作模块为第j+1层训练使用的一个或多个工作模块;m为大于等于1且小于等于M的整数;其中,L层中至少一层的m的值大于1。
[0028]
由于针对模型并行训练方式对应的第j层,工作模块接收m个工作模块的输出数据,该数据可称为全量数据,工作模块根据全量数据进行模型参数训练,可直接得到模型参数的全局梯度,相比于现有技术中工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度之后才得到模型参数的全局梯度的方案,减少了工作模块和服务器模块之间的通讯量。
[0029]
可选地,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且第j层为模型并行训练方式的情况下:工作模块将第四输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,包括:工作模块根据第j层的模型参数的集合,确定工作模块所训练的第j层的模型参数的子集;工作模块将第四输出数据作为第j层的输入数据,对第j层的模型参数的子集进行模型并行训练;其中,至少一个工作模块中的任两个工作模块所训练的第j层的模型参数的子集之间交集为空,至少一个工作模块中所 有工作模块所训练的第j层的模型参数的子集的并集等于第j层的模型参数的全集。如此,为对该层进行训练的m个工作模块中的每个工作模块分配一个模型参数的子集,通过m个工作模块中的各个工作模块对模型参数子集进行训练,从而提高模型参数训练的速度。
[0030]
可选地,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且第j层为模型并行训练方式的情况下:第四输出数据分为第三子输入数据块和第四子输入数据块。工作模块将第四输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,包括:工作模块接收第三子输入数据块;工作模块并行执行:根据第三子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第三子输出数据;以及接收第四子输入数据块;工作模块并行执行:根据第四子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第四子输出数据;以及向第j-1层传输第j层的第三子输出数据。通过将通讯模块的通讯进程和训练模块的训练进程进行并行执行,即训练进程与通讯进程并行执行,提升了神经网络模型的训练速度。
[0031]
第二方面,本申请实施例提供一种神经网络模型的训练装置,用于实现上述第一方面中的工作模块执行的任意一种方法,包括相应的功能模块,分别用于实现以上方法中的步骤。
[0032]
第三方面,本申请实施例提供一种神经网络模型的训练装置,训练装置包括处理器、存储器和收发器,处理器包括至少一个处理器核,训练装置适用于包括M个处理器核的训练系统,神经网络模型包括L层,M和L为大于等于1的整数;针对神经网络模型的L层中的每层,使用至少一个处理器核对该层进行训练;存储器用于存储指令;处理器用于执行存储器存储的指令,并控制收发器与M个处理器核中的其它处理器核之间传输数据;当处理器执行存储器存储的指令时,至少一个处理器核中的每个处理器核用于执行上述第一方面中的工作模块执行的任意一种方法。
[0033]
第四方面,本申请实施例提供一种用于神经网络模型训练的芯片,芯片适用于包括M个芯片的的训练系统,神经网络模型包括L层,M和L为大于等于1的整数;针对神经网络模型的L层中的每层,使用M个芯片中的至少一个芯片对该层进行训练;至少一个芯片中的每个芯片用于执行上述第一方面中的工作模块执行的任意一种方法。
[0034]
第五方面,提供了一种计算机程序产品,计算机程序产品包括:计算机程序(也可以称为代码,或指令),当计算机程序被运行时,使得计算机执行上述第一方面中任一种可能实现方式中的方法。
[0035]
第六方面,提供了一种计算机可读介质,计算机可读介质存储有计算机程序(也可以称为代码,或指令)当其在计算机上运行时,使得计算机执行上述第一方面中任一种可能实现方式中的方法。
[0036]
本申请实施例中,根据每层的模型参数集合中的预估数据量和输出数据的预估数据量,确定每层的模型训练方式,如此,在第j层为模型并行训练方式的情况下,工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练。由于第二输出数据为m个工作模块第j-1层训练的输出数据;也就是说,针对模型并行训练方式对应的第j层,工作模块接收m个工作模块的输出数据,该数据可称为全量数据,工作模块根据全量数据进行模型参数训练,可直接得到模型参数的全局梯度,相比于现有技术中工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度之后才得到模型参数的全局梯度的方案,减少了工作模块和服务器模块之间的通讯量。

附图说明

[0037]
图1为现有技术中一种分布式系统架构示意图;
[0038]
图2为本申请实施例适用的一种应用场景架构示意图;
[0039]
图3为本申请实施例提供的一种适用的系统架构示意图;
[0040]
图4为本申请实施例提供的一种神经网络模型的训练方法的流程示意图;
[0041]
图5为本申请实施例提供的一种确定用于对第j层的进行训练的至少一个工作模块的数量的值的方法流程示意图;
[0042]
图6为本申请实施例提供的一种神经网络模型的训练方法的流程示意图;
[0043]
图7为本申请实施例提供的一种神经网络模型的训练方法的流程示意图;
[0044]
图8为图7中第三层和第四层的前向算法的方法示意图;
[0045]
图9为图6至图8中工作模块502的一种工作流程示意图;
[0046]
图10为本申请实施例提供的一种神经网络模型的训练装置的结构示意图;
[0047]
图11为本申请实施例提供的另一种神经网络模型的训练装置的结构示意图。

具体实施方式

[0048]
图2示例性示出了本申请实施例适用的一种应用场景架构示意图,如图2所示,在具体实施中会存在多种原始数据,比如图2中的电信数据201、金融数据202以及消费者数据203等等,大数据平台204对这些原始数据进行数据采集,以及数据存储和数据计算等等,得到经过大数据平台204处理后的数据。数据挖掘平台205从大数据平台获取经过大数据平台204处理后的数据。并进行数据挖掘,比如使用回归分析(Logistic Regression,简称LR)、大规模传统机器学习模型(Latent Dirichlet Allocation,简称LDA);卷积神经网络(Convolution neural network,简称CNN)、循环神经网络(Recurrent neural network,简称RNN)、稀疏自动编码器(Sparse AutoEncoder,简称SAE)等深度学习模型中的至少一种进行数据挖掘,以得到数据挖掘后的结果。应用平台206中包括适用于各领域大数据分析的应用,可依据数据挖掘平台205确定出的数据挖掘后的结果进行电信领域大数据分析、金融领域大数据分析、消费者领域大数据分析,以及其它领域大数据分析等等。
[0049]
本申请实施例可用于训练海量数据的分布式并行计算集群,适合的算法包括卷积神经网络(用于图像、语音或视频的处理)、递归神经网络(用于自然语言处理)、深度神经网络(用于处理语音)等多种深度学习算法以及大规模机器学习算法。
[0050]
本申请实施例所提供的方案应用于数据挖掘平台205,数据挖掘平台205可通过深度学习智能分析对底层的原始数据进行挖掘分析,通过分布式架构的加速训练过程,提升了基于深度学习训练的数据挖掘平台的性能和可扩展性,从而支撑上层的应用平台的决策和运营,比如视频分析、图像识别、物体检测、自然语言处理等上层的应用平台的业务。
[0051]
本申请实施例中一个节点可为包括至少一个图形处理器(Graphics Processing Unit,简称GPU)芯片和/或至少一个中央处理器(Central Processing Unit,简称CPU)芯片的计算机设备。其中,每个GPU芯片中包括一个或多个GPU核,每个CPU芯片中包括一个或多个CPU核。本申请实施例中的工作模块可包括一个或多个GPU核,服务器模块可包括一个或多个CPU核。
[0052]
为了方便描述,多个服务器模块的可称为服务器模块集合,多个工作模块的可称为工作模块集合。图3示例性示出了本申请实施例提供的一种适用的系统架构示意图,如图3 所示,本申请实施例包括服务器模块集合307和工作模块集合308,服务器模块集合307包括多个服务器模块,分别为服务器模块301、服务器模块302、…服务器模块303;工作模块集合308可包括多个工作模块,分别为工作模块304、工作模块305、…工作模块306。
[0053]
分布式系统架构中包括多个分布式的节点。每个节点的具体部署形态包括3种:第一种,工作模块与服务器模块部署在同一个节点上,工作模块数目与服务器模块数目相等或不等;第二种,工作模块与服务器模块分别部署在不同节点上,工作模块数目与服务器模块相等或不等;第三种,工作模块与服务器模块混合部署在不同节点上,也就是多个节点中至少有一个节点上既有工作模块又有服务器模块,工作模块数目与服务器模块数目相等或不相等。本申请实施例所提供的方案适用于任一种具体部署形态。
[0054]
本申请实施例中,一个或多个服务器模块和多个工作模块可用于在一个训练周期内训练一个神经网络模型中的模型参数。
[0055]
一个训练周期包括多次迭代。神经网络模型中包括L层,L为大于等于1的整数,每次迭代过程包括对L层进行前向算法和后向算法。工作模块经过前向算法和后向算法,计算出得到神经网络模型中的模型参数的局部梯度,之后工作模块将模型参数的局部梯度上传至服务器模块,服务器模块计算出每个模型参数的全局梯度,并将全局梯度从服务器模块下拉至每个工作模块,每个工作模块根据得到的每个模型参数的全局梯度更新各个模型参数,并根据更新后的各个模型参数进行下一次迭代。神经网络模型中包括多层,在进行神经网络训练时可进行从第一层计算至第L层的前向算法,具体来说,计算第一层时,以初始训练数据作为输入数据进行训练,之后以每一层的上一层的输出数据作为该层的输入数据进行训练。可选地,在进行神经网络训练时也可进行从第L层计算至第一层的后向算法,具体来说,计算第L层时,以前向算法中第L层的输出数据作为后向算法中第L层的输入数据进行训练,之后以每一层的下一层的输出数据作为该层的输入数据进行训练。
[0056]
具体实施中,神经网络模型中包括的L层,比如为卷积层、全连接层、批归一化层等多种类型的层,每种类型的层的特性差异巨大。比如最底层的卷积层一般模型参数较少,模型参数的量在兆级(MB级),但该层的输出数据量很大,输出数据量在百MB级;较为顶层的卷积层和全连接层中模型参数一般较多,通常为百MB级,但是输出数据量较小,通常为10KB至MB级。基于此,本申请实施例中提供以下方案,用于针对不同层的特性使用不同的训练方案,从而减少工作模块与服务器模块之间的通讯量。又由于工作模块和服务器模块之间的通讯速度较慢,因此在工作模块和服务器模块之间的信息通讯量称为神经网络模型训练速度的关键因素,本申请实施例通过降低工作模块与服务器模块之间的通讯量,很大程度上提高了神经网络模型训练的速度。基于上述描述,下面对本申请实施例所提供的方案进行详细论述。
[0057]
基于上述内容,图4示例性示出了本申请实施例提供的一种神经网络模型的训练方法的流程示意图,该方法用于包括M个工作模块的训练系统,神经网络模型包括L层,M和L为大于等于1的整数,针对神经网络模型的L层中的每层,都使用M个工作模块中的至少一个工作模块对该层进行训练。如图4所示,方法包括:
[0058]
步骤400,针对神经网络模型的L层中的每层开始执行如下进程;
[0059]
步骤401,针对神经网络模型的L层中的每层,至少一个工作模块中的每个工作模块根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式;其中,模型训练方式包括数据并行训练方式和模型并行训练方式;模型参数集合包 括该层的所有模型参数;
[0060]
在具体训练过程中,至少一个工作模块中的每个工作模块都执行以下操作以对该层进行训练:
[0061]
步骤402,工作模块确定该层是否为神经网络模型中的第一层;在该层为神经网络模型中的第一层的情况下,执行步骤403;在该层为神经网络模型中的第j层的情况下,执行步骤406;
[0062]
步骤403,工作模块根据第一层的模型参数集合中的预估数据量和输出数据的预估数据量,确定第一层的模型训练方式;其中,模型训练方式包括数据并行训练方式和模型并行训练方式;在第一层为数据并行训练方式的情况下,执行步骤404;在第一层为模型并行训练方式的情况下,执行步骤405;
[0063]
步骤404,工作模块将第一输入数据作为第一层的输入数据,对第一层的模型参数进行数据并行训练;第一输入数据为工作模块对应的初始训练数据;
[0064]
步骤405,工作模块将第二输入数据作为工作模块第一层的输入数据,对第一层的模型参数进行模型并行训练;第二输入数据为至少一个工作模块对应的初始训练数据;
[0065]
步骤406,工作模块根据第j层的模型参数集合中的预估数据量和输出数据的预估数据量,确定第j层的模型训练方式;模型参数集合包括第j层的所有模型参数;在第j层为数据并行训练方式的情况下,执行步骤407;在第j层为模型并行训练方式的情况下,执行步骤408;
[0066]
步骤407,工作模块将第一输出数据作为第j层的输入数据,对第j层的模型参数进行数据并行训练,第一输出数据为工作模块第j-1层训练的输出数据;
[0067]
步骤408,工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,第二输出数据为m个工作模块第j-1层训练的输出数据,m个工作模块为第j-1层训练使用的一个或多个工作模块;m为大于等于1且小于等于M的整数;其中,L层中至少一层的m的值大于1;可选地,上述步骤408中,m可为第j-1层训练使用至少一个工作模块中所有工作模块的总数量,也可为大于等于1且小于为第j-1层训练使用的至少一个工作模块中所有工作模块的总数量的整数。
[0068]
可选地,本申请实施例中,在对神经网络模型进行训练时,可选地,可通过进行从第一层计算至第L层的前向算法进行训练。可选地,也可通过进行从第一层计算至第L层的前向算法,以及进行从第L层计算至第一层的后向算法进行训练。
[0069]
具体实施中,可选地,在进行从第L层计算至第一层的后向算法的情况下:在该层为神经网络模型中的第L层的情况下:在第L层为数据并行训练方式的情况下,工作模块将第三输入数据作为第L层的输入数据,对第L层的模型参数进行数据并行训练,第三输入数据为工作模块对应的前向算法中第L层的输出数据;在第L层为模型并行训练方式的情况下,工作模块将第四输入数据作为工作模块第L层的输入数据,对第L层的模型参数进行模型并行训练,第四输入数据为至少一个工作模块在前向算法中对第L层的模型参数进行训练的输出数据。
[0070]
在进行从第L层计算至第一层的后向算法、且j为大于等于1且小于L的整数的情况下:在该层为神经网络模型中的第j层的情况下:在第j层为数据并行训练方式的情况下,工作模块将第三输出数据作为第j层的输入数据,对第j层的模型参数进行数据并行训练,第三输出数据为工作模块第j+1层训练的输出数据;在第j层为模型并行训练方式的情况 下,工作模块将第四输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,第四输出数据为m个工作模块第j+1层训练的输出数据,m个工作模块为第j+1层训练使用的一个或多个工作模块;m为大于等于1且小于等于M的整数;其中,L层中至少一层的m的值大于1。
[0071]
本申请实施例中,上述方法步骤可由对该层进行训练的至少一个工作模块中的每个工作模块执行,执行上述方法的工作模块中配置有管理模块。可选地上述步骤402可由对该层进行训练的至少一个工作模块中的每个工作模块执行,也可由对该层进行训练的至少一个工作模块中具有管理模块的一个工作模块执行,之后将结果(比如各层的模型训练方式)通知给对该层进行训练的至少一个工作模块中的各个工作模块。或者由M个工作模块中除了对该层进行训练的至少一个工作模块之外的一个具有管理模块的工作模块执行,之后将结果(比如各层的模型训练方式)通知给对该层进行训练的至少一个工作模块中的各个工作模块。
[0072]
本申请实施例中,M个工作模块和服务器模块可位于一个节点上,该节点为包括多个GPU核和多个CPU核的计算机设备。一个工作模块包括一个或多个GPU核,一个服务器模块包括一个或多个CPU核,在该种情况下,M个工作模块之间可通过GPU核间的电连接实现通讯,M个工作模块和服务器模块之间可通过GPU核与CPU核之间的核间通信实现通讯。在M个工作模块和服务器模块分别位于多个节点的情况下,M个工作模块之间,或者M个工作模块和服务器模块之间可通过节点内的电连接或核间连接实现通讯,也可通过节点间的一些链路实现通讯。在一种实现方式下,本申请实施例中的M个工作模块之中的任两个工作模块均可实现通讯,M个工作模块中的每个工作模块与服务器模块之间的可实现通讯。
[0073]
具体来说,M个工作模块中的至少一个工作模块对第一层进行训练之前,为对第一层进行训练的至少一个工作模块中的各个工作模块配置了初始训练数据,各个工作模对应的初始训练数据可为不同的数据,也可为相同的数据,用于使工作模块和服务器模块协同合作,对神经网络模型中的模型参数进行训练。举个例子,比如有100张图片,对第一层进行训练的至少一个工作模块的数量为10个,可选地,每个工作模块分配10张图片,每个工作模块所分配的10张图片称为该工作模块所配置的初始训练数据。
[0074]
本申请实施例中,针对每层,对该层进行训练的工作模块根据输入数据和模型参数,进行前向算法和后向算法之后,得到的值称为梯度。针对数据并行训练方式对应的层,该工作模块将该工作模块自己对应的初始训练数据作为输入数据,或者该工作模块将该工作模块上一层训练的输出数据作为该层的输入数据,也就是说,针对数据并行训练方式对应的层,工作模块使用的输入数据为局部输入数据,此时,根据该输入数据和模型参数进行训练,得到的结果成为局部梯度。针对模型并行训练方式对应的层,该工作模块将对管该层进行训练的至少一个工作模块所对应的所有初始训练数据作为输入数据,或者该工作模块将对上一层进行训练的至少一个工作模块的所有输出数据作为该层的输入数据,也就是说,针对模型并行训练方式对应的层,工作模块使用的输入数据为全局输入数据,此时,根据该输入数据和模型参数进行训练,得到的结果成为全局梯度。可选地,针对每层,工作模块计算得到局部梯度,则将局部梯度上推至服务器,服务器根据接收到的多个局部梯度计算出全局梯度,工作模块再从服务器模块下拉该全局梯度,并根据该全局梯度更新本地的模型参数,以便于进行下一次迭代时使用。工作模块通过计算得到全局梯度,则根据 计算得到的全局梯度更新本地的模型参数,以便于进行下一次迭代时使用。
[0075]
本申请实施例中,根据每层的模型参数集合中的预估数据量和输出数据的预估数据量,确定每层的模型训练方式,如此,在第j层为模型并行训练方式的情况下,工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练。由于第二输出数据为m个工作模块第j-1层训练的输出数据;也就是说,针对模型并行训练方式对应的第j层,工作模块接收m个工作模块的输出数据,该数据可称为全量数据,工作模块根据全量数据进行模型参数训练,可直接得到模型参数的全局梯度,相比于现有技术中工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度之后才得到模型参数的全局梯度的方案,减少了工作模块和服务器模块之间的通讯量。
[0076]
进一步,由于在神经网络训练中,工作模块和服务器模块之间的通讯会占用较长的时间,因此随着本申请实施例中工作模块和服务器模块之间的通讯量的减少,本申请实施例中对神经网络模型进行训练的速度也随之提升。
[0077]
进一步,由于工作模块和服务器模块之间的通讯速度较慢,因此在工作模块和服务器模块之间的信息通讯量称为神经网络模型训练速度的关键因素,本申请实施例通过降低工作模块与服务器模块之间的通讯量,很大程度上提高了神经网络模型训练的速度。
[0078]
进一步,由于本申请实施例应用于包括服务器模块和M个工作模块的系统架构,由于分布式架构可并行计算,因此可加快神经网络模型中的迭代计算速度,从而缩短神经网络模型训练的时长。进一步,由于分布式系统架构中都采用GPU芯片对矩阵计算进行并行加速,从而进一步提高神经网络模型中的迭代计算速度,从而进一步缩短神经网络模型训练的时长。
[0079]
神经网络模型中每层对应有特性参数,可根据每层的特性参数确定出该层的模型参数集合中的预估数据量和输出数据的预估数据量,之后根据该层的模型参数集合中的预估数据量和输出数据的预估数据量确定该层的模型训练方式。确定之后,在前向算法和后向算法中直接根据已经确定的每层的模型训练方式对神经网络模型进行训练。
[0080]
可选地,根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式,包括:在该层的模型参数集合中的预估数据量不大于输出数据的预估数据量的情况下,确定该层的模型训练方式为数据并行训练方式;在该层的模型参数集合中的预估数据量大于输出数据的预估数据量的情况下,确定该层的模型训练方式为模型并行训练方式。
[0081]
举例来说,神经网络模型中包括的L层,比如为卷积层、全连接层、批归一化层等多种类型的层,每种类型的层的对应一定的特性,每种类型的层包括一些特性参数。比如最底层的卷积层一般模型参数较少,模型参数的量在兆级(MB级),但该层的输出数据量很大,输出数据量在百MB级,则该层中模型参数集合中的预估数据量即为MB级,而该层中输出数据的预估数据量为百MB级,据此确定该层的模型训练方式,可选地,由于输出数据的预估数据量为百MB级,大于该层中模型参数集合中的预估数据量MB级,因此,该层确定为数据并行训练方式。
[0082]
再举个例子,较为顶层的卷积层和全连接层中模型参数一般较多,通常为百MB级,但是输出数据量较小,通常为10KB至MB级。该层中模型参数集合中的预估数据量即为百MB级,而该层中输出数据的预估数据量为10KB至MB级,据此确定该层的模型训练方式,可选地,由于输出数据的预估数据量为10KB至MB级,小于该层中模型参数集合 中的预估数据量百MB级,因此,该层确定为模型并行训练方式。
[0083]
具体实施中,针对输出数据的预估数据量较大的层,采用数据并行的训练方式。由于数据并行的训练方式下,工作模块将神经网络模型中上一层的输出数据作为自己下一层的输入数据,工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度,由于数据并行的训练方式对应的层中模型参数集合中的预估数据量较小,因此工作模块与服务器模块之间传输的通讯量较小。本申请实施例中模型参数集合中的预估数据量为模型参数集合中的包括的所有模型参数的数据量。
[0084]
相对应地,针对模型参数集合中的预估数据量较大的层,采用模型并行的训练方式。由于在模型并行的训练方式下,工作模块根据全量数据进行模型参数训练,可直接得到模型参数的全局梯度,相比于现有技术中工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度之后才得到模型参数的全局梯度的方案,很大程度上减少了工作模块和服务器模块之间的通讯量。
[0085]
图5示例性示出了本申请实施例提供的一种确定用于对第j层的进行训练的至少一个工作模块的数量的值的方法流程示意图。如图5所示,可选地,在第j层为模型并行训练方式的情况下:工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练之前,方法还包括确定用于对第j层的进行训练的至少一个工作模块的数量的值。具体方案有多种,本申请实施例提供以下方案,包括:
[0086]
步骤A,取i的值为一大于等于1、且小于等于M的整数,预估i个工作模块进行训练所消耗的第一总时长,并执行步骤B;其中,第一总时长为i个工作模块中的每个工作模块接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所预估消耗的总时长;
[0087]
步骤B,更新i的赋值,更新后的i的值为另一大于等于1、且小于等于M的整数,并执行步骤C;
[0088]
步骤C,预估更新后的i个工作模块进行训练所消耗的第二总时长;其中,第二总时长为更新后的i个工作模块中的每个工作模块接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所预估消耗的总时长;其中,每个i的取值对应一个总时长;
[0089]
若第一总时长和第二总时长的数量之和小于数量阈值,则执行步骤B;若第一总时长和第二总时长的数量之和等于数量阈值,则执行步骤D;可选地,数量阈值为预设的一个值,比如可为2个、3个等等,可根据经验和具体实施条件确定;
[0090]
步骤D,从第一总时长和第二总时长中确定出值最小的总时长,将值最小的总时长所对应的i的取值作为:确定用于对第j层的进行训练的至少一个工作模块的数量的值。
[0091]
具体来说,本申请实施例中,分布式架构中包括M个工作模块,针对为模型并行训练方式的第j层,用于对第j层的模型参数进行训练的至少一个工作模块的数量越大,对第j层进行模型训练的时间越短;但是用于对第j-1层进行模型参数训练的各个工作模块均需将第j-1层的输出数据输出给对第j层进行训练的各个工作模块,因此若用于对第j层的模型参数进行训练的至少一个工作模块的数量越大,则第j-1层的输出数据传输至对第j层的模型参数进行训练的各个工作模块的时间会越长。因此,本申请实施例中在工作模块对该层进行训练以及输入数据的传输之间寻找一个平衡点,以使确定出的对第j层的模型参数进行训练的工作模块的数量所对应的该层的训练时间和输入数据的传输时间之和尽可能的缩短。
[0092]
可选地,上述确定用于对第j层的进行训练的至少一个工作模块的数量的值是以前向算法为例介绍的。本申请实施例中也可通过后向算法确定用于对第j层的进行训练的至少一个工作模块的数量的值,当通过后向算法来计算时,方案与上述内容类似,只是第一总时长为i个工作模块中的每个工作模块接收第四输入数据,以及根据第四输入数据对第j层的模型参数进行训练所预估消耗的总时长;第二总时长为更新后的i个工作模块中的每个工作模块接收第四输入数据,以及根据第四输入数据对第j层的模型参数进行训练所预估消耗的总时长。其余处理方案与上述方案类似,在此不再赘述。
[0093]
本申请实施例提供一种可选地的实施方案,以前向算法为例,令i从1至M遍历取值,针对i的每个取值,均计算出i个工作模块对第j层的模型参数进行训练所消耗的总时长,得到一个第一总时长和M-1个第二总时长,将一个第一总时长和M-1个第二总时长中最小值对应的i的值确定为用于对第j层的进行训练的至少一个工作模块的数量的值。
[0094]
在进行前向算法的情况下,可选地,在第j层为模型并行训练方式的情况下:工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,包括:工作模块根据第j层的模型参数的集合,确定工作模块所训练的第j层的模型参数的子集;工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数的子集进行模型并行训练;其中,至少一个工作模块中的任两个工作模块所训练的第j层的模型参数的子集之间交集为空,至少一个工作模块中所有工作模块所训练的第j层的模型参数的子集的并集等于第j层的模型参数的全集。如此,为对该层进行训练的m个工作模块中的每个工作模块分配一个模型参数的子集,通过m个工作模块中的各个工作模块对模型参数子集进行训练,从而提高模型参数训练的速度。另一种可选地的实施方案为,将该层的所有模型参数在m个工作模块上进行均分。
[0095]
在进行后向算法的情况下,可选地,在第j层为模型并行训练方式的情况下,工作模块将第四输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,包括:工作模块根据第j层的模型参数的集合,确定工作模块所训练的第j层的模型参数的子集;工作模块将第四输出数据作为第j层的输入数据,对第j层的模型参数的子集进行模型并行训练;其中,至少一个工作模块中的任两个工作模块所训练的第j层的模型参数的子集之间交集为空,至少一个工作模块中所有工作模块所训练的第j层的模型参数的子集的并集等于第j层的模型参数的全集。
[0096]
具体实施中,确定对第j层进行训练的至少一个工作模块的数量m,以及为至少一个工作模块中的每个工作模块分配模型参数子集的工作可由对第j层进行训练的至少一个工作模块中的每个工作模块分别执行,且在执行过程中各个工作模块可进行通信以便协商出对第j层进行训练的至少一个工作模块的数量m,以及每个工作模块的模型参数子集,该每个工作模块中配置了管理模块。或者,可由M个工作模块中的任一个工作模块执行,执行之后通知对第j层进行训练的至少一个工作模块中的各个工作模块。
[0097]
举个例子,第j层为模型并行训练方式对应的层,对第j层进行训练的至少一个工作模块数量m为3,则可从M个工作模块中随机选出3个工作模块用于对该层的模型参数进行训练。该层的模型参数集合中的预估数据量为300MB,将300MB的模型参数分配给3个工作模块,比如每个工作模块分配100MB的模型参数,每个工作模块所分配的100MB的模型参数即为该工作模块对应的模型参数的子集。
[0098]
为了对本申请实施例进行进一步的介绍,图6和图7示例性示出了本申请实施例提供 的一种神经网络模型的训练方法的流程示意图,如图6和图7所示,包括服务器模块501和3个工作模块,即M为3,分别为工作模块502、工作模块503和工作模块504。该示例中神经网络包括五层,即L为5。
[0099]
根据上文方案确定出每层的模型训练方式,具体来说,根据每层模型参数集合中的预估数据量和输出数据的预估数据量,确定出每层的模型训练方式。比如确定出第一层和第二层为数据并行训练方式,第三层至第五层为模型并行训练方式。
[0100]
进一步根据上述方案确定出对模型并行训练方式对应的层进行模型训练的工作模块的数量,以及经过协商对每层进行训练的工作模块。可选地,对于数据并行训练方式对应的层,由于数据并行训练方式对应的层,对该层进行模型训练的工作模块接收的是该工作模块对上一层进行训练所输出的数据,因此针对数据并行训练方式对应的层,对该层进行训练的工作模块的数量越多,对该层进行训练所消耗的时间越短,可选地,本申请实施例中确定对数据并行训练方式对应的层进行训练的工作模块为M个。
[0101]
可选地,对于模型并行训练方式对应的层,可根据上述图5相关的方案确定出对每层进行模型训练的工作模块的数量。比如,通过上述方案,该示例中确定出用于对第三层的模型参数进行训练的工作模块数量为3,用于对第四层的模型参数进行训练的工作模块数量为2,用于对第五层的模型参数进行训练的工作模块数量为3。
[0102]
针对模型并行训练方式对应的层,进一步根据上述方案,确定出对该层进行模型训练的每个工作模块对应的模型参数子集。也就是说,针对模型并行训练方式对应的层,将该层的模型参数集合中的所有模型参数分配到对该层进行模型参数训练的工作模块中。比如,第三层的所有模型参数分配到工作模块502、工作模块503和工作模块504上,第四层的模型参数的集合中包括的所有模型参数分配到工作模块502和工作模块503上,工作模块502和工作模块503分别对应一个第四层的模型参数的子集;第五层的模型参数的集合中包括的所有模型参数分配到工作模块502、工作模块503和工作模块504上,工作模块502、工作模块503和工作模块504分别对应一个第五层的模型参数的子集。
[0103]
进一步,本申请实施例中,针对数据并行训练方式,对数据并行训练方式对应的层进行训练的工作模块的输入数据为第一输入数据或者为第一输出数据;对模型并行训练方式对应的层进行训练的工作模块的输入数据为第二输入数据或者为第二输出数据。在进行具体训练过程之前,经过本申请实施例所提供的方案,提前确定出上述信息,以备下述训练过程直接使用。
[0104]
本申请实施例中工作模块和服务器模块通过多次迭代完成对神经网络模型的训练,该示例中介绍其中一次迭代过程,每个迭代过程中包括前向算法和后向算法。下面先对前向算法进行介绍。应理解,仅做示例性说明,并作为对本申请的实现方式的限制。
[0105]
如图6和图7所示,工作模块502获取工作模块502所分配的初始训练数据,该初始训练数据作为工作模块502第一层的输入数据,工作模块502根据第一层的输入数据对第一层包括的所有模型参数进行训练,得到第一层的输出数据;并将第一层的输出数据传输给工作模块502的第二层,作为工作模块502的第二层的输入数据。相应地,工作模块503根据第一层的输入数据进行训练,得到工作模块503的第一层的输出数据;并将工作模块503第一层的输出数据作为工作模块503的第二层的输入数据。工作模块504根据第一层的输入数据进行训练,得到工作模块504的第一层的输出数据;并将工作模块504第一层的输出数据作为工作模块504的第二层的输入数据。
[0106]
工作模块502根据第二层的输入数据对第二层包括的所有模型参数进行训练,得到第二层的输出数据;并将第二层的输出数据分别传输给工作模块502、工作模块503和工作模块504的第三层。相应地,工作模块503将第二层的输出数据分别传输给工作模块502、工作模块503和工作模块504的第三层。工作模块504将第二层的输出数据分别传输给工作模块502、工作模块503和工作模块504的第三层。
[0107]
工作模块502将接收到的工作模块502、工作模块503和工作模块504的第二层的输出数据作为工作模块502的第三层的输入数据,工作模块502根据工作模块502的第三层的输入数据对分配的模型参数进行训练,也就是说工作模块502根据全量数据对分配至工作模块502的第三层的部分模型参数进行训练,得到第三层的输出数据,并将第三层的输出数据分别传输给工作模块502和工作模块503的第四层。相应地,工作模块503将接收到的工作模块502、工作模块503和工作模块504的第二层的输出数据作为工作模块502的第三层的输入数据,并将第三层的输出数据分别传输给工作模块502和工作模块503的第四层。工作模块504将接收到的工作模块502、工作模块503和工作模块504的第二层的输出数据作为工作模块504的第三层的输入数据,并将第三层的输出数据分别传输给工作模块502和工作模块503的第四层。
[0108]
工作模块502将接收到的工作模块502、工作模块503和工作模块504的第三层的输出数据作为工作模块502的第四层的输入数据,工作模块502根据工作模块502的第四层的输入数据对分配的模型参数进行训练,也就是说工作模块502根据全量数据对分配至工作模块502的第四层的部分模型参数进行训练,得到第四层的输出数据,并将第四层的输出数据分别传输给工作模块502和工作模块503的第五层。相应地,工作模块503将接收到的工作模块502、工作模块503和工作模块504的第三层的输出数据作为工作模块502的第四层的输入数据,并将第四层的输出数据分别传输给工作模块502和工作模块503的第五层。可看出,工作模块504并不对第四层的模型参数进行训练。
[0109]
工作模块502将接收到的工作模块502、工作模块503和工作模块504的第四层的输出数据作为工作模块502的第五层的输入数据,工作模块502根据工作模块502的第五层的输入数据对分配的模型参数进行训练,也就是说工作模块502根据全量数据对分配至工作模块502的第五层的部分模型参数进行训练,得到第五层的输出数据,至此,工作模块502的前向算法结束,开始后向算法,在后向算法开始时,工作模块502将第五层的输出数据分别传输给工作模块502和工作模块503的第四层。相应地,工作模块503将接收到的工作模块502、工作模块503和工作模块504的第四层的输出数据作为工作模块503的第五层的输入数据,根据工作模块503的第五层的输入数据对分配的模型参数进行训练,得到第五层的输出数据,至此,工作模块503的前向算法结束,开始后向算法,在后向算法开始时,工作模块503将第五层的输出数据分别传输给工作模块502和工作模块503的第四层。工作模块504将接收到的工作模块502、工作模块503和工作模块504的第四层的输出数据作为工作模块504的第五层的输入数据,根据工作模块504的第五层的输入数据对分配的模型参数进行训练,得到第五层的输出数据,至此,工作模块504的前向算法结束,开始后向算法,在后向算法开始时,工作模块504将第五层的输出数据分别传输给工作模块502和工作模块503的第四层。
[0110]
前向算法之后,工作模块502将接收到的工作模块502、工作模块503和工作模块504的第五层的输出数据作为工作模块502的第四层的输入数据,工作模块502根据工作模块 502的第四层的输入数据对分配的模型参数进行训练,也就是说工作模块502根据全量数据对分配至工作模块502的第四层的部分模型参数进行训练,得到第四层的输出数据,工作模块502将得到的第四层的输出数据分别传输给工作模块502、工作模块503和工作模块504的第三层。相对应地,工作模块503将接收到的工作模块502、工作模块503和工作模块504的第五层的输出数据作为工作模块502的第四层的输入数据,并根据工作模块502的第四层的输入数据对分配的模型参数进行训练,得到第四层的输出数据,工作模块503将得到的第四层的输出数据分别传输给工作模块502、工作模块503和工作模块504的第三层。
[0111]
工作模块502将接收到的工作模块502和工作模块503的第四层的输出数据作为工作模块502的第三层的输入数据,工作模块502根据工作模块502的第三层的输入数据对分配的模型参数进行训练,也就是说工作模块502根据全量数据对分配至工作模块502的第三层的部分模型参数进行训练,得到第三层的输出数据,工作模块502将得到的第三层的输出数据传输给工作模块502的第二层,作为工作模块502的第二层的输入数据。相对应地,工作模块503根据接收到的工作模块502和工作模块503的第四层的输出数据,对分配的模型参数进行训练,得到第三层的输出数据,将得到的第三层的输出数据传输给工作模块503的第二层,作为工作模块503的第二层的输入数据。工作模块504根据接收到的工作模块502和工作模块503的第四层的输出数据,对分配的模型参数进行训练,得到第三层的输出数据,将得到的第三层的输出数据传输给工作模块504的第二层,作为工作模块504的第二层的输入数据。
[0112]
工作模块502将工作模块502第三层的输出数据作为第二层的输入数据,并对第二层的所有模型参数进行训练,得到第二层模型参数的局部梯度,并将局部梯度向服务器模块上推至服务器模块501。在分布式架构中,与工作模块502并行工作的工作模块503,根据第二层的输入数据,对第二层的所有模型参数进行训练,得到第二层模型参数的局部梯度,并将局部梯度向服务器模块上推至服务器模块501;工作模块504,根据第二层的输入数据,对第二层的所有模型参数进行训练,得到第二层模型参数的局部梯度,并将局部梯度向服务器模块上推至服务器模块501。服务器模块501根据接收到三个工作模块分别上报的局部梯度,计算出第二层模型参数的全局梯度,各个工作模块从服务器模块501上从服务器模块下拉第二层模型参数的全局梯度。
[0113]
类似的,工作模块502将工作模块502第二层的输出数据作为第一层的输入数据,并对第一层的所有模型参数进行训练,得到第一层模型参数的局部梯度,并将局部梯度向服务器模块上推至服务器模块501。在分布式架构中,工作模块503将第一层的模型参数的局部梯度向服务器模块上推至服务器模块501;工作模块504将第一层的模型参数的局部梯度向服务器模块上推至服务器模块501。服务器模块501根据接收到三个工作模块分别上报的第一层模型参数的局部梯度,计算出第一层模型参数的全局梯度,各个工作模块从服务器模块501上从服务器模块下拉第一层模型参数的全局梯度。
[0114]
在上述示例中,工作模块502、工作模块503和工作模块504之间并行运行,比如工作模块502、工作模块503和工作模块504可以并行对第一层的模型参数进行训练,可见,分布式架构提高了神经网络模型训练的速度。针对数据并行训练方式对应的层,工作模块通过前向和后向算法,以及通过向服务器模块向服务器模块上推局部梯度,从服务器模块下拉全局梯度,从而得到数据并行训练方式对应的层中的模型参数的全局梯度。针对模型 并行训练方式对应的层,工作模块通过前向和后向算法,由于每个工作模块根据该层的上一层的全量数据对模型参数进行训练,因此该工作模块计算得到的即为该层中该工作模块上分配的模型参数的全局梯度。可见,针对模型并行训练方式对应的层中,工作模块无需通过向服务器模块向服务器模块上推局部梯度再下来全局梯度的方式获取模型参数的全局梯度,从而减少了系统中的通讯量。
[0115]
基于上述示例,为了进一步提高神经网络模型的训练速度,本申请实施例中提供一种可选地方案,在进行从第一层计算至第L层的前向算法的情况下,j为大于1且小于等于L的整数,每个工作模块的每个模型并行层的输入数据分为第一子输入数据块和第二子输入数据块;在第j层为模型并行训练方式的情况下,第二输出数据分为第一子输入数据块和第二子输入数据块;在第j层为模型并行训练方式的情况下,工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,包括:工作模块接收第一子输入数据块;工作模块并行执行:根据第一子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第一子输出数据;以及接收第二子输入数据块;工作模块并行执行:根据第二子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第二子输出数据;以及向第j+1层传输第j层的第一子输出数据。通过将通讯模块的通讯进程和训练模块的训练进程进行并行运行,即训练进程与通讯进程并行运行,提升了神经网络模型的训练速度。
[0116]
在进行从第L层计算至第一层的后向算法的情况下,j为大于等于1且小于L的整数,在第j层为模型并行训练方式的情况下,第四输出数据分为第三子输入数据块和第四子输入数据块;在第j层为模型并行训练方式的情况下,工作模块将第四输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,包括:工作模块接收第三子输入数据块;工作模块并行执行:根据第三子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第三子输出数据;以及接收第四子输入数据块;工作模块并行执行:根据第四子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第四子输出数据;以及向第j-1层传输第j层的第三子输出数据。
[0117]
本申请实施例提供一种可选地的方案,比如在图6和图7中,将连续的数据并行训练方式对应的一层或多层作为一个训练层,将每个模型并行训练方式对应的层作为一个训练层,在图6和图7中,由于第一层和第二层连续,且均为数据并行训练方式对应的层,因此第一层和第二层可称为一个训练层,本申请实施例中称为第一训练层;第三层称为第二训练层,第四层称为第三训练层,第五层称为第四训练层。
[0118]
本申请实施例中,针对每个训练层,将每个训练层的输入数据分为第一子输入数据块和第二子输入数据块,也就是说,本申请实施例中将每个模型并行训练方式对应的层的输入数据分为第一子输入数据块和第二子输入数据块,可选地,将数据并行训练方式对应的层的输入数据分为第一子输入数据块和第二子输入数据块。图8示例性示出了图7中第三层和第四层的前向算法的方法示意图,如图8所示,针对每个工作模块,每个工作模块对应的第三层的输入数据分为第一子输入数据块和第二子输入数据块。工作模块502可以先根据第一子输入数据块进行训练,在得到第一子输出数据之后,即并行执行两个动作,第一个工作为:将第一子输出数据传输给工作模块502的第四层和工作模块503的第四层;另一个动作为,根据第三层的第二子输入数据块进行训练。上述两个动作并行执行可以是同时开始,或者不同时开始,只要两个动作的时间窗口有重合即为本申请实施例中所描述 的并行执行。相对应地,工作模块503、工作模块504的功能与其类似,在此不再赘述。本申请实施例中后向算法与前向算法的方案类似,在此不再赘述。
[0119]
图9示例性示出了图6至图8中工作模块502的一种工作流程示意图,如图9所示,工作模块502中包括训练模块和通讯模块,本申请实施例中的每个工作模块均可包括该训练模块和通讯模块,训练模块和通讯模块可以并行运行。以前向算法为例,工作模块502的训练模块根据第一训练层中的第一子输入数据块进行训练,并得到第一训练层中的第一子输入数据块的输出结果。
[0120]
工作模块502并行执行两个动作:工作模块502的训练模块根据第一训练层中的第二子输入数据块进行训练,并得到第一训练层中的第二子输入数据块的输出结果;工作模块502的通信模块将第一训练层中的第一子输入数据块的输出结果传输给工作模块502、工作模块503和工作模块504的第二训练层。其它工作模块也并行的执行与工作模块502类似的动作,工作模块502将接收到的工作模块502、工作模块503和工作模块504分别输出的第一训练层中的第一子输入数据块的输出结果作为第二训练层的第一子输入数据块。
[0121]
工作模块502接着并行执行两个动作:工作模块502的训练模块根据第二训练层中的第一子输入数据块进行训练,并得到第二训练层中的第一子输入数据块的输出结果;工作模块502的通信模块将第一训练层中的第二子输入数据块的输出结果传输给工作模块502、工作模块503和工作模块504的第二训练层。其它工作模块也并行的执行与工作模块502类似的动作,工作模块502将接收到的工作模块502、工作模块503和工作模块504分别输出的第一训练层中的第二子输入数据块的输出结果作为第二训练层的第二子输入数据块。
[0122]
工作模块502接着并行执行两个动作:工作模块502的训练模块根据第二训练层中的第二子输入数据块进行训练,并得到第二训练层中的第二子输入数据块的输出结果;工作模块502的通信模块将第二训练层中的第一子输入数据块的输出结果传输给工作模块502、工作模块503和工作模块504的第三训练层。其它工作模块也并行的执行与工作模块502类似的动作,工作模块502将接收到的工作模块502、工作模块503和工作模块504分别输出的第二训练层中的第一子输入数据块的输出结果作为第三训练层的第一子输入数据块。其它训练层与上述内容类似,在此不再赘述。
[0123]
通过上述内容可看出,本申请实施例中通过i个工作模块对该层的模型参数进行训练所消耗的总时长包括通过i个工作模块进行输入数据的传输的时长、通过i个工作模块对该层的模型参数进行训练的时长,具体来说,比如本申请实施例中的第三层,通过3个工作模块对该层的模型参数进行训练所消耗的总时长包括:通过3个工作模块进行输入数据的传输的时长、通过3个工作模块对该层的模型参数进行训练的时长。通过3个工作模块进行输入数据的传输的时长即为图6和图7中工作模块502、工作模块503和工作模块504分别向三个工作模块输入第二层的输出结果的时长。
[0124]
从图9中可以看出,本申请实施例中将模型并行训练方式对应的层中的输入数据分为第一子输入数据块和第二子输入数据块,如此,每一层中对模型参数进行训练的时间会和数据传输的时间之间有重合,本申请实施例结合图9提供一种方案,通过以下方式预估m个工作模块分别接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所消耗的总时长t:
[0125]
t=max{t 1,t 3}+max{t 2,t 3};
[0126]
其中,t1为m个工作模块接收第二子输入数据块的时长;
[0127]
t2为m个工作模块向第j+1层传输第j层的第一子输出数据的时长;
[0128]
t3为m个工作模块根据第二子输入数据块对第j层的模型参数进行模型并行训练,得到第j层的第二子输出数据的时长;或者t3为m个工作模块根据第二子输入数据块对第j层的模型参数进行模型并行训练,得到第j层的第二子输出数据的时长。
[0129]
可选地,t为前述内容中的第一总时长或者为第二总时长。
[0130]
结合图9举例说明,m个工作模块对第三层(即第二训练层进行训练所消耗的总时长t满足上述公式(1),t1为m个工作模块接收用于对第二层进行模型参数训练的所有工作模块输出的第二层的第二子输出数据,得到第三层的第二子输入数据块的时长;t2为m个工作模块向第四层传输第三层的第一子输出数据的时长;t3为m个工作模块对第三层的第一子输入数据块进行模型参数训练,得到第三层的第一子输出数据的时长;或者t3为m个工作模块对第三层的第二子输入数据块进行模型参数训练,得到第三层的第二子输出数据的时长。可选地,m个工作模块对第三层的第一子输入数据块进行模型参数训练得到第三层的第一子输出数据的时长,与m个工作模块对第三层的第二子输入数据块进行模型参数训练得到第三层的第二子输出数据的时长相同。
[0131]
本申请实施例提供一种可能的应用场景,以应用上述示例,将上述示例应用于:用深度神经网络对图像数据集进行分类的场景;图像数据集来源为计算机视觉系统识别项目(imagenet),数量为1000类,共128万张图像;神经网络模型采用VGG16,共1.4亿模型参数,90%的模型参数集中在全连接层。分布式系统架构中包括4个节点(node),每个节点包括2个工作模块和1个服务器模块,每个工作模块对应1块K80的GPU卡,12G显存;每个服务器模块对应一块Intel Xeon E5-2620CPU。VGG16是目前一种主流的CNN网络,广泛应用于图像、视频等分析过程。以第一轮迭代举例说明:
[0132]
启动分布式系统架构,部署应用,根据上述方案确定出神经网络模型中每层的模型训练方式,在VGG16中,由于从第一层开始到最后一个汇集(pooling)层,因此确定为数据并行训练方式对应的层,这些层组成第一个训练层(LayerSet)。考虑到通信瓶颈问题,通过上述方案将最后一个汇集(pooling)之后的每一层均确定为模型训练方式对应的层,每个模型训练方式对应的层均为一个训练层,在前向算法中,将模型训练方式对应的层中的每层的输入数据均分为第一子输入数据块和第二子输入数据块,在后向算法中,将模型训练方式对应的层中的每层的输入数据均分为第三子输入数据块和第四子输入数据块。也就是说,将最后一个汇集(pooling)之后的每一层都纵向切分成两部分分配到一个节点里的两个工作模块上计算,也可以在一个工作模块上进行依次计算,视分布式系统架构的具体形式进行合理分配。并确定每个模型训练方式对应层中用于对该层的模型参数进行训练的工作模块数量m。
[0133]
启动训练过程,开始第一次迭代计算,将每个节点处加载的每一个训练层中的输入数据(mini-batch)分为第一子输入数据块和第二子输入数据块两部分,比如共有Q个训练层,对于q=1,2,…,Q个训练层,分别做前向算法,在每个训练层的计算过程中,先计算第一子输入数据块,再计算第二子输入数据块。当前训练层的当前子输入数据块计算完后即可触发对该子输入数据块的输出数据的传输,同时也可触发对下一个子输入数据块的计算。
[0134]
前向算法完成后,启动后向算法。对于q=1,2,…,Q个训练层,依次进行后向算法。计 算第q个训练层的第二子输入数据块的同时,进行第q个训练层的第一子输出数据的传输,同样,在计算q个训练层的第一子输入数据块的同时,进行第q-1个训练层的第二子输出数据的传输。并且当训练层的训练方式为数据并行训练方式时,一旦得到训练层中的模型参数的局部梯度则推送给服务器模块,并在该模型参数的全局梯度可以从服务器模块下拉后,从服务器模块从服务器模块下拉。本申请实施例中,当神经网络模型中所有模型参数的全局梯度都得到时表示当前迭代完成,开始下一次迭代。
[0135]
基于相同构思,图10示例性示出了本申请实施例提供一种神经网络模型的训练装置,用于执行上述方法流程。本申请实施例提供的训练装置包括至少一个工作模块,训练装置适用于包括M个工作模块的训练系统,神经网络模型包括L层,M和L为大于等于1的整数;针对神经网络模型的L层中的每层,使用至少一个工作模块对该层进行训练。如图10所示,训练装置1000包括至少一个工作模块,如图中所示工作模块1001。至少一个工作模块中的每个工作模块包括管理模块1002和训练模块1003。可选地,本申请实施例中工作模块还可包括通讯模块1004,通讯模块用于实现神经网络模型的L层中相邻层之间数据的传输,以及各个工作模块之间的数据的传输,以及工作模块服务器模块之间数据的传输。其中:
[0136]
管理模块,用于针对神经网络模型的L层中的每层,根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式;其中,模型训练方式包括数据并行训练方式和模型并行训练方式;模型参数集合包括该层的所有模型参数;
[0137]
训练模块,用于:
[0138]
在进行从第一层计算至第L层的前向算法、且j为大于1且小于等于L的整数的情况下:
[0139]
在该层为神经网络模型中的第一层的情况下:第一层为数据并行训练方式的情况下:将第一输入数据作为第一层的输入数据,对第一层的模型参数进行数据并行训练,第一输入数据为工作模块对应的初始训练数据;在第一层为模型并行训练方式的情况下:将第二输入数据作为工作模块第一层的输入数据,对第一层的模型参数进行模型并行训练,第二输入数据为至少一个工作模块对应的初始训练数据;
[0140]
在该层为神经网络模型中的第j层的情况下:在第j层为数据并行训练方式的情况下,将第一输出数据作为第j层的输入数据,对第j层的模型参数进行数据并行训练,第一输出数据为工作模块第j-1层训练的输出数据;在第j层为模型并行训练方式的情况下,将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,第二输出数据为m个工作模块第j-1层训练的输出数据,m个工作模块为第j-1层训练使用的一个或多个工作模块;m为大于等于1且小于等于M的整数;其中,L层中至少一层的m的值大于1。
[0141]
可选地,管理模块,用于:在该层的模型参数集合中的预估数据量不大于输出数据的预估数据量的情况下,确定该层的模型训练方式为数据并行训练方式;在该层的模型参数集合中的预估数据量大于输出数据的预估数据量的情况下,确定该层的模型训练方式为模型并行训练方式。
[0142]
可选地,在第j层为模型并行训练方式的情况下:训练模块,用于:根据第j层的模型参数的集合,确定工作模块所训练的第j层的模型参数的子集;将第二输出数据作为第j层的输入数据,对第j层的模型参数的子集进行模型并行训练;其中,至少一个工作模块 中的任两个工作模块所训练的第j层的模型参数的子集之间交集为空,至少一个工作模块中所有工作模块所训练的第j层的模型参数的子集的并集等于第j层的模型参数的全集。
[0143]
可选地,在第j层为模型并行训练方式的情况下:管理模块,还用于:
[0144]
步骤A,取i的值为一大于等于1、且小于等于M的整数,预估i个工作模块进行训练所消耗的第一总时长,并执行步骤B;其中,第一总时长为i个工作模块中的每个工作模块接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所预估消耗的总时长;
[0145]
步骤B,更新i的赋值,更新后的i的值为另一大于等于1、且小于等于M的整数,并执行步骤C;
[0146]
步骤C,预估更新后的i个工作模块进行训练所消耗的第二总时长;其中,第二总时长为更新后的i个工作模块中的每个工作模块接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所预估消耗的总时长;其中,每个i的取值对应一个总时长;
[0147]
若第一总时长和第二总时长的数量之和小于数量阈值,则执行步骤B;若第一总时长和第二总时长的数量之和等于数量阈值,则执行步骤D;
[0148]
步骤D,从第一总时长和第二总时长中确定出值最小的总时长,将值最小的总时长所对应的i的取值作为:确定用于对第j层的进行训练的至少一个工作模块的数量的值。
[0149]
可选地,在第j层为模型并行训练方式的情况下:第二输出数据分为第一子输入数据块和第二子输入数据块;训练模块,用于:接收第一子输入数据块;并行执行:根据第一子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第一子输出数据;以及接收第二子输入数据块;并行执行:根据第二子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第二子输出数据;以及向第j+1层传输第j层的第一子输出数据。
[0150]
可选地,管理模块,还用于通过以下方式预估m个工作模块分别接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所消耗的总时长t:
[0151]
t=max{t 1,t 3}+max{t 2,t 3};
[0152]
其中,t1为m个工作模块接收第二子输入数据块的时长;
[0153]
t2为m个工作模块向第j+1层传输第j层的第一子输出数据的时长;
[0154]
t3为m个工作模块根据第二子输入数据块对第j层的模型参数进行模型并行训练,得到第j层的第二子输出数据的时长;或者t3为m个工作模块根据第二子输入数据块对第j层的模型参数进行模型并行训练,得到第j层的第二子输出数据的时长。
[0155]
可选地,训练模块,还用于:
[0156]
在进行从第L层计算至第一层的后向算法、且j为大于等于1且小于L的整数的情况下:
[0157]
在该层为神经网络模型中的第L层的情况下:在第L层为数据并行训练方式的情况下,将第三输入数据作为第L层的输入数据,对第L层的模型参数进行数据并行训练,第三输入数据为工作模块对应的前向算法中第L层的输出数据;在第L层为模型并行训练方式的情况下,将第四输入数据作为工作模块第L层的输入数据,对第L层的模型参数进行模型并行训练,第四输入数据为至少一个工作模块在前向算法中对第L层的模型参数进行训练的输出数据;
[0158]
在该层为神经网络模型中的第j层的情况下:在第j层为数据并行训练方式的情况下, 将第三输出数据作为第j层的输入数据,对第j层的模型参数进行数据并行训练,第三输出数据为工作模块第j+1层训练的输出数据;在第j层为模型并行训练方式的情况下,将第四输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,第四输出数据为m个工作模块第j+1层训练的输出数据,m个工作模块为第j+1层训练使用的一个或多个工作模块;m为大于等于1且小于等于M的整数;其中,L层中至少一层的m的值大于1。
[0159]
可选地,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且第j层为模型并行训练方式的情况下:
[0160]
训练模块,用于:根据第j层的模型参数的集合,确定工作模块所训练的第j层的模型参数的子集;将第四输出数据作为第j层的输入数据,对第j层的模型参数的子集进行模型并行训练;其中,至少一个工作模块中的任两个工作模块所训练的第j层的模型参数的子集之间交集为空,至少一个工作模块中所有工作模块所训练的第j层的模型参数的子集的并集等于第j层的模型参数的全集。
[0161]
可选地,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且第j层为模型并行训练方式的情况下:第四输出数据分为第三子输入数据块和第四子输入数据块;
[0162]
训练模块,用于:接收第三子输入数据块;并行执行:根据第三子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第三子输出数据;以及接收第四子输入数据块;并行执行:根据第四子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第四子输出数据;以及向第j-1层传输第j层的第三子输出数据。
[0163]
从上述内容可看出,本申请实施例中根据每层的模型参数集合中的预估数据量和输出数据的预估数据量,确定每层的模型训练方式,如此,在第j层为模型并行训练方式的情况下,工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练。由于第二输出数据为m个工作模块第j-1层训练的输出数据;也就是说,针对模型并行训练方式对应的第j层,工作模块接收m个工作模块的输出数据,该数据可称为全量数据,工作模块根据全量数据进行模型参数训练,可直接得到模型参数的全局梯度,相比于现有技术中工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度之后才得到模型参数的全局梯度的方案,减少了工作模块和服务器模块之间的通讯量。
[0164]
基于相同构思,图11示例性示出了本申请实施例提供一种神经网络模型的训练装置,用于执行上述方法流程。本申请实施例提供的训练装置1100包括处理器1101、收发器1102和存储器1103,处理器1101包括至少一个处理器核,训练装置适用于包括M个处理器核的训练系统,神经网络模型包括L层,M和L为大于等于1的整数;针对神经网络模型的L层中的每层,使用至少一个处理器核对该层进行训练。
[0165]
其中,处理器、存储器、收发器通过总线相互连接。总线可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0166]
存储器可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,简称RAM);存储器也可以包括非易失性存储器(non-volatile memory),例如快 闪存储器(flash memory),硬盘(hard disk drive,简称HDD)或固态硬盘(solid-state drive,简称SSD);存储器还可以包括上述种类的存储器的组合。
[0167]
处理器中包括的至少一个处理器核可包括GPU,或者可包括GPU和CPU。处理器核还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,简称ASIC),可编程逻辑器件(programmable logic device,简称PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,简称CPLD),现场可编程逻辑门阵列(field-programmable gate array,简称FPGA),通用阵列逻辑(generic array logic,简称GAL)或其任意组合。
[0168]
收发器用于实现神经网络模型的L层中相邻层之间数据的传输,以及各个工作模块之间的数据的传输,以及工作模块服务器模块之间数据的传输。
[0169]
存储器用于存储指令。可选地,存储器还用于存储确定出的各层的模型训练方式等信息。
[0170]
处理器用于执行存储器存储的指令,并控制收发器与M个处理器核中的其它处理器核之间传输数据。可选地,M个处理器核之间可通过核间通信传输数据,比如通过处理器核之间的总线传输数据。可选地,处理器还控制收发器与服务器模块之间传输数据。
[0171]
当处理器执行存储器存储的指令时,至少一个处理器核中的每个处理器核用于:
[0172]
针对神经网络模型的L层中的每层,根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式;其中,模型训练方式包括数据并行训练方式和模型并行训练方式;模型参数集合包括该层的所有模型参数;
[0173]
并执行以下操作以对该层进行训练:
[0174]
在进行从第一层计算至第L层的前向算法、且j为大于1且小于等于L的整数的情况下:
[0175]
在该层为神经网络模型中的第一层的情况下:第一层为数据并行训练方式的情况下:将第一输入数据作为第一层的输入数据,对第一层的模型参数进行数据并行训练,第一输入数据为工作模块对应的初始训练数据;在第一层为模型并行训练方式的情况下:将第二输入数据作为工作模块第一层的输入数据,对第一层的模型参数进行模型并行训练,第二输入数据为至少一个工作模块对应的初始训练数据;
[0176]
在该层为神经网络模型中的第j层的情况下:在第j层为数据并行训练方式的情况下,将第一输出数据作为第j层的输入数据,对第j层的模型参数进行数据并行训练,第一输出数据为工作模块第j-1层训练的输出数据;在第j层为模型并行训练方式的情况下,将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,第二输出数据为m个工作模块第j-1层训练的输出数据,m个工作模块为第j-1层训练使用的一个或多个工作模块;m为大于等于1且小于等于M的整数;其中,L层中至少一层的m的值大于1。
[0177]
可选地,处理器,用于:在该层的模型参数集合中的预估数据量不大于输出数据的预估数据量的情况下,确定该层的模型训练方式为数据并行训练方式;在该层的模型参数集合中的预估数据量大于输出数据的预估数据量的情况下,确定该层的模型训练方式为模型并行训练方式。
[0178]
可选地,在第j层为模型并行训练方式的情况下:处理器,用于:根据第j层的模型参数的集合,确定工作模块所训练的第j层的模型参数的子集;将第二输出数据作为第j 层的输入数据,对第j层的模型参数的子集进行模型并行训练;其中,至少一个工作模块中的任两个工作模块所训练的第j层的模型参数的子集之间交集为空,至少一个工作模块中所有工作模块所训练的第j层的模型参数的子集的并集等于第j层的模型参数的全集。
[0179]
可选地,在第j层为模型并行训练方式的情况下:处理器,还用于:
[0180]
步骤A,取i的值为一大于等于1、且小于等于M的整数,预估i个工作模块进行训练所消耗的第一总时长,并执行步骤B;其中,第一总时长为i个工作模块中的每个工作模块接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所预估消耗的总时长;
[0181]
步骤B,更新i的赋值,更新后的i的值为另一大于等于1、且小于等于M的整数,并执行步骤C;
[0182]
步骤C,预估更新后的i个工作模块进行训练所消耗的第二总时长;其中,第二总时长为更新后的i个工作模块中的每个工作模块接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所预估消耗的总时长;其中,每个i的取值对应一个总时长;
[0183]
若第一总时长和第二总时长的数量之和小于数量阈值,则执行步骤B;若第一总时长和第二总时长的数量之和等于数量阈值,则执行步骤D;
[0184]
步骤D,从第一总时长和第二总时长中确定出值最小的总时长,将值最小的总时长所对应的i的取值作为:确定用于对第j层的进行训练的至少一个工作模块的数量的值。
[0185]
可选地,在第j层为模型并行训练方式的情况下:第二输出数据分为第一子输入数据块和第二子输入数据块;处理器,用于:接收第一子输入数据块;并行执行:根据第一子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第一子输出数据;以及接收第二子输入数据块;并行执行:根据第二子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第二子输出数据;以及向第j+1层传输第j层的第一子输出数据。
[0186]
可选地,处理器,还用于通过以下方式预估m个工作模块分别接收第二输入数据,以及根据第二输入数据对第j层的模型参数进行训练所消耗的总时长t:
[0187]
t=max{t 1,t 3}+max{t 2,t 3};
[0188]
其中,t1为m个工作模块接收第二子输入数据块的时长;
[0189]
t2为m个工作模块向第j+1层传输第j层的第一子输出数据的时长;
[0190]
t3为m个工作模块根据第二子输入数据块对第j层的模型参数进行模型并行训练,得到第j层的第二子输出数据的时长;或者t3为m个工作模块根据第二子输入数据块对第j层的模型参数进行模型并行训练,得到第j层的第二子输出数据的时长。
[0191]
可选地,处理器,还用于:
[0192]
在进行从第L层计算至第一层的后向算法、且j为大于等于1且小于L的整数的情况下:
[0193]
在该层为神经网络模型中的第L层的情况下:在第L层为数据并行训练方式的情况下,将第三输入数据作为第L层的输入数据,对第L层的模型参数进行数据并行训练,第三输入数据为工作模块对应的前向算法中第L层的输出数据;在第L层为模型并行训练方式的情况下,将第四输入数据作为工作模块第L层的输入数据,对第L层的模型参数进行模型并行训练,第四输入数据为至少一个工作模块在前向算法中对第L层的模型参数进行训练的输出数据;
[0194]
在该层为神经网络模型中的第j层的情况下:在第j层为数据并行训练方式的情况下,将第三输出数据作为第j层的输入数据,对第j层的模型参数进行数据并行训练,第三输出数据为工作模块第j+1层训练的输出数据;在第j层为模型并行训练方式的情况下,将第四输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练,第四输出数据为m个工作模块第j+1层训练的输出数据,m个工作模块为第j+1层训练使用的一个或多个工作模块;m为大于等于1且小于等于M的整数;其中,L层中至少一层的m的值大于1。
[0195]
可选地,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且第j层为模型并行训练方式的情况下:
[0196]
处理器,用于:根据第j层的模型参数的集合,确定工作模块所训练的第j层的模型参数的子集;将第四输出数据作为第j层的输入数据,对第j层的模型参数的子集进行模型并行训练;其中,至少一个工作模块中的任两个工作模块所训练的第j层的模型参数的子集之间交集为空,至少一个工作模块中所有工作模块所训练的第j层的模型参数的子集的并集等于第j层的模型参数的全集。
[0197]
可选地,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且第j层为模型并行训练方式的情况下:第四输出数据分为第三子输入数据块和第四子输入数据块;
[0198]
处理器,用于:接收第三子输入数据块;并行执行:根据第三子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第三子输出数据;以及接收第四子输入数据块;并行执行:根据第四子输入数据块对第j层的模型参数进行模型并行训练,以得到第j层的第四子输出数据;以及向第j-1层传输第j层的第三子输出数据。
[0199]
从上述内容可看出,本申请实施例中根据每层的模型参数集合中的预估数据量和输出数据的预估数据量,确定每层的模型训练方式,如此,在第j层为模型并行训练方式的情况下,工作模块将第二输出数据作为第j层的输入数据,对第j层的模型参数进行模型并行训练。由于第二输出数据为m个工作模块第j-1层训练的输出数据;也就是说,针对模型并行训练方式对应的第j层,工作模块接收m个工作模块的输出数据,该数据可称为全量数据,工作模块根据全量数据进行模型参数训练,可直接得到模型参数的全局梯度,相比于现有技术中工作模块向服务器模块上推模型参数的局部梯度,并从服务器模块下拉模型参数的全局梯度之后才得到模型参数的全局梯度的方案,减少了工作模块和服务器模块之间的通讯量。
[0200]
基于相同构思,本申请实施例提供一种用于神经网络模型训练的芯片,所述芯片适用于包括M个芯片的的训练系统,所述神经网络模型包括L层,所述M和所述L为大于等于1的整数;针对所述神经网络模型的L层中的每层,使用所述M个芯片中的至少一个芯片对该层进行训练;所述至少一个芯片中的每个芯片用于执行上述内容中工作模块或处理器核执行的方法。
[0201]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机 可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
[0202]
本领域内的技术人员应明白,本申请的实施例可提供为方法、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0203]
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0204]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0205]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0206]
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
[0207]
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

权利要求书

[权利要求 1]
一种神经网络模型的训练方法,其特征在于,所述方法用于包括M个工作模块的训练系统,所述神经网络模型包括L层,所述M和所述L为大于等于1的整数;针对所述神经网络模型的L层中的每层,都使用所述M个工作模块中的至少一个工作模块对该层进行训练;所述方法包括: 针对所述神经网络模型的L层中的每层,所述至少一个工作模块中的每个工作模块根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式;其中,所述模型训练方式包括数据并行训练方式和模型并行训练方式;所述模型参数集合包括该层的所有模型参数; 所述至少一个工作模块中的每个工作模块都执行以下操作以对该层进行训练: 在进行从第一层计算至第L层的前向算法、且j为大于1且小于等于L的整数的情况下: 在该层为所述神经网络模型中的第一层的情况下:所述第一层为数据并行训练方式的情况下:所述工作模块将第一输入数据作为所述第一层的输入数据,对所述第一层的模型参数进行数据并行训练,所述第一输入数据为所述工作模块对应的初始训练数据;在所述第一层为模型并行训练方式的情况下:所述工作模块将第二输入数据作为所述工作模块第一层的输入数据,对所述第一层的模型参数进行模型并行训练,所述第二输入数据为所述至少一个工作模块对应的初始训练数据; 在该层为所述神经网络模型中的第j层的情况下:在所述第j层为数据并行训练方式的情况下,所述工作模块将第一输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行数据并行训练,所述第一输出数据为所述工作模块第j-1层训练的输出数据;在所述第j层为模型并行训练方式的情况下,所述工作模块将第二输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行模型并行训练,所述第二输出数据为m个工作模块第j-1层训练的输出数据,所述m个工作模块为所述第j-1层训练使用的一个或多个工作模块;所述m为大于等于1且小于等于M的整数;其中,所述L层中至少一层的m的值大于1。
[权利要求 2]
如权利要求1所述的方法,其特征在于,所述根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式,包括: 在该层的模型参数集合中的预估数据量不大于输出数据的预估数据量的情况下,确定该层的模型训练方式为数据并行训练方式; 在该层的模型参数集合中的预估数据量大于输出数据的预估数据量的情况下,确定该层的模型训练方式为模型并行训练方式。
[权利要求 3]
如权利要求1或2所述的方法,其特征在于,在所述第j层为模型并行训练方式的情况下:所述工作模块将第二输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行模型并行训练,包括: 所述工作模块根据所述第j层的模型参数的集合,确定所述工作模块所训练的所述第j层的模型参数的子集; 所述工作模块将所述第二输出数据作为所述第j层的输入数据,对所述第j层的模型参数的子集进行模型并行训练; 其中,所述至少一个工作模块中的任两个工作模块所训练的所述第j层的模型参数的子集之间交集为空,所述至少一个工作模块中所有工作模块所训练的所述第j层的模型参数的子集的并集等于所述第j层的模型参数的全集。
[权利要求 4]
如权利要求1至3任一权利要求所述的方法,其特征在于,在所述第j层为模型并行训练方式的情况下:所述至少一个工作模块中的每个工作模块都执行以下操作以对该层进行训练之前,所述方法还包括: 步骤A,取i的值为一大于等于1、且小于等于M的整数,预估i个工作模块进行训练所消耗的第一总时长,并执行步骤B;其中,所述第一总时长为所述i个工作模块中的每个工作模块接收所述第二输入数据,以及根据所述第二输入数据对所述第j层的模型参数进行训练所预估消耗的总时长; 步骤B,更新i的赋值,更新后的i的值为另一大于等于1、且小于等于M的整数,并执行步骤C; 步骤C,预估更新后的i个工作模块进行训练所消耗的第二总时长;其中,所述第二总时长为所述更新后的i个工作模块中的每个工作模块接收所述第二输入数据,以及根据所述第二输入数据对所述第j层的模型参数进行训练所预估消耗的总时长;其中,每个i的取值对应一个总时长; 若所述第一总时长和所述第二总时长的数量之和小于数量阈值,则执行步骤B;若所述第一总时长和所述第二总时长的数量之和等于数量阈值,则执行步骤D; 步骤D,从所述第一总时长和所述第二总时长中确定出值最小的总时长,将所述值最小的总时长所对应的i的取值作为:确定用于对所述第j层的进行训练的所述至少一个工作模块的数量的值。
[权利要求 5]
如权利要求1至4任一权利要求所述的方法,其特征在于,在所述第j层为模型并行训练方式的情况下: 所述第二输出数据分为第一子输入数据块和第二子输入数据块;所述工作模块将第二输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行模型并行训练,包括: 所述工作模块接收所述第一子输入数据块; 所述工作模块并行执行:根据所述第一子输入数据块对所述第j层的模型参数进行模型并行训练,以得到所述第j层的第一子输出数据;以及接收所述第二子输入数据块; 所述工作模块并行执行:根据所述第二子输入数据块对所述第j层的模型参数进行模型并行训练,以得到所述第j层的第二子输出数据;以及向所述第j+1层传输所述第j层的第一子输出数据。
[权利要求 6]
如权利要求5所述的方法,其特征在于,通过以下方式预估m个工作模块分别接收所述第二输入数据,以及根据所述第二输入数据对所述第j层的模型参数进行训练所消耗的总时长t: t=max{t 1,t 3}+max{t 2,t 3}; 其中,t1为所述m个工作模块接收所述第二子输入数据块的时长; t2为所述m个工作模块向所述第j+1层传输所述第j层的第一子输出数据的时长; t3为所述m个工作模块根据所述第二子输入数据块对所述第j层的模型参数进行模型并行训练,得到所述第j层的第二子输出数据的时长;或者t3为所述m个工作模块根据所述第二子输入数据块对所述第j层的模型参数进行模型并行训练,得到所述第j层的第二 子输出数据的时长。
[权利要求 7]
如权利要求1至6任一权利要求所述的方法,其特征在于,所述至少一个工作模块中的每个工作模块根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式之后,还包括: 在进行从第L层计算至第一层的后向算法、且j为大于等于1且小于L的整数的情况下: 在该层为所述神经网络模型中的第L层的情况下:在所述第L层为数据并行训练方式的情况下,所述工作模块将第三输入数据作为所述第L层的输入数据,对所述第L层的模型参数进行数据并行训练,所述第三输入数据为所述工作模块对应的前向算法中第L层的输出数据;在所述第L层为模型并行训练方式的情况下,所述工作模块将第四输入数据作为所述工作模块第L层的输入数据,对所述第L层的模型参数进行模型并行训练,所述第四输入数据为所述至少一个工作模块在前向算法中对第L层的模型参数进行训练的输出数据; 在该层为所述神经网络模型中的第j层的情况下:在所述第j层为数据并行训练方式的情况下,所述工作模块将第三输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行数据并行训练,所述第三输出数据为所述工作模块第j+1层训练的输出数据;在所述第j层为模型并行训练方式的情况下,所述工作模块将第四输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行模型并行训练,所述第四输出数据为m个工作模块第j+1层训练的输出数据,所述m个工作模块为所述第j+1层训练使用的一个或多个工作模块;所述m为大于等于1且小于等于M的整数;其中,所述L层中至少一层的m的值大于1。
[权利要求 8]
如权利要求7所述的方法,其特征在于,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且所述第j层为模型并行训练方式的情况下: 所述工作模块将第四输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行模型并行训练,包括: 所述工作模块根据所述第j层的模型参数的集合,确定所述工作模块所训练的所述第j层的模型参数的子集; 所述工作模块将所述第四输出数据作为所述第j层的输入数据,对所述第j层的模型参数的子集进行模型并行训练; 其中,所述至少一个工作模块中的任两个工作模块所训练的所述第j层的模型参数的子集之间交集为空,所述至少一个工作模块中所有工作模块所训练的所述第j层的模型参数的子集的并集等于所述第j层的模型参数的全集。
[权利要求 9]
如权利要求7所述的方法,其特征在于,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且所述第j层为模型并行训练方式的情况下:所述第四输出数据分为第三子输入数据块和第四子输入数据块; 所述工作模块将第四输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行模型并行训练,包括: 所述工作模块接收所述第三子输入数据块; 所述工作模块并行执行:根据所述第三子输入数据块对所述第j层的模型参数进行模型并行训练,以得到所述第j层的第三子输出数据;以及接收所述第四子输入数据块; 所述工作模块并行执行:根据所述第四子输入数据块对所述第j层的模型参数进行模型并行训练,以得到所述第j层的第四子输出数据;以及向所述第j-1层传输所述第j层的第三子输出数据。
[权利要求 10]
一种神经网络模型的训练装置,其特征在于,所述训练装置包括至少一个工作模块,所述训练装置适用于包括M个工作模块的训练系统,所述神经网络模型包括L层,所述M和所述L为大于等于1的整数;针对所述神经网络模型的L层中的每层,使用所述至少一个工作模块对该层进行训练;所述至少一个工作模块中的每个工作模块包括管理模块和训练模块: 管理模块,用于针对所述神经网络模型的L层中的每层,根据该层的模型参数集合中的预估数据量和输出数据的预估数据量,确定该层的模型训练方式;其中,所述模型训练方式包括数据并行训练方式和模型并行训练方式;所述模型参数集合包括该层的所有模型参数; 训练模块,用于: 在进行从第一层计算至第L层的前向算法、且j为大于1且小于等于L的整数的情况下: 在该层为所述神经网络模型中的第一层的情况下:所述第一层为数据并行训练方式的情况下:将第一输入数据作为所述第一层的输入数据,对所述第一层的模型参数进行数据并行训练,所述第一输入数据为所述工作模块对应的初始训练数据;在所述第一层为模型并行训练方式的情况下:将第二输入数据作为所述工作模块第一层的输入数据,对所述第一层的模型参数进行模型并行训练,所述第二输入数据为所述至少一个工作模块对应的初始训练数据; 在该层为所述神经网络模型中的第j层的情况下:在所述第j层为数据并行训练方式的情况下,将第一输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行数据并行训练,所述第一输出数据为所述工作模块第j-1层训练的输出数据;在所述第j层为模型并行训练方式的情况下,将第二输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行模型并行训练,所述第二输出数据为m个工作模块第j-1层训练的输出数据,所述m个工作模块为所述第j-1层训练使用的一个或多个工作模块;所述m为大于等于1且小于等于M的整数;其中,所述L层中至少一层的m的值大于1。
[权利要求 11]
如权利要求10所述的训练装置,其特征在于,所述管理模块,用于: 在该层的模型参数集合中的预估数据量不大于输出数据的预估数据量的情况下,确定该层的模型训练方式为数据并行训练方式; 在该层的模型参数集合中的预估数据量大于输出数据的预估数据量的情况下,确定该层的模型训练方式为模型并行训练方式。
[权利要求 12]
如权利要求10或11所述的训练装置,其特征在于,在所述第j层为模型并行训练方式的情况下:所述训练模块,用于: 根据所述第j层的模型参数的集合,确定所述工作模块所训练的所述第j层的模型参数的子集; 将所述第二输出数据作为所述第j层的输入数据,对所述第j层的模型参数的子集进行模型并行训练; 其中,所述至少一个工作模块中的任两个工作模块所训练的所述第j层的模型参数的 子集之间交集为空,所述至少一个工作模块中所有工作模块所训练的所述第j层的模型参数的子集的并集等于所述第j层的模型参数的全集。
[权利要求 13]
如权利要求10至12任一权利要求所述的训练装置,其特征在于,在所述第j层为模型并行训练方式的情况下:所述管理模块,还用于: 步骤A,取i的值为一大于等于1、且小于等于M的整数,预估i个工作模块进行训练所消耗的第一总时长,并执行步骤B;其中,所述第一总时长为所述i个工作模块中的每个工作模块接收所述第二输入数据,以及根据所述第二输入数据对所述第j层的模型参数进行训练所预估消耗的总时长; 步骤B,更新i的赋值,更新后的i的值为另一大于等于1、且小于等于M的整数,并执行步骤C; 步骤C,预估更新后的i个工作模块进行训练所消耗的第二总时长;其中,所述第二总时长为所述更新后的i个工作模块中的每个工作模块接收所述第二输入数据,以及根据所述第二输入数据对所述第j层的模型参数进行训练所预估消耗的总时长;其中,每个i的取值对应一个总时长; 若所述第一总时长和所述第二总时长的数量之和小于数量阈值,则执行步骤B;若所述第一总时长和所述第二总时长的数量之和等于数量阈值,则执行步骤D; 步骤D,从所述第一总时长和所述第二总时长中确定出值最小的总时长,将所述值最小的总时长所对应的i的取值作为:确定用于对所述第j层的进行训练的所述至少一个工作模块的数量的值。
[权利要求 14]
如权利要求10至13任一权利要求所述的训练装置,其特征在于,在所述第j层为模型并行训练方式的情况下: 所述第二输出数据分为第一子输入数据块和第二子输入数据块;所述训练模块,用于: 接收所述第一子输入数据块; 并行执行:根据所述第一子输入数据块对所述第j层的模型参数进行模型并行训练,以得到所述第j层的第一子输出数据;以及接收所述第二子输入数据块; 并行执行:根据所述第二子输入数据块对所述第j层的模型参数进行模型并行训练,以得到所述第j层的第二子输出数据;以及向所述第j+1层传输所述第j层的第一子输出数据。
[权利要求 15]
如权利要求14所述的训练装置,其特征在于,所述管理模块,还用于通过以下方式预估m个工作模块分别接收所述第二输入数据,以及根据所述第二输入数据对所述第j层的模型参数进行训练所消耗的总时长t: t=max{t 1,t 3}+max{t 2,t 3}; 其中,t1为所述m个工作模块接收所述第二子输入数据块的时长; t2为所述m个工作模块向所述第j+1层传输所述第j层的第一子输出数据的时长; t3为所述m个工作模块根据所述第二子输入数据块对所述第j层的模型参数进行模型并行训练,得到所述第j层的第二子输出数据的时长;或者t3为所述m个工作模块根据所述第二子输入数据块对所述第j层的模型参数进行模型并行训练,得到所述第j层的第二子输出数据的时长。
[权利要求 16]
如权利要求10至15任一权利要求所述的训练装置,其特征在于,所述训练模块,还用于: 在进行从第L层计算至第一层的后向算法、且j为大于等于1且小于L的整数的情况下: 在该层为所述神经网络模型中的第L层的情况下:在所述第L层为数据并行训练方式的情况下,将第三输入数据作为所述第L层的输入数据,对所述第L层的模型参数进行数据并行训练,所述第三输入数据为所述工作模块对应的前向算法中第L层的输出数据;在所述第L层为模型并行训练方式的情况下,将第四输入数据作为所述工作模块第L层的输入数据,对所述第L层的模型参数进行模型并行训练,所述第四输入数据为所述至少一个工作模块在前向算法中对第L层的模型参数进行训练的输出数据; 在该层为所述神经网络模型中的第j层的情况下:在所述第j层为数据并行训练方式的情况下,将第三输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行数据并行训练,所述第三输出数据为所述工作模块第j+1层训练的输出数据;在所述第j层为模型并行训练方式的情况下,将第四输出数据作为所述第j层的输入数据,对所述第j层的模型参数进行模型并行训练,所述第四输出数据为m个工作模块第j+1层训练的输出数据,所述m个工作模块为所述第j+1层训练使用的一个或多个工作模块;所述m为大于等于1且小于等于M的整数;其中,所述L层中至少一层的m的值大于1。
[权利要求 17]
如权利要求16所述的训练装置,其特征在于,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且所述第j层为模型并行训练方式的情况下: 所述训练模块,用于: 根据所述第j层的模型参数的集合,确定所述工作模块所训练的所述第j层的模型参数的子集; 将所述第四输出数据作为所述第j层的输入数据,对所述第j层的模型参数的子集进行模型并行训练; 其中,所述至少一个工作模块中的任两个工作模块所训练的所述第j层的模型参数的子集之间交集为空,所述至少一个工作模块中所有工作模块所训练的所述第j层的模型参数的子集的并集等于所述第j层的模型参数的全集。
[权利要求 18]
如权利要求16所述的训练装置,其特征在于,在进行从第L层计算至第一层的后向算法、j为大于等于1且小于L的整数、且所述第j层为模型并行训练方式的情况下:所述第四输出数据分为第三子输入数据块和第四子输入数据块; 所述训练模块,用于: 接收所述第三子输入数据块; 并行执行:根据所述第三子输入数据块对所述第j层的模型参数进行模型并行训练,以得到所述第j层的第三子输出数据;以及接收所述第四子输入数据块; 并行执行:根据所述第四子输入数据块对所述第j层的模型参数进行模型并行训练,以得到所述第j层的第四子输出数据;以及向所述第j-1层传输所述第j层的第三子输出数据。
[权利要求 19]
一种神经网络模型的训练装置,其特征在于,所述训练装置包括处理器、存储器和收发器,所述处理器包括至少一个处理器核,所述训练装置适用于包括M个处理器核的训练系统,所述神经网络模型包括L层,所述M和所述L为大于等于1的整数;针对所述神经网络模型的L层中的每层,使用所述至少一个处理器核对该层进行训练; 所述存储器用于存储指令;所述处理器用于执行所述存储器存储的指令,并控制所述 收发器与所述M个处理器核中的其它处理器核之间传输数据;当所述处理器执行所述存储器存储的指令时,所述至少一个处理器核中的每个处理器核用于执行如权利要求1至9任一权利要求中工作模块执行的方法。
[权利要求 20]
一种用于神经网络模型训练的芯片,其特征在于,所述芯片适用于包括M个芯片的的训练系统,所述神经网络模型包括L层,所述M和所述L为大于等于1的整数;针对所述神经网络模型的L层中的每层,使用所述M个芯片中的至少一个芯片对该层进行训练; 所述至少一个芯片中的每个芯片用于执行如权利要求1至9任一权利要求中工作模块执行的方法。
[权利要求 21]
一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令在被计算机调用时,使所述计算机执行如权利要求1至9任一权利要求所述的方法。

附图

[ 图 0001]  
[ 图 0002]  
[ 图 0003]  
[ 图 0004]  
[ 图 0005]  
[ 图 0006]  
[ 图 0007]  
[ 图 0008]  
[ 图 0009]  
[ 图 0010]  
[ 图 0011]