掌桥专利:专业的专利平台
掌桥专利
首页

一种模型训练的方法、装置、存储介质及电子设备

文献发布时间:2024-04-18 19:53:47


一种模型训练的方法、装置、存储介质及电子设备

技术领域

本说明书涉及计算机技术领域,尤其涉及一种模型训练的方法、装置、存储介质及电子设备。

背景技术

随着人工智能的发展,机器学习的应用领域从广度向深度发展,这对模型训练和应用都提出了更高的要求。目前,随着模型尺寸及训练数据量的大幅增加,为了提高模型的训练效率,基于容器的分布式训练被越来越广泛地应用。

具体地,在模型训练时常见的一种方式是:服务器将基于模型拆分后的子模型部署到一个或多个容器上,多个容器可以共用物理机上的计算节点(如GPU)的算力资源以进行模型训练。但在模型训练过程中,各个计算节点的算力资源可能存在动态变化,且多个容器共享一台物理机,容器的性能情况可能会受到其他容器的影响,这样反而会降低分布式训练的效率。

因此,如何在训练模型时对各个计算节点上部署的容器的分布进行动态调整,使得各个计算节点内训练子模型时间相接近且减少各个计算节点之间负载不均衡的现象,则是个亟待解决的问题。

发明内容

本说明书提供一种模型训练的方法、装置、存储介质及电子设备,以部分的解决现有技术存在的上述问题。

本说明书采用下述技术方案:

本说明书提供了一种模型训练的方法,包括:

获取样本数据以及目标模型;

将所述目标模型进行拆分,以得到各子模型,其中,每个子模型包含有所述目标模型中的部分网络层;

根据所述各个子模型,确定用于部署所述各个子模型的各计算节点,并在所述各计算节点上创建各容器,以将所述各子模型分别部署到所述各容器内;

采用所述样本数据执行模型训练任务,以训练所述各容器内的部署的子模型;

获取所述各计算节点在执行模型训练任务时的负载数据,以及针对每个容器,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长,作为该容器对应的运算时长;

根据所述各计算节点的负载数据以及所述各容器对应的运算时长,确定出需要调整容器分布的计算节点,作为目标节点;

以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,对所述目标节点中各容器的分布进行调整;

基于调整容器分布后的各计算节点,执行所述目标模型的训练任务。

可选地,将所述模型进行拆分,以得到各子模型,具体包括:

确定在执行所述模型的训练任务时所述模型的运算时长,作为所述模型的运算时长;

根据所述模型的运算时长,将所述模型中包含的各网络层进行拆分,以得到各子模型。

可选地,针对每个容器,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长,具体包括:

从预设的共享存储系统中确定出该容器所对应的训练统计信息;

根据所述训练统计信息中包含的执行该容器内部署的子模型的训练任务的起始时间以及结束时间,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长;

其中,所述共享存储系统中存储的各训练统计信息是基于各计算节点在执行模型训练任务时所产生的目标日志确定出的,所述目标日志是根据预设的指定关键词,从各计算节点所产生的日志中过滤出来的,所述训练统计信息是在累计到指定数量后,写入到所述共享存储系统中,并从各计算节点中删除。

可选地,根据所述各计算节点的负载数据以及所述各容器对应的运算时长,确定出需要调整容器分布的计算节点,作为目标节点,具体包括:

按照述各计算节点中各容器对应的运算时长从大到小的顺序,对各容器进行排序,得到第一排序结果;

将所述第一排序结果中位于设排位前的容器,作为目标容器;

根据所述目标容器以及所述各计算节点的负载数据,确定出需要调整容器分布的计算节点。

可选地,根据所述目标容器以及所述各计算节点的负载数据,确定出需要调整容器分布的计算节点,具体包括:

确定部署所述目标容器的计算节点,作为第一节点;

若根据所述第一节点的负载数据确定所述第一节点的负载高于第一设定阈值,则从其他计算节点中确定出用于部署所述第一节点中部分容器的计算节点,作为第二节点;

将所述第一节点和所述第二节点确定为需要调整容器分布的计算节点。

可选地,根据所述目标容器以及所述各计算节点的负载数据,确定出需要调整容器分布的计算节点,具体包括:

若确定所述目标容器对应的运算时长与其他容器对应的运算时间之间差值超过第二设定阈值,则根据所述各计算节点的负载数据,确定部署待创建的新容器的计算节点,作为确定出需要调整容器分布的计算节点;

以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,对所述目标节点中各容器的分布进行调整,具体包括:

以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,在所述目标节点中创建新容器,并对所述目标容器中部署的子模型的模型数据进行复制,以将复制得到的子模型部署在所述新容器中。

