一种分布式训练方法、梯度通信方法、装置以及计算设备

文档序号:49841 发布日期:2021-09-28 浏览:19次 >En<

阅读说明:本技术 一种分布式训练方法、梯度通信方法、装置以及计算设备 (Distributed training method, gradient communication device and computing equipment ) 是由 陈世达 刘强 韩亮 焦阳 于 2020-03-25 设计创作,主要内容包括:本发明公开了一种深度神经网络的分布式训练方法、梯度通信方法、装置以及计算设备。方法包括:从训练数据集中获取训练数据子集,计算所述深度神经网络的网络参数在所述训练数据子集上的梯度,作为本地梯度;对所述深度神经网络的每一网络层,计算该网络层中各梯度块的梯度度量值,并按照梯度度量值从大到小的顺序选取预定数目个目标梯度块,其中,所述梯度块包括多个存储地址连续的本地梯度;与其他计算节点进行通信,交换彼此的目标梯度块。(The invention discloses a distributed training method, a gradient communication device and computing equipment of a deep neural network. The method comprises the following steps: acquiring a training data subset from a training data set, and calculating the gradient of the network parameters of the deep neural network on the training data subset as a local gradient; for each network layer of the deep neural network, calculating gradient metric values of gradient blocks in the network layer, and selecting a preset number of target gradient blocks according to the gradient metric values from large to small, wherein the gradient blocks comprise a plurality of local gradients with continuous storage addresses; and communicating with other computing nodes to exchange target gradient blocks of each other.)

一种分布式训练方法、梯度通信方法、装置以及计算设备

技术领域

本发明涉及数据处理

技术领域

,具体涉及一种深度神经网络的分布式训练方法、梯度通信方法、装置以及计算设备。

背景技术

随着深度神经网络(deep neural networks,DNNs)的规模及训练数据集的日趋变大,导致其训练需要巨大的算能、存储空间、通信带宽和功耗。当前主流DNNs训练平台基于分布式多节点系统,利用并行计算特点,大大加速训练进程。然而,频繁的梯度交换通信增加了传输带宽压力,导致平台扩展能力低和通信时间长等问题。因此,通信时间成为分布式训练发展瓶颈。

梯度压缩作为很有潜力的方法,通过降低通信量来加速分布式训练,其主要有梯度量化和梯度稀疏两种策略。梯度量化通过降低梯度数据位宽,实现梯度数据压缩。梯度稀疏则通过相关评判方法选出重要梯度先进行参数更新,其余不重要梯度也称延迟梯度,在本地与上次迭代留下的延迟梯度相累加,且不进行参数更新。

在梯度稀疏方式中,现有的主流策略是top-k稀疏策略,即根据重要性选出神经网络每层前k个梯度作为重要梯度。然而,top-k稀疏策略选出的重要梯度面临内存地址不连续和索引无规律问题,且进行梯度重要性选择时的排序和随机采样对硬件极为不友好,另外不规则的稀疏数据将带来复杂的访问控制逻辑,导致稀疏过程变冗长,给硬件实现带来困难。

因此,如何提供一种内存地址连续、控制逻辑简单、加速稀疏处理的硬件友好的梯度稀疏方法是本领域技术人员亟需解决的问题。

发明内容

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的深度神经网络的分布式训练方法、梯度通信方法、装置以及计算设备。

根据本发明的一个方面,提供了一种深度神经网络的梯度通信方法,应用于深度神经网络的分布式训练框架中,所述分布式计算框架包括多个计算节点,并在每个计算节点上执行如下步骤:

从训练数据集中获取训练数据子集,计算所述深度神经网络的网络参数在所述训练数据子集上的梯度,作为本地梯度;

对所述深度神经网络的每一网络层,计算该网络层中各梯度块的梯度度量值,并按照梯度度量值从大到小的顺序选取预定数目个目标梯度块,其中,所述梯度块包括多个存储地址连续的本地梯度;

与其他计算节点进行通信,交换彼此的目标梯度块。

可选地,在本发明的梯度通信方法中,所述网络层包括卷积层,所述梯度块为所述卷积层中一滤波器对应的多个本地梯度。

可选地,在本发明的梯度通信方法中,所述网络层包括全连接层,所述梯度块为所述全连接层中一网络节点与上一网络层的所有网络节点之间的网络参数对应的多个本地梯度。

可选地,在本发明的梯度通信方法中,所述网络层包括偏置层,所述梯度块为所述偏置层中一网络节点对应的本地梯度。

可选地,在本发明的梯度通信方法中,所述梯度度量值为所述梯度块的L1范数或者L2范数。

可选地,在本发明的梯度通信方法中,所述预定数目为1。

可选地,在本发明的梯度通信方法中,所述与其他计算节点进行通信,交换彼此的目标梯度块,包括:对所述深度神经网络的每一网络层,基于该网络层的目标梯度块,对该网络层的梯度张量进行稀疏化处理,形成稀疏梯度张量,其中所述梯度张量为该网络层的所有本地梯度构成的张量;对所述稀疏梯度张量进行编码后,发送到其他计算节点。

可选地,在本发明的梯度通信方法中,所述对该网络层的梯度张量进行稀疏化处理,包括:将所述梯度张量中除目标梯度块之外的本地梯度置零。

可选地,在本发明的梯度通信方法中,所述编码为游程编码。

