一种基于流水线并行的模型训练方法、装置以及设备与流程

文档序号:26052214发布日期:2021-07-27 15:28阅读:169来源:国知局
一种基于流水线并行的模型训练方法、装置以及设备与流程

本说明书涉及机器学习技术领域,尤其涉及一种基于流水线并行的模型训练方法、装置以及设备。



背景技术:

近年来,深度学习已极大地推动了人工智能技术的发展,在很多领域已获得良好的效果。然而,随着人工智能技术的发展,模型的参数规模也越来越大,其增长速度甚至已远超过硬件处理性能的增长速度。

为了解决这个矛盾,模型并行技术逐渐受到研究者们的重视。模型并行可以将一个大规模模型划分为多个模型切片,并分配到不同的工作机上,从而实现大规模模型的训练或者推理。传统的模型并行技术,同一时刻只能保证一个工作机运行,其他的空置。

基于此,还需要效率更高的模型并行训练的方案。



技术实现要素:

本说明书一个或多个实施例提供一种基于流水线并行的模型训练方法、装置、设备以及存储介质,用以解决如下技术问题:需要效率更高的模型并行训练的方案。

为解决上述技术问题,本说明书一个或多个实施例是这样实现的:

本说明书一个或多个实施例提供的一种基于流水线并行的模型训练方法,包括:

根据正常训练顺序对待训练模型进行切分,得到多个子切片;

将正常训练顺序在前的一部分所述子切片划分至第一组中,构成第一子模型,将剩余的所述子切片划分至第二组中,构成第二子模型;

将所述第一子模型包含的子切片分配给不同的工作方,以及将所述第二子模型包含的子切片分配给不同的工作方;

根据调整得到的训练顺序,在被分配了子切片的工作方上为所述子切片分配训练时间块,所述训练顺序包括:针对单轮训练样本,依次执行所述第一子模型本周期的正向传播、所述第一子模型前一周期的反向传播、所述第二子模型本周期的正向传播、所述第二子模型本周期的反向传播;

按照所述训练时间块,在多个所述工作方上对所述待训练模型进行并行训练。

本说明书一个或多个实施例提供的一种基于流水线并行的模型训练装置,包括:

子切片切分模块,根据正常训练顺序对待训练模型进行切分,得到多个子切片;

子模型构成模块,将正常训练顺序在前的一部分所述子切片划分至第一组中,构成第一子模型,将剩余的所述子切片划分至第二组中,构成第二子模型;

子模型分配模块,将所述第一子模型包含的子切片分配给不同的工作方,以及将所述第二子模型包含的子切片分配给不同的工作方;

训练时间块分配模块,根据调整得到的训练顺序,在被分配了子切片的工作方上为所述子切片分配训练时间块,所述训练顺序包括:针对单轮训练样本,依次执行所述第一子模型本周期的正向传播、所述第一子模型前一周期的反向传播、所述第二子模型本周期的正向传播、所述第二子模型本周期的反向传播;

并行训练模块,按照所述训练时间块,在多个所述工作方上对所述待训练模型进行并行训练。

本说明书一个或多个实施例提供的一种基于流水线并行的模型训练设备,包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:

根据正常训练顺序对待训练模型进行切分,得到多个子切片;

将正常训练顺序在前的一部分所述子切片划分至第一组中,构成第一子模型,将剩余的所述子切片划分至第二组中,构成第二子模型;

将所述第一子模型包含的子切片分配给不同的工作方,以及将所述第二子模型包含的子切片分配给不同的工作方;

根据调整得到的训练顺序,在被分配了子切片的工作方上为所述子切片分配训练时间块,所述训练顺序包括:针对单轮训练样本,依次执行所述第一子模型本周期的正向传播、所述第一子模型前一周期的反向传播、所述第二子模型本周期的正向传播、所述第二子模型本周期的反向传播;

按照所述训练时间块,在多个所述工作方上对所述待训练模型进行并行训练。

本说明书一个或多个实施例提供的一种非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为:

根据正常训练顺序对待训练模型进行切分,得到多个子切片;

将正常训练顺序在前的一部分所述子切片划分至第一组中,构成第一子模型,将剩余的所述子切片划分至第二组中,构成第二子模型;

