神经网络模型的训练方法、装置、系统及存储介质与流程



1.本技术实施例涉及人工智能(artificial intelligence,ai)技术领域,特别涉及一种神经网络模型的训练方法、装置、系统及存储介质。


背景技术:



2.随着ai技术的发展,神经网络模型的结构越来越复杂,在这种情况下,通过单台设备对神经网络模型进行训练时,可能会由于设备的图像处理单元(graphics processing unit,gpu)性能有限而导致无法完成训练。基于此,当前可以采用分布式训练系统对神经网络模型进行训练。
3.分布式训练系统通常包括多个训练节点,每个训练节点可以用于对神经网络模型中的一个或多个模型分段进行训练。以分布式训练系统包括4个训练节点,每个训练节点用于训练一个模型分段为例,这样,在前向传播的过程中,第一个训练节点通过第一个模型分段对输入的数据批进行处理,存储该第一个模型分段得到的该数据批的层间数据以供后续反向传播时使用,与此同时,输出第一个模型分段得到的该数据批的层间数据至第二个训练节点。第二个训练节点将第一个模型分段的层间数据作为第二个模型分段的输入数据,通过第二个模型分段对该层间数据进行处理,得到第二个模型分段对应的该数据批的层间数据,存储第二个模型分段对应的该数据批的层间据以供后续反向传播时使用,并将其输出至第三个训练节点,以此类推。最后一个训练节点在通过最后一个模型分段对自身的上一个训练节点输出的层间数据进行处理,输出最终的前向传播数据,将该最终的前向传播数据与数据批的标签进行对比,并使用损失函数计算损失,进而根据损失开始从第四个训练节点到第一个训练节点进行反向传播。在反向传播的过程中,当某个训练节点完成了针对该数据批的反向传播,则可以将自身存储的在前向传播中存储的该数据批的层间数据删除。
4.然而,当前为了提高训练节点中的gpu资源的利用率,可以同时通过多个数据批对神经网络模型的各个模型分段进行训练。也即,第一个训练节点上的第一个模型分段在完成对一个数据批的处理之后,无需等待针对该数据批的反向传播完成,即可以对下一个数据批进行处理。这样,各个训练节点上针对不同数据批的前向传播和反向传播的进度不一样,其中,越靠前的模型分段所在的训练节点,gpu的内存中存储的层间数据越多,这样,将导致各个训练节点的内存负载不平衡。尤其是靠前的模型分段所在的训练节点,gpu的内存中存储的数据量可能会很快达到内存的上限值,无法再继续输入新的数据批进行训练,从而使得该分布式训练系统的吞吐量受限。


技术实现要素:



5.本技术实施例提供了一种神经网络模型的训练方法、装置及存储介质,能够使得分布式训练系统中各个训练节点中的gpu的内存负载更平衡。所述技术方案如下:
6.第一方面,提供了一种神经网络模型的训练方法,应用于第一训练节点,所述第一
训练节点为分布式训练系统中的多个训练节点中的一个训练节点,所述多个训练节点中的每个训练节点上部署有神经网络模型的一个或多个模型分段,所述方法包括:获取模型分段更新信息,所述模型分段更新信息是在所述多个训练节点上的当前模型分段不平衡的情况下确定的用于重新对所述神经网络模型进行分段的信息;如果根据所述模型分段更新信息确定第一模型分段为待更新的模型分段,则根据所述模型分段更新信息对所述第一模型分段进行调整,所述第一模型分段为所述第一训练节点上的当前模型分段;确定调整后的第一模型分段内的各个层的层间数据的存储管理策略;根据所述调整后的第一模型分段和确定的各个层的层间数据的存储管理策略进行训练。
7.在本技术实施例中,当多个训练节点上的当前模型分段不平衡时,训练节点可以根据模型分段更新信息对自身上部署的待更新的模型分段进行调整,以使得各个训练节点上的模型分段能够更优。在调整模型分段之后,根据调整后的模型分段来确定层间数据的存储管理策略。由于训练节点的内存负载主要取决于其上所部属的模型分段以及模型分段的层间数据的存储管理,因此,本技术实施例通过调整模型分段并对调整后的模型分段的层间数据的存储管理策略进行设置,可以使得各个训练节点上的内存负载更平衡,从而提升该分布式训练系统的吞吐量。
8.可选地,当所述第一训练节点为所述神经网络模型的最后一个模型分段所在的训练节点时,在获取模型分段更新信息之前,第一训练节点获取所述神经网络模型的各个当前模型分段的分段执行时间;如果任意两个当前模型分段的分段执行时间的差值大于时间差阈值,则确定所述多个训练节点上的当前模型分段不平衡。
9.也即,当第一训练节点为多个训练节点中的最后一个训练节点时,可以由第一训练节点根据当前的各个模型分段的分段执行时间来确定多个训练节点上的当前模型分段是否平衡。其中,分段执行时间是指执行一个模型分段所需的时长。
10.可选地,当第一训练节点为多个训练节点中的最后一个训练节点时,所述获取模型分段更新信息的实现过程为:根据所述神经网络模型中多个层的执行顺序,将所述神经网络模型中的多个层划分为多个簇,所述多个簇中的每个簇包括簇起始层、簇中间层和簇终止层,所述簇起始层的输出数据为多个簇中间层的输入数据,所述簇终止层的输入数据为多个簇中间层的输出数据;根据预设的模型分段数量,对划分得到的多个簇进行划分,得到多个更新模型分段,其中,每个更新模型分段包括一个或多个簇;根据所述多个更新模型分段,生成模型分段更新信息。
11.在本技术实施例中,当第一训练节点为最后一个训练节点时,第一训练节点在确定多个训练节点上的当前模型分段不平衡时,可以对神经网络模型进行重新划分,以使得模型分段更优。
12.可选地,如果第一训练节点不为多个训练节点中的最后一个训练节点,则可以接收最后一个训练节点下发的模型分段更新信息。
13.可选地,所述模型分段更新信息用于指示每个训练节点上的更新模型分段,在获取模型分段更新信息之后,如果所述第一训练节点上的当前模型分段与所述模型分段更新信息所指示的所述第一训练节点上的更新模型分段不一致,则根据所述模型分段更新信息,从所述第一训练节点上的各个当前模型分段中确定待更新的模型分段。
14.也即,第一训练节点可以根据模型分段更新信息来判断自身当前部署的模型分段
是否需要更新,如果需要更新,则可以根据该模型分段更新信息确定出待更新的模型分段。
15.可选地,所述根据所述模型分段更新信息对所述第一模型分段进行调整的实现过程包括:如果根据所述模型分段更新信息确定所述第一模型分段中存在待迁移层,则向目标训练节点发送迁移准备通知,以使所述目标训练节点根据所述迁移准备通知生成所述待迁移层的初始化层,所述目标训练节点是指所述待迁移层所要迁移至的训练节点;在接收到所述目标训练节点的准备完成通知,且当前正在进行的前向传播完成后,将所述待迁移层对应的多个数据批的层间数据中的指定数据批的层间数据发送至所述目标训练节点,并在当前正在进行的反向传播完成后,将所述待迁移层的更新参数发送至所述目标训练节点,所述指定数据批是指所述目标训练节点中还未完成反向传播的数据批;删除所述待迁移层。
16.也即,在本技术实施例中,可以在训练的过程中进行层的迁移,从而实现对模型分段的调整优化,换句话说,在对模型分段中的层进行迁移时,不会阻塞训练执行,也即,各个训练节点的前向传播和反向传播不会因为层迁移而产生明显的停止,这样,即不会降低训练系统的训练吞吐量,保证了训练的效率。
17.另外,由于可以在训练的过程进行层迁移,所以,本技术实施例还可以应用于以神经网络结构搜索(neural architecture search,nas)为代表的动态模型训练过程中。例如,当在训练过程中神经网络模型的结构发生变化时,如增加层或删除层时,增加层或删除层的模型分段的分段执行时间也将发生变化,在这种情况下,最后一个训练节点根据模型分段的分段执行时间将能够确定多个训练节点上的模型分段不平衡,这样,即可以通过本技术实施例中的方法来对模型分段进行调整,进而对gpu的内存进行优化。由此可见,本技术实施例提供的技术方案还能够解决动态模型训练过程中gpu的内存负载不平衡加剧的问题,从而提高分布式训练系统的吞吐量。
18.可选地,所述存储管理策略包括交换策略和重算策略,所述交换策略是指在前向传播时将产生的层间数据暂存至中央处理单元cpu的内存中以供反向传播时读取,所述重算策略是指不对层间数据进行存储,在反向传播时重新计算层间数据,所述确定调整后的第一模型分段内的各个层的层间数据的存储管理策略的实现过程可以包括:根据调整后的第一模型分段判断是否对所述第一训练节点进行存储优化;如果确定对所述第一训练节点进行存储优化,则根据调整后的第一模型分段内的各个层的交换开销和重算开销,对调整后的第一模型分段内的多个层的层间数据的存储管理策略进行重置,所述交换开销是指采用所述交换策略对相应层的层间数据进行管理时所对应的时间开销,所述重算开销是指采用所述重算策略对相应层的层间数据进行管理时所对应的时间开销。
19.在本技术实施例中,通过对调整后的第一模型分段的各个层的层间数据的存储管理策略进行重置,可以对第一模型分段所在的第一gpu的内存进行优化,从而降低由于gpu的内存负载不平衡所带来的对系统吞吐量的影响。
20.可选地,所述根据调整后的第一模型分段判断是否对所述第一训练节点进行存储优化的实现过程包括:如果调整后的第一模型分段所需的运行内存大小不小于第一图形处理单元gpu的内存的上限值,则确定对所述第一训练节点进行存储优化,所述第一gpu是指运行调整后的第一模型分段的gpu。
21.如果调整后的第一模型分段所需的运行内存大小不小于第一gpu的内存的上限
值,则说明该第一gpu的内存已满,此时,即需要对该第一gpu的内存进行存储优化。
22.可选地,如果调整后的第一模型分段所需的运行内存大小小于所述第一gpu的内存的上限值,且调整后的第一模型分段的多个层中存在层间数据的存储管理策略为所述重算策略的层,则确定对所述第一训练节点进行存储优化,所述第一gpu是指运行调整后的第一模型分段的gpu。
23.可选地,所述根据调整后的第一模型分段内的各个层的交换开销和重算开销,对调整后的第一模型分段内的多个层的层间数据的存储管理策略进行重置的实现过程包括:按照调整后的第一模型分段内的各个层的交换开销和重算开销之间的开销比值从大到小的顺序,对调整后的第一模型分段内的各个层进行排序;将排序后的多个层中的第一个待重置层的层间数据的存储管理策略重置为所述交换策略;如果已重置为所述交换策略的层的交换开销总和小于时长阈值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为所述交换策略,直至已重置为所述交换策略的层的交换开销总和不小于所述时长阈值为止,判断调整后的第一模型分段所需的运行内存大小是否小于第一gpu的内存的上限值;如果调整后的第一模型分段所需的运行内存大小不小于所述第一gpu的内存的上限值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为所述重算策略,直至调整后的第一模型分段所需的运行内存大小小于所述第一gpu的内存的上限值为止。
24.第二方面,提供了一种神经网络模型的训练装置,所述神经网络模型的训练装置具有实现上述第一方面中神经网络模型的训练方法行为的功能。所述神经网络模型的训练装置包括至少一个模块,该至少一个模块用于实现上述第一方面所提供的神经网络模型的训练方法。
25.第三方面,提供了一种神经网络模型的训练装置,所述神经网络模型的训练装置的结构中包括处理器和存储器,所述存储器用于存储支持神经网络模型的训练装置执行上述第一方面所提供的神经网络模型的训练方法的程序,以及存储用于实现上述第一方面所提供的神经网络模型的训练方法所涉及的数据。所述处理器被配置为用于执行所述存储器中存储的程序。
26.第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的神经网络模型的训练方法。
27.第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的神经网络模型的训练方法。
28.上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
29.本技术实施例提供的技术方案带来的有益效果至少包括:
30.在本技术实施例中,当多个训练节点上的当前模型分段不平衡时,训练节点可以根据模型分段更新信息对自身上部署的待更新的模型分段进行调整,以使得各个训练节点上的模型分段能够更优。在调整模型分段之后,根据调整后的模型分段来确定层间数据的存储管理策略。由于训练节点的内存负载主要取决于其上所部属的模型分段以及模型分段的层间数据的存储管理,因此,本技术实施例通过调整模型分段并对调整后的模型分段的
层间数据的存储管理策略进行设置,可以使得各个训练节点上的内存负载更平衡,从而提升该分布式训练系统的吞吐量。
附图说明
31.图1是本技术实施例提供的一种通过多个数据批对分布式训练系统中多个训练节点上的模型分段进行训练的示意图;
32.图2是本技术实施例提供的一种分布式训练系统的架构图;
33.图3是本技术实施例提供的一种计算机设备的结构示意图;
34.图4是本技术实施例提供的一种神经网络模型的训练方法的流程图;
35.图5是本技术实施例提供的一种簇的示意图;
36.图6是本技术实施例提供的一种训练节点之间进行层迁移的示意图;
37.图7是本技术实施例提供的一种模型分段之间进行层迁移时的数据传输示意图;
38.图8是本技术实施例提供的一种神经网络模型的训练装置的结构示意图。
具体实施方式
39.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
40.在对本技术实施例进行详细的解释说明之前,先对本技术实施例所涉及的应用场景予以介绍。
41.当前,在分布式训练系统中,可以同时通过多个数据批对各个训练节点上的神经网络模型的模型分段进行训练。其中,一个数据批包括多个样本数据。
42.例如,参见图1,假设分布式训练系统中包括4个训练节点,每个训练节点包括一个gpu,每个gpu上部署有神经网络模型的一个模型分段。当向训练节点1输入数据批1时,训练节点1通过自身上的模型分段1对该数据批1进行处理,将该数据批1的层间数据存储至自身的gpu的内存中以供反向传播时使用,并输出数据批1对应的层间数据至训练节点2。之后,训练节点1无需等待针对数据批1的反向传播完成即可以继续接收数据批2,并通过自身上的模型分段对该数据批2进行处理。训练节点2在接收到训练节点1处理得到的数据批1的层间数据之后,通过自身的模型分段2对接收到的数据批1的层间数据进行处理,以得到自身针对数据批1的层间数据,将该层间数据存储至自身的gpu的内存中,并输出该层间数据至训练节点3,以此类推。同样的,训练节点2也无需等待针对数据批1的反向传播完成即可以对训练节点1发送的数据批2的层间数据进行处理。
43.而对于训练节点4而言,当其对训练节点3输出的某个数据批的层间数据进行处理后,可以得到相应数据批对应的前向传播输出数据,从而完成针对该数据批的前向传播。之后,将该前向传播输出数据与该数据批的标签进行比较,以计算损失,进而根据损失按照从后向前的方向开始反向传播。其中,训练节点4在开始针对该数据批的反向传播后,可以从自身的gpu的内存中获取存储的该数据批的层间数据,根据获取的层间数据生成模型参数更新所需的梯度值,根据该梯度值对自身的模型分段的参数进行更新,将该梯度值传输至训练节点3,之后,训练节点4删除自身的gpu内存中存储的该数据批的层间数据。训练节点3在接收到训练节点4发送的梯度值之后,同样从自身的gpu的内存中获取存储的该数据批的
层间数据,并根据接收到的梯度值和获取的层间数据,生成自身的梯度值以对自身的模型分段的参数进行更新,删除自身存储的该数据批的层间数据,并将生成的梯度值传输至训练节点2,以此类推。
44.这样,如图1中所示,当训练节点1中的模型分段在进行数据批7的前向传播时,由于该训练节点1仅完成了针对数据批1至3的反向传播,所以,该训练节点1的gpu的内存中将存储有数据批4至6的层间数据,并且,数据批7的层间数据也正在使用该训练节点1的gpu的内存。同时,由于此时训练节点2仅完成了针对数据批1至3的反向传播,数据批7的前向传播还未开始,数据批5和6的反向传播也未开始,所以,训练节点2将存储有数据批5和6的层间数据,并且,由于正在进行针对数据批4的反向传播,所以,数据批4的层间数据正在使用该训练节点2的gpu的内存。同理,训练节点3中存储有数据批5的层间数据,并且,数据批6的层间数据也正在使用该训练节点3的gpu的内存。训练节点4中则只有数据批5的层间数据在使用其gpu的内存。由此可见,在同时使用多个数据批对各个训练节点上的神经网络模型的模型分段进行训练时,各个训练节点上针对不同数据批的前向传播和反向传播的进度不一样,其中,越靠前的模型分段所在的训练节点上的gpu的内存负载越高。这样,第一个模型分段所在的训练节点的gpu的内存负载可能会很快达到上限,从而导致无法再注入新的数据批进行训练。如此,其他训练节点上的gpu的资源可能会无法得到有效利用,从而使得分布式训练系统的吞吐量受限。基于此,本技术实施例提出了一种神经网络模型的训练方法,以对上述场景中存在的内存负载不平衡的问题进行优化。
45.需要说明的是,在某些场景中,通过分布式训练系统对神经网络模型进行训练时,神经网络模型的结构有可能会变化,例如,在以神经网络结构搜索(neural architecture search,nas)为代表的动态模型训练过程中,可能会对神经网络模型中的一些层进行删除,或插入一些新的层,这样,将会加剧各个训练节点的内存负载不平衡的问题。对于这种情况,也可以通过本技术实施例提供的方法来改善内存负载不平衡的现象,以提升分布式训练系统的吞吐量。
46.接下来对本技术实施例涉及的系统架构进行介绍。
47.图2是本技术实施例提供的一种分布式训练系统的结构示意图。如图2所示,该分布式训练系统中包括多个训练节点,图2中以包括4个训练节点201至204为例。其中,每个训练节点上可以部署有神经网络模型中的一个或多个模型分段,并且,各个训练节点按照部署的模型分段的执行顺序连接。其中,该连接可以是指有线通信连接,也可以是指无线通信连接。
48.例如,参见图2,训练节点201上部署有模型分段1-3,训练节点202上部署有模型分段4-5,训练节点203上部署有模型分段6,训练节点204上部署有模型分段7-8。
49.这样,首先向训练节点201上的模型分段1输入目标数据批,训练节点201的模型分段1对该目标数据批进行处理后将该目标数据批的层间数据传输至模型分段2进行处理,以此类推,最终,训练节点201输出自身针对目标数据批的层间数据至训练节点202。训练节点202上的模型分段4对接收到的目标数据批的层间数据进行处理,将处理得到的层间数据传输至模型分段5进行处理,最终,训练节点202输出目标数据批的层间数据至训练节点203,以此类推。
50.其中,训练节点204在得到目标数据批的最终输出数据之后,根据该最终输出数据
开始对该目标数据批的反向传播,本技术实施例在此不再赘述。
51.其中,对于多个训练节点中的每个训练节点,在针对某个数据批进行前向传播和/或反向传播的过程中,均可以通过本技术实施例提供的方法来对自身的gpu的内存负载进行优化。
52.需要说明的是,在本技术实施例中,每个训练节点上可以包括一个或多个gpu,且每个gpu可以运行一个模型分段,本技术实施例对此不做限定。
53.另外,在本技术实施例中,每个训练节点可以为一个单独的硬件设备,例如,每个训练节点为一个计算机设备,本技术实施例对此不做限定。
54.图3是本技术实施例提供的一种计算机设备的结构示意图。图2所示的系统架构中的训练节点即能够通过图3中所示的计算机设备来实现。参见图3,该计算机设备包括处理器301、通信总线302、存储器303以及一个或多个通信接口304。
55.其中,处理器301包括一个通用中央处理器(central processing unit,cpu)、一个或多个gpu,除此之外,该处理器301还可以包括网络处理器(network processor,np)、微处理器、或者可以是一个或多个集成电路,例如,专用集成电路(application-specific integrated circuit,asic)、可编程逻辑器件(programmable logic device,pld)或其组合。上述pld可以是复杂可编程逻辑器件(complex programmable logic device,cpld)、现场可编程逻辑门阵列(field-programmable gate array,fpga)、通用阵列逻辑(generic array logic,gal)或其任意组合。
56.通信总线302用于在上述组件之间传送信息。通信总线302可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
57.存储器303可以是只读存储器(read-only memory,rom),也可以是随机存取存储器(random access memory,ram),也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、光盘(包括只读光盘(compact disc read-only memory,cd-rom)、压缩光盘、激光盘、数字通用光盘、蓝光光盘等)、磁盘存储介质或者其它磁存储设备,或者是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。在本技术实施例中,存储器303包括cpu的内存和gpu的内存,其中,存储器303可以是独立存在,并通过通信总线302与处理器301相连接。存储器303也可以和处理器301集成在一起。
58.通信接口304使用任何收发器一类的装置,用于与其它设备或通信网络通信。通信接口304包括有线通信接口,还可以包括无线通信接口。其中,有线通信接口例如可以为以太网接口。以太网接口可以是光接口,电接口或其组合。无线通信接口可以为无线局域网(wireless local area networks,wlan)接口,蜂窝网络通信接口或其组合等。
59.在一些实施例中,该计算机设备可以包括多个处理器,如图3中所示的处理器301和处理器305。这些处理器中的每一个可以是一个单核处理器,也可以是一个多核处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(如计算机程序指令)的处理核。
60.在具体实现中,作为一种实施例,该计算机设备还可以包括输出设备306和输入设备307。输出设备306和处理器301通信,可以以多种方式来显示信息。例如,输出设备306可
以是液晶显示器(liquid crystal display,lcd)、发光二级管(light emitting diode,led)显示设备、阴极射线管(cathode ray tube,crt)显示设备或投影仪(projector)等。输入设备307和处理器301通信,可以以多种方式接收用户的输入。例如,输入设备307可以是鼠标、键盘、触摸屏设备或传感设备等。
61.在一些实施例中,存储器303用于存储执行本技术方案的程序代码,处理器301可以执行存储器303中存储的程序代码。该程序代码中可以包括一个或多个软件模块,该网络设备可以通过处理器301以及存储器303中的程序代码,来实现下文图4实施例提供的神经网络模型的训练方法。
62.接下来对本技术实施例提供的神经网络模型的训练方法进行介绍。
63.图4是本技术实施例提供的一种神经网络模型的训练方法的流程图,该方法可以应用于第一训练节点中,该第一训练节点为分布式训练系统中的一个训练节点,例如,可以是图2所示的训练节点中一个,参见图4,该方法包括以下步骤:
64.步骤401:获取模型分段更新信息,该模型分段更新信息是在多个训练节点上的当前模型分段不平衡的情况下确定的用于重新对神经网络模型进行分段的信息。
65.在本技术实施例中,如果第一训练节点为神经网络模型的最后一个模型分段所在的节点,也即,如果第一训练节点为多个训练节点中的最后一个训练节点,则第一训练节点首先判断多个训练节点上的当前模型分段是否平衡,如果确定多个训练节点上的当前模型分段不平衡,则第一训练节点生成模型分段更新信息。其中,该当前模型分段是指各个训练节点上当前部署的模型分段。
66.其中,第一训练节点可以获取神经网络模型的各个当前模型分段的分段执行时间;如果任意两个当前模型分段的分段执行时间的差值大于时间差阈值,则确定多个训练节点上的当前模型分段不平衡。
67.需要说明的是,位于第一训练节点之前的各个训练节点可以获取自身所运行的当前模型分段中的各个层的执行时间,之后,将获取到的各个层的执行时间发送至第一训练节点。
68.例如,对于任一训练节点,该训练节点可以记录自身模型分段中的每个层的开始执行时间和结束执行时间,计算结束执行时间和开始执行时间之间的时间差,将该时间差作为相应层的执行时间。
69.另外,各个训练节点可以在前向传播的过程中将各自的当前模型分段中各个层的执行时间发送至第一训练节点。例如,第一个训练节点将自身运行的模型分段中的各个层的执行时间发送至第二个训练节点。第二个训练节点在获取到自身运行的模型分段中的各个层的执行时间之后,将第一个训练节点中的模型分段的各个层的执行时间和自身运行的模型分段中的各个层的执行时间发送至第三个训练节点,以此类推,第一训练节点可以接收前一个训练节点发送的位于该第一训练节点之前的各个训练节点上运行的模型分段中的各个层的执行时间。
70.之后,对于任一训练节点上的任一个模型分段,第一训练节点计算接收到的该训练节点上的该模型分段中的各个层的执行时间的总和,得到该模型分段的分段执行时间。通过上述方式,第一训练节点可以计算得到包括自身在内的各个训练节点上当前部署的各个模型分段的分段执行时间。
71.在得到各个训练节点上各个当前模型分段的分段执行时间之后,第一训练节点可以将任意两个当前模型分段的分段执行时间进行比较,如果存在某两个当前模型分段的分段执行时间之间的差值大于时间差阈值,则确定多个训练节点上的当前模型分段不平衡。其中,该时间差阈值为一个预设的时间差值,例如,该时间差阈值可以为0。
72.在确定多个训练节点上的模型分段不平衡之后,第一训练节点可以对该神经网络模型进行重新分段,从而生成模型分段更新信息其中,该模型分段更新信息用于指示每个训练节点上的更新模型分段。
73.示例性地,第一训练节点根据神经网络模型中多个层的执行顺序,将神经网络模型中的多个层划分为多个簇,多个簇中的每个簇包括簇起始层、簇中间层和簇终止层,其中,簇起始层的输出数据为多个簇中间层的输入数据,簇终止层的输入数据为多个簇中间层的输出数据;根据预设的模型分段数量,对划分得到的多个簇进行划分,得到多个更新模型分段,其中,每个更新模型分段包括一个或多个簇;根据多个更新模型分段,生成模型分段更新信息。
74.其中,第一训练节点首先根据神经网络模型中多个层的执行顺序对该多个层进行排序。之后,从第一个层开始对依次各个层进行遍历,如果某个层的输出数据为多个层的输入数据,则将这个层作为一个簇的簇起始层,并从该簇起始层开始依次判断接下来的各个层是否为这个簇的簇终止层。如果接下来的某个层的输入数据为多个,则可以将这个层作为这个簇的簇终止层,或者,如果接下来的某个层的输入数据为多个,且这个层的输出数据是下一个层的唯一输入数据,则将这个层作为这个簇的簇终止层,这样,由该簇起始层、簇终止层以及位于二者之间的簇中间层即可以构成一个簇。之后,第一训练节点可以从这个簇终止层的下一个层开始,继续查下一个簇的簇起始层,以此类推,直到遍历完所有的层为止,以得到多个簇。
75.例如,参见图5,神经网络模型的多个层被划分为了2个簇,其中,每个簇的簇起始层和簇终止层之间包括多个分支层,这些分支层即为簇中间层。
76.可选地,在依次遍历各个层时,在一个簇开始层之前可能存在不为簇终止层的一个或多个层,或者,在一个簇终止层之后可能存在不为簇开始层的一个或多个层,在这种情况下,可以将这些层作为一个簇。
77.在划分得到多个簇之后,第一训练节点可以根据预设的模型分段数量,对该多个簇进行划分,从而得到多个更新模型分段。其中,预设的模型分段数量可以等于多个训练节点上的当前模型分段的总数量。
78.示例性地,假设预设的模型分段数量为k,第一训练节点首先可以计算每个簇内包含的层的执行时间总和,得到每个簇的执行时间。之后,第一训练节点可以根据每个簇的执行时间,按照多个簇中的层的执行顺序,对多个簇进行划分,得到一种或多种划分方案,其中,每种划分方案内均包括k个模型分段。且每种划分方案内任意两个模型分段的执行时间的差值均不大于前述的时间差阈值。各个模型分段的执行时间等于相应模型分段内的簇的执行时间总和。
79.如果第一训练节点得到的是一种划分方案,则可以直接将该种方案中的k个模型分段作为划分得到的多个更新模型分段。
80.如果第一训练节点得到的是多种划分方案,则第一训练节点可以计算每种划分方
案中的k个模型分段中每相邻的两个模型分段之间的通信开销。之后,根据每种划分方案中k个模型分段中每相邻的两个模型分段之间的通信开销,确定每种划分方案对应的总通信开销。将总通信开销最小的划分方案包括的k个模型分段作为划分得到的多个更新模型分段。
81.在得到多个更新模型分段之后,第一训练节点可以根据多个更新模型分段生成模型分段更新信息。
82.其中,第一训练节点可以根据各个训练节点上部署的当前模型分段的数量,按照多个更新模型分段的先后顺序以及多个训练节点的顺序,确定多个更新模型分段中的每个更新模型分段所对应的训练节点。之后,对于每个更新模型分段,第一训练节点可以根据模型分段中包含的簇,获取相应模型分段中的各个层的层标识。根据每个更新模型分段、对应的训练节点和包含的各个层的层标识生成模型分段更新信息。其中,该模型分段更新信息中可以包括每个更新模型分段对应的训练节点和包含的层的层标识。例如,参见表1,该模型分段更新信息可以包括更新模型分段、训练节点、包含的各个层的层标识之间的映射关系。
83.表1模型分段更新信息
84.更新模型分段训练节点层更新模型分段1训练节点1(a,b,c,d)更新模型分段2训练节点1(e,f,g,h,i)更新模型分段3训练节点2(j,k,l,m)..................
85.上述仅是本技术实施例给出的一种可能的模型分段更新信息的实现方式,可选地,该模型分段更新信息也可以以其他组织形式下发给其他训练节点,本技术实施例对此不做限定。
86.第一训练节点在生成模型分段更新信息之后,一方面,该第一训练节点可以执行下述步骤402-404,另一方面,可以沿着反向传播时的路径,将该模型分段更新信息下发至位于该第一训练节点之前的每个训练节点,以便各个训练节点根据该模型分段更新信息来确定是否对自身的模型分段进行更新。
87.需要说明的是,在本技术实施例中,第一训练节点在确定多个训练节点上的当前模型分段不平衡之后,第一训练节点还可以继续判断当前各个训练节点中是否有正在进行模型分段调整的节点,如果存在正在进行模型分段调整的节点,则第一训练节点可以不对神经网络模型重新进行分段,而是继续根据当前模型分段进行训练。
88.上述介绍了当第一训练节点为神经网络模型的最后一个模型分段所在的节点时,第一训练节点获取该模型分段更新信息的实现方式。可选地,当第一训练节点不为神经网络模型的最后一个模型分段所在的节点,也即,第一训练节点不为多个训练节点中的最后一个节点,而是除最后一个训练节点中的任一个训练节点时,第一训练节点可以接收最后一个训练节点下发的模型分段更新信息。
89.步骤402:如果根据模型分段更新信息确定第一模型分段为待更新的模型分段,则根据模型分段更新信息对第一模型分段进行调整,第一模型分段为第一训练节点上的当前模型分段。
90.由于模型分段更新信息能够指示出每个训练节点上的更新模型分段,所以,在获取到模型分段更新信息之后,第一训练节点可以首先根据该模型分段更新信息确定自身当前部署的模型分段中是否存在需要进行更新的模型分段,也即,判断是否存在待更新的模型分段。如果第一训练节点上的当前模型分段与模型分段更新信息所指示的第一训练节点上的更新模型分段不一致,则根据该模型分段更新信息,从第一训练节点上的各个当前模型分段中确定待更新的模型分段。
91.由前述步骤402中的介绍可知,模型分段更新信息中可以包括每个更新模型分段对应的训练节点和包含的层的层标识。基于此,在本步骤中,第一训练节点可以根据从模型分段更新信息中获取自身的节点标识所对应的各个更新模型分段包含的层的层标识,之后,第一训练节点将各个更新模型分段中的包含的层的层标识与自身上当前部署的各个模型分段内包含的层的层标识一一进行比对,如果存在不一致,则第一训练节点可以根据不一致的层标识,确定自身当前部署的模型分段中待更新的模型分段,也即,第一模型分段。
92.示例性地,第一训练节点上当前部署有两个模型分段,按照执行顺序分别为模型分段1和模型分段2。第一训练节点从模型分段更新信息中获取到的自身对应的更新模型分段也为两个,按照执行先后顺序分别为模型分段1a和2a。在这种情况下,第一训练节点首先将模型分段1a中包含的各个层的层标识与模型分段1中包含的各个层的层标识进行比对,如果二者中存在不一致的层标识,则说明模型分段1为待更新的模型分段。同理,第一训练节点可以比较模型分段2和更新模型分段2a,以此来确定模型分段2是否为待更新的模型分段。当然,如果模型分段1中包含的各个层的层标识与模型分段1a中包含的各个层的层标识完全一致,则说明该模型分段1无需进行更新。
93.如果通过上述方法确定出第一训练节点上不存在待更新的模型分段,则第一训练节点可以不执行后续步骤,而是继续根据当前的模型分段进行训练。
94.如果通过上述方法确定出第一训练节点上存在待更新的第一模型分段,则第一训练节点可以根据该模型分段更新信息对该第一模型分段进行调整。
95.其中,第一训练节点首先可以根据该模型分段更新信息确定第一模型分段中是否存在待迁移层,如果存在待迁移层,则向目标训练节点发送迁移准备通知,以使目标训练节点根据迁移准备通知生成待迁移层的初始化层,目标训练节点是指待迁移层所要迁移至的训练节点;在接收到目标训练节点的准备完成通知,且当前正在进行的前向传播完成后,将待迁移层对应的多个数据批的层间数据中的指定数据批的层间数据发送至目标训练节点,并在当前正在进行的反向传播完成后,将待迁移层的更新参数发送至目标训练节点,指定数据批是指目标训练节点中还未完成反向传播的数据批;删除该待迁移层。
96.需要说明的是,待更新的第一模型分段可能是需要将自身包含的层迁移至其他模型分段中,也可能是需要接收从其他模型分段中迁移过来的层。基于此,在本技术实施例中,第一训练节点首先根据模型分段更新信息确定第一模型分段中是否包含有待迁移的层,该待迁移的层即为需要迁移到其他模型分段中的层。
97.其中,第一训练节点可以将第一模型分段与第一模型分段对应的更新模型分段进行比较,如果第一模型分段中存在对应的更新模型分段中不包含的目标层,则说明该目标层为待迁移层,此时,第一训练节点可以从模型分段更新信息中查包含该目标层的更新模型分段所对应的训练节点,并将查到的训练节点确定为该待迁移层所要迁移至训练节
点,也即目标训练节点。其中,第一模型分段对应的更新模型分段是指与第一模型分段进行比较从而确定出第一模型分段为待更新的模型分段的更新模型分段。
98.在确定出目标训练节点之后,如果该目标训练节点和第一训练节点不是同一个节点,则第一训练节点向该目标训练节点发送迁移准备通知,以通知目标训练节点准备接收该待迁移层。其中,该迁移准备通知可以携带有待迁移层的初始结构参数。目标训练节点在接收到该迁移准备通知之后,根据其中携带的待迁移层的初始结构参数,生成该待迁移层的初始化层,也即,对该待迁移层的结构进行初始化。之后,目标训练节点向第一训练节点反馈准备完成通知,以通知第一训练节点自身已准备好接收该待迁移层。
99.第一训练节点在接收到准备完成通知之后,开始对待迁移层进行迁移。其中,如果第一训练节点当前有正在进行的针对某个数据批的前向传播的运算,则第一训练节点可以在当前正在进行的前向传播完成之后,将待迁移层已处理得到的多个数据批的层间数据中指定数据批的层间数据传输至目标训练节点。其中,该指定数据批是指目标训练节点中还未完成反向传播的数据批。与此同时,如果第一训练节点当前有正在进行的针对某个数据批的反向传播的运算,则第一训练节点可以在当前正在进行的反向传播结束之后,将待迁移层的更新参数发送至目标训练节点。之后,第一训练节点立即删除待迁移层。如此,调整后的第一模型分段下一次进行的针对下一个数据批的前向传播的运算将不包含待迁移层,而目标训练节点已得到待迁移层的更新参数以及指定数据批的层间数据,这样,后续在目标训练节点上进行针对指定数据批的反向传播运算时,将包含待迁移层的对该指定数据批的反向传播。
100.例如,参见图6,假设目标训练节点是第一训练节点的下一个训练节点,目标训练节点上准备接收待迁移层c的分段为目标模型分段,第一模型分段包括层a、层b和层c,第一训练节点在确定出第一模型分段中的待迁移层为层c之后,向目标训练节点发送迁移准备通知。目标训练节点在接收到迁移准备通知之后,生成待迁移层c的初始化层c’,之后,向第一训练节点返回准备完成通知。之后,参见图7,假设第一模型分段上当前正在进行针对数据批4的前向传播,且即将进行针对数据批1的反向传播,则在完成数据批4之后,第一训练节点根据即将进行的针对数据批1的反向传播可知目标训练节点未完成的反向传播的数据批为数据批2-4,因此,第一训练节点可以将之前存储的数据批2和3的层间数据c2和c3以及刚刚运算得到的数据批4的层间数据c4传输至目标训练节点。之后,在第一训练节点完成针对数据批1的反向传播之后,可以将根据数据批1的反向传播更新得到的待迁移层c的更新参数q1传输至目标训练节点。之后,删除第一模型分段中的待迁移层。目标训练节点接收并存储第一训练节点发送的层间数据,并将待迁移层c的初始化层的参数设置为接收到的待迁移层的更新参数q1。如此,待迁移层c的迁移完成。当第一模型分段接下来在对数据批5进行前向传播运算时,第一模型分段中将不再包括待迁移层c,也即,待迁移层c对数据批5的前向传播运算将在目标模型分段上完成。同理,接下来待迁移层c针对数据批2的反向传播运算也将在目标模型分段上完成。
101.上述是以目标训练节点为第一训练节点的下一个训练节点为例进行的说明,在一些可能的场景中,目标训练节点也可能为第一训练节点的上一个训练节点,在这种情况下,第一训练节点同样可以通过参考上述方法来将待迁移层迁移到目标训练节点上,本技术实施例在此不再赘述。
102.另外,在本技术实施例中,第一模型分段中的待迁移层可能有多个,对每个待迁移层,均可以参考上述方法来进行迁移,本技术实施例对此不再赘述。
103.可选地,如果第一训练节点在将第一模型分段与第一模型分段对应的更新模型分段进行比较后发现,第一模型分段对应的更新模型分段中包含的层在第一模型分段中不存在,则说明第一模型分段需要新增加层,在这种情况下,第一训练节点则可以等待其他训练节点将待迁移层迁移至第一模型分段中。此时,第一训练节点的操作可以参考前述的目标训练节点的相关操作,本技术实施例在此不再赘述。
104.可选地,在一种可能的情况中,第一训练节点在查待迁移层所要迁移至的目标训练节点时可能会发现目标训练节点即为自身,也即,第一训练节点和目标训练节点为同一个训练节点。此时可知,第一训练节点实际上是要将自身的一个gpu上运行的第一模型分段中的待迁移层迁移至自身的另一个gpu上运行的另一个模型分段中。在这种情况下,第一训练节点可以首先在待迁移至的目标gpu上初始化待迁移层,之后,在第一模型分段所在的第一gpu当前正在进行的前向传播完成后,将待迁移层对应的多个数据批的层间数据中的指定数据批的层间数据存储至目标gpu的内存中,并在第一gpu当前正在进行的反向传播完成后,将待迁移层的更新参数发送至目标gpu,以将目标gpu中的初始化的待迁移层的参数更新为该更新参数。其中,指定数据批是指目标gpu中还未完成反向传播的数据批,之后删除第一gpu中的待迁移层。其中,相关的实现方式可以参考前文中的详细介绍,本技术实施例对此不再赘述。
105.步骤403:确定调整后的第一模型分段内的各个层的层间数据的存储管理策略。
106.在通过上述方法对第一模型分段进行调整之后,第一训练节点可以根据调整后的第一模型分段来确定层间数据的存储管理策略。其中,层间数据的存储管理策略包括交换策略和重算策略,除此之外,还可以包括默认策略。
107.其中,交换策略是指在前向传播时将产生的层间数据暂存至cpu的内存中以供反向传播时读取。也就是说,当将某个层的层间数据的存储管理策略设置为交换策略时,则在通过这个层进行前向传播运算时,输出的层间数据首先会被存储到运行该层的gpu的内存中,当后续其他层在前向传播中对该层的层间数据使用完毕之后,可以将该层间数据从该gpu的内存中异步传输至cpu的内存中暂存,以此来减少gpu的内存开销。后续,当在反向传播时需要使用该层间数据时,再从cpu的内存中将该层间数据异步传输回该gpu的内存中。由此可知,当采用交换策略来对层间数据进行存储管理时,能够减少gpu的内存开销,但是相应地会增加gpu和cpu之间的通信开销。
108.重算策略是指不对层间数据进行存储,在反向传播时重新计算层间数据。也即,当将某个层的层间数据的存储管理策略设置为重算策略时,则在通过这个层进行前向传播运算时,将得到的层间数据输出至后续的其它层,之后,即可以将该层间数据丢弃。后续,当进行反向传播需要使用层间数据时,重新执行前向传播运算以计算得到该层间数据。由此可见,当采用重算策略来对层间数据进行管理时,同样能够减少gpu的内存开销,但是相应地会增加gpu的计算开销。
109.默认策略是指将前向传播时产生的层间数据直接存储至对应的gpu的内存中,以供后续反向传播时使用。
110.在本技术实施例中,第一训练节点首先根据调整后的第一模型分段判断是否对第
一训练节点进行存储优化;如果确定对第一训练节点进行存储优化,则根据调整后的第一模型分段内的各个层的交换开销和重算开销,对调整后的第一模型分段内的多个层的层间数据的存储管理策略进行重置,交换开销是指采用交换策略对相应层的层间数据进行管理时所对应的时间开销,重算开销是指采用重算策略对相应层的层间数据进行管理时所对应的时间开销。
111.其中,第一训练节点可以判断调整后的第一模型分段所需的运行内存大小是否小于第一gpu的内存的上限值,如果调整后的第一模型分段所需的运行内存大小不小于第一gpu的内存的上限值,则说明第一gpu的内存已满,在这种情况下,则确定需要对第一训练节点进行存储优化,以此来减小第一gpu的内存开销。其中,第一gpu是指调整后的第一模型分段所在的gpu,也即是运行调整后的第一模型分段的gpu。
112.需要说明的是,由于每个模型分段内的层的层间数据大小是固定的,且运算时所需的内存大小也是固定的,因此,当模型分段的层确定之后,就能够确定出模型分段所需的运行内存大小。基于此,第一训练节点可以根据调整后的第一模型分段内包含的各个层所需的计算内存和相应层的层间数据所需的内存,计算调整后的第一模型分段所需的运行内存大小。
113.可选地,如果调整后的第一模型分段所需的运行内存大小小于第一gpu的内存的上限值,且调整后的第一模型分段的多个层中存在层间数据的存储管理策略为重算策略的层,则由于gpu的内存还未满,为了尽可能的较低的重算策略所带来的计算开销,可以确定第一训练节点需要进行存储优化。
114.当然,如果调整后的第一模型分段所需的运行内存大小小于第一gpu的内存的上限值,且调整后的第一模型分段中不存在当前存储管理策略为重算策略的层,则可以确定该第一训练节点不需要进行存储优化。
115.在确定第一训练节点需要进行存储优化之后,第一训练节点可以按照调整后的第一模型分段内的各个层的交换开销和重算开销之间的开销比值从大到小的顺序,对调整后的第一模型分段内的各个层进行排序;将排序后的多个层中的第一个待重置层的层间数据的存储管理策略重置为交换策略;如果已重置为交换策略的层的交换开销总和小于时长阈值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为交换策略,直至已重置为交换策略的层的交换开销总和不小于时长阈值为止,判断调整后的第一模型分段所需的运行内存大小是否小于第一gpu的内存的上限值;如果调整后的第一模型分段所需的运行内存大小不小于第一gpu的内存的上限值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为重算策略,直至调整后的第一模型分段所需的运行内存大小小于第一gpu的内存的上限值为止。
116.其中,第一训练节点首先计算第一模型分段内的各个层的交换开销和重算开销。其中,对于任一个层,该层的层间数据的大小是已知的,则该层的交换开销即等于该层的层间数据从第一gpu的内存传输至cpu的内存所需的时间,也即,等于该层的层间数据的大小与高速串行计算机扩展总线标准(peripheral component interconnect express,pcie)传输带宽之间的比值。该层的重算开销即等于该层进行前向传播运行的执行时间。在确定每个层的交换开销和重算开销之后,第一训练节点可以计算每个层的交换开销与重算开销之间的比值,从而得到每个层的开销比值。之后,第一训练节点可以按照各个层的开销比值
从大到小的顺序对各个层进行排序。
117.在对各个层进行排序之后,第一训练节点可以将各个层的当前存储管理策略全部清除,以便对各个层的存储管理策略进行重置,此时,该多个层均为待重置层。之后,第一训练节点首先将排序后的多个层中的第一个待重置层的层间数据的存储管理策略设置交换策略。然后,判断重置为交换策略的层的交换开销总和是否小于时长阈值。由于此时重置为交换策略的层就是第一个层,因此,第一训练节点判断已设置为交换策略的第一个层的交换开销是否小于时长阈值。其中,该时长阈值等于调整后的第一模型分段完成一次前向传播运算所需的时长和完成一次反向传播运算所需的时长的总和。
118.如果第一训练节点确定已设置为交换策略的第一个层的交换开销小于时长阈值,则说明pcie带宽当前还未被填满。在这种情况下,第一训练节点可以将下一个待重置层的层间数据的存储管理策略设置为交换策略。之后,第一训练节点计算已重置为交换策略的层的交换开销总和是否小于时长阈值。此时,已重置为交换策略的层为第一个层和第二个层,因此,第一训练节点计算第一个层和第二个层的交换开销的总和,将该交换开销的总和与时长阈值进行比较。如果交换开销总和仍然小于时长阈值,则第一训练节点继续将下一个待重置层的层间数据的存储管理策略设置为交换策略,以此类推。
119.可选地,如果第一训练节点在将某个层的层间数据的存储管理策略设置为交换策略之后,计算得到的已重置为交换策略的层的交换开销总和大于或等于时长阈值,则说明pcie的带宽已被填满,此时,第一训练节点可以判断此时调整后的第一模型分段所需的运行内存大小是否小于第一gpu的内存的上限值。如果此时调整后的第一模型分段所需的运行内存大小不小于第一gpu的内存的上限值,则说明目前第一gpu的内存已满。在这种情况下,第一训练节点可以将下一个待重置层的层间数据的存储管理策略设置为重算策略,以此来降低第一gpu的内存消耗。在将这个待重置层的层间数据的存储管理策略设置为重算策略之后,第一训练节点再次判断调整后的第一模型分段所需的运行内存大小是否小于第一gpu的内存的上限值,如果调整后的第一模型分段所需的运行内存大小仍然不小于第一gpu的内存的上限值,则第一训练节点继续将下一个待重置层的层间数据的存储管理策略设置为重算策略,以此类推。
120.可选地,如果在将某个层的层间数据的存储管理策略重置为重算策略之后,调整后的第一模型分段所需的运行内存大小小于第一gpu的内存的上限值,且后续还存在其他待重置层,则第一训练节点可以将剩余的待重置层的层间数据的存储管理策略均设置为默认策略。当然,如果后续不存在其他待重置层,则可以结束操作。至此即完成了对各个层的层间数据的存储管理策略的重置。
121.需要说明的是,在一些可能的情况中,如果第一训练节点根据调整后的第一模型分段确定出不需要对第一训练节点进行存储优化,则第一训练节点可以不对调整后的第一模型分段的层间数据的存储管理策略进行重置,也即,沿用之前设置的层间数据的存储管理策略,本技术实施例在此不再赘述。
122.步骤404:根据调整后的第一模型分段和确定的各个层的层间数据的存储管理策略进行训练。
123.在确定出调整后的第一模型分段的层间数据的存储管理策略之后,第一训练节点接下来就可以以该调整后的第一模型分段和确定的各个层的层间数据的存储管理策略来
继续进行接下来的前向传播和后向传播运算,以实现对自身部署的模型分段的训练。
124.需要说明的是,上述步骤402-404中的第一训练节点可以是多个训练节点中任一个训练节点,也就是说,对于多个训练节点中的任一训练节点,在获取到模型分段更新信息之后,均可以通过上述步骤402-404来决定是否进行模型分段调整以及是否进行存储优化,进而在需要进行模型分段调整和存储优化的情况下,参考上述方法完成模型分段的调整,并按照上述方法对调整后的模型分段的gpu的内存进行存储优化。
125.另外,当第一训练节点上包括多个调整后的模型分段时,则对于每个调整后的模型分段,均可以参考上述方法进行处理,本技术实施例在此不再赘述。
126.还需要说明的是,在本技术实施例中,分布式训练系统中每个训练节点上的每个gpu对应一个模型分段,并对应一个独立的独立的pytorch运行时进程,该运行时进程负责训练本模型分段,接收神经网络模型的输入或者是相邻模型分段的前向输入或反向输入,产生神经网络模型的输出数据或本模型分段的前向输出或反向输出。不同的模型分段之间采用pytorch gloo的网络连接库(library),实现计算与网络传输的异步进行。神经网络模型的层定义和层执行均为string类型,在运行时,由运行时进程执行python内置library中的exec(string s)。
127.另外,在进行模型分段的调整时,对于最后一个训练节点之前的各个训练节点,可以通过gloo网络连接库获取最后一个训练节点发送来的模型分段更新信息。对于任一个目标训练节点,在对待迁移层进行初始化时,可以通过add_modules()增加模型分段的层表达,并通过set_statements()将待迁移层的执行添加到目标训练节点的目标模型分段上,该目标模型分段即为待迁移层所要迁移至的模型分段。在开始层迁移之后,可以通过提取(get)和设定(set)pytorch的savedvariable数据结构中的层间数据(savedvariable.tensors),实现层间数据在第一模型分段的获取,以及在目标模型分段的写入。使用pytorch gloo网络连接库进行待迁移层的更新参数和层间数据在模型分段间的异步传输(send/receive)。当迁移完成时,第一模型分段使用del_modules()删除迁移的层,并使用set_statements()删除该层的执行。
128.在进行层间数据的存储管理策略的设置时,通过对pytorch的savedvariable数据结构内的tensors设定为产生后异步传输(pytorch copy_(non_blocking=true))到cpu上,实现层间数据的交换(swap)策略;将层间数据的异步交换和训练重合,消除交换开销。通过pytorch的checkpoint库,实现层间数据的重算策略。在运行时,通过compute_strategy()执行对gpu的内存的存储优化,然后通过set_statements更改层的执行(statements)来更改内存的存储管理策略,层间数据的重算策略的更改通过添加或删除checkpoint(),层间数据的交换策略的更改通过添加或删除swap()。
129.在本技术实施例中,当多个训练节点上的当前模型分段不平衡时,训练节点可以根据模型分段更新信息对自身上部署的待更新的模型分段进行调整,以使得各个训练节点上的模型分段能够更优。在调整模型分段之后,确定调整后的模型分段内各个层的层间数据的存储管理策略,以对模型分段所在的gpu的内存负载进行优化。由于训练节点的内存负载主要取决于其上所部属的模型分段以及模型分段的层间数据的存储管理,因此,本技术实施例通过调整模型分段并对调整后的模型分段的层间数据的存储管理策略进行设置,可以使得各个训练节点上的内存负载更平衡,从而提升该分布式训练系统的吞吐量。
130.另外,在本技术实施例中,在对模型分段中的层进行迁移时,不会阻塞训练执行,也即,各个训练节点的前向传播和反向传播不会因为层迁移而产生明显的停止,这样,即不会降低训练系统的训练吞吐量,保证了训练的效率。
131.最后,本技术实施例还可以应用于以神经网络结构搜索(neural architecture search,nas)为代表的动态模型训练过程中。例如,当在训练过程中神经网络模型的结构发生变化时,如增加层或删除层时,增加层或删除层的模型分段的分段执行时间也将发生变化,在这种情况下,最后一个训练节点根据模型分段的分段执行时间将能够确定多个训练节点上的模型分段不平衡,这样,即可以通过本技术实施例中的方法来对模型分段进行调整,进而对gpu的内存进行优化。由此可见,本技术实施例提供的技术方案还能够解决动态模型训练过程中gpu的内存负载不平衡加剧的问题,从而提高分布式训练系统的吞吐量。
132.接下来对本技术实施例提供的神经网络模型的训练装置进行介绍。
133.参见图8,本技术实施例提供了一种神经网络模型的训练装置800,应用于第一训练节点,第一训练节点为分布式训练系统中的多个训练节点中的一个训练节点,多个训练节点中的每个训练节点上部署有神经网络模型的一个或多个模型分段,该装置800包括:
134.获取模块801,用于执行上述实施例中的步骤401;
135.调整模块802,用于执行上述实施例中的步骤402;
136.确定模块803,用于执行上述实施例中的步骤403;
137.训练模块804,用于执行上述实施例中的步骤404。
138.其中,上述神经网络模型的训练装置800中的各个模块可以通过前述图3所介绍的计算机设备的处理器来实现。
139.可选地,当第一训练节点为神经网络模型的最后一个模型分段所在的训练节点时,该装置800还用于:
140.获取神经网络模型的各个当前模型分段的分段执行时间;
141.如果任意两个当前模型分段的分段执行时间的差值大于时间差阈值,则确定多个训练节点上的当前模型分段不平衡。
142.可选地,获取模块801主要用于:
143.根据神经网络模型中多个层的执行顺序,将神经网络模型中的多个层划分为多个簇,多个簇中的每个簇包括簇起始层、簇中间层和簇终止层,簇起始层的输出数据为多个簇中间层的输入数据,簇终止层的输入数据为多个簇中间层的输出数据;
144.根据预设的模型分段数量,对划分得到的多个簇进行划分,得到多个更新模型分段,其中,每个更新模型分段包括一个或多个簇;
145.根据多个更新模型分段,生成模型分段更新信息。
146.可选地,模型分段更新信息用于指示每个训练节点上的更新模型分段,该装置800还用于:
147.如果第一训练节点上的当前模型分段与模型分段更新信息所指示的第一训练节点上的更新模型分段不一致,则根据模型分段更新信息,从第一训练节点上的各个当前模型分段中确定待更新的模型分段。
148.可选地,调整模块802主要用于:
149.如果根据模型分段更新信息确定第一模型分段中存在待迁移层,则向目标训练节
点发送迁移准备通知,以使目标训练节点根据迁移准备通知生成待迁移层的初始化层,目标训练节点是指待迁移层所要迁移至的训练节点;
150.在接收到目标训练节点的准备完成通知,且当前正在进行的前向传播完成后,将待迁移层对应的多个数据批的层间数据中的指定数据批的层间数据发送至目标训练节点,并在当前正在进行的反向传播完成后,将待迁移层的更新参数发送至目标训练节点,指定数据批是指目标训练节点中还未完成反向传播的数据批;
151.删除待迁移层。
152.可选地,存储管理策略包括交换策略和重算策略,交换策略是指在前向传播时将产生的层间数据暂存至中央处理单元cpu的内存中以供反向传播时读取,重算策略是指不对层间数据进行存储,在反向传播时重新计算层间数据,确定模块803主要用于:
153.根据调整后的第一模型分段判断是否对第一训练节点进行存储优化;
154.如果确定对第一训练节点进行存储优化,则根据调整后的第一模型分段内的各个层的交换开销和重算开销,对调整后的第一模型分段内的多个层的层间数据的存储管理策略进行重置,交换开销是指采用交换策略对相应层的层间数据进行管理时所对应的时间开销,重算开销是指采用重算策略对相应层的层间数据进行管理时所对应的时间开销。
155.可选地,确定模块803主要用于:
156.如果调整后的第一模型分段所需的运行内存大小不小于第一图形处理单元gpu的内存的上限值,则确定对第一训练节点进行存储优化,第一gpu是指运行调整后的第一模型分段的gpu。
157.可选地,确定模块803主要还用于:
158.如果调整后的第一模型分段所需的运行内存大小小于第一gpu的内存的上限值,且调整后的第一模型分段的多个层中存在层间数据的存储管理策略为重算策略的层,则确定对第一训练节点进行存储优化,第一gpu是指运行调整后的第一模型分段的gpu。
159.可选地,确定模块803主要还用于:
160.按照调整后的第一模型分段内的各个层的交换开销和重算开销之间的开销比值从大到小的顺序,对调整后的第一模型分段内的各个层进行排序;
161.将排序后的多个层中的第一个待重置层的层间数据的存储管理策略重置为交换策略;
162.如果已重置为交换策略的层的交换开销总和小于时长阈值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为交换策略,直至已重置为交换策略的层的交换开销总和不小于时长阈值为止,判断调整后的第一模型分段所需的运行内存大小是否小于第一gpu的内存的上限值;
163.如果调整后的第一模型分段所需的运行内存大小不小于第一gpu的内存的上限值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为重算策略,直至调整后的第一模型分段所需的运行内存大小小于第一gpu的内存的上限值为止。
164.综上所述,在本技术实施例中,当多个训练节点上的当前模型分段不平衡时,训练节点可以根据模型分段更新信息对自身上部署的待更新的模型分段进行调整,以使得各个训练节点上的模型分段能够更优。在调整模型分段之后,确定调整后的模型分段内各个层的层间数据的存储管理策略,以对模型分段所在的gpu的内存负载进行优化。由于训练节点
的内存负载主要取决于其上所部属的模型分段以及模型分段的层间数据的存储管理,因此,本技术实施例通过调整模型分段并对调整后的模型分段的层间数据的存储管理策略进行设置,可以使得各个训练节点上的内存负载更平衡,从而提升该分布式训练系统的吞吐量。
165.需要说明的是:上述实施例提供的神经网络模型的训练装置在训练神经网络模型时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的神经网络模型的训练装置与神经网络模型的训练方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
166.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(digital subscriber line,dsl))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(digital versatile disc,dvd))、或者半导体介质(例如:固态硬盘(solid state disk,ssd))等。
167.本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
168.以上所述并不用以限制本技术实施例,凡在本技术实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术实施例的保护范围之内。