可选地,在本发明的梯度通信方法中,在所述计算该网络层中各梯度块的梯度度量值的步骤之前,还包括:将本地梯度更新为本地梯度与上一次迭代的延迟梯度之和;在按照梯度度量值从大到小的顺序选取预定数目个目标梯度块的步骤之后,还包括:将除了目标梯度块之外的本地梯度存储为本次迭代的延迟梯度。

可选地,在本发明的梯度通信方法中,所述与其他计算节点进行通信,交换彼此的目标梯度块,包括:采用All-reduce的方式与其他计算节点进行通信,交换彼此的目标梯度块。

根据本发明的另一个发明,提供一种分布式训练方法,应用于深度神经网络的分布式训练框架中,所述分布式计算框架包括多个计算节点,并在每个计算节点上执行如下步骤:

从训练数据集中获取训练数据子集,计算所述深度神经网络的网络参数在所述训练数据子集上的梯度,作为本地梯度;

对所述深度神经网络的每一网络层,计算该网络层中各梯度块的梯度度量值,并按照梯度度量值从大到小的顺序选取预定数目个目标梯度块,其中,所述梯度块包括多个存储地址连续的本地梯度;

与其他计算节点进行通信,交换彼此的目标梯度块;

计算所有计算节点的目标梯度块的梯度平均值,基于所述梯度平均值对所述深度神经网络的网络参数进行更新。

可选地,在本发明的分布式训练方法中,在所述计算该网络层中各梯度块的梯度度量值的步骤之前,还包括:将本地梯度更新为本地梯度与上一次迭代的延迟梯度之和;

在按照梯度度量值从大到小的顺序选取预定数目个目标梯度块的步骤之后,还包括:将除了目标梯度块之外的本地梯度存储为本次迭代的延迟梯度。

可选地,在本发明的分布式训练方法中,所述基于所述梯度平均值对所述深度神经网络的网络参数进行更新,包括:基于所述梯度平均值,采用不带动量的梯度下降法对所述深度神经网络的网络参数进行更新;或者基于所述梯度平均值,采用带动量的梯度下降法对所述深度神经网络的网络参数进行更新。

可选地,在本发明的分布式训练方法中,还包括:当所述深度神经网络收敛,或者,对所述网络参数的迭代次数达到预设次数时,停止训练。

根据本发明的又一方面,提供一种分布式训练方法,应用于深度神经网络的分布式训练框架中,所述分布式计算框架包括多个终端设备,并在每个终端设备上执行如下步骤:

从训练数据集中获取训练数据子集,计算所述深度神经网络的网络参数在所述训练数据子集上的梯度,作为本地梯度;

对所述深度神经网络的每一网络层,计算该网络层中各梯度块的梯度度量值,并按照梯度度量值从大到小的顺序选取预定数目个目标梯度块,其中,所述梯度块包括多个存储地址连续的本地梯度;

与其他终端设备进行通信,交换彼此的目标梯度块;

计算所有终端设备的目标梯度块的梯度平均值,基于所述梯度平均值对所述深度神经网络的网络参数进行更新。

可选地,在本发明的分布式训练方法中,所述终端设备为桌面型计算设备、膝上型计算设备、平板型计算设备、移动电话计算设备、音箱计算设备、车辆的计算设备、包括计算设备的可穿戴装置、或者包括计算设备的家居装置。

根据本发明的又一方面,提供一种分布式训练装置,包括:

梯度计算单元,适于从训练数据集中获取训练数据子集,计算所述深度神经网络的网络参数在所述训练数据子集上的梯度,作为本地梯度;

梯度选择单元,适于对所述深度神经网络的每一网络层,计算该网络层中各梯度块的梯度度量值,并按照梯度度量值从大到小的顺序选取预定数目个目标梯度块,其中,所述梯度块包括多个存储地址连续的本地梯度;

梯度交换单元,适于与其他计算节点进行通信,交换彼此的目标梯度块;

参数更新单元,适于计算所有计算节点的目标梯度块的梯度平均值,基于所述梯度平均值对所述深度神经网络的网络参数进行更新。

根据本发明的又一个发明,提供一种分布式训练系统,包括多个计算节点,每个计算节点包括上述的分布式训练装置。

根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行上述方法的指令。

根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行上述的方法。

本发明在分布式稀疏通信中,提出了基于粗粒度的重要梯度选择方法,即以梯度块为单位进行重要梯度选择,一方面,避免了对大量梯度数据进行排序等耗时问题,大大加速了稀疏过程,另一方面,获得的重要梯度的存储地址连续,不需额外资源处理稀疏格式数据,便于硬件访存控制实现,达到高性能和低功耗的目的,从而从整体上提高了深度神经网络的分布式训练的训练效率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的

具体实施方式

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例所应用的数据中心的结构图;

图2示出了根据本发明一个实施例的数据中心中一个服务器的内部结构图;

图3是根据本发明一个实施例服务器内部的调度单元和加速单元的连接关系图;

图4是根据本公开一个实施例的加速单元核的内部结构图;

图5示出了根据本发明一个实施例的梯度通信方法500的流程图;

图6示出了根据本发明一个实施例的分布式训练方法600的流程图;

图7示出了根据本发明一个实施例的分布式训练方法700的流程图;

图8示出了根据本发明一个实施例的分布式训练装置800的示意图;

图9示出了深度神经网络滤波器计算示意图;

图10示出了细粒度与粗粒度稀疏策略对比原理图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