将所述第一子模型包含的子切片分配给不同的工作方,以及将所述第二子模型包含的子切片分配给不同的工作方;

根据调整得到的训练顺序,在被分配了子切片的工作方上为所述子切片分配训练时间块,所述训练顺序包括:针对单轮训练样本,依次执行所述第一子模型本周期的正向传播、所述第一子模型前一周期的反向传播、所述第二子模型本周期的正向传播、所述第二子模型本周期的反向传播;

按照所述训练时间块,在多个所述工作方上对所述待训练模型进行并行训练。

本说明书一个或多个实施例采用的上述至少一个技术方案能够达到以下有益效果:通过将待训练模型切分出的子切片组合得到子模型,根据子模型以及调整得到的训练顺序进行并行训练,能够在满足一致性,保证训练效果的前提下,提高并行度,提高设备利用率,更为高效地进行并行训练过程。

附图说明

为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本说明书一个或多个实施例提供的一种基于流水线并行的模型训练方法的流程示意图;

图2为本说明书一个或多个实施例提供的一种传统的模型并行训练方案的示意图;

图3为本说明书一个或多个实施例提供的一种并行训练方案的示意图;

图4为本说明书一个或多个实施例提供的一种并行训练方案的示意图;

图5a为本说明书一个或多个实施例提供的一种并行训练方案的示意图;

图5b为本说明书一个或多个实施例提供的,在图5a的基础上进一步改进的一种并行训练方案的示意图;

图6为本说明书一个或多个实施例提供的子切片切分以及子模型分配示意图;

图7为本说明书一个或多个实施例提供的调整训练顺序的示意图;

图8为本说明书一个或多个实施例提供的多轮训练样本下的流水线并行训练方案的示意图;

图9为本说明书一个或多个实施例提供的并行训练时内存情况示意图;

图10为本说明书一个或多个实施例提供的重计算与正向激活传输和反向梯度接收并行示意图;

图11为本说明书一个或多个实施例提供的一种基于流水线并行的模型训练装置的结构示意图;

图12为本说明书一个或多个实施例提供的一种基于流水线并行的模型训练设备的结构示意图。

具体实施方式

本说明书实施例提供一种基于流水线并行的模型训练方法、装置、设备以及存储介质。

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

在本说明书一个或多个实施例中,工作方指的是,用于执行模型训练的设备、进程等,一般为单个工作者(可以称为worker)、或者由多个工作者构成的工作机集群(可以称为stage)等。模型并行指的是,当单个工作方的性能(比如,内存或显存等)难以完成整个模型的训练时,将单个模型拆分为多个层(比如,神经网络模型的隐藏层中的各层),分别分配到多个工作方上,以实现更大规模模型的训练。模型切片指的是,在模型并行训练过程中,单个工作方上运行的层就是一个模型切片。流水线并行指的是,模型切片之间有顺序的数据依赖关系,传统的模型并行在其中一个工作方运算时,其余工作方处于空置状态,而流水线并行则是指在后一个工作方进行当前数据的后续运算时,前一个工作方可以输入新的数据进行运算,以此重叠运算,提升训练效率。

在本说明书一个或多个实施例中,权值更新公式为:其中,w(t)为第t轮训练样本(正常情况下,一轮训练样本对应于一个输入周期,一轮训练样本的训练过程包括一轮正向传播以及一轮反向传播)时所使用的权值版本,为第n个模型切片上第t-tn-1轮训练样本内所使用的权值版本。一轮训练样本比如是一个批次的样本。

针对并行训练过程中的权值更新,在此提出三个一致性的概念。一致性a:模型切片的正向传播和反向传播的权值一致性,这点直接关系到所求的梯度是否正确,是并行训练最基本的一致性。一致性b:在同一轮训练样本中,各模型切片之间更新的一致性,即权值更新公式中t0,t1……tn-1是否相同。一致性c:权值更新的一致性,指计算梯度的权值版本和被更新的权值是否一致,即公式中t与t-t0,t-t1……t-tn-1t是否相等,此时可知一致性b是一致性c的必要条件。