可选地,根据所述各计算节点的负载数据,确定部署待创建的新容器的计算节点,作为确定出需要调整容器分布的计算节点,具体包括:

按照所述各计算节点的负载数据从小到大的顺序,将除部署有所述目标容器的计算节点以外的其他节点进行排序,得到第二排序结果;

按照所述第二排序结果中各其他节点的从前到后的排列顺序,依次判断相邻排序的两个其他节点之间的负载差值是否位于预设差值范围内;

针对任意相邻排序的两个其他节点,若确定该相邻排序的两个其他节点之间的负载差值未落入所述预设差值范围内,则将该相邻排序的两个其他节点中负载较轻的节点,作为部署待创建的新容器的计算节点,否则,继续判断下一相邻排序的两个其他节点之间的负载差值是否位于预设差值范围内,直至遍历完所述第二排序结果中的所有其他节点或确定出部署待创建的新容器的计算节点为止。

可选地,所述方法还包括:

若确定所述第二排序结果中任意相邻排序的两个其他节点之间的负载差值均位于所述预设差值范围内,则确定与部署在待创建的新容器中的子模型存在网络层依赖关系的子模型,作为关联子模型;

确定部署有所述关联子模型的计算节点,作为关联节点;

测试各其他节点与所述关联节点之间的网络延迟;

根据测试得到的网络延迟,从各其他节点中确定出部署待创建的新容器的计算节点。

可选地,根据所述目标容器以及所述各计算节点的负载数据,确定出需要调整容器分布的计算节点,具体包括:

确定部署所述目标容器的计算节点;

若确定部署所述目标容器的计算节点中还部署有指定容器,则将部署所述目标容器的计算节点,作为确定出需要调整容器分布的计算节点,其中,所述指定容器中部署的子模型与所述目标容器中部署的子模型相同;

以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,对所述目标节点中各容器的分布进行调整,具体包括:

以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,将部署所述目标容器的计算节点中的所述目标容器或所述指定容器删除。

可选地,以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,对所述目标节点中各容器的分布进行调整,具体包括:

以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内,且部署有容器的各计算节点的负载之间的负载偏差位于预设负载范围内为调整目标,所述目标节点中各容器的分布进行调整。

本说明书提供了一种模型训练的装置,包括:

第一获取模块,用于获取样本数据以及目标模型;

拆分模块,用于将所述目标模型进行拆分,以得到各子模型,其中,每个子模型包含有所述目标模型中的部分网络层;

第一确定模块,用于根据所述各个子模型,确定用于部署所述各个子模型的各计算节点,并在所述各计算节点上创建各容器,以将所述各子模型分别部署到所述各容器内;

第一训练模块,用于采用所述样本数据执行模型训练任务,以训练所述各容器内的部署的子模型;

第二获取模块,用于获取所述各计算节点在执行模型训练任务时的负载数据,以及针对每个容器,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长,作为该容器对应的运算时长;

第二确定模块,用于根据所述各计算节点的负载数据以及所述各容器对应的运算时长,确定出需要调整容器分布的计算节点,作为目标节点;

调整模块,用于以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,对所述目标节点中各容器的分布进行调整;

第二训练模块,用于基于调整容器分布后的各计算节点,执行所述目标模型的训练任务。

可选地,所述拆分模块具体用于确定在执行模型训练任务时所述目标模型的运算时长,作为所述目标模型的运算时长;根据所述目标模型的运算时长,将所述目标模型中包含的各网络层进行拆分,以得到各子模型。

可选地,所述第二获取模块具体用于从预设的共享存储系统中确定出该容器所对应的训练统计信息;根据所述训练统计信息中包含的执行该容器内部署的子模型的训练任务的起始时间以及结束时间,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长;

其中,所述共享存储系统中存储的各训练统计信息是基于各计算节点在执行模型训练任务时所产生的目标日志确定出的,所述目标日志是根据预设的指定关键词,从各计算节点所产生的日志中过滤出来的,所述训练统计信息是在累计到指定数量后,写入到所述共享存储系统中,并从各计算节点中删除。

可选地,所述第二确定模块具体用于按照所述各计算节点中各容器对应的运算时长从大到小的顺序,对各容器进行排序,得到第一排序结果;将所述第一排序结果中位于设排位前的容器,作为目标容器;根据所述目标容器以及所述各计算节点的负载数据,确定出需要调整容器分布的计算节点。