首先介绍本发明实施例的分布式训练方法的实施环境。

数据中心

数据中心是全球协作的特定设备网络,用来在互联网网络基础设施上传递、加速、展示、计算、存储数据信息。在今后的发展中,数据中心也将会成为企业竞争的资产。随着数据中心应用的广泛化,人工智能等越来越多地应用到数据中心。而神经网络作为人工智能的重要技术,已经大量应用到数据中心大数据分析运算中。

在传统的大型数据中心,网络结构通常如图1所示,即互连网络模型(hierarchical inter-networking model)。这个模型包含了以下部分:

服务器140:各服务器140是数据中心的处理和存储实体,数据中心中大量数据的处理和存储都是由这些服务器140完成的。

接入交换机130:接入交换机130是用来让服务器140接入到数据中心中的交换机。一台接入交换机130接入多台服务器140。接入交换机130通常位于机架顶部,所以它们也被称为机顶(Top of Rack)交换机,它们物理连接服务器。

汇聚交换机120:每台汇聚交换机120连接多台接入交换机130,同时提供其他的服务,例如防火墙,入侵检测,网络分析等。

核心交换机110:核心交换机110为进出数据中心的包提供高速的转发,为汇聚交换机120提供连接性。整个数据中心的网络分为L3层路由网络和L2层路由网络,核心交换机110为通常为整个数据中心的网络提供一个弹性的L3层路由网络。

通常情况下,汇聚交换机120是L2和L3层路由网络的分界点,汇聚交换机120以下的是L2网络,以上是L3网络。每组汇聚交换机管理一个传送点(POD,Point Of Delivery),每个POD内都是独立的VLAN网络。服务器在POD内迁移不必修改IP地址和默认网关,因为一个POD对应一个L2广播域。

汇聚交换机120和接入交换机130之间通常使用生成树协议(STP,Spanning TreeProtocol)。STP使得对于一个VLAN网络只有一个汇聚层交换机120可用,其他的汇聚交换机120在出现故障时才被使用(上图中的虚线)。也就是说,在汇聚交换机120的层面,做不到水平扩展,因为就算加入多个汇聚交换机120,仍然只有一个在工作。

服务器

由于服务器140是数据中心真实的处理设备,图2示出了一个服务器140内部的结构框图。服务器140包括有总线连接的存储器210、调度单元集群270和加速单元集群280。调度单元集群270包括多个调度单元220。加速单元集群280包括多个加速单元230。加速单元在本公开实施例中主要是为了加速神经网络模型的运算处理速度而设计的专门处理单元,可以体现为专门为神经网络运算处理设计的处理单元(NPU)、图形处理单元(GPU)、专用集成电路(ASIC)和现场可编程门阵列(FPGA)等。调度单元是对加速单元进行调度、向各加速单元分配要执行的待执行指令序列的处理单元,它可以采用中央处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等多种形式。

传统的中央处理单元的架构设计,使得在架构中控制单元、存储单元占用了很大一部分空间,而计算单元占用的空间反而不足,因此其在逻辑控制方面十分有效,而在大规模并行计算方面则效率不够。因此,开发出了各种专门的加速单元,用来针对不同功能和不同领域的计算进行更有效的提高运算速度的处理。本发明提出的加速单元是专用于加速神经网络模型的运算处理速度的处理单元。它是采用数据驱动并行计算的架构,用于处理各神经网络节点的大量运算(例如卷积、池化等)的处理单元。由于各神经网络节点的大量运算(例如卷积、池化等)中的数据和中间结果在整个计算过程中紧密联系,会被经常用到,用现有的中央处理单元构架,由于中央处理单元的核内的内存容量很小,因此要大量频繁访问核外存储器,造成处理的低效。采用这种专用于加速神经网络模型的运算处理速度的加速单元,由于其每个核中具有适于神经网络计算用到的存储容量的片上内存,避免频繁访问核外部的存储器,就能大大提高处理效率,提高计算性能。

加速单元230要接受调度单元220的调度。如图2所示,存储器210中存储有各种神经网络模型,包括这些模型的节点和节点的权重数据等。这些神经网络模型当需要时被图2中的一个调度单元220部署到一个加速单元230。即,调度单元220可以通过指令的形式向加速单元230发送模型中的参数(如各节点的权重)在存储器210中的地址。加速单元230在实际使用该神经网络模型进行计算时,就会根据这些参数(例如权重)在存储器210中的地址,直接在存储器210中寻址这些参数,将其暂存在其片上内存中。加速单元230在实际使用该神经网络模型进行计算时,调度单元220还会将模型的输入参数通过指令的形式发送给加速单元230,暂存在加速单元230的片上内存中。这样,加速单元230就可以根据这些输入参数和模型中的参数(例如权重)进行推理计算。

调度单元和加速单元的内部结构

下面结合图3的调度单元220与加速单元230的内部结构图,具体说明调度单元220是如何调度加速单元230进行工作的。

如图3所示,调度单元220内包含多个处理器核222和被多个处理器核222共享的高速缓存221。每个处理器核222包括取指令单元203、指令译码单元224、指令发射单元225、指令执行单元226。

