一种基于多gpu的bpnn训练方法和装置制造方法

文档序号:6499977阅读:264来源:国知局
一种基于多gpu的bpnn训练方法和装置制造方法
【专利摘要】本发明提供了一种基于多图形处理器(GPU)的反向传播神经网络(BPNN)训练方法和装置,其中方法包括:S1、控制各GPU进行BPNN的正向计算,并在各GPU间同步正向计算输出;S2、控制各GPU进行BPNN的反向误差计算,并在各GPU间同步反向误差计算输出;S3、控制各GPU根据所述同步得到的正向计算输出与所述同步得到的反向误差计算输出更新BPNN的权重。本发明能够减少多GPU的BPNN训练时的数据同步开销,提高多GPU的BPNN训练效率。
【专利说明】—种基于多GPU的BPNN训练方法和装置
【【技术领域】】
[0001]本发明涉及神经网络训练技术,尤其涉及一种基于多GPU的BPNN训练方法和装置。
【【背景技术】】
[0002]BPNN (Back-Propagation Nueral Networks)反向传播神经网络是 1986 年由Rumelhart和McCelland为首的科学家小组提出的一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。
[0003]BPNN模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(outputlayer)。输入层负责接收来自外界的输入数据,并传递给隐层;隐层是内部信息处理层,负责数据处理,隐层可以设计为单隐层或者多隐层结构;最后一层隐层传递到输出层各神经元的数据,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。周而复始的数据正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程。
[0004]BPNN训练过程的复杂度,与BPNN的规模和用于训练的数据规模有关。通常,商业或工业应用中的BPNN的规模较大,且用于训练的数据量也非常之大,传统的单机CPU已无法满足BPNN的训练需求。随着GPU计算的通用化,利用GPU进行BPNN的训练成为一种有效的加速BPNN训练过程的手段。然而,随着BPNN规模的不断增大,单GPU也已经无法满足训练需求,基于多GPU的BPNN训练成为研究热点。
[0005]目前,现有的多GPU的BPNN训练方法通常是在每个GPU上保存一个各层初始权重相同的BPNN,每次训练时将输入数据分为多份,每个GPU分别针对一份数据进行训练,即每个GPU针对一份数据进行BPNN的正向计算、反向误差计算和权重更新。在所有GPU完成各自的计算后,同步各个GPU所保存的BPNN的各层的权值,使得每个GPU的BPNN都获得完整的权重值,进行下一次训练。
[0006]然而,上述这样多GPU的BPNN训练方法中在同步GPU的BPNN之间的同步权重数据时存在较大的开销,大规模BPNN的权重值数据量可达数百兆,在多个GPU之间同步该些BPNN的权重值时的通信用时开销可达数百毫秒,导致利用多GPU对BPNN进行训练的效率低下,而单个GPU上训练过程通常只需耗时几十毫秒,可见,由于多个GPU之间数据同步开销较大,导致利用多GPU对BPNN进行训练的效率低下,有时甚至不如利用单GPU进行BPNN的训练。

【发明内容】