可选地,所述第二确定模块具体用于确定部署所述目标容器的计算节点,作为第一节点;若根据所述第一节点的负载数据确定所述第一节点的负载高于第一设定阈值,则从其他计算节点中确定出用于部署所述第一节点中部分容器的计算节点,作为第二节点;将所述第一节点和所述第二节点确定为需要调整容器分布的计算节点。

可选地,所述第二确定模块具体用于若确定所述目标容器对应的运算时长与其他容器对应的运算时间之间差值超过第二设定阈值,则根据所述各计算节点的负载数据,确定部署待创建的新容器的计算节点,作为确定出需要调整容器分布的计算节点;

所述调整模块,具体用于以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,在所述目标节点中创建新容器,并对所述目标容器中部署的子模型的模型数据进行复制,以将复制得到的子模型部署在所述新容器中。

可选地,所述第二确定模块具体用于按照所述各计算节点的负载数据从小到大的顺序,将除部署有所述目标容器的计算节点以外的其他节点进行排序,得到第二排序结果;按照所述第二排序结果中各其他节点的从前到后的排列顺序,依次判断相邻排序的两个其他节点之间的负载差值是否位于预设差值范围内;针对任意相邻排序的两个其他节点,若确定该相邻排序的两个其他节点之间的负载差值未落入所述预设差值范围内,则将该相邻排序的两个其他节点中负载较轻的节点,作为部署待创建的新容器的计算节点,否则,继续判断下一相邻排序的两个其他节点之间的负载差值是否位于预设差值范围内,直至遍历完所述第二排序结果中的所有其他节点或确定出部署待创建的新容器的计算节点为止。

可选地,所述第二确定模块还用于,若确定所述第二排序结果中任意相邻排序的两个其他节点之间的负载差值均位于所述预设差值范围内,则确定与部署在待创建的新容器中的子模型存在网络层依赖关系的子模型,作为关联子模型;确定部署有所述关联子模型的计算节点,作为关联节点;测试各其他节点与所述关联节点之间的网络延迟;根据测试得到的网络延迟,从各其他节点中确定出部署待创建的新容器的计算节点。

可选地,所述第二确定模块具体用于,确定部署所述目标容器的计算节点;若确定部署所述目标容器的计算节点中还部署有指定容器,则将部署所述目标容器的计算节点,作为确定出需要调整容器分布的计算节点,其中,所述指定容器中部署的子模型与所述目标容器中部署的子模型相同;

所述调整模块,具体用于以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,将部署所述目标容器的计算节点中的所述目标容器或所述指定容器删除。

可选地,所述调整模块具体用于,以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内,且部署有容器的各计算节点的负载之间的负载偏差位于预设负载范围内为调整目标,所述目标节点中各容器的分布进行调整。

本说明书提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述模型训练的方法。

本说明书提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述模型训练的方法。

本说明书采用的上述至少一个技术方案能够达到以下有益效果:

本说明书提供的模型训练的方法,将目标模型进行拆分,以得到各子模型;根据各个子模型,确定用于部署各个子模型的各计算节点,并在各计算节点上创建各容器,以将各子模型分别部署到各容器内;采用样本数据执行模型训练任务,以训练各容器内的部署的子模型;根据各计算节点的负载数据以及各容器对应的运算时长,确定出需要调整容器分布的计算节点,作为目标节点;以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,对目标节点中各容器的分布进行调整,继续执行目标模型的训练任务。

从上述方法中可以看出,在执行模型训练任务时,先将目标模型拆分为多个子模型,再确定用于部署各个子模型的各计算节点,并在各计算节点上创建各容器,以将各子模型分别部署到所述各容器内,以通过各计算节点完成训练任务。在模型训练过程中,本申请监测各个计算节点的负载数据,以部署有子模型的各计算节点中的容器所对应的运算时长相接近为调整目标,对所述各计算节点中各容器的分布进行动态调整,有利于各个计算节点之间负载均衡,进一步地提高了模型训练的效率。

附图说明

此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:

图1为本说明书中提供的一种模型训练的方法的流程示意图;

图2为本说明书提供的一种系统关系示意图;

图3为本说明书提供的容器调整示意图;

图4为本说明书提供的一种模型训练的装置结构的示意图;

图5为本说明书提供的一种对应于图1的电子设备的结构示意图。

具体实施方式

为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。

以下结合附图,详细说明本说明书各实施例提供的技术方案。

图1为本说明书中提供的一种模型训练的方法的流程示意图,包括以下步骤:

S100:获取样本数据以及目标模型。

S102:将所述目标模型进行拆分,以得到各子模型,其中,每个子模型包含有所述目标模型中的部分网络层。