取指令单元223用于将要执行的指令从存储器210中搬运到指令寄存器(可以是图3示出的寄存器堆229中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。

取出指令后,调度单元220进入指令译码阶段,指令译码单元224按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从而为指令执行单元225的操作做准备。操作数获取信息例如指向立即数、寄存器或其他能够提供源操作数的软件/硬件。

指令发射单元225位于指令译码单元224与指令执行单元226之间,用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元226,使得多个指令的并行操作成为可能。

指令发射单元225将指令发射到指令执行单元226后,指令执行单元226开始执行指令。但如果该指令执行单元226判断该指令应该是加速单元执行的,则将其转发到相应的加速单元执行。例如,如果该指令是一条神经网络推理(inference)的指令,指令执行单元226不再执行该指令,而是将该指令通过总线发送到加速单元230,由加速单元230执行。

加速单元30内部包括多个核236(图3中示出了4个核,但本领域技术人员应当理解,加速单元230中也可以包含其它数目的核236)、命令处理器237、直接存储访问机制235、和总线通道231。

总线通道231是指令从总线进出加速单元230的通道。

直接内存访问(DMA,Direct Memory Access)机制235是一些计算机总线架构提供的功能,它能使数据从附加设备直接写入计算机主板的存储器上。这种方式相比于设备之间所有的数据传输都要通过调度单元的方式,大大提高了数据访问的效率。正是因为有这样的机制,加速单元230的核可以直接访问存储器210,读取神经网络模型中的参数(例如各节点的权重)等,大大提高了数据访问效率。

命令处理器237将由调度单元220发送至加速单元230的指令分配给核236执行。指令执行单元226将需要加速单元230执行的待执行指令序列发送给加速单元230。该待执行指令序列从总线通道231进入后,缓存在命令处理器237,由命令处理器237选择核236,将指令序列分配给其执行。另外,命令处理器237还负责核236之间的同步操作。

加速单元核

图4是根据本公开一个实施例的加速单元核236的内部结构图。

在一个实施例中,如图4所示,加速单元核236包括张量引擎310、池化引擎320、存储器拷贝引擎330、定序器350、指令缓存器340、片上内存360、常数缓冲器370。

命令处理器237分配给加速单元核236的指令序列首先进入指令缓存器340缓存。然后,定序器350从指令缓存器340中按照先进先出的顺序取指令,根据指令的性质分配给张量引擎310、池化引擎320、或存储器拷贝引擎330执行。张量引擎310负责处理神经网络模型中的卷积和矩阵乘法等相关操作。池化引擎320负责处理神经网络模型中的池化操作。存储器拷贝引擎330负责核236内的片上内存360存储的操作数向核236间共享的存储器、或者其它核236内的片上内存360的拷贝。定序器350根据取出的指令是卷积、矩阵乘法、池化、还是操作数拷贝等操作性质,决定将指令分配给张量引擎310,池化引擎320,还是存储器拷贝引擎330。

片上内存360是存储神经网络模型中的权重参数、以及神经网络模型实际使用时的输入参数和各种中间结果的核内存储器。常数缓冲器370是存储神经网络模型中除权重参数之外的其它常量参数(例如,神经网络模型中的超参)的缓冲器。如上所述,在调度单元220将神经网络模型预先配置在加速单元230的过程中,调度单元220通过指令的形式向加速单元230发送模型中的参数在存储器210中的地址。这些参数包括节点的权重和其它参数(例如超参)。对于权重,加速单元230在实际的神经网络模型运算时,将它从存储器210相应的位置取出,放在片上内存360中。对于其它参数,加速单元230在实际的神经网络模型运算时,从存储器210相应的位置取出,放在常数缓冲器370中。另外,当实际开始推理(inference)的指令由命令处理器237分配给核236执行后,指令中的输入参数(给神经网络模型的输入)也存储在片上内存360。另外,当张量引擎310和池化引擎320进行卷积或池化运算后,得到的各种中间结果也存放在片上内存360中。

本发明实施例的分布式训练方法可以在上述的数据中心中执行,具体地,数据中心包括的多个服务器中的每个加速单元可以分别视为一个计算节点,多个计算节点可以组成为用于分布式训练的分布式训练框架,这些计算节点可以为CPU设备、GPU设备、NPU(神经网络处理器)设备或者其他类型的计算设备,计算节点之间呈环形连接、网形连接或者其他方式连接。

计算节点可以从存储器210中获取深度神经网络和训练数据子集,并基于获取的训练数据子集对深度神经网络进行训练。在模型训练过程中,计算节点需要与其他计算节点交换梯度数据,并基于所有计算节点的梯度数据平均值,来更新深度神经网络的网络参数(模型参数),例如,采用梯度下降法更新深度神经网络的网络参数。

数据并行(Data Parallel)是对深度神经网络进行分布式训练的一种形式,其把训练数据分成多份,在不同计算节点上训练。如果计算节点没有共享的公共内存,只有容量受限的本地内存,而训练数据集的规模很大,无法存储于本地内存,就需要对训练数据集进行划分,分配到各个计算节点上,然后计算节点依据各自分配的局部数据对深度神经网络进行训练。

典型的深度神经网络的分布式训练流程为:

(1)计算节点在每个迭代步(训练步)中,从训练数据集中获取一训练数据子集,通常,训练数据子集的训练数据的数目比训练数据集包括的训练数据的数目要小很多,因此,也可以称为小批量(mini-batch)训练数据;

(2)计算深度神经网络的网络参数(权重、偏置等)在小批量训练数据上的梯度,通常,在一个计算节点上计算出的梯度,又称为该计算节点的本地梯度;

(3)对本地梯度进行稀疏化处理,即从本地梯度中选取重要梯度用于通信,重要梯度是梯度值大于预设阈值的本地梯度;

(4)与其他计算节点进行通信,交换彼此的重要梯度;

(5)计算所有计算节点的重要梯度的梯度平均值,基于梯度平均值对深度神经网络的网络参数进行更新。

重复步骤(1)~(5),直到深度神经网络模型收敛或者对网络参数的迭代次数达到预设次数时,停止训练。

传统的top-k稀疏策略是细粒度的稀疏策略,对于深度神经网络的每个网络层的重要梯度的选择,是通过预定阈值,判定大于阈值的梯度为重要梯度,即选择对象是梯度个体,因此,称之为细粒度。一方面,在进行重要梯度选择时,需要对大量梯度数据进行排序,非常耗时;另一方面,选出的重要梯度是孤立、内存地址不连续、索引不规则的稀疏数据,不规则的稀疏数据将带来复杂的访问控制逻辑,导致稀疏过程变冗长,给硬件实现带来困难。

于是,在本发明实施例中,提出了粗粒度的稀疏策略,粗粒度的选择对象是数据块级,以数据块(梯度块)为单位进行重要梯度选择。例如,对于卷积层,选择对象是滤波器(卷积核)级,即选择重要的滤波器(对应C×H×W个参数的梯度,其中C,H,W分别为滤波器的通道、高、宽),而滤波器内部的C×H×W个梯度的存储地址是连续的,只需要一个基地址即可。然后,基于选择出的目标梯度块进行稀疏通信。一方面,避免了对大量梯度数据进行排序等耗时问题,大大加速了稀疏过程,另一方面,获得的重要梯度的存储地址连续,不需额外资源处理稀疏格式数据,便于硬件访存控制实现。

图5示出了根据本发明一个实施例的梯度通信方法500的流程图。方法300应用于深度神经网络的分布式计算框架中,在分布式计算框架的每个计算节点中执行,计算节点具体可以实现为前述的加速单元230。方法500可以应用于图像、语音、视频、机器翻译等多种场景,例如,在图像场景下,相应的深度神经网络可以为图像分类模型、目标检测模型等;在机器翻译场景下,相应的深度神经网络可以为神经网络机器翻译模型。其中,神经网络机器翻译模型是一个序列到序列模型,具有通过门循环单元制作的编码器、通过门循环单元制作的编码器以及注意力机制。方法500在每个计算节点上执行如下步骤:

在步骤S502中,在每个迭代步中,从训练数据集中获取一训练数据子集,即一小批量(mini-batch)训练数据,计算深度神经网络的网络参数在训练数据子集上的梯度,作为本地梯度。

训练数据的类型可以是:图像样本,语音样本,自然语言处理样本。例如,待训练的深度神经网络是神经网络机器翻译模型时,每条训练数据是一个文本对,该文本对是第一语种文本与第二语种文本的对应关系。

本发明实施例中,分布式训练采用数据并行(Data Parallel)方式。在数据并行方式下,将存储器中存储的训练数据集作为采样的数据源,计算节点采用随机采样的方式从训练数据集中获取多个训练数据,作为小批量训练数据。具体可以通过有放回的方式进行随机采样,这样可以保证每个计算节点上的局部训练数据与原训练数据是独立同分布的。另外,每个迭代步获取的训练数据的条数,即小批量数据的规模(batch size),可以根据计算节点的内存大小来确定。

将小批量训练数据输入到深度神经网络执行前向传播,将深度神经网络的输出与期望的标签数据对比计算损失误差(loss),然后,根据损失误差进行反向传播,逐层计算深度神经网络的各个参数在小批量训练数据上的梯度,作为本地梯度。通常,深度神经网络的每个网络层的所有本地梯度构成一个梯度张量,网络层中的每个网络参数对应该梯度张量中的一个元素。

由于计算节点之间采用梯度稀疏通信,每次与其他计算节点交换的是重要梯度,然后,对网络参数的更新也是基于重要梯度,除了重要梯度之外的其他梯度在本次迭代中不执行对参数的更新,将其存储为延迟梯度以便在后续的迭代过程中进行参数更新。因此,在当前迭代步中,还将计算出来的本地梯度更新为本地梯度与上一次迭代的延迟梯度之和。

在步骤S504中,对深度神经网络的每一网络层,计算该网络层中各梯度块的梯度度量值,并按照梯度度量值从大到小的顺序选取预定数目个目标梯度块,例如,选取梯度度量值最大的一个梯度块作为目标梯度块。在本发明实施例中,梯度度量值可以是梯度块的L1范数或者L2范数,当然,梯度度量值也可以是其他表征梯度块的整体梯度值大小的其他度量方式,本发明实施例对具体的度量方式不做限制。

在本发明实施例中,梯度块是指多个存储地址连续的本地梯度构成的数据块。深度神经网络包括卷积层、偏置层、池化层和全连接层。其中,具有参数及梯度的网络层只有卷积层、偏置层和全连接层,池化层不具有参数及梯度。

对于卷积层,梯度块为该卷积层中一滤波器包括的所有网络参数所对应的多个本地梯度,每个滤波器对应一个梯度块,一个卷积层对应多个梯度块。图9示出了深度神经网络滤波器计算示意图。如图9所示,每个卷积层包括多个滤波器Kernel(即卷积核,图中示出了4个,分别为滤波器K1、滤波器K2、滤波器K3和滤波器K4),滤波器的尺寸为C×K×K,其中C、K、K分别为滤波器的通道数、高、宽,则每个滤波器包括C×K×K个网络参数,每个网络参数对应一个梯度,一个滤波器对应的所有梯度则构成一个梯度块,梯度块的尺度与滤波器的尺度相同。给定输入特征图Ifmap,滤波器Kernel,偏置Bias,则输出特征图Ofmapl=f((∑Ifmapl-1*Kernell)+Biasl)。

对于偏置层,梯度块为该偏置层中一网络节点对应的本地梯度,每个网络节点对应一个梯度块(只有一个元素的梯度块),一个偏置层对应多个梯度块。由于偏置层的每个网络参数对应一个不同的滤波器,因此,偏置层为的参数梯度与滤波器的个数一致的一维向量,对偏置层的处理类似其它层,选择L1范数或L2范数最大的梯度,即具有最大绝对值的梯度。

对于全连接层,梯度块为该全连接层中一网络节点(即神经元)与上一网络层的所有网络节点之间的网络参数对应的多个本地梯度,每个网络节点对一个梯度块,一个全连接层对应多个梯度块。具体地,假设全连接层的参数大小为F×L,其中F为输出维度,L为输入维度(一维向量),本发明实施例在对全连接层处理时,选择F中梯度的L1范数或L2范数最大的L,可以将F等效为卷积层中的滤波器数目f,L等效为单个滤波器,只是两者维度不同,前者为1维,后者为3维。因此全连接层中梯度块对应某一个L对应的参数的梯度,其大小由输入维度决定。对应输出维度F的每个L大小的梯度参数存储是连续的,因此,通过粗粒度选出的全连接层中的梯度块内存地址也是连续的。

如前所述,由于计算节点之间采用梯度稀疏通信,每次与其他计算节点交换的是重要梯度,然后,对网络参数的更新也是基于重要梯度,除了重要梯度之外的其他梯度在本次迭代中不执行对参数的更新,将其存储为延迟梯度以便在后续的迭代过程中进行参数更新。具体地,是将除了目标梯度块之外的本地梯度存储为本次迭代的延迟梯度,将目标梯度块对应的延迟梯度置零。

在步骤S506中,与其他计算节点进行通信,交换彼此的目标梯度块,即所有计算节点进行目标梯度块的同步。具体地,可以采用All-reduce的方式与其他计算节点进行通信,交换彼此的目标梯度块。

在本发明实施例中,各计算节点之间交互目标梯度块的通信是稀疏通信。在每个计算节点中,对深度神经网络的每一网络层,需要基于该网络层的目标梯度块,对该网络层的梯度张量进行稀疏化处理,形成稀疏梯度张量,然后,对稀疏梯度张量进行编码,例如采用游程编后后,发送到其他计算节点,完成目标梯度块的交换。

游程编码是一种比较简单的压缩算法,其基本思想是将重复且连续出现多次的字符使用(连续出现次数,某个字符)来描述。例如,现有字符数据AAAAABBBBCCC,经过游程编码之后为5A4B3C。在本发明实施例中,由于稀疏梯度张量中大量的元素为0,因此通过游程编码能够极大的降低通信量。

图10是本发明提供的粗粒度梯度稀疏策略与现有的细粒度策略top-k实现原理对比示意,如图10所示,本发明选出的重要梯度(滤波器梯度块)在内存池的地址连续,因此可支持突发传输,不需额外资源分别对索引和数值存储,便于硬件实现。

以下介绍基于上述梯度通信方法的分布式训练方法。

图6示出了根据本发明一个实施例的分布式训练方法600的流程图。方法600应用于深度神经网络的分布式计算框架中,在分布式计算框架的每个计算节点中执行,计算节点具体可以实现为前述的加速单元230。方法600可以应用于图像、语音、视频、机器翻译等多种场景,例如,在图像场景下,相应的深度神经网络可以为图像分类模型、目标检测模型等;在机器翻译场景下,相应的深度神经网络可以为神经网络机器翻译模型。如图6所示,方法600在每个计算节点上执行如下步骤:

在步骤S602中,在每个迭代步中,从训练数据集中获取一训练数据子集,即一小批量训练数据,计算深度神经网络的网络参数在小批量训练数据上的本地梯度。

训练数据的类型可以是:图像样本,语音样本,自然语言处理样本。例如,待训练的深度神经网络是神经网络机器翻译模型时,每条训练数据是一个文本对,该文本对是第一语种文本与第二语种文本的对应关系。

本发明实施例中,分布式训练采用数据并行方式。在数据并行方式下,将数据存储装置中存储的训练数据集作为采样的数据源,计算节点采用随机采样的方式从训练数据集中获取多个训练数据,作为小批量训练数据。具体可以通过有放回的方式进行随机采样,这样可以保证每个计算节点上的局部训练数据与原训练数据是独立同分布的。另外,每个迭代步获取的训练数据的条数,即小批量数据的规模(batch size),可以根据计算节点的内存大小来确定。

将小批量训练数据输入到深度神经网络执行前向传播,将深度神经网络的输出与期望的标签数据对比计算损失误差(loss),然后,根据损失误差进行反向传播,逐层计算深度神经网络的各个参数在小批量训练数据上的梯度,作为本地梯度。通常,深度神经网络的每个网络层的所有本地梯度构成一个梯度张量,网络层中的每个网络参数对应该梯度张量中的一个元素。

由于计算节点之间采用梯度稀疏通信,每次与其他计算节点交换的是重要梯度,然后,对网络参数的更新也是基于重要梯度,除了重要梯度之外的其他梯度在本次迭代中不执行对参数的更新,将其存储为延迟梯度以便在后续的迭代过程中进行参数更新。因此,在当前迭代步中,还将计算出来的本地梯度更新为本地梯度与上一次迭代的延迟梯度之和。

在步骤S604中,对深度神经网络的每一网络层,计算该网络层中各梯度块的梯度度量值,并按照梯度度量值从大到小的顺序选取预定数目个目标梯度块,例如,选取梯度度量值最大的一个梯度块作为目标梯度块。在本发明实施例中,梯度度量值可以是梯度块的L1范数或者L2范数,当然,梯度度量值也可以是其他表征梯度块的整体梯度值大小的其他度量方式,本发明实施例对具体的度量方式不做限制。

在本发明实施例中,梯度块是指多个存储地址连续的本地梯度构成的数据块。深度神经网络包括卷积层、偏置层、池化层和全连接层。其中,具有参数及梯度的网络层只有卷积层、偏置层和全连接层,池化层不具有参数及梯度。

对于卷积层,梯度块为该卷积层中一滤波器包括的所有网络参数所对应的多个本地梯度,每个滤波器对应一个梯度块,一个卷积层对应多个梯度块。

对于偏置层,梯度块为该偏置层中一网络节点对应的本地梯度,每个网络节点对应一个梯度块(只有一个元素的梯度块),一个偏置层对应多个梯度块。由于偏置层的每个网络参数对应一个不同的滤波器,因此,偏置层为的参数梯度与滤波器的个数一致的一维向量,对偏置层的处理类似其它层,选择L1范数或L2范数最大的梯度,即具有最大绝对值的梯度。

对于全连接层,梯度块为该全连接层中一网络节点(即神经元)与上一网络层的所有网络节点之间的网络参数对应的多个本地梯度,每个网络节点对一个梯度块,一个全连接层对应多个梯度块。

如前所述,由于计算节点之间采用梯度稀疏通信,每次与其他计算节点交换的是重要梯度,然后,对网络参数的更新也是基于重要梯度,除了重要梯度之外的其他梯度在本次迭代中不执行对参数的更新,将其存储为延迟梯度以便在后续的迭代过程中进行参数更新。具体地,是将除了目标梯度块之外的本地梯度存储为本次迭代的延迟梯度,将目标梯度块对应的延迟梯度置零。

在步骤S606中,与其他计算节点进行通信,交换彼此的目标梯度块,即所有计算节点进行目标梯度块的同步。具体地,可以采用All-reduce的方式与其他计算节点进行通信,交换彼此的目标梯度块。

在本发明实施例中,各计算节点之间交互目标梯度块的通信是稀疏通信。在每个计算节点中,对深度神经网络的每一网络层,需要基于该网络层的目标梯度块,对该网络层的梯度张量进行稀疏化处理,形成稀疏梯度张量,然后,对稀疏梯度张量进行编码,例如采用游程编后后,发送到其他计算节点,完成目标梯度块的交换。

需要说明的是,不同的计算节点的处理速度可能有差别,因为是同步训练,最快执行完本地梯度计算以及目标梯度块的选择后,也需要等待最慢完成这一行为的计算节点,等所有计算节点上的目标梯度块都准备好了之后再开始所有计算节点之间的梯度通信。

在步骤S608中,计算所有计算节点的目标梯度块的梯度平均值,基于梯度平均值对深度神经网络的网络参数进行更新。具体地,可以采用不带动量的梯度下降法对深度神经网络的网络参数进行更新,也可以采用带动量的梯度下降法对深度神经网络的网络参数进行更新。

执行步骤S602~步骤S608后,完成一次迭代。可以反复执行上述步骤S602~步骤S608,当所述深度神经网络收敛,或者,对网络参数的迭代次数达到预设次数时,停止训练,每个计算设备上的深度神经网络即为训练好的深度神经网络。

在一个实施例中,待训练的深度神经网络为神经网络机器翻译模型,则,将最终的网络参数应用到模型中,得到训练好的神经网络机器翻译模型,然后,基于所述神经网络机器翻译模型翻译待翻译信息,得到翻译结果,并输出所述翻译结果。

以下以全局动量分布式随机梯度下降(SGD)算法为例,介绍分布式训练方法的一种具体实现。

图7示出了根据本发明一个实施例的分布式训练方法700的流程图。方法700应用于深度神经网络的分布式计算框中,在分布式计算框架100的每个计算节点中执行,计算节点具体可以实现为前述的加速单元230。如图7所示,方法700在每个计算节点(工作节点Worker)上执行如下步骤:

1)设置分布式训练的超参数,包括训练数据集θ、小批量尺寸Nb、节点数目N;

