基于分布式通信的神经网络训练方法、装置及存储介质
文献发布时间:2023-06-19 10:54:12
技术领域
本公开涉及机器学习技术领域,尤其涉及基于分布式通信的神经网络训练方法、装置及存储介质。
背景技术
随着信息技术的发展和人工智能的兴起,神经网络在日常生活中的应用日益广泛,神经网络的种类越来越多,复杂度也越来越高,传统的单机训练可能需要数万次迭代数月的时间才能收敛,单机的计算能力已经难以匹配神经网络训练的算力需求;而分布式的训练方法虽然可以通过将训练任务并行分配到多个节点提升算力,但是需要各个节点间的相互通信才能够完成训练,各个节点的通信数据量较大、频率较高又造成了较高的带宽消耗和较长的通信时滞,使得节点间通信的问题成为了神经网络训练提速的瓶颈。
发明内容
为了解决上述的至少一个技术问题,本公开提出了一种基于分布式通信的神经网络训练方案。
根据本公开的第一方面,提供了基于分布式通信的神经网络训练,其应用于训练节点,包括:训练所述训练节点对应的神经网络,将产生的梯度保存在第一梯度序列;根据所述第一梯度序列和第二梯度序列,得到累计梯度序列;所述第二梯度序列用于记录尚未参与同步的梯度;根据所述累计梯度序列计算得到重要度指标序列;获取重要梯度指示序列,根据所述重要梯度指示序列确定所述累计梯度序列中的重要梯度;根据所述重要梯度和所述重要度指标序列得到所述训练节点的待同步信息;基于所述待同步信息进行训练节点间的同步,得到同步后梯度序列和同步后重要梯度指示序列;根据所述同步后梯度序列调整所述神经网络的参数,以及将所述同步后重要梯度指示序列作为新的所述重要梯度指示序列。基于上述配置,可以对于重要梯度和用于确定重要梯度的相关信息在一次通信过程中进行同步,同步结果可以确保各个训练节点得到的重要梯度均对应于相同的神经网络参数,而不必再额外就重要梯度的位置进行节点间通信,降低了节点通信的频率,提升了训练速度。
在一些可能的实施方式中,所述根据所述第一梯度序列和第二梯度序列,得到累计梯度序列,包括:基于预设的分段规则对所述第一梯度序列和所述第二梯度序列分别进行分段,得到第一梯度段序列和第二梯度段序列;其中,若第一梯度段在所述第一梯度段序列中的位置与第二梯度段在所述第二梯度段序列中的位置相同,则所述第一梯度段和所述第二梯度段相对应,并且均对应于相同的神经网络参数;设置多个并行的计算线程,每个所述计算线程获取至少一个第一梯度段,以及与所述第一梯度段对应的第二梯度段;每个所述计算线程对于获取到的每个第一梯度段,将所述第一梯度段与对应的第二梯度段进行累加,得到对应的累计梯度段;根据各个所述计算线程得到的累计梯度段,得到所述累计梯度序列。基于上述配置,可以通过并行分段计算累计梯度,提升累计梯度序列的计算速度。
在一些可能的实施方式中,所述根据所述累计梯度序列计算得到重要度指标序列,包括:每个所述计算线程根据得到的所述累计梯度段,计算对应的重要度指标;根据各个所述计算线程的重要度指标计算结果,得到重要度指标序列。基于上述配置,使得得到的重要度指标可以表征包括多个梯度的梯度段的重要程度,进而在后续的同步过程中可以确定该梯度段是否为重要梯度段,便于以梯度段为粒度确定重要梯度,从而完成梯度段粒度的梯度更新,实现了稀疏梯度更新,进一步降低通信的数据量,提升训练速度。
在一些可能的实施方式中,所述根据所述重要梯度指示序列确定所述累计梯度序列中的重要梯度,包括:对于每个所述计算线程计算得到的每个累计梯度段,在所述重要梯度指示序列提取对应的重要梯度指示值;若所述重要梯度指示值为第一指示值,则将所述累计梯度段中的累计梯度均确定为重要梯度,并将所述累计梯度段提交至所述训练节点的通信缓冲区;所述第一指示值表征所述累计梯度段中的累计梯度均为重要梯度。基于上述配置,可以以梯度段为粒度快速确定重要梯度和非重要梯度,提升重要梯度的确定速度。
在一些可能的实施方式中,所述根据所述重要梯度和所述重要度指标序列得到所述训练节点的待同步信息,包括:根据所述通信缓冲区中的累计梯度段,得到待同步梯度序列;其中,所述通信缓冲区中的每个累计梯度段中的每个累计梯度在所述待同步梯度序列中的位置均与所述累计梯度在所述累计梯度序列中的位置相同,并且所述待同步序列中的其它位置被设置为预设梯度值;拼接所述待同步梯度序列和所述重要度指标序列,得到所述待同步信息。基于上述配置,可以以梯度段为粒度快速确定重要梯度,得到待同步梯度序列,所述待同步梯度序列中可以记录每个参数对应的待同步的梯度信息,将待同步梯度序列和重要度指标的拼接结果作为待同步信息,可以使得待同步信息能够以较小的数据量包括了梯度、梯度位置,以及用于在下一次迭代中确定重要梯度位置的重要度指标序列,从而降低了通信数据量,也降低了通信频率,可以显著缓解分布式通信环境中神经网络训练产生的通信压力。
在一些可能的实施方式中,所述基于所述待同步信息进行训练节点间的同步,得到同步后梯度序列和同步后重要梯度指示序列,包括:将各个所述训练节点的待同步信息中的待同步梯度序列逐元素相加,得到同步累加梯度序列;将所述同步累加梯度序列中的每个同步累加梯度除以所述训练节点的总数量,得到所述同步后梯度序列;将各个所述训练节点的待同步信息中的重要度指标序列逐元素相加,得到累加重要度指标序列;将所述累加重要度指标序列中的每个累加重要度指标除以所述训练节点的总数量,得到平均重要度指标序列;计算所述平均重要度指标序列中每个平均重要度指标对应的重要梯度指示值,得到同步后重要梯度指示序列。基于上述配置,可以计算得到能够准确用于调整神经网络参数的同步后梯度序列,以及得到能够用于快速判断重要梯度的同步后重要梯度指示序列,提升神经网络训练速度。
在一些可能的实施方式中,所述计算所述平均重要度指标序列中每个平均重要度指标对应的重要梯度指示值,包括:按照平均重要度指标降序顺序得到所述平均重要度指标序列中各个平均重要度指标的排序结果;获取阈值指标,根据所述阈值指标在所述排序结果中确定重要度指标阈值;对于所述平均重要度指标序列中的每个平均重要度指标,若所述平均重要度指标大于所述重要度指标阈值,则将对应的重要梯度指示值设置为第一指示值;否则,将对应的重要梯度指示值设置为第二指示值;其中,所述第一指示值用于指示重要梯度,所述第二指示值用于指示非重要梯度。基于上述配置,可以准确计算得到每个平均重要度指标对应的重要梯度指示值,提升重要梯度判断的准确度。
在一些可能的实施方式中,所述获取阈值指标,包括:根据所述预设的分段规则确定分段个数;获取预设的压缩率;将所述压缩率与所述分段个数的乘积作为所述阈值指标。基于上述配置,可以得到较为合理的阈值指标,从而确定合理的重要度指标阈值,最终提升重要梯度判断的准确度。
在一些可能的实施方式中,所述根据所述同步后梯度序列调整所述神经网络的参数,包括:依次提取所述同步后梯度序列中的梯度;若所述梯度不等于预设梯度值,根据所述梯度调整对应的神经网络参数;若所述梯度等于所述预设梯度值,提取下一个梯度。基于上述配置,通过设置预设梯度值的方式指示非重要梯度,非重要梯度对应的参数值不需要调整,从而避免对于神经网络的参数的过渡调整,进一步提升神经网络的收敛速度。
在一些可能的实施方式中,所述方法还包括:根据所述重要梯度指示序列确定所述累计梯度序列中的非重要梯度;根据所述非重要梯度更新所述第二梯度序列;迭代进行基于分布式通信的神经网络训练,直至到达预设的训练停止条件。基于上述配置,各个训练节点通过迭代不断调整自身参数,以及在每次迭代过程中进行节点间通信协作完成神经网络的训练,提升训练效率。
根据本公开的第二方面,提供了基于分布式通信的神经网络训练方法,应用于包括多个训练节点的训练系统,所述方法包括:每个训练节点训练对应的神经网络,将产生的梯度保存在第一梯度序列;根据所述第一梯度序列和第二梯度序列,得到累计梯度序列;所述第二梯度序列用于记录所述训练节点中尚未参与同步的梯度;根据所述累计梯度序列计算得到重要度指标序列;获取所述训练节点中的重要梯度指示序列,根据所述重要梯度指示序列确定所述累计梯度序列中的重要梯度;根据所述重要梯度和所述重要度指标序列得到所述训练节点的待同步信息;各个训练节点基于对应的所述待同步信息进行训练节点间的同步,得到同步后梯度序列和同步后重要梯度指示序列;每个训练节点根据所述同步后梯度序列调整所述神经网络的参数,以及将所述同步后重要梯度指示序列作为新的所述重要梯度指示序列。基于上述配置,每个训练节点可以在一次同步过程中得到相同的同步后梯度序列和同步后重要梯度指示序列,所述同步后重要梯度指示序列用于在下一次迭代同步中得到新的同步后梯度序列。同步后梯度序列中包括重要梯度以及重要梯度的位置信息,因而不必再额外就重要梯度的位置进行训练节点间通信,降低了通信频率,也确保了各个训练节点中重要梯度的位置一致性,提升了训练速度。
根据本公开的第三方面,提供基于分布式通信的神经网络训练装置,所述装置设置于训练节点,包括:训练模块,用于训练所述训练节点对应的神经网络,将产生的梯度保存在第一梯度序列;累计梯度获取模块,用于根据所述第一梯度序列和第二梯度序列,得到累计梯度序列;所述第二梯度序列用于记录尚未参与同步的梯度;重要度指标序列计算模块,用于根据所述累计梯度序列计算得到重要度指标序列;梯度分类模块,用于获取重要梯度指示序列,根据所述重要梯度指示序列确定所述累计梯度序列中的重要梯度;同步模块,用于根据所述重要梯度和所述重要度指标序列得到所述训练节点的待同步信息,基于所述待同步信息进行训练节点间的同步,得到同步后梯度序列和同步后重要梯度指示序列;更新模块,用于将所述同步后重要梯度指示序列作为新的所述重要梯度指示序列;参数调整模块,用于根据所述同步后梯度序列调整所述神经网络的参数。
在一些可能的实施方式中,所述累计梯度获取模块,包括:分段单元,用于基于预设的分段规则对所述第一梯度序列和所述第二梯度序列分别进行分段,得到第一梯度段序列和第二梯度段序列;其中,若第一梯度段在所述第一梯度段序列中的位置与第二梯度段在所述第二梯度段序列中的位置相同,则所述第一梯度段和所述第二梯度段相对应,并且均对应于相同的神经网络参数;多线程处理单元,用于设置多个并行的计算线程,每个所述计算线程获取至少一个第一梯度段,以及与所述第一梯度段对应的第二梯度段;累计单元,用于每个所述计算线程对于获取到的每个第一梯度段,将所述第一梯度段与对应的第二梯度段进行累加,得到对应的累计梯度段;累计梯度序列获取单元,用于根据各个所述计算线程得到的累计梯度段,得到所述累计梯度序列。
在一些可能的实施方式中,所述重要度指标序列计算模块,包括:重要度指标计算单元,用于每个所述计算线程根据得到的所述累计梯度段,计算对应的重要度指标;重要度指标序列获取单元,用于根据各个所述计算线程的重要度指标计算结果,得到重要度指标序列。
在一些可能的实施方式中,所述梯度分类模块,用于对于每个所述计算线程计算得到的每个累计梯度段,在所述重要梯度指示序列提取对应的重要梯度指示值;若所述重要梯度指示值为第一指示值,则将所述累计梯度段中的累计梯度均确定为重要梯度,并将所述累计梯度段提交至所述训练节点的通信缓冲区;所述第一指示值表征所述累计梯度段中的累计梯度均为重要梯度。
在一些可能的实施方式中,所述同步模块,包括:待同步梯度序列获取单元,用于根据所述通信缓冲区中的累计梯度段,得到待同步梯度序列;其中,所述通信缓冲区中的每个累计梯度段中的每个累计梯度在所述待同步梯度序列中的位置均与所述累计梯度在所述累计梯度序列中的位置相同,并且所述待同步序列中的其它位置被设置为预设梯度值;拼接单元,用于拼接所述待同步梯度序列和所述重要度指标序列,得到所述待同步信息。
在一些可能的实施方式中,所述同步模块还包括:同步累加梯度序列获取单元,用于将各个所述训练节点的待同步信息中的待同步梯度序列逐元素相加,得到同步累加梯度序列;同步后梯度序列获取单元,用于将所述同步累加梯度序列中的每个同步累加梯度除以所述训练节点的总数量,得到所述同步后梯度序列;累加重要度指标序列获取单元,用于将各个所述训练节点的待同步信息中的重要度指标序列逐元素相加,得到累加重要度指标序列;平均重要度指标序列获取单元,用于将所述累加重要度指标序列中的每个累加重要度指标除以所述训练节点的总数量,得到平均重要度指标序列;同步后重要梯度指示序列计算单元,用于计算所述平均重要度指标序列中每个平均重要度指标对应的重要梯度指示值,得到同步后重要梯度指示序列。
在一些可能的实施方式中,所述同步后重要梯度指示序列计算单元包括:排序单元,用于按照平均重要度指标降序顺序得到所述平均重要度指标序列中各个平均重要度指标的排序结果;指标阈值获取单元,用于获取阈值指标,根据所述阈值指标在所述排序结果中确定重要度指标阈值;重要梯度指示值计算单元,用于对于所述平均重要度指标序列中的每个平均重要度指标,若所述平均重要度指标大于所述重要度指标阈值,则将对应的重要梯度指示值设置为第一指示值;否则,将对应的重要梯度指示值设置为第二指示值;其中,所述第一指示值用于指示重要梯度,所述第二指示值用于指示非重要梯度。
在一些可能的实施方式中,所述指标阈值获取单元用于根据所述预设的分段规则确定分段个数;获取预设的压缩率;将所述压缩率与所述分段个数的乘积作为所述阈值指标。
在一些可能的实施方式中,所述参数调整模块用于依次提取所述同步后梯度序列中的梯度;若所述梯度不等于预设梯度值,根据所述梯度调整对应的神经网络参数;若所述梯度等于所述预设梯度值,提取下一个梯度。
在一些可能的实施方式中,所述更新模块还用于根据所述重要梯度指示序列确定所述累计梯度序列中的非重要梯度;根据所述非重要梯度更新所述第二梯度序列;所述装置还包括迭代控制模块,用于迭代进行基于分布式通信的神经网络训练,直至到达预设的训练停止条件。
根据本公开的第四方面,提供了一种训练设备,包括至少一个处理器,以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令实现如第一方面中任意一项所述的基于分布式通信的神经网络训练方法。
根据本公开的第五方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或至少一段程序由处理器加载并执行以实现如第一方面中任意一项所述的基于分布式通信的神经网络训练方法。
根据本公开的第六方面,提供了一种训练系统,所述训练系统包括如第四方面所述的训练设备。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
图1示出根据本公开实施例的相关技术中基于分布式通信进行神经网络训练的示意图;
图2示出根据本公开实施例的基于分布式通信的神经网络训练方法的流程图;
图3示出根据本公开实施例的深度神经网络的一种可行的结构示意图;
图4示出根据本公开实施例的第一存储空间、第二存储空间与神经网络结构的关系示意图;
图5示出根据本公开实施例的多节点执行上述基于分布式通信的神经网络训练方法的流程示意图;
图6示出根据本公开实施例的上述基于分布式通信的神经网络训练方法中步骤S20的流程示意图;
图7示出根据本公开实施例的上述基于分布式通信的神经网络训练方法步骤S40的流程示意图;
图8示出根据本公开实施例的上述基于分布式通信的神经网络训练方法中步骤S60的流程示意图;
图9示出根据本公开实施例的基于分布式通信的神经网络训练装置的框图;
图10示出根据本公开实施例的一种训练设备的框图;
图11示出根据本公开实施例的另一种训练设备的框图。
具体实施方式
下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
另外,为了更好地说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
在相关技术的实际应用中,为了提升神经网络的训练速度,可以将神经网络的训练任务并行分配给多个训练节点,各个训练节点基于分布式通信可以协同进行神经网络的训练,进而提升神经网络的训练速度,缩短神经网络收敛的耗时。请参考图1,其示出了相关技术中基于分布式通信进行神经网络训练的示意图。图1中每个GPU(Graphics ProcessingUnit,图形处理器)为一个训练节点,图1中共有m个训练节点,上述m个训练节点可以各自独立训练结构相同的神经网络。
以图1中的m个训练节点协同训练一个存在n个层的神经网络为例,在每个训练节点进行神经网络训练的过程中,样本数据输入神经网络后依次触发前向传播过程和反向传播过程,在上述前向传播过程中,样本数据输入第1层,触发第1层、第2层,直至第n层依次输出计算结果。在上述反向传播过程中,触发第n层、第n-1层,直至第1层依次产生梯度。
上述m个训练节点根据产生的梯度进行通信,根据通信结果调整对应的神经网络的参数。通过分布式训练,每个训练节点可以参考其它训练节点产生的梯度调整自身对应的神经网络的参数,从而提升训练速度,但是相关技术中需要进行节点间通信的数据的数据量较大、通信频率也较高,这使得通信过程本身消耗了较多资源,各个训练节点可能因为频繁的通信时滞被迫经常处于等待状态,从而降低了训练速度,这种情况下分布式节点的通信过程成为了制约训练效率的瓶颈。
为了降低分布式训练过程的通信数据量和通信频率,缓解通信压力,提升神经网络的分布式训练的速度,本公开实施例提供基于分布式通信的神经网络训练方法。
本公开实施例提供的基于分布式通信的神经网络训练方法可以应用于任意具有图形处理器(Graphics Processing Unit,GPU)的数据处理设备,该数据处理设备可以是终端,包括个人计算机(Personal Computer,PC)、小型机、中型机、大型机、工作站等,当然该数据处理设备也可以是服务器。需要说明的是,该数据处理设备在用于训练神经网络时可以是独立的,也可以集群形式存在。
本公开实施例提供的基于分布式通信的神经网络训练方法可以以计算机程序的形式存储于数据处理设备,数据处理设备通过运行计算机程序实现本公开实施例的基于分布式通信的神经网络训练方法。上述计算机程序可以是独立的计算机程序,也可以是集成于其他计算机程序之上的功能模块、插件或者小程序等。
下面以作为训练节点的数据处理设备为执行主体为例,对本公开实施例的基于分布式通信的神经网络训练方法进行说明。图2示出根据本公开实施例的基于分布式通信的神经网络训练方法的流程图,如图2所示,上述方法包括:
S10:训练上述训练节点对应的神经网络,将产生的梯度保存在第一梯度序列。
本公开实施例中并不对神经网络的结构进行限制,上述神经网络可以是深度神经网络、卷积神经网络、循环神经网络中的至少一种。以深度神经网络为例,请参考图3,其示出深度神经网络的一种可行的结构示意图。上述深度神经网络可以包括卷积层、池化层和全连接层,以其中一个上述卷积层作为神经网络的输入层,并以上述全连接层作为上述深度神经网络的输出层,在上述输入层和上述输出层之间可以间隔设置卷积层和池化层。
在一个可行的实施方式中,可以在上述训练节点开辟第一存储空间(grad_buffer)和第二存储空间(left_buffer),在一个实施例中,上述第一存储空间(grad_buffer)和第二存储空间(left_buffer)均是连续的存储空间。
请参考图4,其示出了第一存储空间、第二存储空间与神经网络结构的关系示意图。本公开实施例中神经网络可以具备多个层,每个层可以包括多个参数,每个层中的每个参数对应于上述第一存储空间中的一段存储区间。上述第一存储空间和上述第二存储空间可以具备相同结构,并且上述第一存储空间和上述第二存储空间可以均与上述神经网络的参数所占的存储空间相同。上述第一存储空间(grad_buffer)可以用于存储上述训练节点在训练过程中产生的梯度(第一梯度序列),第二存储空间(left_buffer)可以用于存储尚未参与同步的梯度。
以神经网络具备三个层为例:
层1包括参数E10、参数E11、参数E12和参数E13;
层2包括参数E20、参数E21、参数E22;
层3包括参数E30、参数E31和参数E32;
层1-3共包括10个参数,则上述第一存储空间和上述第二存储空间均包括10个存储区间,各个层在训练过程中反向产生对应于各个参数的梯度,具体地:
首先,层3产生分别对应于参数E30、参数E31和参数E32的梯度T30、梯度T31和参数梯度T32;
然后,层2产生分别对应于参数E20、参数E21、参数E22的梯度T20、梯度T21和梯度T22;
接下来,层1产生分别对应于参数E10、参数E11、参数E12和参数E13的梯度T10、梯度T11、梯度T12和梯度T13。
可以按照梯度产生顺序依次将这10个梯度存储在上述第一存储空间之中,即上述第一存储空间中(grad_buffer)的数据可以为{T30、T31、T32、T20、T21、T22、T10、T11、T12、T13}。上述第一存储空间(grad_buffer)的数据{T30、T31、T32、T20、T21、T22、T10、T11、T12、T13}即上述第一梯度序列。
在一个实施例中,上述训练节点可以每次取出最小批次样本,进行最小批次的样本训练,在训练过程中调整对应的神经网络的参数,并且根据训练结果得到本批次训练产生的对应于每个参数的梯度,将上述梯度存储在第一梯度序列之中。通过分批次训练,可以在每批次训练结束后记录第一梯度序列,并进行后续的训练节点间的同步,而在每个批次训练的过程可以不进行训练节点间的同步,通过分批次训练降低通信频率,提升训练速度。
S20:根据上述第一梯度序列和第二梯度序列,得到累计梯度序列;上述第二梯度序列用于记录尚未参与同步的梯度。
本公开实施例中第二梯度序列可以被存储于第二存储空间(left_buffer)。第二存储空间与上述第一存储空间具备相同结构,并且相同位置的存储区间对应相同的神经网络参数。以上述具备三个层的神经网络为例,即第一存储空间中的10个连续存储区间和第二存储空间中的10个连续存储区间均分别依次对应参数E30、参数E31、参数E32、参数E20、参数E21、参数E22、参数E10、参数E11和参数E12。可以将第一存储空间和第二存储空间中处于相同位置的存储区间中的数据相加,即可得到累计梯度序列,可以将上述累计梯度序列存储在上述第一存储空间之中。
示例性的,以上述具备三个层的神经网络为例,可以获取第一存储空间的任一存储区间grad_buffer[i],和第二存储空间的对应的存储区间left_buffer[i],其中i取值为0-9,将grad_buffer[i]+left_buffer[i]赋值给grad_buffer[i],赋值后的第一存储空间中的数据即为上述累计梯度序列,即上述累计梯度序列和上文所述第一梯度序列复用上述第一存储空间。在实际对神经网络进行基于分布式通信的训练场景中,参与神经网络协同训练的训练节点数量较大,并且由于神经网络复杂度可以很高,相应的,往往产生的梯度所占的存储空间也较大,在每个训练节点中均可以对于其中的第一存储空间进行复用,从而可以大大地节省存储资源。
S30:根据上述累计梯度序列计算得到重要度指标序列。
具体地,可以对应于累计梯度序列中的每个累计梯度,计算得到重要度指标,本公开实施例并不限定上述重要度指标的确定方法。以上述具备三个层的神经网络为例,可以得到重要度指标序列Im,其中的每个重要度指标Im[i]可以表示上文得到的grad_buffer[i]对应的神经网络参数产生的梯度的重要程度。
S40:获取重要梯度指示序列,根据上述重要梯度指示序列确定上述累计梯度序列中的重要梯度。
本公开实施例中重要梯度指示序列中的每个重要梯度指示值可以指示对应的位置的累计梯度是否重要。以上述具备三个层的神经网络为例,可以获取重要梯度指示序列Ip,每个重要梯度指示值Ip[i]可以表示上文得到的grad_buffer[i]记录的数据是否为重要梯度。示例性的,若Ip[i]为第一指示值,则grad_buffer[i]记录的数据被判定为重要梯度,若Ip[i]为第二指示值,则grad_buffer[i]记录的数据被判定为非重要梯度。在一个示例性的实施方式中,重要梯度指示序列Ip可以在上一次节点间同步过程中得到。
示例性的,若重要梯度指示序列Ip中Ip[1]、Ip[3]、Ip[5]的值表征重要梯度,则grad_buffer[1]、grad_buffer[3]、grad_buffer[5]即为重要梯度,grad_buffer中的其它梯度即为非重要梯度。
在一个示例性的实施方式中,在确定上述累计梯度序列中的非重要梯度后,还可以根据上述非重要梯度更新上述第二梯度序列。
本公开实施例中非重要梯度不参与本次的节点间的同步,因此,可以将非重要梯度更新在上述第二梯度序列中,即对应存储在第二存储空间(left_buffer)。根据上述非重要梯度更新上述第二梯度序列包括确定上述非重要梯度在上述第二梯度序列中的位置,将第二梯度序列在上述位置对应的数据更新为上述非重要梯度,将其它位置对应的数据赋值为0。
以上述具备三个层的神经网络为例,grad_buffer[0]、grad_buffer[2]、grad_buffer[4]、grad_buffer[6]、grad_buffer[7]、grad_buffer[8]、grad_buffer[9]均为非重要梯度,则将grad_buffer[0]、grad_buffer[2]、grad_buffer[4]、grad_buffer[6]、grad_buffer[7]、grad_buffer[8]、grad_buffer[9]对应赋值给left_buffer[0]、left_buffer[2]、left_buffer[4]、left_buffer[6]、left_buffer[7]、left_buffer[8]、left_buffer[9],而对于left_buffer[1]、left_buffer[3]、left_buffer[5]均可以被赋值为0。
S50:根据上述重要梯度和上述重要度指标序列得到上述训练节点的待同步信息。
具体地,可以将上述重要梯度和上述重要度指标序列进行拼接,将拼接结果作为上述待同步信息。本公开实施例并不限定拼接方法。
S60:基于上述待同步信息进行训练节点间的同步,得到同步后梯度序列和同步后重要梯度指示序列。
示例性的,可以使用AllReduce进行通信,AllReduce是可以高效进行分布式训练节点间通信的一类通信方法的统称。
本公开实施例中由于每次同步时各个训练节点可以得到同步后重要梯度指示序列,而上述同步后重要梯度指示序列被作为下一次训练时所应用的重要梯度指示序列,因此,在各个训练节点的训练过程中使用的重要梯度指示序列是相同的,也就是说重要梯度位置是相同的。
以训练节点A为例,训练节点A在步骤S40中判定grad_buffer[1]、grad_buffer[3]、grad_buffer[5]即为重要梯度,则其它训练节点也会判定其对应的grad_buffer[1]、grad_buffer[3]、grad_buffer[5]为重要梯度,可以直接根据各个节点的重要梯度计算同步后梯度序列,而不必额外考虑同步重要梯度的位置,各个训练节点间也不再需要就重要梯度的位置信息额外通信,降低了通信频率。
示例性的,对于同步后梯度序列Td,可以根据各个节点中的重要梯度grad_buffer[1]、grad_buffer[3]、grad_buffer[5]取均值,对应得到Td[1]、Td[3]和Td[5],而Td中其他位置的值可以被赋值为预设梯度值。
在一个实施例中,可以根据各个节点的重要度指标序列逐元素取均值,得到同步后重要度指标序列,根据同步后重要度指标序列对应得到上述同步后重要梯度指示序列。
S70:根据上述同步后梯度序列调整上述神经网络的参数,以及将上述同步后重要梯度指示序列作为新的上述重要梯度指示序列。
上述根据上述同步后梯度序列调整上述神经网络的参数,包括:
S71:依次提取上述同步后梯度序列中的梯度。
S72:若上述梯度不等于上述预设梯度值,根据上述梯度调整对应的神经网络参数。
S73:若上述梯度等于上述预设梯度值,提取下一个梯度。
在一个具体的实施方式中,上述预设梯度值用于指示不需要根据梯度进行参数调整的情况,在一个可行的实施方式中,上述预设梯度值可以为0。
本公开实施例中,可以将同步后梯度序列中的元素对应存储在上述第一存储空间中,再次复用第一存储空间(grad_buffer),降低了存储消耗。以上文所述的具备三个层的神经网络为例,顺序读取grad_buffer[i],若grad_buffer[i]不为上述预设梯度值,则调整与上述grad_buffer[i]对应的神经网络的参数;若grad_buffer[i]为上述预设梯度值,则i自增1,继续读取grad_buffer[i]。显然,若当前提取的梯度为上述同步后梯度序列中的最后一个梯度,则“提取下一个梯度”将失败,这种情况表征本次神经网络的参数的调整已经完成,在完成后可以清空第一存储空间,以便于迭代执行步骤S10-S70时,在步骤S10中可以被复用记录第一梯度序列。
本公开实施例中通过设置预设梯度值的方式指示非重要梯度,非重要梯度对应的参数值不需要调整,从而避免对于神经网络的参数的过渡调整,进一步提升神经网络的收敛速度。
本公开实施例步骤S10-S70示出了单次同步情况的神经网络训练方法,在上述单次同步情况的神经网络训练方法中,还可以对于第二梯度序列和重要梯度指示序列均进行更新,根据更新结果可以再次执行上述单次同步情况的神经网络训练方法,即可以迭代执行步骤S10-S70,直至达到预设的训练停止条件,即可得到训练好的神经网络。本公开实施例并不限定上述训练停止条件,上述训练停止条件可以为迭代次数达到预设的迭代阈值,也可以为上述神经网络产生的损失小于预设的损失阈值。
请参考图5,其示出了多节点执行上述基于分布式通信的神经网络训练方法的流程示意图。图5中各个训练节点可以独立对于各自的神经网络进行训练,在训练过程中更新本地的第二梯度序列,并得到待同步信息,上述待同步信息中包括重要梯度和重要度指标序列。各个训练节点基于待同步信息进行通信,得到同步后梯度序列和同步后重要梯度指示序列。各个节点均基于上述同步后梯度序列进行参数调整,以及基于上述同步后重要梯度指示序列确定下一次迭代中的重要梯度。各个训练节点通过迭代不断调整自身参数,以及在每次迭代过程中进行节点间通信协作完成神经网络的训练。
在实际对于神经网络进行分布式训练的场景中,参与训练的训练节点数量较大,并且由于神经网络复杂度可以很高,往往产生的梯度的数据量也较大,相应的,用于记录梯度位置的梯度位置信息数据量也较大,大数据量的训练节点之间不仅需要就梯度位置信息进行同步,也需要就梯度进行同步,从而产生了较大的通信压力,消耗了较多通信资源,受限于通信资源,较多节点可能被迫经常处于等待同步的状态,降低了训练速度。基于上述配置,本公开实施例提供的基于分布式通信的神经网络训练方法可以将重要梯度和重要梯度位置信息在一次通信过程中进行同步,同步结果可以确保各个训练节点得到的重要梯度均对应于相同的神经网络参数,而不必再额外就梯度位置信息进行训练节点间的通信,这就可以显著降低通信频率,减少通信资源消耗,降低训练节点等待同步的耗时,提升训练速度,在存在大数据量训练节点并且神经网络复杂度高的场景中可以取得尤为明显的提速效果。
在一些可行的实施方式中,可以进一步基于多线程并发特性提升上述训练节点执行上述步骤的速度,下面结合附图对本公开实施例进行详细说明。
请参考图6,其示出了上述基于分布式通信的神经网络训练方法中步骤S20的流程示意图,上述根据上述第一梯度序列和第二梯度序列,得到累计梯度序列的流程示意图,包括:
S21:基于预设的分段规则对上述第一梯度序列和上述第二梯度序列分别进行分段,得到第一梯度段序列和第二梯度段序列;其中,若第一梯度段在上述第一梯度段序列中的位置与第二梯度段在上述第二梯度段序列中的位置相同,则上述第一梯度段和上述第二梯度段相对应,并且均对应于相同的神经网络参数。
本公开实施例并不限定具体的分段规则,只要可以将上述第一梯度序列切分为多个第一梯度段,形成第一梯度段序列即可。上述第一梯度序列和上述第二梯度序列具备相同结构,基于上述分段规则再对于第二梯度序列进行切分,即可得到第二梯度段序列,并且若第一梯度段在上述第一梯度段序列中的位置与第二梯度段在上述第二梯度段序列中的位置相同,则上述第一梯度段和上述第二梯度段相对应,并且均对应于相同的神经网络参数。
示例性的,以上述的具备三个层的神经网络为例,在步骤S10中获取的第一梯度序列被存储在第一存储空间(grad_buffer)中,可以由grad_buffer[0]、grad_buffer[1]、grad_buffer[2]、grad_buffer[3]、grad_buffer[4]中的数据形成一个第一梯度段Tdf[0]、由grad_buffer[5]、grad_buffer[6]、grad_buffer[7]、grad_buffer[8]、grad_buffer[9]中的数据形成另一个第一梯度段Tdf[1],得到第一梯度段序列{Tdf[0],Tdf[1]}。相应的,第二梯度序列被存储在第二存储空间(left_buffer)中,由left_buffer[0]、left_buffer[1]、left_buffer[2]、left_buffer[3]、left_buffer[4]中的数据形成一个第二梯度段Tds[0]、由left_buffer[5]、left_buffer[6]、left_buffer[7]、left_buffer[8]、left_buffer[9]中的数据形成另一个第一梯度段Tds[1],得到第二梯度段序列{Tds[0],Tds[1]}。
以Tdf[0]为例,Tdf[0]中的各个数据依次对应于参数E30、参数E31、参数E32、参数E20、参数E21。Tdf[0]与Tds[0]相对应,则Tds[0]中的各个数据也是依次对应于参数E30、参数E31、参数E32、参数E20和参数E21。
S22:设置多个并行的计算线程,每个上述计算线程获取至少一个第一梯度段,以及与上述第一梯度段对应的第二梯度段。
以设置两个并行的计算线程为例,可以将Tdf[0]和Tds[0]发送至计算线程A,将Tdf[1]和Tds[1]发送至计算线程B。
S23:每个上述计算线程对于获取到的每个第一梯度段,将上述第一梯度段与对应的第二梯度段进行累加,得到对应的累计梯度段。
以计算线程A为例,可以将Tdf[0]和Tds[0]中的数据进行逐元素相加,得到对应的累计梯度段。示例性的,第一梯度段Tdf[0]中每个元素的数据依次被存储在grad_buffer[0]、grad_buffer[1]、grad_buffer[2]、grad_buffer[3]、grad_buffer[4],第二梯度段Tds[0]中每个元素的数据依次被存储在left_buffer[0]、left_buffer[1]、left_buffer[2]、left_buffer[3]、left_buffer[4],则对应的累计梯度段STd[0]中的数据依次为grad_buffer[0]+left_buffer[0]、grad_buffer[1]+left_buffer[1]、grad_buffer[2]+left_buffer[2]、grad_buffer[3]+left_buffer[3]、grad_buffer[4]+left_buffer[4],显然STd[0]中的五个累计梯度分别对应于参数E30、参数E31、参数E32、参数E20和参数E21。同样道理,计算线程B可以根据Tdf[1]和Tds[1],对应得到STd[1],STd[1]中的五个累计梯度分别对应于参数E22、参数E10、参数E11、参数E12、参数E13。
S24:根据上述各个计算线程得到的累计梯度段,得到累计梯度序列。
示例性的,计算线程A可以得到STd[0],计算线程B可以得到STd[1],将STd[0]中的累计梯度与STd[1]中的累计梯度依次排列,即可得到上述累计梯度序列。以上文所述的具备三个层的神经网络为例,可以根据STd[0]中的五个元素分别更新grad_buffer[0]、grad_buffer[1]、grad_buffer[2]、grad_buffer[3]、grad_buffer[4],根据STd[1]中的五个元素分别更新grad_buffer[5]、grad_buffer[6]、grad_buffer[7]、grad_buffer[8]、grad_buffer[9],则第一存储空间中的数据即形成上述累计梯度序列。上述累计梯度序列通过复用第一存储空间降低存储消耗。基于上述配置,可以通过并行分段计算累计梯度,提升累计梯度序列的计算速度。
相应的,在步骤S30中,也可以以梯度段为粒度计算重要度指标序列,即对于每个上述累计梯度段,计算对应的重要度指标;根据各个上述计算线程的重要度指标计算结果,得到重要度指标序列。示例性的,对于累计梯度段STd[0],可以得到对应的重要度指标Im[0];对于累计梯度段STd[1],可以得到对应的重要度指标Im[1]。基于上述配置,使得得到的重要度指标可以表征包括多个梯度的梯度段的重要程度,进而在后续的同步过程中可以确定该梯度段是否为重要梯度段,便于以梯度段为粒度确定重要梯度,从而完成梯度段粒度的梯度更新,实现了稀疏梯度更新,进一步降低通信的数据量,提升训练速度。
在一个示例性的实施方式中,以上文所述的具备三个层的神经网络为例,可以得到两个累计梯度段STd[0]和STd[1],相应的,上述重要度指标序列包括两个重要度指标Im[0]和Im[1]。对于每个上述累计梯度段,可以计算上述累计梯度段中各个累计梯度的统计值,将上述统计值作为上述重要度指标。本公开实施例中不限定上述统计值的类型,示例性的,上述统计值可以是方差、标准差或二范数。
请参考图7,其示出了上述基于分布式通信的神经网络训练方法步骤S40的流程示意图,上述根据上述重要梯度指示序列确定上述累计梯度序列中的重要梯度的流程示意图,包括:
S41:对于每个上述计算线程计算得到的每个累计梯度段,在上述重要梯度指示序列提取对应的重要梯度指示值。
在一个示例性的实施方式中,上述重要梯度指示序列中的每个重要梯度指示值也与累计梯度序列中的累计梯度段相对应。以上文所述的具备三个层的神经网络为例,可以得到两个累计梯度段STd[0]和STd[1],则相应的,上述重要梯度指示序列也包括两个重要梯度指示值Ip[0]和Ip[1]。
S42:若上述重要梯度指示值为第一指示值,则将上述累计梯度段中的累计梯度均确定为重要梯度,并将上述累计梯度段提交至上述训练节点的通信缓冲区;上述第一指示值表征上述累计梯度段中的累计梯度均为重要梯度。
S43:若上述重要梯度指示值为第二指示值,则将上述累计梯度段中的累计梯度均确定为非重要梯度;上述第二指示值表征上述累计梯度段中的累计梯度均为非重要梯度。
示例性的,可以将1作为第一指示值,0作为第二指示值。示例性的,若重要梯度指示值Ip[0]为1,则确定对应的累计梯度段STd[0]中的各个累计梯度均为重要梯度,将上述累计梯度段提交至上述训练节点的通信缓冲区,若重要梯度指示值Ip[1]为0,则将对应的累计梯度段STd[1]中的五个累计梯度均作为非重要梯度。
在一个可行的实施例中,可以根据确定的非重要梯度更新第二梯度序列,这个步骤在前文有述,在此不再赘述。
基于上述配置,可以以梯度段为粒度快速确定重要梯度和非重要梯度,提升重要梯度的确定速度。
在一个示例性的实施方式中,上述根据上述重要梯度和上述重要度指标序列得到上述训练节点的待同步信息,包括:
S51.根据上述通信缓冲区中的累计梯度段,得到待同步梯度序列;其中,所述通信缓冲区中的每个累计梯度段中的每个累计梯度在所述待同步梯度序列中的位置均与所述累计梯度在所述累计梯度序列中的位置相同,并且所述待同步序列中的其它位置被设置为预设梯度值。
继续使用上文示例,只有累计梯度段STd[0]被提交至上述通信缓冲区,累计梯度段STd[0]中的各个累计梯度在上述累计梯度序列中的对应的位置为第1位至第5位,则上述待同步梯度序列中的第1位至第5为分别为累计梯度序列STd[0]中的五个累计梯度,而上述待同步梯度序列中的其它位置被设置为预设值。示例性的,上述待同步梯度序列中的其它位置可以置零,所述示例中,上述待同步后梯度序列共包括10个数值,分别对应参数E30、参数E31、参数E32、参数E20、参数E21、参数E22、参数E10、参数E11和参数E12。
S52.拼接上述待同步梯度序列和上述重要度指标序列,得到上述待同步信息。
示例性的,可以将上述重要度指标序列{Im[0],Im[1]}附在上述待同步梯度序列之后,得到上述待同步信息。
基于上述配置,可以以梯度段为粒度快速确定重要梯度,得到待同步梯度序列,上述待同步梯度序列中可以记录每个参数对应的待同步的梯度信息,将待同步梯度序列和重要度指标的拼接结果作为待同步信息,可以使得待同步信息能够以较小的数据量包括了梯度、梯度位置,以及用于在下一次迭代中确定重要梯度位置的重要度指标序列,从而降低了通信数据量,也降低了通信频率,可以显著缓解分布式通信环境中神经网络训练产生的通信压力。
请参考图8,其示出了上述基于分布式通信的神经网络训练方法中步骤S60的流程示意图,上述基于上述待同步信息进行训练节点间的同步,得到同步后梯度序列和同步后重要梯度指示序列的流程图,包括:
S61.将各个上述训练节点的待同步信息中的待同步梯度序列逐元素相加,得到同步累加梯度序列。
S62.将上述同步累加梯度序列中的每个同步累加梯度除以上述训练节点的总数量,得到上述同步后梯度序列。
假设存在三个训练节点训练上述存在三个层的神经网络,其中训练节点1的待同步梯度序列为Wt1,训练节点2的待同步梯度序列为Wt2,训练节点3的待同步梯度序列为Wt3,对于任意序列位置i,Wt1[i]+Wt2[i]+Wt3[i]的值即为上述同步累加梯度序列中序列位置i对应的同步累加梯度。上述同步累加梯度序列中每个序列位置对应的同步累加梯度除以3,即可得到上述同步后梯度序列。
S63.将各个上述训练节点的待同步信息中的重要度指标序列逐元素相加,得到累加重要度指标序列。
S64.将上述累加重要度指标序列中的每个累加重要度指标除以上述训练节点的总数量,得到平均重要度指标序列。
参考前文示例,对于存在三个层的神经网络,每个训练节点对应的重要度指标序列为{Im[0],Im[1]},为了区分训练节点1、训练节点2和训练节点3,将训练节点1、训练节点2和训练节点3的重要度指标序列分别表示为{Im1[0],Im1[1]}、{Im2[0],Im2[1]}和{Im3[0],Im3[1]}。若使用{AIm[0],AIm[1]}表征上述平均重要度指标序列,则AIm[0]=(Im1[0]+Im2[0]+Im3[0])/3,AIm[1]=(Im1[1]+Im2[1]+Im3[1])/3。
S65.计算上述平均重要度指标序列中每个平均重要度指标对应的重要梯度指示值,得到同步后重要梯度指示序列。
基于上述配置,可以计算得到能够准确用于调整神经网络参数的同步后梯度序列,以及得到能够用于快速判断重要梯度的同步后重要梯度指示序列,提升神经网络训练速度。
在一个可行的实施方式中,上述计算上述平均重要度指标序列中每个平均重要度指标对应的重要梯度指示值,包括:
S651.按照平均重要度指标降序顺序得到上述平均重要度指标序列中各个平均重要度指标的排序结果。
参考前文示例,对于平均重要度指标序列{AIm[0],AIm[1]},若AIm[0]小于AIm[1],则上述排序结果为{AIm[1],AIm[0]},反之上述排序结果为{AIm[0],AIm[1]}。
S652.获取阈值指标,根据上述阈值指标在上述排序结果中确定重要度指标阈值。
在一个可行的实施方式中,可以将上述排序结果中上述阈值指标指向的位置处的数值作为上述重要度指标阈值。示例性的,上述排序结果中包括30个平均重要度指标,阈值指标为10,则将上述排序结果中的第10个平均重要度指标对应的数值作为上述重要度指标阈值。
在一个可行的实施方式中,可以根据上述预设的分段规则确定分段个数;获取预设的压缩率;将上述压缩率与上述分段个数的乘积作为上述阈值指标。本公开实施例不限定上述预设的压缩率和上述分段个数的具体数据。参考前文示例的分段个数仅仅为两段,实际应用中可以远不止两段,本公开实施例中的示例均不产生具体限制。
基于上述配置,可以得到较为合理的阈值指标,从而确定合理的重要度指标阈值,最终提升重要梯度判断的准确度。
S653.对于上述平均重要度指标序列中的每个平均重要度指标,若上述平均重要度指标大于上述重要度指标阈值,则将对应的重要梯度指示值设置为第一指示值;否则,将对应的重要梯度指示值设置为第二指示值。
本公开实施例中,上述第一指示值可以用于指示重要梯度,示例性的,第一指示值可以是1;第二指示值可以用于指示非重要梯度,示例性的,第二指示值可以是0。以平均重要度指标序列{AIm[0],AIm[1]}为例,可以对应得到同步后重要梯度指示序列{TIp[0],TIp[1]}。在迭代执行上述基于分布式通信的神经网络训练方法时,同步后重要梯度指示序列{TIp[0],TIp[1]}可以作为新的重要梯度指示序列{Ip[0],Ip[1]},被应用于在下一次迭代中确定重要梯度。如何基于重要梯度指示序列{Ip[0],Ip[1]}确定重要梯度在前文有述,在此不再赘述。
基于上述配置,可以准确计算得到每个平均重要度指标对应的重要梯度指示值,提升重要梯度判断的准确度。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格地执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
在一个可行的实施例中,本公开还提供另一基于分布式通信的神经网络训练方法,应用于包括多个训练节点的训练系统,该方法包括:
S100.每个训练节点训练对应的神经网络,将产生的梯度保存在第一梯度序列。
S200.根据所述第一梯度序列和第二梯度序列,得到累计梯度序列;所述第二梯度序列用于记录所述训练节点中尚未参与同步的梯度。
S300.根据所述累计梯度序列计算得到重要度指标序列。
S400.获取所述训练节点中的重要梯度指示序列,根据所述重要梯度指示序列确定所述累计梯度序列中的重要梯度。
S500.根据所述重要梯度和所述重要度指标序列得到所述训练节点的待同步信息。
S600.各个训练节点基于对应的所述待同步信息进行训练节点间的同步,得到同步后梯度序列和同步后重要梯度指示序列。
S700.每个训练节点根据所述同步后梯度序列调整所述神经网络的参数,以及将所述同步后重要梯度指示序列作为新的所述重要梯度指示序列。
本公开实施例中所述训练系统中每个训练节点执行的步骤均可以参考前文,在此不再赘述。可以理解,本公开提及的上述各个方法实施例,在不违背原理逻辑的情况下,均可以彼此相互结合形成结合后的实施例,限于篇幅,本公开不再赘述。
图9示出根据本公开实施例提供的基于分布式通信的神经网络训练装置的框图,上述装置设置于训练节点,包括:
训练模块10,用于训练上述训练节点对应的神经网络,将产生的梯度保存在第一梯度序列;
累计梯度获取模块20,用于根据上述第一梯度序列和第二梯度序列,得到累计梯度序列;上述第二梯度序列用于记录尚未参与同步的梯度;
重要度指标序列计算模块30,用于根据上述累计梯度序列计算得到重要度指标序列;
梯度分类模块40,用于获取重要梯度指示序列,根据上述重要梯度指示序列确定上述累计梯度序列中的重要梯度;
同步模块50,用于根据上述重要梯度和上述重要度指标序列得到上述训练节点的待同步信息,基于上述待同步信息进行训练节点间的同步,得到同步后梯度序列和同步后重要梯度指示序列;
更新模块60,用于将上述同步后重要梯度指示序列作为新的上述重要梯度指示序列;
参数调整模块70,用于根据上述同步后梯度序列调整上述神经网络的参数。
在一些可能的实施方式中,上述累计梯度获取模块,包括:
分段单元,用于基于预设的分段规则对上述第一梯度序列和上述第二梯度序列分别进行分段,得到第一梯度段序列和第二梯度段序列;其中,若第一梯度段在上述第一梯度段序列中的位置与第二梯度段在上述第二梯度段序列中的位置相同,则上述第一梯度段和上述第二梯度段相对应,并且均对应于相同的神经网络参数;
多线程处理单元,用于设置多个并行的计算线程,每个上述计算线程获取至少一个第一梯度段,以及与上述第一梯度段对应的第二梯度段;
累计单元,用于每个上述计算线程对于获取到的每个第一梯度段,将上述第一梯度段与对应的第二梯度段进行累加,得到对应的累计梯度段;
累计梯度序列获取单元,用于根据上述各个计算线程得到的累计梯度段,得到上述累计梯度序列。
在一些可能的实施方式中,上述重要度指标序列计算模块,包括:重要度指标计算单元,用于每个上述计算线程根据得到的上述累计梯度段,计算对应的重要度指标;重要度指标序列获取单元,用于根据各个上述计算线程的重要度指标计算结果,得到重要度指标序列。
在一些可能的实施方式中,上述梯度分类模块,用于对于每个上述计算线程计算得到的每个累计梯度段,在上述重要梯度指示序列提取对应的重要梯度指示值;若上述重要梯度指示值为第一指示值,则将上述累计梯度段中的累计梯度均确定为重要梯度,并将上述累计梯度段提交至上述训练节点的通信缓冲区;上述第一指示值表征上述累计梯度段中的累计梯度均为重要梯度。
在一些可能的实施方式中,上述同步模块,包括:
待同步梯度序列获取单元,用于根据上述通信缓冲区中的累计梯度段,得到待同步梯度序列;其中,所述通信缓冲区中的每个累计梯度段中的每个累计梯度在所述待同步梯度序列中的位置均与所述累计梯度在所述累计梯度序列中的位置相同,并且所述待同步序列中的其它位置被设置为预设梯度值;
拼接单元,用于拼接上述待同步梯度序列和上述重要度指标序列,得到上述待同步信息。
在一些可能的实施方式中,上述同步模块还包括:同步累加梯度序列获取单元,用于将各个上述训练节点的待同步信息中的待同步梯度序列逐元素相加,得到同步累加梯度序列;
同步后梯度序列获取单元,用于将上述同步累加梯度序列中的每个同步累加梯度除以上述训练节点的总数量,得到上述同步后梯度序列;
累加重要度指标序列获取单元,用于将各个上述训练节点的待同步信息中的重要度指标序列逐元素相加,得到累加重要度指标序列;
平均重要度指标序列获取单元,用于将上述累加重要度指标序列中的每个累加重要度指标除以上述训练节点的总数量,得到平均重要度指标序列;
同步后重要梯度指示序列计算单元,用于计算上述平均重要度指标序列中每个平均重要度指标对应的重要梯度指示值,得到同步后重要梯度指示序列。
在一些可能的实施方式中,上述同步后重要梯度指示序列计算单元包括:排序单元,用于按照平均重要度指标降序顺序得到上述平均重要度指标序列中各个平均重要度指标的排序结果;指标阈值获取单元,用于获取阈值指标,根据上述阈值指标在上述排序结果中确定重要度指标阈值;重要梯度指示值计算单元,用于对于上述平均重要度指标序列中的每个平均重要度指标,若上述平均重要度指标大于上述重要度指标阈值,则将对应的重要梯度指示值设置为第一指示值;否则,将对应的重要梯度指示值设置为第二指示值;其中,上述第一指示值用于指示重要梯度,上述第二指示值用于指示非重要梯度。
在一些可能的实施方式中,上述指标阈值获取单元用于根据上述预设的分段规则确定分段个数;获取预设的压缩率;将上述压缩率与上述分段个数的乘积作为上述阈值指标。
在一些可能的实施方式中,上述参数调整模块用于依次提取上述同步后梯度序列中的梯度;若上述梯度不等于上述预设梯度值,根据上述梯度调整对应的神经网络参数;若上述梯度等于上述预设梯度值,提取下一个梯度。
在一些可能的实施方式中,上述更新模块还用于根据上述重要梯度指示序列确定上述累计梯度序列中的非重要梯度;根据上述非重要梯度更新上述第二梯度序列;上述装置还包括迭代控制模块,用于迭代进行基于分布式通信的神经网络训练,直至到达预设的训练停止条件。
在一些实施例中,本公开实施例提供的装置具有的功能或包含的模块可以用于执行上文方法实施例描述的方法,其具体实现可以参照上文方法实施例的描述,为了简洁,这里不再赘述。
本公开实施例还提出一种计算机可读存储介质,上述计算机可读存储介质中存储有至少一条指令或至少一段程序,上述至少一条指令或至少一段程序由处理器加载并执行时实现上述方法。计算机可读存储介质可以是非易失性计算机可读存储介质。
本公开实施例还提出一种训练设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,上述处理器被配置为上述方法。训练设备可以被提供为终端、服务器或其它形态的设备。
图10示出根据本公开实施例的一种训练设备的框图。例如,训练设备800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等终端。
参照图10,训练设备800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(I/O)的接口812,传感器组件814,以及通信组件816。
处理组件802通常控制训练设备800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在训练设备800的操作。这些数据的示例包括用于在训练设备800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件806为训练设备800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为训练设备800生成、管理和分配电力相关联的组件。
多媒体组件808包括在上述训练设备800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。上述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与上述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当训练设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当训练设备800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
I/O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为训练设备800提供各个方面的状态评估。例如,传感器组件814可以检测到训练设备800的打开/关闭状态,组件的相对定位,例如上述组件为训练设备800的显示器和小键盘,传感器组件814还可以检测训练设备800或训练设备800一个组件的位置改变,用户与训练设备800接触的存在或不存在,训练设备800方位或加速/减速和训练设备800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件816被配置为便于训练设备800和其他设备之间有线或无线方式的通信。训练设备800可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G、5G或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,上述通信组件816还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,训练设备800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种非易失性计算机可读存储介质,例如包括计算机程序指令的存储器804,上述计算机程序指令可由训练设备800的处理器820执行以完成上述方法。
图11示出根据本公开实施例的另一种训练设备的框图。例如,训练设备1900可以被提供为一服务器。参照图11,训练设备1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法。
训练设备1900还可以包括一个电源组件1926被配置为执行训练设备1900的电源管理,一个有线或无线网络接口1950被配置为将训练设备1900连接到网络,和一个输入输出(I/O)接口1958。训练设备1900可以操作基于存储在存储器1932的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
在示例性实施例中,还提供了一种非易失性计算机可读存储介质,例如包括计算机程序指令的存储器1932,上述计算机程序指令可由训练设备1900的处理组件1922执行以完成上述方法。
在示例性实施例中,还提供了一种训练系统,所述训练系统包括多个上述的训练设备。
本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,上述编程语言包括面向对象的编程语言—诸如Smalltalk、C+等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,上述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
- 基于分布式通信的神经网络训练方法、装置及存储介质
- 一种基于深度神经网络的图像识别模型训练方法、装置及存储介质