随着模型尺寸及训练数据量的大幅增加,大规模模型可能无法完整部署在单台物理机上,单个GPU卡的显存容量也无法满足大规模模型训练的要求,为了提高模型的训练效率,本申请提供一种模型训练的方法,采用多机多卡的方式对模型进行分布式训练。

本申请的执行主体可以是系统,也可以是诸如笔记本电脑,台式电脑等电子设备,抑或是用于执行模型训练任务的系统(该系统可由多个终端设备构成的设备集群构成)。为了便于说明,下面仅以系统为执行主体,对本申请提供的模型训练的方法进行说明。

系统可以获取样本数据以及目标模型,再将目标模型进行拆分,以得到各子模型,其中,每个子模型包含有目标模型中的部分网络层。

在本说明书中,系统对目标模型进行拆分的方法有多种。

具体地,系统可以确定在执行模型训练任务时目标模型的运算时长,作为目标模型的运算时长。根据确定出的目标模型的运算时长,系统可以以在执行模型的训练任务时各子模型的运算时长相接近为拆分目标,对目标模型中包含的不同网络层进行拆分。

例如,假设目标模型中包含的网络层有30层,系统可以根据目标模型的运算时长进行拆分,得到拆分后的两个子模型,使其中一个子模型中包含目标模型的前10层网络层,另外一个子模型中包含目标模型的后20层网络层,那么,系统在执行这两个子模型的训练任务时两个子模型的运算时长是相接近的,即,这两个子模型的运算时长的差值是落入预设偏差范围内的,这里的预设偏差范围可以是人为根据需求确定的。

当然,系统也可以直接根据目标模型中包含的网络层数量,对目标模型进行拆分。假设目标模型中包含的网络层有30层,系统可以均分目标模型的网络层数量,使得拆分后的两个子模型,其中一个子模型中包含目标模型的前15层网络层,另外一个子模型中包含目标模型的后15层网络层。本说明书不对模型拆分的方式进行限制。

S104:根据所述各个子模型,确定用于部署所述各个子模型的各计算节点,并在所述各计算节点上创建各容器,以将所述各子模型分别部署到所述各容器内。

根据各个子模型,系统可以确定用于部署各个子模型的各计算节点,并在各计算节点上创建各容器,以将各子模型分别部署到所述各容器内。

例如,假设目前由五台物理机共同完成模型训练任务,每台物理机上有2个计算节点(如GPU),在将目标模型拆分成20个子模型后,系统可以在各个计算节点上共创建20个容器,以将拆分得到的20个子模型分别部署到20个容器内。

S106:采用所述样本数据执行模型训练任务,以训练所述各容器内的部署的子模型。

系统可以采用样本数据执行模型训练任务,以训练各容器内的部署的子模型。

具体地,在对各个子模型进行模型训练时,系统可以采用日志采集框架来收集各个子模型训练过程中的相关数据,相关数据包括各子模型在训练过程中所产生的所有数据,用于反映各子模型在各容器上的计算和运行情况。

具体地,系统可以采用日志打印的方式收集相关数据。在各子模型进行训练时,系统可以将模型计算开始和结束、内存访问开始和结束等时间点作为训练统计信息打印到日志。

为了从相关数据中筛选出训练统计信息,在打印日志时,系统可以在日志内容中加入容器地址信息、线程号等可以唯一标识训练线程的信息,同时,系统还可以在日志内容中添加和其他日志内容区别的关键字,比如container-adaptive-adjust。

在对各子模型进行模型训练时,系统可以不断扫描新生成的日志,若扫描到时间点开始的日志,系统可以记录这次训练过程中子模型的执行(比如计算、访存等)的时间和线程号等唯一标识信息,然后继续扫描,直到扫描到时间点结束的日志,再计算这次的执行时间。

系统可以根据关键字过滤出用于模型训练时所产生的目标日志,进而根据目标日志确定子模型的执行的开始时间和结束时间,并将目标日志中记录的子模型的执行的时间和线程号等信息,作为子模型对应容器所对应的训练统计信息,发送到共享存储系统中保存。

具体地,对于执行模型训练任务的各计算节点来说,各计算节点会通过过滤出的目标日志,来得到各子模型的训练统计信息。若训练统计信息数量没有超过预设的阈值,系统可以继续扫描日志,直到训练统计信息数量超过预设的阈值,此时,系统再将训练统计信息批量发送到预设的共享存储系统中。

值得说明的是,在各计算节点将训练统计信息批量发送到共享存储系统中后,系统可以将各计算节点中保有的训练统计信息删除,再继续记录各个容器对应的训练统计信息,直到分布式训练结束。