2)本地工作节点Worker读取一小批量数据D到内存;

3)判断是否是第一次迭代,若是则初始化模型参数wt-1(第t-1步的参数)、本地延时梯度(第k个工作节点在第t-1步的延时梯度,又称延迟梯度)、全局动量累加Vt(第t步的全局动量累加),其中wt-1采用正态分布产生[-1,1]的随机数初始化,和Vt初始化为0;

4)本地工作节点Worker将训练数据输入网络进行前向传输,将输出与期望的标签数据对比求取损失误差Loss,根据Loss进行反向传播,逐层计算各个参数的梯度其中为第k个工作节点在第t步的本地梯度,Nb为批量数据大小,为模型参数为wt-1时基于小批量训练数据集D中的一条训练数据计算得到的本地梯度;

5)将上次迭代产生的本地延时梯度与本次新产生的进行累加,产生新的然后对新的进行梯度的粗粒度稀疏压缩处理;

6)执行粗粒度稀疏压缩处理操作,具体步骤如下:

61)循环遍历每层,如在硬件实现过程中,则根据数据流的输入,逐次进行处理。分别求取第l层(l=0,1…L-1,深度神经网络包括L个网络层)、第f滤波器(f=0,1…F-1,网络层中包括F个滤波器)(即每个梯度块)的L1范数:(其中C,H,W分别为滤波器的通道数、高、宽));