当并行训练过程满足一致性a时,能够保证计算得到的梯度的正确性,也就能够保证权值更新时的正确性。当并行训练过程满足一致性b和一致性c时,并行训练过程能够有更好的训练效果,比如,收敛速度更快或训练结果更准确。基于此,当并行训练过程不满足三个一致性的概念时,虽然仍能够进行并行训练,但往往给训练效果带来不利影响。

为了便于描述,在此定义fij和bij分别表示第i轮训练样本的第j个模型切片的正向传播和反向传播,vij表示第i个模型切片的第j个权值版本。

图1为本说明书一个或多个实施例提供的一种基于流水线并行的模型训练的流程示意图。该流程是针对实验性质的并行训练方案进行一系列改进得到的,为了便于理解,先对这些实验方案也进行介绍,之后再具体介绍该流程。

在本说明书一个或多个实施例中,图2至图7为本说明书提供的多种并行训练方案,以及并行训练方案中相应过程的示意图,在示意图中竖轴表示不同的工作方,横轴表示时间,由此划分得到多个训练时间块(以下简称时间块),用不同形式的时间块表示时间块中的数字表示当前的传播过程为第几轮训练样本。在硬件条件方面以设置4个工作方(工作方0至工作方3)为例。另外,各时间块虽然在各示意图中的大小一致,但是其在不同的示意图中表示的时长并不一定相同,即使是在相同的示意图中,表示的时长也不一定相同,需要根据实际情况进行预定义,以取得更好的效果。

图2为本说明书一个或多个实施例提供的一种传统的模型并行训练方案(即背景技术中提到的方案)的示意图,其虽然能够满足三个一致性,但是能够看出,各工作方处于空置状态的时间较长,明显大于其工作状态的时间,设备利用率很低。

在本说明书一个或多个实施例中,为解决图2所示的并行训练方案中设备利用率低的问题,提供了如图3所示的一种并行训练方案的示意图。在各工作方上经过f10之后,通过流水线并行的方式继续并行训练,明显提高了设备利用率,但是其却存在不满足三个一致性的问题。

从横向上看,在同一个工作方上,相同输入周期的正向传播和反向传播所使用的权值版本不一致。比如,在第一工作方上,f20使用没有更新过的权值版本v00,而由于在b10时权值版本已经更新成为v01,所以b20所使用的权值版本为v01,与f20使用的权值版本不同,不符合一致性a。类似地,f30、f40……f70都存在相同的问题,不符合一致性a。

从纵向上看,不同的工作方上,同一轮训练样本所对应的模型切片的更新次数也不一致。比如,在工作方0上f60使用的权值版本为v00,但是在工作方1上,由于b11时权值版本已经更新成为v01,所以f61使用的权值版本为v01,与f60使用的权值版本不同,不符合一致性b,同时也就不符合一致性c。

基于此,本实施例中所提出的并行训练方法虽然提高了设备利用率,但是却不符合三个一致性,容易导致最终训练的效果不佳。

在本说明书一个或多个实施例中,为解决图2所示的并行训练方案中设备利用率低的问题,还提供了如图4所示的一种并行训练方案的示意图。针对各工作方,将该工作方上的已成批次的训练样本进一步划分为多个更小的批次,然后在该工作方上按顺序依次执行这多个批次,而其他工作方可以在同一时间也执行相应的批次。比如,将f10分为四个批次,在工作方0上执行完f10的第一个批次,开始执行f10的第二个批次的同时,在工作方1上开始执行f11的第一个批次。

而为了保证权值更新的正确性,在单个批次完成后并不会马上更新,而是将其梯度进行累积,直到单个模型切片中的所有批次都完成后,再统一更新。基于此,该方案增加了一定的利用率,并且满足三个一致性,但是可以从图中知道,运行过程中仍有较多的空置状态区域,设备利用率仍有提高的空间。

在本说明书一个或多个实施例中,为解决图2所示的并行训练方案中设备利用率低的问题,还提供了如图5a所示的一种并行训练方案的示意图。其拥有更高的并行度,但是从其更新公式

可以明显看出,它只符合一致性a,并不符合一致性b和一致性c。