当然,系统也可以预设一个批量发送时间,若系统上一次将训练统计信息批量发送到共享存储系统的时间超过预设的发送时长,则将训练统计信息批量发送到共享存储系统中。例如,若预设的发送时长为15分钟,则在各子模型训练过程中,系统可以每隔十五分钟将训练统计信息批量发送到共享存储系统中。

也就是说,共享存储系统中存储的各训练统计信息是基于各计算节点在执行模型训练任务时所产生的目标日志确定出的,目标日志是根据预设的指定关键词,从各计算节点所产生的日志中过滤出来的,训练统计信息是在累计到指定数量后或达到预设时间后,写入到共享存储系统中,并从各计算节点中删除。

S108:获取所述各计算节点在执行模型训练任务时的负载数据,以及针对每个容器,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长,作为该容器对应的运算时长。

系统可以获取各计算节点在执行模型训练任务时的负载数据,以及针对每个容器,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长,作为该容器对应的运算时长。

后续系统可以根据各个容器对应的运算时长以及各个计算节点的负载数据对容器的运行状态进行分析,进而调整容器分布。

具体地,系统可以从预设的共享存储系统中读取出每个容器所对应的训练统计信息。针对每个容器,系统可以根据训练统计信息中包含的执行该容器内部署的子模型的训练任务的起始时间以及结束时间,来确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长。

在模型训练的过程中,系统在不断地往共享存储系统中写入训练统计信息,为了减少对分布式训练的影响,在系统从共享存储系统中读取每个容器所对应的训练统计信息时对容器的状态进行分析时,可以获取各个子模型上一轮训练时所产生的训练统计信息。

也就是说,系统对容器运行状态进行分析时所采用的数据的训练迭代次序,落后一个当前的模型训练的训练迭代次序。假设当前模型的训练迭代次序是i,那么系统从共享存储系统中读取的训练统计信息的训练迭代次序是i-1。

需要说明的是,为了提高共享存储系统的性能,系统可以将训练迭代次序也作为关键字之一存储到共享存储系统中,使得同一个迭代次序的训练统计信息连续存储。

S110:根据所述各计算节点的负载数据以及所述各容器对应的运算时长,确定出需要调整容器分布的计算节点,作为目标节点。

S112:以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,对所述目标节点中各容器的分布进行调整。

在确定各计算节点的负载数据以及各容器对应的运算时长后,系统可以确定出需要调整容器分布的计算节点,作为目标节点。

具体地,系统可以按照各计算节点中各容器对应的运算时长从大到小的顺序,对各容器进行排序,得到第一排序结果,并将第一排序结果中位于预设排位前的容器,作为目标容器。系统用各容器对应的运算时长来反映各容器的运行状态,后续可以基于各容器对应的运算时长确定出需要调整容器分布的计算节点。

例如,假设预设排位的具体数值为5,系统可以按照各计算节点中各容器对应的运算时长从大到小的顺序,得到第一排序结果,并将排序结果中前五个容器作为目标容器。

当然,系统也可以通过其他方式确定出目标容器。

例如,系统可以获取各计算节点的负载信息,基于各计算节点的负载信息,确定各计算节点中GPU利用率最低的计算节点,若该计算节点GPU利用率低于预设阈值,则将该计算节点中I/O负载最高的容器,作为目标容器。

在确定目标容器后,系统可以根据目标容器以及各计算节点的负载数据,确定出需要调整容器分布的计算节点。

具体地,系统可以确定部署目标容器的计算节点,作为第一节点,若根据第一节点的负载数据确定第一节点的负载高于第一设定阈值,则从其他计算节点中确定出用于部署第一节点中部分容器的计算节点,作为第二节点。

系统可以将第一节点和第二节点确定为需要调整容器分布的计算节点,以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,将第一节点中的目标容器迁移到第二节点中。

其中,第一设定阈值可以是预先设定的,也可以是除第一节点外的其他计算节点负载的平均值。

例如,系统根据第一节点的负载数据确定出第一节点的负载值为20(负载值用于表征负载的高低,负载值与负载呈正相关关系),若第一设定阈值为10,或者此时各计算节点负载的平均值为10,此时,系统需要从除第一节点外的其他计算节点中,确定出用于部署第一节点中部分容器的计算节点,作为第二节点。

具体地,系统可以先确定出第一节点中I/O负载最高的一个目标容器,再根据除第一节点外的其他计算节点的负载数据,确定出I/O负载最高的一个计算节点,将该节点作为第二节点,此时,将第一节点中的目标容器迁移到第二节点中,来调整各个计算节点中容器的分布。