62)每层都分别选出一个L1范数最大的滤波器并获得其在所属层的位置索引indxmax

63)将62)中得到的最大L1范数滤波器的L1范数作为本层重要滤波器的参考值,根据该参考值获取掩码Mask为与每层梯度参数等大等形状的0-1张量;

需要进一步了解,根据上述参考值获取掩码的原理,通过获得该层中最大L1范数滤波器对应的将该层中所有不等于该参考值的滤波器对应的Mask置零,前提是Mask为初始值为全1的、与每层梯度参数等维度等形状(C,H,W)的张量。例如,现有某层F个C×H×W的滤波器和F个对应的C×H×W的初始Mask,经过处理得到只有1个C×H×W的Mask为全1,剩余F-1个Mask为0的新Mask。

64)根据掩码选出重要的稀疏梯度以及更新本地累加梯度

7)采用游程编码对选出的重要稀疏梯度进行编码;

8)基于All-reduce分布式框架向其他节点Worker传输交换

稀疏通信操作将发给其他工作节点Worker并进行聚合平均,得出多个节点进行上述相同的操作,体现出分布式同步更新策略的优势。

9)采用全局动量分布式随机梯度下降算法,执行长期梯度补偿操作,使得模型的更新考虑到全局收敛信息,从而加速训练的收敛速度。具体而言,包括全局动量累加过程Vt+1=m·Vt+UGt,进而用新的全局动量进行各个参数更新过程:wt+1=wt-η·Vt+1

