一种梯度数据的同步方法、系统、设备及存储介质与流程

文档序号:33108647发布日期:2023-02-01 01:49阅读:41来源:国知局
一种梯度数据的同步方法、系统、设备及存储介质与流程

1.本发明涉及机器学习技术领域,特别是涉及一种梯度数据的同步方法、系统、设备及存储介质。


背景技术:

2.近年来,深度神经网络获得了广泛的应用,并且其模型尺寸变得越来越大, 这种增长使得高效的模型训练变得非常重要,分布式训练应运而生。目前的分布式模型的训练方法中,广泛应用的是数据并行方法。在使用数据并行方法进行梯度数据的同步时,同步方式主要有三类,分别是ps(parameter serve,参数服务器)方法、all-reduce算法,以及去中心化的梯度数据同步方法。
3.其中,参数服务器方法是第一个支持分布式训练的梯度数据同步方法,它从所有的工作节点那里收集梯度,即从所有的worker那里收集梯度,并将更新的模型发回给各个worker,这种方法使训练过程的管理相对容易。但是由于参数服务器的通信瓶颈问题,使得可扩展性有限。与ps方法相比,all-reduce算法去除了中心节点,有效地利用了计算设备之间的带宽,实现了更好的并行性,然而all-reduce操作是一种同步操作,其计算的吞吐量由最慢的worker决定,因此在异质集群环境中训练效率很低。
4.为了提高异质集群环境中的训练效率,高效地进行梯度数据的同步,去中心化的梯度数据同步方法成为目前的研究热点。去中心化的梯度数据同步方法可以使用一个任意连接的通信图来指定worker之间的点对点通信。其中,ad-psgd(asynchronous decentralized parallel sgd,异步去中心化并行sgd方法)是目前的一种典型的去中心化的梯度数据同步方法。该方法中,每个worker都保存有整个模型,worker之间的通信由一个通信图控制,只有通信图中相邻位置的节点之间才能进行通信,即由边直接相连的两个邻居节点之间才能进行通信,异步去中心化并行sgd方法既能提高通信效率,又能很好地容忍异质性,在异质集群环境中,可以很好地抵抗straggler问题。
5.异步去中心化并行sgd方法的缺点在于,进行节点选取时,是随机地选择一个邻居节点,并与该邻居节点进行原子模型参数平均化操作,所谓的原子操作是指在多个节点同时选中了相同的相邻节点情况下,这些节点的平均化操作需要逐次排他性地进行。具体来说,在异步去中心化并行sgd方法的执行过程中,同一时间段内可能会有多个worker选择了同一个目标worker来做参数平均化,而由于参数平均化操作的原子性,会带来大量的通信开销,即在同一时间只能有一个节点与自身进行参数平均化,其他节点只能等待前者完成,这类因冲突而串行化等待的过程使得该方法具有较大的通信开销,导致在没有straggler的同质集群环境中时,性能明显低于all-reduce算法。
6.另一方面,为了避免产生死锁,即避免例如worker-a等待worker-b,worker-b等待worker-c,worker-c等待worker-a这样的死锁情况,异步去中心化并行sgd方法将其适用的通信拓扑人为地分为主动组和被动组两部分,并且要求通信图中的边只存在于两组之间,即主动组与被动组才能组成2个通信连接的邻居节点,进行梯度数据的同步。这就严格限定
了该方法所适用的拓扑类型,导致不符合该条件的拓扑结构都无法使用该方法。
7.综上所述,如何更有效地实现去中心化的梯度数据同步,降低通信开销,且提高方案的应用范围,是目前本领域技术人员急需解决的技术问题。


技术实现要素:

8.本发明的目的是提供一种梯度数据的同步方法、系统、设备及存储介质,以有效地实现去中心化的梯度数据同步,降低通信开销,且提高方案的应用范围。
9.为解决上述技术问题,本发明提供如下技术方案:一种梯度数据的同步方法,应用于分布式深度学习系统的各个节点中,包括:获取1个批次的训练样本并进行本地深度学习模型的训练,得到本地的参数梯度;当自身在未组队状态下接收到任意1个邻居节点的组队请求时,将自身设置为组队状态;按照预设规则从邻居节点集合中选取出1个邻居节点,判断选取出的所述邻居节点当前是否处于组队状态;如果否,则将自身设置为组队状态,并向所述邻居节点发起组队请求以使所述邻居节点将所述邻居节点自身设置为组队状态;如果是,则返回执行所述按照预设规则从邻居节点集合中选取出1个邻居节点的操作;在将自身设置为组队状态之后,基于本地的参数梯度以及与自身组队的所述邻居节点的参数梯度,进行梯度数据的同步;在进行梯度数据的同步之后将自身恢复为未组队状态,并返回执行所述获取1个批次的训练样本并进行本地深度学习模型的训练的操作,直至模型训练结束。
10.优选的,所述按照预设规则从邻居节点集合中选取出1个邻居节点,判断选取出的所述邻居节点当前是否处于组队状态,包括:使用随机数生成器生成k个互不相同的随机数;其中,k表示的是本节点的邻居节点总数量;设定k个随机数各自对应的邻居节点,且任意两个随机数对应的邻居节点互不相同;按照从第1个随机数至第k个随机数的循环选取规则,进行随机数的选定,且每次选定1个随机数之后,将选定的随机数对应的邻居节点作为本次选取出的1个邻居节点,判断选取出的所述邻居节点当前是否处于组队状态。
11.优选的,所述设定k个随机数各自对应的邻居节点,包括:针对任意1个随机数,将编号与该随机数的数值相同的邻居节点,作为设定的对应于该随机数的邻居节点;其中,k个随机数的取值均为正整数,且最小值为1,最大值为k,k个邻居节点的编号为1至k。
12.优选的,所述按照预设规则从邻居节点集合中选取出1个邻居节点,判断选取出的所述邻居节点当前是否处于组队状态,包括:从邻居节点集合中随机选取出1个邻居节点,判断选取出的所述邻居节点当前是
否处于组队状态。
13.优选的,所述基于本地的参数梯度以及与自身组队的所述邻居节点的参数梯度,进行梯度数据的同步,包括:基于本地的参数梯度以及与自身组队的所述邻居节点的参数梯度,通过梯度平均的方式进行梯度数据的同步。
14.优选的,所述将自身设置为组队状态,包括:通过修改自身的组队标志位,并将队友节点编号设置为与自身组队的邻居节点的id,以将自身设置为组队状态。
15.优选的,所述判断选取出的所述邻居节点当前是否处于组队状态,包括:通过选取出的所述邻居节点的组队标志位,判断选取出的所述邻居节点当前是否处于组队状态。
16.优选的,所述模型训练结束的触发条件为:本地深度学习模型收敛,和/或进行本地深度学习模型的训练次数达到了设定的次数阈值。
17.优选的,还包括:当失去与任意1个邻居节点的通信连接时,输出故障提示信息。
18.优选的,还包括:当接收到第一指令时,将失去通信连接的所述邻居节点删除,并继续执行梯度数据的同步流程;当接收到第二指令时,暂停执行梯度数据的同步流程,直到与自身失去通信连接的所述邻居节点恢复正常。
19.优选的,还包括:进行故障事件的记录。
20.优选的,在得到本地的参数梯度之后,还包括:判断各个邻居节点是否均得到了邻居节点自身的本地的参数梯度;如果是,则执行所述按照预设规则从邻居节点集合中选取出1个邻居节点的操作;如果否,则进行等待,直到确定出各个邻居节点均得到了邻居节点自身的本地的参数梯度。
21.一种梯度数据的同步系统,应用于分布式深度学习系统的各个节点中,包括:本地参数梯度确定模块,用于获取1个批次的训练样本并进行本地深度学习模型的训练,得到本地的参数梯度;组队接收模块,用于当自身在未组队状态下接收到任意1个邻居节点的组队请求时,将自身设置为组队状态;组队发起模块,用于按照预设规则从邻居节点集合中选取出1个邻居节点,判断选取出的所述邻居节点当前是否处于组队状态;如果否,则触发请求模块,如果是,则返回执行所述按照预设规则从邻居节点集合中选取出1个邻居节点的操作;所述请求模块,用于将自身设置为组队状态,并向所述邻居节点发起组队请求以使所述邻居节点将所述邻居节点自身设置为组队状态;梯度数据同步模块,用于在将自身设置为组队状态之后,基于本地的参数梯度以
及与自身组队的所述邻居节点的参数梯度,进行梯度数据的同步;迭代模块,用于在进行梯度数据的同步之后将自身恢复为未组队状态,并返回触发所述本地参数梯度确定模块,直至模型训练结束。
22.一种梯度数据的同步设备,应用于分布式深度学习系统的各个节点中,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序以实现如上述所述的梯度数据的同步方法的步骤。
23.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述所述的梯度数据的同步方法的步骤。
24.应用本发明实施例所提供的技术方案,支持分布式的训练,即在迭代的过程中,任意1个节点均会获取1个批次的训练样本并进行本地深度学习模型的训练,得到本地的参数梯度。任意1个节点得到本地的参数梯度之后,均会按照预设规则从邻居节点集合中选取出1个邻居节点,判断选取出的邻居节点当前是否处于组队状态,如果选取出的邻居节点当前未处于组队状态,则说明可以与本节点进行组队,于是本节点会将自身设置为组队状态,同时,向邻居节点发起组队请求以使邻居节点将邻居节点自身设置为组队状态,从而成功地完成组队。而如果选取出的邻居节点当前处于组队状态时,本技术的方案并不会如传统的ad-psgd方法进行等待,而是会直接重新按照预设规则从邻居节点集合中选取出1个邻居节点,从而不会出现传统方案中由于等待导致通信开销增大的情况。此外,对于任意1个节点而言,该节点得到本地的参数梯度之后,如果自身在未组队状态下接收到任意1个邻居节点的组队请求时,便可以直接将自身设置为组队状态,使得自身与发起组队请求的该邻居节点组队成功。
25.组队成功之后,即任意1个节点在将自身设置为组队状态之后,便可以基于本地的参数梯度以及与自身组队的邻居节点的参数梯度,进行梯度数据的同步,在进行梯度数据的同步之后,可以重新将自身恢复为未组队状态,并返回执行获取1个批次的训练样本并进行本地深度学习模型的训练的操作,直至模型训练结束。
26.并且可以看出,由于选取出的邻居节点当前处于组队状态时,本技术的方案并不会如传统的ad-psgd方法进行等待,而是会直接重新按照预设规则从邻居节点集合中选取出1个邻居节点,因此本技术的方案也不会产生死锁的情况,也就无需如传统方案中人为的将节点划分为主动组与被动组,因此本技术的方案可以适用各种拓扑类型,不会出现拓扑类型受限的情况。
27.综上所述,本技术的方案可以有效地实现去中心化的梯度数据同步,同时降低了通信开销,且提高了方案的应用范围,可以适用各种拓扑类型。
附图说明
28.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
29.图1为本发明中一种梯度数据的同步方法的实施流程图;
图2为本发明中一种梯度数据的同步系统的结构示意图;图3为本发明中一种梯度数据的同步设备的结构示意图。
具体实施方式
30.本发明的核心是提供一种梯度数据的同步方法,可以有效地实现去中心化的梯度数据同步,同时降低了通信开销,且提高了方案的应用范围,可以适用各种拓扑类型。
31.为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
32.请参考图1,图1为本发明中一种梯度数据的同步方法的实施流程图,该梯度数据的同步方法可以应用于分布式深度学习系统的各个节点中,包括以下步骤:步骤s101:获取1个批次的训练样本并进行本地深度学习模型的训练,得到本地的参数梯度。
33.具体的,分布式深度学习系统中会包括多个节点,即多个worker,每一个节点均可以执行本技术的方案。
34.并且,本技术采用的是去中心化的梯度数据同步方法,即每个worker地位相同且相互独立,各个worker并发执行本技术的方案。
35.此外,在分布式深度学习系统中,可以通过一个任意连接的通信图来指定worker之间的点对点通信,即通过该通信图可以设定节点与节点之间的连接方式,该通信图可以任意设置,但可以理解的是,对于任意1个节点而言,该节点至少需要有1个邻居节点,以使得该节点能够与其邻居节点之间进行通信,从而进行梯度数据的同步。
36.对于任意1个节点而言,每次触发步骤s101时,该节点便可以获取1个批次的训练样本并进行本地深度学习模型的训练,得到本地的参数梯度。1个批次的训练样本中,具体的训练数据的内容,可以根据需要进行设定和调整,例如部分场合中,会设定1个批次的训练样本中包括若干张训练图像。在进行本地深度学习模型的训练时,通过前向计算和反向计算,可以得到本地的参数梯度。
37.此外,本地深度学习模型的具体类型可以有多种,例如用于进行图像识别的深度学习模型,进行人脸识别的深度学习模型,进行数据分类的深度学习模型,进行语义分析的深度学习模型等等。
38.步骤s102:当自身在未组队状态下接收到任意1个邻居节点的组队请求时,将自身设置为组队状态。
39.步骤s103:按照预设规则从邻居节点集合中选取出1个邻居节点,判断选取出的邻居节点当前是否处于组队状态;如果否,则执行步骤s104;如果是,则返回执行步骤s103的操作。
40.执行步骤s104:将自身设置为组队状态,并向邻居节点发起组队请求以使邻居节点将邻居节点自身设置为组队状态。
41.为了便于描述,将步骤s102,步骤s103以及步骤s104一并进行描述。
42.在执行步骤s101之后,得到了本地的参数梯度,便可以执行步骤s103,以寻找邻居
节点进行组队。
43.在寻找邻居节点时,可以按照预设规则从邻居节点集合中选取出1个邻居节点。可以理解的是,步骤s103中描述的邻居节点集合,指的是对于本节点而言的邻居节点集合,即对于不同的节点而言,其邻居节点集合相应的不同。在实际应用中,可以在初始化阶段,为每一个节点建立该节点的拓扑信息表,拓扑信息表中便可以示出该节点的各个邻居节点,并且进行编号。
44.步骤s103中的预设规则的具体内容也可以根据实际需要进行设定和选取,例如在本发明的一种具体实施方式中,步骤s103可以具体包括:从邻居节点集合中随机选取出1个邻居节点,判断选取出的邻居节点当前是否处于组队状态。
45.该种实施方式中,是从邻居节点集合中随机选取出1个邻居节点,优点是实施方式较为简单,便于进行程序设计。当然,这样的实施方式容易出现重复选取同一邻居节点的情况,例如从邻居节点集合中随机选取出了邻居节点a,并且判断出邻居节点a当前处于组队状态,因此需要再次执行步骤s103,例如第二次随机选取时,仍然是选取出了邻居节点a,此时依然判断出邻居节点a当前处于组队状态,便需要第三次执行步骤s103,相当于第二次执行步骤s103时是一次无效操作,因此在实际应用中,更为常用的是后文描述的基于随机数进行循环选取的实施方式。
46.在执行步骤s103时,在按照预设规则从邻居节点集合中选取出1个邻居节点之后,需要判断选取出的邻居节点当前是否处于组队状态。
47.如果判断出选取出的邻居节点当前未处于组队状态,说明该邻居节点可以与本节点进行组队,因此,便可以执行步骤s104的操作,即,将自身设置为组队状态,并向邻居节点发起组队请求以使邻居节点将邻居节点自身设置为组队状态。
48.可以看出,在执行步骤s101之后,得到了本地的参数梯度,步骤s103描述的是本节点寻找邻居节点进行组队的过程,而本节点在执行步骤s103的过程中,随时都有可能接收到其他的邻居节点发起的组队请求。
49.也就是说,对于任意1个节点而言,在该节点执行步骤s103的过程中,如果还未找到邻居节点组队成功,则该节点便是未组队状态,如果未组队状态下接收到任意1个邻居节点的组队请求时,便可以将自身设置为组队状态,从而与发起组队请求的邻居节点进行组队,即在执行步骤s101之后,可以触发步骤s102的操作:当该节点自身在未组队状态下接收到任意1个邻居节点的组队请求时,将自身设置为组队状态。
50.在执行步骤s103时,在按照预设规则从邻居节点集合中选取出1个邻居节点之后,需要判断选取出的邻居节点当前是否处于组队状态。如果判断出选取出的邻居节点当前处于组队状态,说明该邻居节点当前已经组队成功了,无法与自身进行组队,本技术的方案中不会如传统方案中让该节点进行等待,而是会返回执行步骤s103的操作,即重新按照预设规则从邻居节点集合中选取出1个邻居节点,也即重新进行了邻居节点的选取。
51.本技术的方案中,通过判断选取出的邻居节点当前是否处于组队状态,实现了冲突感知,而重新选取邻居节点的操作,可以有效地避免冲突。因此,本技术的方案可以及时感知冲突并采取措施避免了冲突,即本技术方案是基于冲突感知的思想实现的。并且可以看出,由于本技术在选取出的邻居节点当前处于组队状态时,不会如传统的方案中进行等
待,而是会直接重新按照预设规则从邻居节点集合中选取出1个邻居节点,因此本技术的方案也不会产生死锁的情况,也就无需如传统方案中人为地将节点划分为主动组与被动组,因此本技术的方案可以适用各种拓扑类型,不会出现拓扑类型受限的情况。
52.步骤s105:在将自身设置为组队状态之后,基于本地的参数梯度以及与自身组队的邻居节点的参数梯度,进行梯度数据的同步。
53.当1个节点与其邻居节点组队成功时,这两个节点均会将自身设置为组队状态,即节点可以通过步骤s102的操作,在接收到其他邻居节点的组队请求时,将自身设置为组队状态,也可以通过步骤s104的操作,向邻居节点发起组队请求,并且将自身设置为组队状态。
54.两个组队的节点均为组队状态之后,二者均会基于本地的参数梯度以及与自身组队的邻居节点的参数梯度,进行梯度数据的同步。
55.进行梯度数据的同步的具体方式可以有多种,目前较为常用的方式是通过梯度平均化的方式进行梯度数据的同步。即在本发明的一种具体实施方式中,步骤s105中描述的基于本地的参数梯度以及与自身组队的邻居节点的参数梯度,进行梯度数据的同步,可以具体包括:基于本地的参数梯度以及与自身组队的邻居节点的参数梯度,通过梯度平均的方式进行梯度数据的同步。通过梯度平均的方式进行梯度数据的同步实施时较为简单方便。
56.步骤s106:在进行梯度数据的同步之后将自身恢复为未组队状态,并返回执行获取1个批次的训练样本并进行本地深度学习模型的训练的操作,直至模型训练结束。
57.对于任意1个节点而言,该节点在进行梯度数据的同步之后,便可以将自身恢复为未组队状态,进而返回执行步骤s101的操作,以重新获取1个批次的训练样本并进行本地深度学习模型的训练,直至模型训练结束。
58.判断模型训练是否结束的标准可以有多种,例如在本发明的一种具体实施方式中,模型训练结束的触发条件可以具体为:本地深度学习模型收敛,和/或进行本地深度学习模型的训练次数达到了设定的次数阈值。
59.该种实施方式中,考虑到本地深度学习模型收敛时,说明训练得到的本地深度学习模型达到了较好的学习效果,因此可以将其作为模型训练结束的触发条件,或者作为模型训练结束的触发条件之一。
60.此外,部分场合中,考虑到进行本地深度学习模型的训练次数达到了设定的次数阈值时,无论本地深度学习模型收敛,通常均可以结束训练,以避免过拟合,训练时长过长等问题。
61.在实际应用中,通常是将本地深度学习模型收敛,或者进行本地深度学习模型的训练次数达到了设定的次数阈值,作为模型训练结束的触发条件。当然,少部分场合中,可以根据实际需要,将二者同时满足作为模型训练结束的触发条件。
62.在本发明的一种具体实施方式中,步骤s103可以具体包括:使用随机数生成器生成k个互不相同的随机数;其中,k表示的是本节点的邻居节点总数量;设定k个随机数各自对应的邻居节点,且任意两个随机数对应的邻居节点互不相
同;按照从第1个随机数至第k个随机数的循环选取规则,进行随机数的选定,且每次选定1个随机数之后,将选定的随机数对应的邻居节点作为本次选取出的1个邻居节点,判断选取出的邻居节点当前是否处于组队状态。
63.在前文的实施方式中,描述了一种简单的邻居节点选取方式,即从邻居节点集合中随机选取出1个邻居节点。而该种实施方式中,基于随机数进行循环选取,可以保障尽快地选取出未组队状态的邻居节点。
64.具体的,可以使用随机数生成器生成k个互不相同的随机数,例如某个节点的邻居节点的数量为5,则生成5互不相同的随机数,例如生成的5个互不相同的随机数依次为50,10,20,40,30。
65.然后需要设定k个随机数各自对应的邻居节点,且任意两个随机数对应的邻居节点互不相同,例如设定随机数50,10,20,40,30各自对应该节点的第5邻居节点,第1邻居节点,第2邻居节点,第4邻居节点以及第3邻居节点。
66.之后是按照从第1个随机数至第k个随机数的循环选取规则,进行随机数的选定。即上述例子中,每次执行步骤s101之后,第一次执行步骤s103时,选定的随机数是50,便可以将选定的随机数50对应的第5邻居节点作为本次选取出的1个邻居节点,从而判断选取出的第5邻居节点当前是否处于组队状态。
67.如果第5邻居节点当前处于组队状态,则需要第二次执行步骤s103,此时,选定的便是第2个随机数,即按照上述例子,本次选定的随机数是10,便可以将选定的随机数10对应的第1邻居节点作为本次选取出的1个邻居节点,从而判断选取出的第1邻居节点当前是否处于组队状态。
68.需要指出的是,该种实施方式的预设规则,是按照从第1个随机数至第k个随机数的循环选取规则,循环选取的意思是在k个随机数均选取完毕之后,如果仍然未找到邻居节点进行组队,则可以重新从第1个随机数开始进行选取。例如上述例子中,在执行了5次步骤s103之后,均是判断选取出的邻居节点当前处于组队状态,因此第6次执行步骤s103时,选定的随机数是50,以此类推,直到某一次执行步骤s103时,选取出了1个邻居节点之后,判断出该邻居节点当前是否处于未组队状态,便可以执行步骤s104的操作。
69.进一步的,在本发明的一种具体实施方式中,上文描述的设定k个随机数各自对应的邻居节点,可以具体包括:针对任意1个随机数,将编号与该随机数的数值相同的邻居节点,作为设定的对应于该随机数的邻居节点;其中,k个随机数的取值均为正整数,且最小值为1,最大值为k,k个邻居节点的编号为1至k。
70.该种实施方式考虑到,在设定k个随机数各自对应的邻居节点时,如果直接将随机数的数值与邻居节点的编号进行对应,会较为简单方便,不容易出错,因此,针对任意1个随机数,可以直接将编号与该随机数的数值相同的邻居节点,作为设定的对应于该随机数的邻居节点。
71.当然,采用该种实施方式时,要求k个随机数的取值均为正整数,且最小值为1,最大值为k,并且k个邻居节点的编号为1至k。例如上文的例子中,生成的5个互不相同的随机数可以依次为5,1,2,4,3。该节点的5个邻居节点的编号也依次编号为1至5,从而使得与随
机数数值一致的邻居节点编号构成对应关系。
72.本技术的方案中,对于任意1个节点而言,在组队成功之后,需要将自身设置为组队状态,将自身设置为组队状态的具体实现方式可以有多种,例如在本发明的一种具体实施方式中,将自身设置为组队状态,可以具体包括:通过修改自身的组队标志位,并将队友节点编号设置为与自身组队的邻居节点的id,以将自身设置为组队状态。
73.该种实施方式中,每一个节点均需要设置自身的组队标志位,例如自身的组队标志位为1时,表示节点自身为组队状态,自身的组队标志位为0时,表示节点自身为未组队状态。可以看出,通过修改自身的组队标志位,将自身设置为组队状态,实施时较为方便。
74.此外,该种实施方式中,每一个节点均需要设置自身的队友节点编号,在自身为未组队状态时,自身的队友节点编号可以设置为空,而当组队成功之后,便可以将队友节点编号设置为与自身组队的邻居节点的id。此外可以理解的是,在组队结束之后,可以重新将自身的队友节点编号设置为空,且修改自身的组队标志位,例如上述例子中将自身的组队标志位修改为0。
75.相应的,在本发明的一种具体实施方式中,判断选取出的邻居节点当前是否处于组队状态,可以具体包括:通过选取出的邻居节点的组队标志位,判断选取出的邻居节点当前是否处于组队状态。
76.该种实施方式考虑到由于每一个节点均设置了自身的组队标志位,因此,通过选取出的邻居节点的组队标志位,便可与方便、快速地判断选取出的邻居节点当前是否处于组队状态。
77.在本发明的一种具体实施方式中,还可以包括:当失去与任意1个邻居节点的通信连接时,输出故障提示信息。
78.本技术的方案需要进行相邻节点之间的数据交互,因此,对于任意1个节点而言,当失去与任意1个邻居节点的通信连接时,可以输出故障提示信息,以便工作人员及时进行故障的处理。
79.进一步的,在本发明的一种具体实施方式中,还可以包括:当接收到第一指令时,将失去通信连接的邻居节点删除,并继续执行梯度数据的同步流程;当接收到第二指令时,暂停执行梯度数据的同步流程,直到与自身失去通信连接的邻居节点恢复正常。
80.该种实施方式考虑到,部分场合中,当集群中的1个或者多个节点故障时,并不会严重影响训练的进行,因此,当节点接收到第一指令时,可以将失去通信连接的邻居节点删除,并继续执行梯度数据的同步流程。也就是说,将失去通信连接的邻居节点,从自身的邻居节点集合中进行剔除,并且继续执行本技术的梯度数据的同步方法。工作人员可以通过上位机发送第一指令至各个节点,以使得故障节点的各个邻居节点在接收到第一指令之后,具将其从自身的邻居节点集合中进行剔除。
81.当然,部分场合中,工作人员也可以选择暂停训练,即节点如果接收到工作人员下发的第二指令时,便会暂停执行梯度数据的同步流程,直到进行了故障节点的修复,或者通信的修复之后,此前与自身失去通信连接的邻居节点恢复正常时,才会重新执行本技术的
梯度数据的同步方法。
82.进一步的,在实际应用中,还可以进行故障事件的记录,以便协助工作人员后续的故障分析、总结等工作。故障事件的记录中,可以记录下故障发生的时间,故障节点的id,故障类型等多方面的信息。
83.在本发明的一种具体实施方式中,在得到本地的参数梯度之后,还可以包括:判断各个邻居节点是否均得到了邻居节点自身的本地的参数梯度;如果是,则执行按照预设规则从邻居节点集合中选取出1个邻居节点的操作;如果否,则进行等待,直到确定出各个邻居节点均得到了邻居节点自身的本地的参数梯度。
84.本技术的方案中,每个节点均会进行本地的模型训练并且得到本地的参数梯度,该操作的耗时各个节点大体一致,即通常情况下,各个节点完成步骤s101的耗时相近,因此,在实际应用中,可以令各个节点在执行步骤s101之后,直接执行步骤s103和步骤s102的操作。
85.但是该种实施方式进一步的考虑到,少部分场合中,某个节点得到了本地的参数梯度之后,其各个邻居节点中,可能存在1个或者多个邻居节点仍然在执行步骤s101的操作,因此,为了保障后续进行有效的组队,不会出错,该种实施方式中,该节点会判断各个邻居节点是否均得到了邻居节点自身的本地的参数梯度。
86.如果各个邻居节点均得到了邻居节点自身的本地的参数梯度,便可以直接执行步骤s103的操作。反之,如果存在某个邻居节点未得到自身的本地的参数梯度的情况,该节点便会进行等待,直到确定出其各个邻居节点均得到了邻居节点自身的本地的参数梯度时,才会执行步骤s103的操作,以保障组队的有效进行。
87.并且需要说明的是,在进行等待的过程中,如果接收到了任意1个邻居节点发送的组队请求,则可以与其进行组队,即等待的过程可以不影响步骤s102的执行,以保障方案高效实施,也即保障了总体的训练效率。
88.应用本发明实施例所提供的技术方案,支持分布式的训练,即在迭代的过程中,任意1个节点均会获取1个批次的训练样本并进行本地深度学习模型的训练,得到本地的参数梯度。任意1个节点得到本地的参数梯度之后,均会按照预设规则从邻居节点集合中选取出1个邻居节点,判断选取出的邻居节点当前是否处于组队状态,如果选取出的邻居节点当前未处于组队状态,则说明可以与本节点进行组队,于是本节点会将自身设置为组队状态,同时,向邻居节点发起组队请求以使邻居节点将邻居节点自身设置为组队状态,从而成功地完成组队。而如果选取出的邻居节点当前处于组队状态时,本技术的方案并不会如传统的ad-psgd方法进行等待,而是会直接重新按照预设规则从邻居节点集合中选取出1个邻居节点,从而不会出现传统方案中由于等待导致通信开销增大的情况。此外,对于任意1个节点而言,该节点得到本地的参数梯度之后,如果自身在未组队状态下接收到任意1个邻居节点的组队请求时,便可以直接将自身设置为组队状态,使得自身与发起组队请求的该邻居节点组队成功。
89.组队成功之后,即任意1个节点在将自身设置为组队状态之后,便可以基于本地的参数梯度以及与自身组队的邻居节点的参数梯度,进行梯度数据的同步,在进行梯度数据的同步之后,可以重新将自身恢复为未组队状态,并返回执行获取1个批次的训练样本并进
行本地深度学习模型的训练的操作,直至模型训练结束。
90.并且可以看出,由于选取出的邻居节点当前处于组队状态时,本技术的方案并不会如传统的ad-psgd方法进行等待,而是会直接重新按照预设规则从邻居节点集合中选取出1个邻居节点,因此本技术的方案也不会产生死锁的情况,也就无需如传统方案中人为的将节点划分为主动组与被动组,因此本技术的方案可以适用各种拓扑类型,不会出现拓扑类型受限的情况。
91.综上所述,本技术的方案可以有效地实现去中心化的梯度数据同步,同时降低了通信开销,且提高了方案的应用范围,可以适用各种拓扑类型。
92.相应于上面的方法实施例,本发明实施例还提供了一种梯度数据的同步系统,可与上文相互对应参照。
93.参见图2所示,为本发明中一种梯度数据的同步系统的结构示意图,应用于分布式深度学习系统的各个节点中,包括:本地参数梯度确定模块201,用于获取1个批次的训练样本并进行本地深度学习模型的训练,得到本地的参数梯度;组队接收模块202,用于当自身在未组队状态下接收到任意1个邻居节点的组队请求时,将自身设置为组队状态;组队发起模块203,用于按照预设规则从邻居节点集合中选取出1个邻居节点,判断选取出的邻居节点当前是否处于组队状态;如果否,则触发请求模块204,如果是,则返回执行按照预设规则从邻居节点集合中选取出1个邻居节点的操作;请求模块204,用于将自身设置为组队状态,并向邻居节点发起组队请求以使邻居节点将邻居节点自身设置为组队状态;梯度数据同步模块205,用于在将自身设置为组队状态之后,基于本地的参数梯度以及与自身组队的邻居节点的参数梯度,进行梯度数据的同步;迭代模块206,用于在进行梯度数据的同步之后将自身恢复为未组队状态,并返回触发本地参数梯度确定模块,直至模型训练结束。
94.在本发明的一种具体实施方式中,组队发起模块203,具体用于:使用随机数生成器生成k个互不相同的随机数;其中,k表示的是本节点的邻居节点总数量;设定k个随机数各自对应的邻居节点,且任意两个随机数对应的邻居节点互不相同;按照从第1个随机数至第k个随机数的循环选取规则,进行随机数的选定,且每次选定1个随机数之后,将选定的随机数对应的邻居节点作为本次选取出的1个邻居节点,判断选取出的邻居节点当前是否处于组队状态。
95.在本发明的一种具体实施方式中,设定k个随机数各自对应的邻居节点,包括:针对任意1个随机数,将编号与该随机数的数值相同的邻居节点,作为设定的对应于该随机数的邻居节点;其中,k个随机数的取值均为正整数,且最小值为1,最大值为k,k个邻居节点的编号为1至k。
96.在本发明的一种具体实施方式中,组队发起模块203,具体用于:
从邻居节点集合中随机选取出1个邻居节点,判断选取出的邻居节点当前是否处于组队状态。
97.在本发明的一种具体实施方式中,梯度数据同步模块205具体用于:基于本地的参数梯度以及与自身组队的邻居节点的参数梯度,通过梯度平均的方式进行梯度数据的同步。
98.在本发明的一种具体实施方式中,将自身设置为组队状态,包括:通过修改自身的组队标志位,并将队友节点编号设置为与自身组队的邻居节点的id,以将自身设置为组队状态。
99.在本发明的一种具体实施方式中,判断选取出的邻居节点当前是否处于组队状态,包括:通过选取出的邻居节点的组队标志位,判断选取出的邻居节点当前是否处于组队状态。
100.在本发明的一种具体实施方式中,模型训练结束的触发条件为:本地深度学习模型收敛,和/或进行本地深度学习模型的训练次数达到了设定的次数阈值。
101.在本发明的一种具体实施方式中,还包括信息提示模块,用于:当失去与任意1个邻居节点的通信连接时,输出故障提示信息。
102.在本发明的一种具体实施方式中,还包括流程暂停模块,用于:当接收到第一指令时,将失去通信连接的邻居节点删除,并继续执行梯度数据的同步流程;当接收到第二指令时,暂停执行梯度数据的同步流程,直到与自身失去通信连接的邻居节点恢复正常。
103.在本发明的一种具体实施方式中,还包括记录模块,用于:进行故障事件的记录。
104.在本发明的一种具体实施方式中,还包括判断模块,用于:在本地参数梯度确定模块201得到本地的参数梯度之后,判断各个邻居节点是否均得到了邻居节点自身的本地的参数梯度;如果是,则触发组队发起模块203,如果否,则进行等待,直到确定出各个邻居节点均得到了邻居节点自身的本地的参数梯度。
105.相应于上面的方法和系统实施例,本发明实施例还提供了一种梯度数据的同步设备以及一种计算机可读存储介质,可与上文相互对应参照。
106.该梯度数据的同步设备可以应用于分布式深度学习系统的各个节点中,包括:存储器301,用于存储计算机程序;处理器302,用于执行计算机程序以实现如上述任一实施例中的梯度数据的同步方法的步骤。
107.该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述任一实施例中的梯度数据的同步方法的步骤。这里所说的计算机可读存储介质包括随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质。
108.还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
109.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
110.本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1