当然,在本说明书中,还可以通过其他方式来确定出需要调整容器分布的计算节点。

若系统确定目标容器对应的运算时长与其他容器对应的运算时间之间差值超过第二设定阈值,那么系统可以根据各计算节点的负载数据,确定部署待创建的新容器的计算节点,作为确定出需要调整容器分布的计算节点。

其中,第二设定阈值可以是预先设定的,也可以是各个容器对应的运算时长对应的平均值。

例如,若确定出的目标容器的数量为1,该目标容器对应的运算时长为20min,除该目标容器其他容器对应的运算时长为10min,系统确定目标容器对应的运算时长与其他容器对应的运算时间之间差值超过系统设定的第二设定阈值(如5min),此时,系统可以根据各计算节点的负载数据,确定部署待创建的新容器的计算节点,作为确定出需要调整容器分布的计算节点,作为目标节点。

在这种情况下,系统用于确定出目标节点的方法有很多。

具体地,系统可以按照各计算节点的负载数据从小到大的顺序,将除部署有目标容器的计算节点以外的其他节点进行排序,得到第二排序结果,按照第二排序结果中各其他节点的从前到后的排列顺序,依次判断相邻排序的两个其他节点之间的负载差值是否位于预设差值范围内。

针对任意相邻排序的两个其他节点,若确定该相邻排序的两个其他节点之间的负载差值未落入预设差值范围内,系统可以将该相邻排序的两个其他节点中负载较轻的节点,作为部署待创建的新容器的计算节点,否则,继续判断下一相邻排序的两个其他节点之间的负载差值是否位于预设差值范围内,直至遍历完第二排序结果中的所有其他节点或确定出部署待创建的新容器的计算节点为止。

其中,各计算节点的负载数据可以由GPU利用率、CPU利用率、内存使用率、存储设备的带宽来表征。

例如,系统可以先按照各计算节点的GPU利用率数据从小到大的顺序,将除部署有目标容器的计算节点以外的其他节点进行排序。

针对任意相邻排序的两个其他节点,若确定该相邻排序的两个其他节点之间的GPU利用率的差值未落入预设差值范围内,则将该相邻排序的两个其他节点中GPU利用率较低的节点,作为部署待创建的新容器的计算节点,否则,继续判断下一相邻排序的两个其他节点之间的GPU利用率差值是否位于预设差值范围内,直到确定出部署待创建的新容器的计算节点为止。

若在第二排序结果中任意相邻的两个节点的GPU利用率的差值均落入预设差值范围内,此时,系统可以按照各计算节点的CPU利用率数据从小到大的重新顺序,将除部署有目标容器的计算节点以外的其他节点进行排序,重新得到第二排序结果。

此时,针对任意相邻排序的两个其他节点,若确定该相邻排序的两个其他节点之间的CPU利用率的差值未落入预设差值范围内,则将该相邻排序的两个其他节点中CPU利用率较低的节点,作为部署待创建的新容器的计算节点。

以此类推,系统可以通过依次比较其他节点的GPU利用率、CPU利用率、内存使用率、存储设备的带宽等数据大小,直到确定出部署待创建的新容器的计算节点。

若系统依次比较其他节点的GPU利用率、CPU利用率、内存使用率、存储设备的带宽等数据大小后,仍然没有确定出部署待创建的新容器的计算节点,系统还可以采用其他方法确定出部署待创建的新容器的计算节点。

具体地,若系统确定第二排序结果中任意相邻排序的两个其他节点之间的负载差值均位于预设差值范围内,则系统可以确定与部署在待创建的新容器中的子模型存在网络层依赖关系的子模型,作为关联子模型。也就是说,假设一个子模型的输出结果为另外一个子模型的输入,那么这两个子模型可以作为关联子模型。

同时,系统可以确定部署有关联子模型的计算节点,作为关联节点。系统可以测试各其他节点与关联节点之间的网络延迟大小,再根据测试得到的网络延迟,从各其他节点中确定出部署待创建的新容器的计算节点。

例如,系统可以将关联节点之间的网络延迟最小的节点,作为部署待创建的新容器的计算节点。或者,系统可以确定各关联节点之间网络延迟的平均值,将网络延迟时间低于该平均值的其他节点,作为部署待创建的新容器的计算节点。

在确定出待创建的新容器的计算节点后,系统可以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,在目标节点中创建新容器,并对目标容器中部署的子模型的模型数据进行复制,以将复制得到的子模型部署在新容器中。

除此之外,系统还可以通过其他方式确定出目标节点。