10)判断本地节点是否还存在未训练的数据,若是则进行下一次迭代,同时迭代计数器t自增;否则表示训练完成,那么将输出训练好的模型参数。其中,每次训练使用一个小批量数据,已知总体训练数据量和小批量大小固定为Nb,可得总共迭代次数T,从而判断出是否还存在未训练数据。

方法700中,采用基于层级滤波器L1范数大小判定梯度重要性的粗粒度稀疏策略,选择深度神经网络每层中L1范数最大的滤波器,先进行参数更新,其他未被认定为重要的梯度累加到下次迭代暂缓更新。与细粒度策略top-k稀疏方法相比,避免额外的随机采样和大数排序等耗时问题,大大加速了稀疏过程。同时获得的重要梯度地址连续,不需额外资源处理稀疏格式数据,便于硬件访存控制实现,达到高性能和低功耗的目的。

本发明在分布式稀疏通信中,提出了基于粗粒度的重要梯度选择方法,即以梯度块为单位进行重要梯度选择,一方面,避免了对大量梯度数据进行排序等耗时问题,大大加速了稀疏过程,另一方面,获得的重要梯度的存储地址连续,不需额外资源处理稀疏格式数据,便于硬件访存控制实现,达到高性能和低功耗的目的,从而从整体上提高了深度神经网络的分布式训练的训练效率。