具体地,在权值更新时传统的方案是,运行时工作方i(比如工作方0、工作方1、工作方2)保存n-i(i=0,1,…,n-1)个权值版本,以保证一致性a。这样共需要(n+1)*n/2个模型切片版本,当n较大时,将消耗大量显存。另外,当n较大时,运行时激活也是不可忽略的一部分设备运行能力消耗(比如显存消耗),这些都限制了本方案训练大型模型的能力。

进一步地,为解决显存消耗以及有效更新的问题,提供了如图5b所示的在图5a的基础上进一步改进的一种并行训练方案的示意图。在该方案中,并行度并未作出改变,而是在权值更新上进行了进一步改进。通过借助梯度累积实现周期性更新,将每个模型切片的权值版本数目减少到2,权值版本总数由(n+1)*n/2减少到2n,显著的降低了显存消耗。通过权值更新公式:可以得知,其保证了一致性a和一致性b,但是权值更新时用的是老版本权值wt-1的梯度更新到最新版本权值wt上,不满足一致性c。

在本说明书一个或多个实施例中,设计了一种基于流水线并行的模型训练的方案。将待训练模型切分得到多个子切片,将子切片按照训练顺序划分到不同的组中,以划分构成两个子模型。将两个子模型中的子切片分配给不同的工作方后,根据调整得到的训练顺序进行流水线并行训练。不仅能够提升并行训练过程中的设备利用率,还能根据调整后的训练顺序来保证并行训练过程符合三个一致性概念,实现了高效的并行训练过程。

下面基于这样的思路,具体对图1进行说明。

图1的方法可以应用于不同的业务领域,比如,互联网金融业务领域、电商业务领域、即时通讯业务领域、游戏业务领域、公务业务领域等需要使用模型的业务领域,特别适用于需要使用超大模型的业务领域。该流程可以由相应领域的计算设备(比如,支付业务对应的风控服务器或者智能移动终端等)执行,流程中的某些输入参数或者中间结果允许人工干预调节,以帮助提高准确性。

图1中的流程可以包括以下步骤:

s102:根据正常训练顺序对待训练模型进行切分,得到多个子切片。

对待训练模型进行切分时,可以直接得到多个子切片,也可以在已有的模型切片的基础上,将各模型切片进一步划分得到多个子切片。

具体地,若在执行本说明书实施例之前,工作方上已有了根据层对待训练模型切分得到的可用于模型并行的多个模型切片,则可以获取这些模型切片,并将各模型切片分别进一步切分为两个子切片。在切分子切片时,切分的方向与划分模型切片的方向一致。正常训练顺序在前的子切片更靠近输入层,在并行训练过程中,更先进行该子切片的正向传播,相应地,也就更靠后地进行该子切片的反向传播。基于此,能够更便利地对已有的模型并行训练过程进行改进。

s104:将正常训练顺序在前的一部分所述子切片划分至第一组中,构成第一子模型,将剩余的所述子切片划分至第二组中,构成第二子模型。

图6为本说明书一个或多个实施例提供的子切片切分以及子模型分配示意图。在此需要说明的是,在实际的训练过程中,并不一定需要将各模型切片分配至工作方上再划分,而是可以直接对待训练模型划分得到子切片,或对各模型切片进行进一步划分得到子切片,在图6中的上半部分中,在各工作方上展示各模型切片仅是为了能够更方便于进行解释。

在子模型划分时,可以将正常训练顺序在前的一半数量的子切片划分到第一组中,构成第一子模型(在此将其称作g0),然后将剩余的子切片划分至第二组中,构成第二子模型(在此将其称作g1)。比如,图6中共划分有8个子切片,将训练顺序在前4个子切片组成g0,将训练顺序在后的4个子切片组成g1,然后将g0与g1分别分配至各工作方上。

s106:将所述第一子模型包含的子切片分配给不同的工作方,以及将所述第二子模型包含的子切片分配给不同的工作方。

在g0、g1中的各子切片,也具有相应的训练顺序,首先确定g0所包含的子切片的第一训练顺序,以及g1所包含的子切片的第二训练顺序。然后将第一训练顺序与第二训练顺序中排序相同的子切片分配给同一个工作方,排序不同的子切片分配给不同的工作方。比如,将第一训练顺序中排序第一、第二训练顺序中排序第一的子切片,都分配给工作方0。将第一训练顺序中的4个子切片,分别按顺序分配给工作方0至工作方3。