具体地,系统可以先确定部署目标容器的计算节点,若确定部署目标容器的计算节点中还部署有指定容器,系统可以将部署目标容器的计算节点,作为确定出需要调整容器分布的计算节点,其中,指定容器中部署的子模型与目标容器中部署的子模型相同。

在确定出目标节点后,系统可以以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,将部署目标容器的计算节点中的目标容器或指定容器删除。

也就是说,若子模型模型参数相同的多个容器同时部署一个物理节点(如相同物理机)上,系统可以以部署有子模型的各计算节点中的容器所对应的运算时长相接近为调整目标,删除掉该物理节点上的容器,仅保留该物理节点上部署的子模型的模型参数相同的一个容器。

值得说明的是,本说明书中对目标节点中各容器的分布进行调整时,系统都是以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内,且部署有容器的各计算节点的负载之间的负载偏差位于预设负载范围内为调整目标,对目标节点中各容器的分布进行调整。

S114:基于调整容器分布后的各计算节点,执行所述目标模型的训练任务。

在系统对目标节点中各容器的分布进行调整后,基于调整容器分布后的各计算节点,系统可以继续采用样本数据,执行目标模型的训练任务。

值得说明的是,在对目标节点中各容器的分布进行调整之前,系统可以在当前所有容器上执行断点保存操作,将当前训练迭代次序的训练信息保存。

基于调整容器分布后的各计算节点,通过断点加载操作,系统可以获取到将之前保存的训练信息,再启动对所有容器中子模型的训练线程,继续对各个子模型进行训练。值得说明的是,新创建的容器中子模型的中间训练变量可以从与该子模型模型数据相同的其他容器中拷贝。

需要进行说明的是,本说明书阐述的上述内容,是仅以系统为执行主体,对模型训练的方法进行说明的。但实际上,该系统可以由多个计算节点、分析器以及调度器构成。

图2为本说明书提供一种系统关系示意图。

如图2所示,各个计算节点在对各个子模型进行分布式训练的过程中,各个计算节点会不断向共享存储系统中批量写入训练统计信息。

在对各个计算节点中包含的容器的分布进行调整之前,分析器可以从共享存储系统中读取到训练统计信息,以此来获取各计算节点在执行模型训练任务时的负载数据,以及针对每个容器,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长,作为该容器对应的运算时长。

分析器在根据各计算节点的负载数据以及各容器对应的运算时长,确定出需要调整容器分布的计算节点后,调度器可以调整各计算节点中容器的分布。

图3为本说明书提供的容器调整示意图。

如图3所示,调度器可以以部署有子模型的各计算节点中的容器所对应的运算时长相接近为调整目标,对目标节点中各容器的分布进行调整。具体调整方法在S110至S112步骤中已进行了详细说明。

在调度器对容器分布进行调整后,基于调整容器分布后的各计算节点,各计算节点可以继续执行目标模型的训练任务。

从上述方法中可以看出,在执行模型训练任务时,先将目标模型拆分为多个子模型,再确定用于部署各个子模型的各计算节点,并在各计算节点上创建各容器,以将各子模型分别部署到所述各容器内,以通过各计算节点完成训练任务。在模型训练过程中,本申请监测各个计算节点的负载数据,以部署有子模型的各计算节点中的容器所对应的运算时长相接近为调整目标,对所述各计算节点中各容器的分布进行动态调整,有利于各个计算节点之间负载均衡,进一步地提高了模型训练的效率。

以上为本说明书的一个或多个实施的方法,基于同样的思路,本说明书还提供了相应的模型训练的装置,如图4所示。

图4为本说明书提供的一种的模型训练的装置的示意图,包括:

第一获取模块400,用于获取样本数据以及目标模型;

拆分模块402,用于将所述目标模型进行拆分,以得到各子模型,其中,每个子模型包含有所述目标模型中的部分网络层;

第一确定模块404,用于根据所述各个子模型,确定用于部署所述各个子模型的各计算节点,并在所述各计算节点上创建各容器,以将所述各子模型分别部署到所述各容器内;

第一训练模块406,用于采用所述样本数据执行模型训练任务,以训练所述各容器内的部署的子模型;

第二获取模块408,用于获取所述各计算节点在执行模型训练任务时的负载数据,以及针对每个容器,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长,作为该容器对应的运算时长;

第二确定模块410,用于根据所述各计算节点的负载数据以及所述各容器对应的运算时长,确定出需要调整容器分布的计算节点,作为目标节点;

调整模块412,用于以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,对所述目标节点中各容器的分布进行调整;