这样,在一些应用场景中,上述分布式训练方法也可由终端设备执行,终端设备中部署有上述的加速单元,例如神经网络处理单元(NPU)、图形处理单元(GPU)等。终端设备可以是桌面型计算设备、膝上型计算设备、平板型计算设备、移动电话计算设备、音箱计算设备、车辆的计算设备(例如,车载通信系统、车载娱乐系统、车载导航系统)、包括计算设备的可穿戴装置(例如,具有计算设备的手表、具有计算设备的眼镜)或者包括计算设备的家居装置(例如,具有计算设备的音箱、具有计算设备的电视、具有计算设备的洗衣机)。

图8示出了根据本发明一个实施例的分布式训练装置800的示意图。参照图8,装置800包括:

梯度计算单元810,适于从训练数据集中获取训练数据子集,计算所述深度神经网络的网络参数在训练数据子集上的本地梯度;

梯度选择单元820,适于对所述深度神经网络的每一网络层,计算该网络层中各梯度块的梯度度量值,并按照梯度度量值从大到小的顺序选取预定数目个目标梯度块,其中,所述梯度块包括多个存储地址连续的本地梯度;

梯度交换单元830,适于与其他计算节点进行通信,交换彼此的目标梯度块;

参数更新单元840,适于计算所有计算节点的目标梯度块的梯度平均值,基于所述梯度平均值对所述深度神经网络的网络参数进行更新。

梯度计算单元810、梯度选择单元820、梯度交换单元830和参数更新单元840的所执行的具体处理,可参照上述方法600或方法700,这里不做赘述。

这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的方法。

以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。

在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的较佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。

27页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:神经网络训练方法及装置、图像分类的方法及装置

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!