[0007]本发明提供了一种基于多GPU的BPNN训练方法和装置,能够减少多GPU的BPNN训练时的数据同步开销,提高多GPU的BPNN训练效率。
[0008] 具体技术方案如下:[0009]一种基于多图形处理器GPU的反向传播神经网络BPNN训练方法,该方法包括:
[0010]S1、控制各GPU进行BPNN的正向计算,并在各GPU间同步正向计算输出;
[0011]S2、控制各GPU进行BPNN的反向误差计算,并在各GPU间同步反向误差计算输出;
[0012]S3、控制各GPU根据所述同步得到的正向计算输出与所述同步得到的反向误差计算输出更新BPNN的权重。
[0013]根据本发明一优选实施例,所述步骤SI具体包括:
[0014]控制各GPU进行正向计算,针对每一层执行:在BPNN的当前层正向计算结束后将正向计算输出传递至下一层的同时,在各GPU之间同步当前层的正向计算输出。
[0015]根据本发明一优选实施例,所述步骤S2具体包括:
[0016]根据BPNN正向输出数据与预期值的差异,控制各GPU进行反向误差计算,针对每一层执行:在BPNN的当前层反向误差计算结束后将反向误差计算输出传递至下一层的同时,在各GPU之间同步当前层的反向误差计算输出。
[0017]根据本发明一优选实施例,调用GPU之间的PC1-E总线在各GPU之间同步所述正向计算输出并保存在GPU内存中。
[0018]根据本发明一优选实施例,调用GPU之间的PC1-E总线在各GPU之间同步所述反向误差计算输出并保存在GPU内存中
[0019]一种基于多图形处理器GPU的反向传播神经网络BPNN训练装置,该装置包括:
[0020]正向计算单元,用于控制各GPU进行BPNN的正向计算,并在各GPU间同步正向计算输出;
[0021]反向误差计算单元,用于控制各GPU进行BPNN的反向误差计算,并在各GPU间同步反向误差计算输出;
[0022]权重更新单元,用于控制各GPU根据所述同步得到的正向计算输出与所述同步得到的反向误差计算输出更新BPNN的权重。
[0023]根据本发明一优选实施例,所述正向计算单元具体执行:
[0024]控制各GPU进行正向计算,针对每一层执行:在BPNN的当前层正向计算结束后将正向计算输出传递至下一层的同时,在各GPU之间同步当前层的正向计算输出。
[0025]根据本发明一优选实施例,所述反向误差计算单元具体执行:
[0026]根据BPNN正向输出数据与预期值的差异,控制各GPU进行反向误差计算,针对每一层执行:在BPNN的当前层反向误差计算结束后将反向误差计算输出传递至下一层的同时,在各GPU之间同步当前层的反向误差计算输出。
[0027]根据本发明一优选实施例,所述正向计算单元调用GPU之间的PC1-E总线在各GPU之间同步所述正向计算输出并保存在GPU内存中。
[0028]根据本发明一优选实施例,所述反向误差计算单元调用GPU之间的PC1-E总线在各GPU之间同步所述正向计算输出并保存在GPU内存中。
[0029]由以上技术方案可以看出,本发明通过在BPNN的每层正向计算结束后在各GPU之间同步该层的正向计算输出,以及每层反向误差计算结束后在各GPU之间同步该层的反向误差计算输出,使得每个GPU上的BPNN都有完整的正向计算输出以及反向误差计算输出,并能以此更新得到完整权重值。与现有技术相比,本发明有效减少了多GPU的BPNN训练时数据同步的开销,显著提高了多GPU的BPNN训练效率。【【专利附图】