第二训练模块414,用于基于调整容器分布后的各计算节点,执行所述目标模型的训练任务。

可选地,所述拆分模块402具体用于确定在执行模型训练任务时所述目标模型的运算时长,作为所述目标模型的运算时长;根据所述目标模型的运算时长,将所述目标模型中包含的各网络层进行拆分,以得到各子模型。

可选地,所述第二获取模块408具体用于从预设的共享存储系统中确定出该容器所对应的训练统计信息;根据所述训练统计信息中包含的执行该容器内部署的子模型的训练任务的起始时间以及结束时间,确定在执行该容器内部署的子模型的训练任务时该子模型的运算时长;

其中,所述共享存储系统中存储的各训练统计信息是基于各计算节点在执行模型训练任务时所产生的目标日志确定出的,所述目标日志是根据预设的指定关键词,从各计算节点所产生的日志中过滤出来的,所述训练统计信息是在累计到指定数量后,写入到所述共享存储系统中,并从各计算节点中删除。

可选地,所述第二确定模块410具体用于按照所述各计算节点中各容器对应的运算时长从大到小的顺序,对各容器进行排序,得到第一排序结果;将所述第一排序结果中位于设排位前的容器,作为目标容器;根据所述目标容器以及所述各计算节点的负载数据,确定出需要调整容器分布的计算节点。

可选地,所述第二确定模块410具体用于确定部署所述目标容器的计算节点,作为第一节点;若根据所述第一节点的负载数据确定所述第一节点的负载高于第一设定阈值,则从其他计算节点中确定出用于部署所述第一节点中部分容器的计算节点,作为第二节点;将所述第一节点和所述第二节点确定为需要调整容器分布的计算节点。

可选地,所述第二确定模块410具体用于若确定所述目标容器对应的运算时长与其他容器对应的运算时间之间差值超过第二设定阈值,则根据所述各计算节点的负载数据,确定部署待创建的新容器的计算节点,作为确定出需要调整容器分布的计算节点;

所述调整模块412,具体用于以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,在所述目标节点中创建新容器,并对所述目标容器中部署的子模型的模型数据进行复制,以将复制得到的子模型部署在所述新容器中。

可选地,所述第二确定模块410具体用于按照所述各计算节点的负载数据从小到大的顺序,将除部署有所述目标容器的计算节点以外的其他节点进行排序,得到第二排序结果;按照所述第二排序结果中各其他节点的从前到后的排列顺序,依次判断相邻排序的两个其他节点之间的负载差值是否位于预设差值范围内;针对任意相邻排序的两个其他节点,若确定该相邻排序的两个其他节点之间的负载差值未落入所述预设差值范围内,则将该相邻排序的两个其他节点中负载较轻的节点,作为部署待创建的新容器的计算节点,否则,继续判断下一相邻排序的两个其他节点之间的负载差值是否位于预设差值范围内,直至遍历完所述第二排序结果中的所有其他节点或确定出部署待创建的新容器的计算节点为止。

可选地,所述第二确定模块410还用于,若确定所述第二排序结果中任意相邻排序的两个其他节点之间的负载差值均位于所述预设差值范围内,则确定与部署在待创建的新容器中的子模型存在网络层依赖关系的子模型,作为关联子模型;确定部署有所述关联子模型的计算节点,作为关联节点;测试各其他节点与所述关联节点之间的网络延迟;根据测试得到的网络延迟,从各其他节点中确定出部署待创建的新容器的计算节点。

可选地,所述第二确定模块410具体用于,确定部署所述目标容器的计算节点;若确定部署所述目标容器的计算节点中还部署有指定容器,则将部署所述目标容器的计算节点,作为确定出需要调整容器分布的计算节点,其中,所述指定容器中部署的子模型与所述目标容器中部署的子模型相同;

所述调整模块412,具体用于以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内为调整目标,将部署所述目标容器的计算节点中的所述目标容器或所述指定容器删除。

可选地,所述调整模块412具体用于,以部署有子模型的各计算节点中的容器所对应的运算时长之间的偏差位于预设偏差范围内,且部署有容器的各计算节点的负载之间的负载偏差位于预设负载范围内为调整目标,所述目标节点中各容器的分布进行调整。

本说明书还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图1提供的一种模型训练的方法。

本说明书还提供了图5所示的一种对应于图1的电子设备的示意结构图。如图5所示,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述图1所述的模型训练的方法。

当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device, PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20 以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。

相关技术
  • 降低推测性代码行在片上缓存中的优先级
  • 一种改善豫中“上六片”香气、降低杂气和刺激性的方法
技术分类

06120116347716