技术特征:


1.一种神经网络模型的训练方法,其特征在于,应用于第一训练节点,所述第一训练节点为分布式训练系统中的多个训练节点中的一个训练节点,所述多个训练节点中的每个训练节点上部署有神经网络模型的一个或多个模型分段,所述方法包括:获取模型分段更新信息,所述模型分段更新信息是在所述多个训练节点上的当前模型分段不平衡的情况下确定的用于重新对所述神经网络模型进行分段的信息;如果根据所述模型分段更新信息确定第一模型分段为待更新的模型分段,则根据所述模型分段更新信息对所述第一模型分段进行调整,所述第一模型分段为所述第一训练节点上的当前模型分段;确定调整后的第一模型分段内的各个层的层间数据的存储管理策略;根据所述调整后的第一模型分段和确定的各个层的层间数据的存储管理策略进行训练。2.根据权利要求1所述的方法,其特征在于,当所述第一训练节点为所述神经网络模型的最后一个模型分段所在的训练节点时,所述获取模型分段更新信息之前,还包括:获取所述神经网络模型的各个当前模型分段的分段执行时间;如果任意两个当前模型分段的分段执行时间的差值大于时间差阈值,则确定所述多个训练节点上的当前模型分段不平衡。3.根据权利要求2所述的方法,其特征在于,所述获取模型分段更新信息,包括:根据所述神经网络模型中多个层的执行顺序,将所述神经网络模型中的多个层划分为多个簇,所述多个簇中的每个簇包括簇起始层、簇中间层和簇终止层,所述簇起始层的输出数据为多个簇中间层的输入数据,所述簇终止层的输入数据为多个簇中间层的输出数据;根据预设的模型分段数量,对划分得到的多个簇进行划分,得到多个更新模型分段,其中,每个更新模型分段包括一个或多个簇;根据所述多个更新模型分段,生成模型分段更新信息。4.根据权利要求1-3任一所述的方法,其特征在于,所述模型分段更新信息用于指示每个训练节点上的更新模型分段,所述获取模型分段更新信息之后,还包括:如果所述第一训练节点上的当前模型分段与所述模型分段更新信息所指示的所述第一训练节点上的更新模型分段不一致,则根据所述模型分段更新信息,从所述第一训练节点上的各个当前模型分段中确定待更新的模型分段。5.根据权利要求1或4所述的方法,其特征在于,所述根据所述模型分段更新信息对所述第一模型分段进行调整,包括:如果根据所述模型分段更新信息确定所述第一模型分段中存在待迁移层,则向目标训练节点发送迁移准备通知,以使所述目标训练节点根据所述迁移准备通知生成所述待迁移层的初始化层,所述目标训练节点是指所述待迁移层所要迁移至的训练节点;在接收到所述目标训练节点的准备完成通知,且当前正在进行的前向传播完成后,将所述待迁移层对应的多个数据批的层间数据中的指定数据批的层间数据发送至所述目标训练节点,并在当前正在进行的反向传播完成后,将所述待迁移层的更新参数发送至所述目标训练节点,所述指定数据批是指所述目标训练节点中还未完成反向传播的数据批;删除所述待迁移层。6.根据权利要求1-5任一所述的方法,其特征在于,所述存储管理策略包括交换策略和
重算策略,所述交换策略是指在前向传播时将产生的层间数据暂存至中央处理单元cpu的内存中以供反向传播时读取,所述重算策略是指不对层间数据进行存储,在反向传播时重新计算层间数据,所述确定调整后的第一模型分段内的各个层的层间数据的存储管理策略,包括:根据调整后的第一模型分段判断是否对所述第一训练节点进行存储优化;如果确定对所述第一训练节点进行存储优化,则根据调整后的第一模型分段内的各个层的交换开销和重算开销,对调整后的第一模型分段内的多个层的层间数据的存储管理策略进行重置,所述交换开销是指采用所述交换策略对相应层的层间数据进行管理时所对应的时间开销,所述重算开销是指采用所述重算策略对相应层的层间数据进行管理时所对应的时间开销。7.根据权利要求6所述的方法,其特征在于,所述根据调整后的第一模型分段判断是否对所述第一训练节点进行存储优化,包括:如果调整后的第一模型分段所需的运行内存大小不小于第一图形处理单元gpu的内存的上限值,则确定对所述第一训练节点进行存储优化,所述第一gpu是指运行调整后的第一模型分段的gpu。8.根据权利要求6或7所述的方法,其特征在于,所述方法还包括:如果调整后的第一模型分段所需的运行内存大小小于所述第一gpu的内存的上限值,且调整后的第一模型分段的多个层中存在层间数据的存储管理策略为所述重算策略的层,则确定对所述第一训练节点进行存储优化,所述第一gpu是指运行调整后的第一模型分段的gpu。9.根据权利要求6-8任一所述的方法,其特征在于,所述根据调整后的第一模型分段内的各个层的交换开销和重算开销,对调整后的第一模型分段内的多个层的层间数据的存储管理策略进行重置,包括:按照调整后的第一模型分段内的各个层的交换开销和重算开销之间的开销比值从大到小的顺序,对调整后的第一模型分段内的各个层进行排序;将排序后的多个层中的第一个待重置层的层间数据的存储管理策略重置为所述交换策略;如果已重置为所述交换策略的层的交换开销总和小于时长阈值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为所述交换策略,直至已重置为所述交换策略的层的交换开销总和不小于所述时长阈值为止,判断调整后的第一模型分段所需的运行内存大小是否小于第一gpu的内存的上限值;如果调整后的第一模型分段所需的运行内存大小不小于所述第一gpu的内存的上限值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为所述重算策略,直至调整后的第一模型分段所需的运行内存大小小于所述第一gpu的内存的上限值为止。10.一种神经网络模型的训练装置,其特征在于,应用于第一训练节点,所述第一训练节点为分布式训练系统中的多个训练节点中的一个训练节点,所述多个训练节点中的每个训练节点上部署有神经网络模型的一个或多个模型分段,所述装置包括:获取模块,用于获取模型分段更新信息,所述模型分段更新信息是在所述多个训练节
点上的当前模型分段不平衡的情况下确定的用于重新对所述神经网络模型进行分段的信息;调整模块,用于如果根据所述模型分段更新信息确定第一模型分段为待更新的模型分段,则根据所述模型分段更新信息对所述第一模型分段进行调整,所述第一模型分段为所述第一训练节点上的当前模型分段;确定模块,用于确定调整后的第一模型分段内的各个层的层间数据的存储管理策略;训练模块,用于根据所述调整后的第一模型分段和确定的各个层的层间数据的存储管理策略进行训练。11.根据权利要求10所述的装置,其特征在于,当所述第一训练节点为所述神经网络模型的最后一个模型分段所在的训练节点时,所述装置还用于:获取所述神经网络模型的各个当前模型分段的分段执行时间;如果任意两个当前模型分段的分段执行时间的差值大于时间差阈值,则确定所述多个训练节点上的当前模型分段不平衡。12.根据权利要求11所述的装置,其特征在于,所述获取模块主要用于:根据所述神经网络模型中多个层的执行顺序,将所述神经网络模型中的多个层划分为多个簇,所述多个簇中的每个簇包括簇起始层、簇中间层和簇终止层,所述簇起始层的输出数据为多个簇中间层的输入数据,所述簇终止层的输入数据为多个簇中间层的输出数据;根据预设的模型分段数量,对划分得到的多个簇进行划分,得到多个更新模型分段,其中,每个更新模型分段包括一个或多个簇;根据所述多个更新模型分段,生成模型分段更新信息。13.根据权利要求10-12任一所述的装置,其特征在于,所述模型分段更新信息用于指示每个训练节点上的更新模型分段,所述装置还用于:如果所述第一训练节点上的当前模型分段与所述模型分段更新信息所指示的所述第一训练节点上的更新模型分段不一致,则根据所述模型分段更新信息,从所述第一训练节点上的各个当前模型分段中确定待更新的模型分段。14.根据权利要求10或13所述的装置,其特征在于,所述调整模块主要用于:如果根据所述模型分段更新信息确定所述第一模型分段中存在待迁移层,则向目标训练节点发送迁移准备通知,以使所述目标训练节点根据所述迁移准备通知生成所述待迁移层的初始化层,所述目标训练节点是指所述待迁移层所要迁移至的训练节点;在接收到所述目标训练节点的准备完成通知,且当前正在进行的前向传播完成后,将所述待迁移层对应的多个数据批的层间数据中的指定数据批的层间数据发送至所述目标训练节点,并在当前正在进行的反向传播完成后,将所述待迁移层的更新参数发送至所述目标训练节点,所述指定数据批是指所述目标训练节点中还未完成反向传播的数据批;删除所述待迁移层。15.根据权利要求10-14任一所述装置,其特征在于,所述存储管理策略包括交换策略和重算策略,所述交换策略是指在前向传播时将产生的层间数据暂存至中央处理单元cpu的内存中以供反向传播时读取,所述重算策略是指不对层间数据进行存储,在反向传播时重新计算层间数据,所述确定模块主要用于:根据调整后的第一模型分段判断是否对所述第一训练节点进行存储优化;
如果确定对所述第一训练节点进行存储优化,则根据调整后的第一模型分段内的各个层的交换开销和重算开销,对调整后的第一模型分段内的多个层的层间数据的存储管理策略进行重置,所述交换开销是指采用所述交换策略对相应层的层间数据进行管理时所对应的时间开销,所述重算开销是指采用所述重算策略对相应层的层间数据进行管理时所对应的时间开销。16.根据权利要求15所述的装置,其特征在于,所述确定模块主要用于:如果调整后的第一模型分段所需的运行内存大小不小于第一图形处理单元gpu的内存的上限值,则确定对所述第一训练节点进行存储优化,所述第一gpu是指运行调整后的第一模型分段的gpu。17.根据权利要求15或16所述的装置,其特征在于,所述确定模块主要还用于:如果调整后的第一模型分段所需的运行内存大小小于所述第一gpu的内存的上限值,且调整后的第一模型分段的多个层中存在层间数据的存储管理策略为所述重算策略的层,则确定对所述第一训练节点进行存储优化,所述第一gpu是指运行调整后的第一模型分段的gpu。18.根据权利要求15-17任一所述的装置,其特征在于,所述确定模块主要还用于:按照调整后的第一模型分段内的各个层的交换开销和重算开销之间的开销比值从大到小的顺序,对调整后的第一模型分段内的各个层进行排序;将排序后的多个层中的第一个待重置层的层间数据的存储管理策略重置为所述交换策略;如果已重置为所述交换策略的层的交换开销总和小于时长阈值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为所述交换策略,直至已重置为所述交换策略的层的交换开销总和不小于所述时长阈值为止,判断调整后的第一模型分段所需的运行内存大小是否小于第一gpu的内存的上限值;如果调整后的第一模型分段所需的运行内存大小不小于所述第一gpu的内存的上限值,则将排序后的多个层中下一个待重置层的层间数据的存储管理策略重置为所述重算策略,直至调整后的第一模型分段所需的运行内存大小小于所述第一gpu的内存的上限值为止。19.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有指令,当所述指令在计算机上运行时,使得所述计算机执行权利要求1-9任一项所述的方法。

技术总结


本申请实施例公开了一种神经网络模型的训练方法、装置及存储介质,属于AI技术领域。在本申请实施例中,当多个训练节点上的当前模型分段不平衡时,训练节点可以根据模型分段更新信息对自身上部署的待更新的模型分段进行调整,以使得各个训练节点上的模型分段能够更优。在调整模型分段之后,根据调整后的模型分段来确定层间数据的存储管理策略。由于训练节点的内存负载主要取决于其上所部属的模型分段以及模型分段的层间数据的存储管理,因此,本申请实施例通过调整模型分段并对调整后的模型分段的层间数据的存储管理策略进行设置,可以使得各个训练节点上的内存负载更平衡,从而提升该分布式训练系统的吞吐量。而提升该分布式训练系统的吞吐量。而提升该分布式训练系统的吞吐量。


技术研发人员:

赵世雄 李凡鑫 崔鹤鸣 王森 王鹏 张弓

受保护的技术使用者:

华为技术有限公司

技术研发日:

2021.06.25

技术公布日:

2022/12/26

本文发布于:2024-09-20 20:33:38,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/48981.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   节点   所述   多个
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议