s108:根据调整得到的训练顺序,在被分配了子切片的工作方上为所述子切片分配训练时间块,所述训练顺序包括:针对单轮训练样本,依次执行所述第一子模型本周期的正向传播、所述第一子模型前一周期的反向传播、所述第二子模型本周期的正向传播、所述第二子模型本周期的反向传播。

s110:按照所述训练时间块,在多个所述工作方上对所述待训练模型进行并行训练。

g0在执行完正向传播后马上可以执行它的反向传播,这样能够在同一组工作方(如图6中所示的4个工作方)上交替运行,那么在进行周期性并行更新时,g0就可以隔绝g1连续两轮训练样本的更新,g1同样也可以隔绝g0连续两轮训练样本的更新。这样就可以使g0和g1都满足三个一致性,并且只需要单个权值版本。然而实际上,如图6所示,在传统的方式中,未调整训练顺序之前,g0的反向需要等到g1的反向执行结束才可以执行。

基于此,可以在本轮训练样本内借用上一轮训练样本内的g0的反向传播。图7为本说明书一个或多个实施例提供的调整训练顺序的示意图。在执行第n轮训练样本内的并行训练时,借用了第n-1轮训练样本中的g0的反向传播,类似地,执行第n+1轮训练样本内的并行训练时,借用了第n轮训练样本中的g0的反向传播。基于此,一个完整的w-型并行训练的输入周期由两组权值的正向传播以及反向传播组成,通过重复执行该完整的w-型并行训练的输入周期,实现在多个工作方上对待训练模型进行并行训练。

在本说明书一个或多个实施例中,针对多轮训练样本(或多轮训练样本)时,如果采用在一轮训练样本完成后,再执行下一轮训练样本的方式,仍会导致设备利用率较低。

基于此,图8为本说明书一个或多个实施例提供的多轮训练样本下的流水线并行训练方案的示意图。开始并行训练时,首先以连续输入的方式输入g0从第一轮开始的若干轮的正向传播,比如图8中所示的最开始的4轮训练样本的g0的正向传播。然后以间隔单个时间块的方式输入剩余的传播(包括剩余的正向传播以及反向传播),并将g1的第一轮反向传播以及后续的传播分配至间隔的时间快中,以此形成流水线并行训练,能够有效提高设备利用率。

进一步地,若此时在每轮训练样本内都进行权值更新,则会造成不符合一致性的情况发生。因此,在多轮训练样本中的正向传播后,计算得到相应的梯度结果时,不立马进行权值更新,而是将梯度结果进行累积。在多轮训练样本中最后一轮训练样本的反向传播时进行权值更新。比如,在4轮训练样本的正向传播后计算并累积梯度结果,在第4轮训练样本的反向传播时进行权值更新。

更进一步地,在对g1进行权值更新时,在g0的隔绝下,g1可以单权值版本更新,在此称为正确更新,只需要根据当前权值版本(对应于t)对应的权值即可对g1进行权值更新(更新后的权值版本对应于t+1),权值更新如公式其中,表示g1第t轮训练样本内各子切片的权值。g1部分包含损失函数loss,其梯度更新的正确性,对收敛性有着加重要的意义。

在对g0进行权值更新时,由于g0的反向传播过程是借用上轮训练样本g0的反向传播,那么g0更新产生新版权值后,依然存在还没有执行反向传播的老版本权值的正向传播。这样g0就需要版本管理,在此称作有效更新,根据当前权值版本和前一个权值版本(对应于t-1)所对应的权值对g0进行权值更新,权值更新如公式其中,表示g0在第t-1轮训练样本内各子切片的权值。

图9为本说明书一个或多个实施例中并行训练时内存情况示意图,如图9所示,显存消耗主要分为模型,历史权值版本缓存(简称权值缓存)和运行时激活三部分。模型所需要显存主要分为两部分:权值和梯度。权值缓存用于保存各个工作方需要保存的历史权值,它的大小因不同更新策略而不同。显存消耗最大的通常是运行时激活,运行时激活比如包括通过激活函数来计算相应得到的数据,它的大小受到模型权值规模、单轮训练样本批次大小(batchsize)和梯度累积周期的影响。运行时激活在没有运行到对应的反向传播过程时,是不会被释放,需要与历史权值版本之间通过设置参数、复制参数等操作来计算新的权值版本,所以非重计算的梯度累积,将会消耗大量显存。