【附图说明】】
[0030]图1为本发明实施例一所提供的基于多GPU的BPNN训练方法流程图;
[0031]图2为本发明实施例一所提供的正向计算过程示例图;
[0032]图3为本发明实施例一所提供的反向误差计算过程示例图;
[0033]图4为现有的基于多GPU的BPNN的训练过程示例图;
[0034]图5为本发明所提供的基于多GPU的BPNN训练过程示例图;
[0035]图6为本发明实施例二所提供的基于多GPU的BPNN训练装置示意图。
【【具体实施方式】】
[0036]为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0037]BPNN的每一层的权重的更新依赖于BPNN每一层的正向计算的输出和反向误差计算的输出,为便于表述,可以用W表示权重、O表示正向计算的输出、E表示反向误差计算的输出,即根据正向计算输出O和反向误差计算输出E来更新每一层的权重值W。
[0038]在现有的多GPU的BPNN训练方法中,由于每个GPU只训练了一部分数据,所以每个GPU的BPNN的权重值只是基于该GPU训练的数据更新得到的,因此,需要在所有GPU完成各自BPNN的权重更新后,对各个GPU的BPNN的权重值进行同步,使得每个GPU的BPNN都具有完整的权重值,之后才能进行下一次训练。然而,相对于权重W,正向计算输出O和反向误差计算输出E的数据量小很多,而且,由于每个GPU只训练一部分数据,因此各个GPU的正向计算输出O和反向误差计算输出E数据量之和通常只是权重W的数十分之一,如果能通过同步正向计算输出O和反向误差计算输出E来使得每个GPU的BPNN获得完整的权重值W,则会明显减少数据同步开销。
[0039]本发明正是通过在每一层的正向计算或反向误差计算结束后,同步各个GPU上该层的正向计算输出O或反向误差计算输出E,来减少数据同步开销。
[0040]实施例一
[0041]图1为本发明实施例一所提供的基于多GPU的BPNN训练方法流程图,如图1所示,该方法包括:
[0042]S101、控制各个GPU进行正向计算,并同步正向计算输出O。
[0043]BPNN的正向计算和反向误差计算均是逐层进行的,可以在每层计算结束后在各个GI3U之间同步该层的计算输出数据。
[0044]当输入层将数据传递至第一层隐层后,控制各个GPU从第一层隐层开始进行正向计算,可以在每一层隐层正向计算结束并将正向计算输出O传递至下一层隐层的同时,在各个GPU之间同步该层的正向计算输出0,直至最后一层隐层将正向计算输出传递至BPNN的输出层后,由输出层输出数据。下面结合图2所示正向计算过程示例来进一步描述上述过程,图2中,LO为 第一层隐层,Ln为最后一层隐层,当输入层将输入数据传递至LO后,正向计算由LO开始逐层进行,直至Ln,其中,LO的正向计算输出为L0.0, Ln的正向计算输出为Ln.0,当LO层正向计算结束时,在各个GPU之间同步LO的正向计算输出L0.0,同时,将L0.0传递至下一层LI,当LI层正向计算结束时,在各个GPU之间同步LI的正向计算输出L1.0,同时,将L1.0传递至下一层L2,以此类推,直至最后一层Ln正向计算完毕后,在各个GPU之间同步Ln的正向输出Ln.0,同时,将Ln.0传递至输出层,由输出层向输出将数据输出。
[0045]各个GPU上的BPNN的正向计算过程与单GPU的BPNN训练方法中的正向计算过程相同,在此不过多赘述。可以调用GPU之间的PC1-E总线来传递正向计算输出0,并将正向计算输出O保存在各个GPU的内存中,以此实现正向计算输出O的同步。
[0046]S102、根据BPNN正向输出数据与预期值的差异,控制各个GPU进行反向误差计算,并同步反向误差计算输出E。
[0047]根据输出层所输出数据与预期的差异值,开始BPNN的反向误差计算。
[0048]当根据输出层所输出数据与预期的差异值得到的调整数据由输出层传递至最后一层隐层后,控制各个GPU进行从最后一层隐层开始进行反向误差计算,可以在每一层隐层反向误差计算结束并将反向误差计算输出E传递至下一层隐层的同时,在各个GPU之间同步该层的反向误差计算输出E,直至第一层隐层反向误差计算结束。下面结合图3所示反向误差计算过程示例来进一步描述上述过程,图3中,LO为第一层隐层,Ln为最后一层隐层,当输出层将数据传递至Ln后,反向误差计算由Ln开始逐层进行,直至L0,其中,Ln的反向误差计算输出为Ln.E,L0的反向误差计算输出为L0.E,当Ln层反向误差计算结束时,在各个GPU之间同步Ln的反向误差计算输出Ln.E,同时,将Ln.E传递至下一层Ln-1,当Ln-1层反向误差计算结束时,在各个GPU之间同步Ln-1的反向误差计算输出Ln-l.E,同时,将Ln-1.E传递至下一层Ln-2,以此类推,直至第一层隐层LO反向误差计算完毕后,在各个GPU之间同步LO的反向误差计算输出L0.E0
[0049]各个GPU上的BPNN的反向误差计算过程与单GPU的BPNN训练方法中的反向误差计算过程相同,在此不过多赘述。可以调用GPU之间的PC1-E总线来传递反向误差计算输出E,并将反向误差计算输出E保存在各个GPU的内存中,以此实现反向误差计算输出E的同步。
[0050]S103、控制各个GPU根据同步得到的正向计算输出O与反向误差计算输出E更新其所保存的BPNN的权重W。
[0051]经过上述步骤SlOl和S102中的正向计算和反向误差计算以及正向计算输出O和反向误差计算输出E的同步后,每个CPU上都存在其他各CPU的正向计算输出O和反向误差计算输出E,然后在每个GPU上分别针对各层同步到的正向计算输出O进行合并,使得各个GPU的BPNN的每一层得到完整的正向计算输出0,同样,在每个GPU上分别针对各层同步到的反向误差计算输出E进行合并,使得各个GPU的BPNN的每一层得到完整的反向误差计算输出E,之后,利用各层完整的正向计算输出O和完整的反向误差计算输出E分别计算得到各层的权重W。
[0052]可以根据各层完整的正向计算输出O和完整的反向误差计算输出E按预先设定的公式或函数来更新各个GPU的BPNN的每一层的权重值,所使用的公式或函数与单GPU的BPNN训练方法中使用的公式或函数相同,在此不过多赘述。
[0053]上述步骤S101-S103为对本发明所提供的基于多GPU的BPNN训练方法进行的描述,可以看出,本发明通过在各个GPU的BPNN的每层正向计算结束后同步该层的正向计算输出0,以及反向误差计算结束后同步该层的反向误差计算输出E,有效解决了现有方法中直接同步权重W所带来的同步开销过大的问题。
[0054]图4为现有的基于多GPU的BPNN的训练过程示例图,如图4所示,通过现有方法利用两个GPU进行BPNN的训练,将训练数据分为两份后,控制GPUl和GPU2分别针对一份数据进行各自的BPNN的正向计算、反向误差计算和权重更新,该过程与单GPU的BPNN训练过程相同,在GPUl和GPU2分别完成其BPNN的权重更新后,对该两个GPU上BPNN的权重值进行同步,通常,BPNN的权重值数据量较大,可达数百兆,通过PC1-E2.0总线进行传输的通信用时可能需要数百毫秒,开销很大。
[0055]图5为本发明所提供的基于多GPU的BPNN训练过程示例图,如图5所示,通过本发明所提供的方法利用两个GPU进行BPNN的训练,将训练数据分为两份后,控制GPUl和GPU2分别针对一份数据进行各自的BPNN的正向计算,并在正向计算完毕后,在GPUl和GPU2之间同步BPNN的正向计算输出,之后控制GPUl和GPU2分别进行BPNN的反向误差计算,并在反向误差计算完毕后,在GPUl和GPU2之间同步BPNN的反向误差计算输出,最后控制GPUl和GPU2分别进行BPNN的权重更新。由于正向计算输出O和反向误差计算输出E的数据量远小于权重W的数据量,且正向计算输出O和反向误差计算输出E的同步过程均可以与各个GPU上BPNN的正向计算或反向误差计算同时进行,因此,本发明所提供的多GPU的BPNN训练方法中数据同步几乎不需要占用额外的通信用时开销,避免了如图4所示的现有方法中直接同步权重值带来的过大的数据同步开销。同时,相比于单GPU的BPNN训练方法,本发明所提供的方法能显著提高BPNN的训练效率,例如,利用4个GPU进行BPNN的训练,则正向计算和反向误差计算效率为利用单GPU进行训练的4倍,权重计算更新的效率与单GPU训练时的相同,可见,当正向计算和反向误差计算在整个BPNN训练中占的比重越大时,本发明相比于单GPU的BPNN训练方法的训练效率就越高。
[0056]上述为对本发明实施一所提供的方法进行的描述,下面结合实施例二对本发明提供的装置进行描述。本发明所提供的装置用于控制GPU来完成本发明实施例一所提供的方法。
[0057]实施例二
[0058]图6为本发明实施例二所提供的基于多GPU的BPNN训练装置示意图,如图6所示,该装置包括:正向计算单元10、反向误差计算单元20、权重更新单元30。
[0059]正向计算单元10,用于控制各GPU进行BPNN的正向计算,并在各GPU间同步正向计算输出。
[0060]BPNN的正向计算和反向误差计算均是逐层进行的,可以在每层计算结束后在各个GI3U之间同步该层的计算输出数据。
[0061]当数据由输入层传递至第一层隐层后,正向计算单元10控制各个GPU从第一层隐层开始进行正向计算,可以在每一层隐层正向计算结束并将正向计算输出O传递至下一层隐层的同时,在各个GPU之间同步该层的正向计算输出0,直至最后一层隐层将正向计算输出传递至BPNN的输出层并由输出层输出。
[0062]各个GPU上的BPNN的正向计算过程与单GPU的BPNN训练方法中的正向计算过程相同,在此不过多赘述。正向计算单元10可以调用GPU之间的PC1-E总线来传递正向计算输出0,并将正向计算输出O保存在各个GPU的内存中,以此实现正向计算输出O的同步。
[0063]反向误差计算单元20,用于根据BPNN输出数据与预期值的差异,控制各GPU进行BPNN的反向误差计算,并在各GPU间同步反向误差计算输出。
[0064]当根据输出层所输出数据与预期的差异值得到的调整数据由输出层传递至最后一层隐层后,反向误差计算单元20控制各个GPU进行从最后一层隐层开始进行反向误差计算,可以在每一层隐层反向误差计算结束并将反向误差计算输出E传递至下一层隐层的同时,在各个GPU之间同步该层的反向误差计算输出E,直至第一层隐层反向误差计算结束。
[0065]各个GPU上的BPNN的反向误差计算过程与单GPU的BPNN训练方法中的反向误差计算过程相同,在此不过多赘述。反向误差计算单元20可以调用GPU之间的PC1-E总线来传递反向误差计算输出E,并将反向误差计算输出E保存在各个GPU的内存中,以此实现反向误差计算输出E的同步。
[0066]权重更新单元30,用于控制各GPU根据所述同步得到的正向计算输出与所述同步得到的反向误差计算输出更新BPNN的权重。
[0067]经过上述正向计算单元10和反向误差计算单元20所执行的操作后,权重更新单元30在每个GPU上分别针对各层同步到的正向计算输出O进行合并,使得各个GPU的BPNN的每一层得到完整的正向计算输出0,同样,权重更新单元30在每个GPU上分别针对各层同步到的反向误差计算输出E进行合并,使得各个GPU的BPNN的每一层得到完整的反向误差计算输出E,之后,利用各层完整的正向计算输出O和完整的反向误差计算输出E分别计算得到各层的权重W。
[0068]权重更新单元30可以根据各层完整的正向计算输出O和完整的反向误差计算输出E按预先设定的公式或函数来更新各个GPU的BPNN的每一层的权重值,该方法与单GPU的BPNN训练方法中的根据各层正向计算输出O和反向误差计算输出E来更新每层权重值的方法相同,在此不过多赘述。
[0069]上述为对本发明所提供的基于多GPU的BPNN训练装置进行的描述,可以看出,本发明通过在各个GPU的BPNN的每层正向计算或反向误差计算结束后,同步该层的正向计算输出O或反向误差计算输出E来有效解决了现有方法中直接同步权重W所带来的同步开销过大的问题。
[0070]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种基于多图形处理器GPU的反向传播神经网络BPNN训练方法,其特征在于,该方法包括: 51、控制各GPU进行BPNN的正向计算,并在各GPU间同步正向计算输出; 52、控制各GPU进行BPNN的反向误差计算,并在各GPU间同步反向误差计算输出; 53、控制各GPU根据所述同步得到的正向计算输出与所述同步得到的反向误差计算输出更新BPNN的权重。
2.根据权利要求1所述的方法,其特征在于,所述步骤SI具体包括: 控制各GPU进行正向计算,针对每一层执行:在BPNN的当前层正向计算结束后将正向计算输出传递至下一层的同时,在各GPU之间同步当前层的正向计算输出。
3.根据权利要求1所述的方法,其特征在于,所述步骤S2具体包括: 根据BPNN正向输出数据与预期值的差异,控制各GPU进行反向误差计算,针对每一层执行:在BPNN的当前层反向误差计算结束后将反向误差计算输出传递至下一层的同时,在各GPU之间同步当前层的反向误差计算输出。
4.根据权利要求2所述的方法,其特征在于,调用GPU之间的PC1-E总线在各GPU之间同步所述正向计算输出并保存在GPU内存中。
5.根据权利要求3所述的方法,其特征在于,调用GPU之间的PC1-E总线在各GPU之间同步所述反向误差计算输出并保存在GPU内存中。
6.一种基于多图形处理器GPU的反向传播神经网络BPNN训练装置,其特征在于,该装置包括: 正向计算单元,用于控制各GPU进行BPNN的正向计算,并在各GPU间同步正向计算输出; 反向误差计算单元,用于控制各GPU进行BPNN的反向误差计算,并在各GPU间同步反向误差计算输出; 权重更新单元,用于控制各GPU根据所述同步得到的正向计算输出与所述同步得到的反向误差计算输出更新BPNN的权重。
7.根据权利要求6所述的装置,其特征在于,所述正向计算单元具体执行: 控制各GPU进行正向计算,针对每一层执行:在BPNN的当前层正向计算结束后将正向计算输出传递至下一层的同时,在各GPU之间同步当前层的正向计算输出。
8.根据权利要求6所述的装置,其特征在于,所述反向误差计算单元具体执行: 根据BPNN正向输出数据与预期值的差异,控制各GPU进行反向误差计算,针对每一层执行:在BPNN的当前层反向误差计算结束后将反向误差计算输出传递至下一层的同时,在各GPU之间同步当前层的反向误差计算输出。
9.根据权利要求7所述的装置,其特征在于,所述正向计算单元调用GPU之间的PC1-E总线在各GPU之间同步所述正向计算输出并保存在GPU内存中。
10.根据权利要求8所述的装置,其特征在于,所述反向误差计算单元调用GPU之间的PC1-E总线在各GPU之间同步所述正向计算输出并保存在GPU内存中。
【文档编号】G06N3/08GK103996069SQ201310054733
【公开日】2014年8月20日 申请日期:2013年2月20日 优先权日:2013年2月20日
【发明者】欧阳剑, 王勇 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1