基于此,图10为本说明书一个或多个实施例中重计算与正向激活传输和反向梯度接收并行示意图,在多个工作方中的任意一个工作方i(在此以第一工作方为例进行解释说明)上执行正向传播的过程中,计算运行时激活得到相应的数据,并在使用完该相应的数据后,在显存中释放该运行时激活。然后在第一工作方执行该正向传播对应的反向传播时,需要等待第一工作方的上一个工作方(工作方i+1)在反向传播过程中传递的梯度结果,在等待梯度结果的这段时间,第一工作方重新计算运行时激活,来用于自身的反向传播过程。

此时,在理论上,运行时激活消耗的显存较少,仅为数据并行时运行时激活的一半,可以支持更大规模的模型训练。

虽然减少运行时激活节省了显存,但也引入了额外计算开销。如果不做任何处理,将会减少吞吐量。针对这个问题,还做出以下优化:利用节省出的显存,增加单轮训练样本批次大小来提升吞吐量。

具体地,当反向传播过程中梯度的传输时间大于重计算(重新执行运行时激活)的时间,那么重计算不会延长运行时间。这种情况往往出现在跨机模型并行或者传输数据很大时,例如卷积的featuresmap。

重计算节省出的显存可以用来增大batchsize提升吞吐。首先确定正常训练时设置的batchsize,然后通过释放运行时激活得到的空闲的显存,尝试增大batchsize。此时分两种情况:第一种情况,模型太大,各个工作方上的batchsize较小时,此时显存饱和但是加速设备的计算单元并不饱和,增加batchsize的同时,运行时间并不会明显增加,进而重计算增加batchsize产生吞吐的收益将大于重计算的消耗。但是第二种情况下,当batchsize大到一定程度时,加速设备的计算单元达到饱和状态,增大batchsize并不能提升吞吐,重计算并不能达到预期的效果。基于此,通过降低待训练模型中部分层的浮点数精度来推迟达到该饱和状态,在得到符合预期的batchsize和浮点数精度后,实现了通过混合精度来推迟加速设备计算单元达到饱和状态,从而促进提升batchsize对吞吐的提升效果。其中,在待训练模型训练的过程中,浮点数的位数(比如16位、32位等)越高,表示浮点数精度越高,其所占的计算资源也就越多。而在各层中,如果降低了某些层的浮点数精度,则会对训练过程或训练结果产生较大影响,则不去降低该部分层的浮点数精度,而是降低部分能够降低浮点数精度的层(降低该部分层的浮点数精度对训练过程和训练结果影响很小)的浮点数精度,来推迟计算单元达到饱和状态。

基于同样的思路,本说明书一个或多个实施例还提供了上述方法对应的装置和设备,如图11、图12所示。

图11为本说明书一个或多个实施例提供的一种基于流水线并行的模型训练装置的结构示意图,图中的虚线方框表示可选的模块,所述装置包括:

子切片切分模块1102,根据正常训练顺序对待训练模型进行切分,得到多个子切片;

子模型构成模块1104,将正常训练顺序在前的一部分所述子切片划分至第一组中,构成第一子模型,将剩余的所述子切片划分至第二组中,构成第二子模型;

子模型分配模块1106,将所述第一子模型包含的子切片分配给不同的工作方,以及将所述第二子模型包含的子切片分配给不同的工作方;

训练时间块分配模块1108,根据调整得到的训练顺序,在被分配了子切片的工作方上为所述子切片分配训练时间块,所述训练顺序包括:针对单轮训练样本,依次执行所述第一子模型本周期的正向传播、所述第一子模型前一周期的反向传播、所述第二子模型本周期的正向传播、所述第二子模型本周期的反向传播;

并行训练模块1110,按照所述训练时间块,在多个所述工作方上对所述待训练模型进行并行训练。

可选地,所述子切片切分模块1102,获取根据层对待训练模型切分得到的可用于模型并行的多个模型切片;

按照所述切分的方向,将所述模型切片进一步地切分为两个子切片。

可选地,所述子模型分配模块1106,确定所述第一子模型所包含的子切片的第一训练顺序,以及所述第二子模型所包含的子切片的第二训练顺序;

将所述第一训练顺序与所述第二训练顺序中,排序相同的子切片分配给同一个工作方,排序不同的子切片分配给不同的工作方。

可选地,所述训练顺序还包括:

针对多轮训练样本,以连续输入的方式输入所述第一子模型从第一轮开始的若干轮训练样本中对应的正向传播,以间隔单个训练时间块的方式输入剩余的传播,并将所述第二子模型的第一轮反向传播以及后续的传播分配至间隔的所述单个训练时间块中,以形成流水线并行训练。

可选地,所述并行训练模块1110包括梯度累积子模块11102、权值更新子模块11104:

所述梯度累积子模块11102,在多个所述工作方上,所述多轮训练样本中的所述正向传播后,计算得到相应的梯度结果,并将所述梯度结果进行累积;

所述权值更新子模块11104,根据累积的所述梯度结果,在所述多轮训练样本中的最后一轮训练样本的反向传播时进行权值更新。

可选地,所述权值更新子模块11104,在所述多轮训练样本中的最后一轮训练样本的反向传播时,根据当前权值版本所对应的权值对所述第二子模型进行权值更新,并根据当前权值版本和前一个权值版本所对应的权值对所述第一子模型进行权值更新。

可选地,所述并行训练模块1110,在对多个所述工作方中的第一工作方上执行正向传播的过程中,计算运行时激活,使用后在显存中释放所述运行时激活;

在所述第一工作方上执行所述正向传播对应的反向传播时,在等待所述第一工作方的上一个工作方反向传播的梯度结果时,所述第一工作方重新计算所述运行时激活,以用于自己的反向传播过程。

可选地,所述装置还包括

训练样本批次大小确定模块1112,确定正常训练时设置的单轮训练样本批次大小;

根据通过释放所述运行时激活得到空闲的显存,尝试增大所述单轮训练样本批次大小;

通过降低所述待训练模型中部分层的浮点数精度以推迟所述工作方的计算单元达到饱和状态的时刻,得到符合预期的单轮训练样本批次大小和浮点数精度。

图12为本说明书一个或多个实施例提供的一种基于流水线并行的模型训练设备,包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:

根据正常训练顺序对待训练模型进行切分,得到多个子切片;

将正常训练顺序在前的一部分所述子切片划分至第一组中,构成第一子模型,将剩余的所述子切片划分至第二组中,构成第二子模型;

将所述第一子模型包含的子切片分配给不同的工作方,以及将所述第二子模型包含的子切片分配给不同的工作方;

根据调整得到的训练顺序,在被分配了子切片的工作方上为所述子切片分配训练时间块,所述训练顺序包括:针对单轮训练样本,依次执行所述第一子模型本周期的正向传播、所述第一子模型前一周期的反向传播、所述第二子模型本周期的正向传播、所述第二子模型本周期的反向传播;

按照所述训练时间块,在多个所述工作方上对所述待训练模型进行并行训练。

处理器与存储器之间可以通过总线通信,设备还可以包括与其他设备通信的输入/输出接口。

基于同样的思路,本说明书一个或多个实施例还提供了对应于上述方法的一种非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为:

根据正常训练顺序对待训练模型进行切分,得到多个子切片;

将正常训练顺序在前的一部分所述子切片划分至第一组中,构成第一子模型,将剩余的所述子切片划分至第二组中,构成第二子模型;

将所述第一子模型包含的子切片分配给不同的工作方,以及将所述第二子模型包含的子切片分配给不同的工作方;

根据调整得到的训练顺序,在被分配了子切片的工作方上为所述子切片分配训练时间块,所述训练顺序包括:针对单轮训练样本,依次执行所述第一子模型本周期的正向传播、所述第一子模型前一周期的反向传播、所述第二子模型本周期的正向传播、所述第二子模型本周期的反向传播;

按照所述训练时间块,在多个所述工作方上对所述待训练模型进行并行训练。

在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmablelogicdevice,pld)(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardwaredescriptionlanguage,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

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

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

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

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

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

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

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

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

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

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

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

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

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备、非易失性计算机存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1