一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

分布式执行深度学习任务的优化方法和分布式系统与流程

2023-01-05 18:02:05 来源:中国专利 TAG:


1.本公开涉及深度学习领域,尤其涉及一种分布式执行深度学习任务的优化方法和分布式系统。


背景技术:

2.人工智能近年得到迅速发展,在图像分类、检测、视频和语音处理等领域取得良好的应用效果,并且依然具备广阔的发展前景。神经网络是人工智能应用的核心,深度学习神经网络算法是其中最常见的一种神经网络模型。深度学习神经网络的工作负载特征是计算和数据密集。神经网络计算所需的乘加操作通常为g数量级,例如当前目标检测类神经网络ssd的计算量为120g操作次数。训练神经网络所需的训练以及后续推理所需参数则通常为m至数百m字节数量级,例如分类神经网络vgg的参数量高达480m字节。由于常规计算机,甚至单个专用服务器无法提供如此高的算力并配备足够内存,因此越来越多的神经网络训练和推导在专门的神经网络平台上被分布式执行。
3.分布式执行需要对深度学习任务的数据或是模型进行切分,以使得被分配执行任务的节点执行各自的计算。现有技术中,如何对深度学习任务进行切分,尤其是围绕大规模分布式模型的性能调优,仍然需要专业人员在考虑多种因素后手动进行,时间开销大且效率低下。
4.因此,需要一种改进的深度学习任务分布式执行切分方案。


技术实现要素:

5.本公开要解决的一个技术问题是提供一种分布式执行深度学习任务的优化方法和分布式系统。本发明的优化方案通过基于设备分组的算子切分,并结合基于开销模型的优化求解,实现针对各类深度学习任务的分布式执行自动优化。进一步地,本发明可以引入基于分组的计算图分割,还可以根据不同的优化水平对求解空间进行限制,由此能够在可控的时间内生成所需优化级别的分布式执行方案。
6.根据本公开的第一个方面,提供了一种分布式执行深度学习任务的优化方法,包括:基于深度学习任务生成计算图并为所述深度学习任务的分布式执行分配硬件资源;对分配的所述硬件资源进行分组以获取至少一个分组方案,每个分组方案包括对所述硬件资源的设备数进行因数分解得到的至少一个因子;针对每个分组方案,基于该分组方案下的至少一个因子和所述计算图包含的多个算子各自涉及的张量信息,获取多个候选切分方案,其中,所述多个候选切分方案是使用该分组方案下的至少一个因子的值作为切分值,对所述多个算子各自涉及的张量进行不同维度上的切分而获取的;以及使用开销模型,从所述多个候选切分方案中选出效率最优的方案作为分布式执行切分方案,其中,所述分布式执行切分方案用于所述硬件资源对所述深度学习任务的执行。
7.可选地,所述获取至少一种分组方案之后还包括:针对每个分组方案,使用该分组方案下的至少一个因子的值作为分割值,将所述计算图分割成用于流水线并行执行的多个
阶段性子图。
8.可选地,所述将所述计算图分割成用于流水线并行执行的多个阶段性子图包括:评估计算图的分割位置以得到各自计算耗时相同的所述多个阶段性子图。
9.可选地,评估计算图的分割位置以得到各自计算耗时相同的所述多个阶段性子图包括:选取所述计算图中的关键算子并统计所有关键算子的总计算开销;根据所述总计算开销平均划分多个阶段性区间;基于每个关键算子本身及其前后关键算子计算开销设置该关键算子的区间范围;以及以跨区间张量的总通信开销最小为目标求取使得每个关键算子都落入各自设置区间范围内的优化解作为所述分割位置。
10.可选地,针对每个分组方案,基于该分组方案下的至少一个因子和所述计算图包含的多个算子各自涉及的张量信息,获取多个候选切分方案,包括:统计多个算子各自涉及的训练参数输入张量的总存储空间大小;以及在统计值超过预定阈值的情况下,选择一个或多个训练参数输入张量进行切分,获取多个候选切分方案。
11.可选地,针对每个分组方案,基于该分组方案下的至少一个因子和所述计算图包含的多个算子各自涉及的张量信息,获取多个候选切分方案包括:在当前分组方案包括多个因子的情况下,使用所述多个因子中的一个因子的值作为第一切分值,对所述计算图的多个算子各自包含的操作数进行不同维度上的一次切分;以及在一次切分的基础上,使用所述多个因子中除用作第一切分值的因子之外的一个其他因子的值作为第二切分值,对所述计算图的多个算子各自包含的操作数进行不同维度上的二次切分,其中,当前分组方案的所述多个候选切分方案基于多个算子的所述二次切分排列组合得到。
12.可选地,所述多个候选切分方案是使用该分组方案下的至少一个因子的值作为切分值,对所述多个算子各自涉及的张量进行不同维度上的切分而获取的包括:针对每个算子,采用预设优化策略,对该算子的张量进行预设维度的切分,得到一组切分排列;汇总所述计算图的每个算子的切分排列,得到针对该分组方案下的切分排列组合,将该切分排列组合作为多个候选切分方案。
13.可选地,所述该算子的张量进行预设维度的切分包括,对该算子的张量中的一个或多个进行任一维度的切分,或者该算子的张量不进行切分,其中,所述算子的张量包括该算子的输入张量和输出张量,所述切分是基于所述切分值在目标维度上的均匀切分。
14.可选地,所述预设优化策略包括以下多个策略中的至少一个:策略a)将所述计算图划分为多个优化子图,所述每个优化子图中包括至少一个算子;针对每个优化子图内的各算子的张量,采用在该优化子图内不产生通信开销的的方式进行切分;策略b)确定至少一个关键算子,对所述关键算子的张量进行任意维度的切分;针对所述关键算子预定相邻范围内的其他算子,采用在该预定相邻范围内不产生通信开销的的方式进行切分;以及策略c)从预设的规则库中筛选出与当前计算图和/或张量匹配的规则;基于匹配的规则进行当前计算图中关联算子的切分。
15.可选地,预设的规则库是包括可扩展添加的启发式规则。
16.可选地,所述至少一个因子包括:一个因子,所述因子的取值对应于所述硬件资源包括的硬件设备数;或者多个因子,所述多个因子取值的乘积对应于所述硬件资源包括的硬件设备数。
17.可选地,对分配的所述硬件资源进行分组以获取至少一个分组方案包括:对所述
硬件资源的设备数进行整数因式分解,获取多个分组方案,每个所述分组方案的因式分解方案不相同。
18.可选地,使用开销模型,从所述多个候选切分方案选出效率最优方案作为分布式执行切分方案,包括:针对每个分组方案,使用所述开销模型选取该分组方案下的效率最优的第一候选切分方案,得到多个第一候选切分方案;以及从所述多个第一候选切分方案中,采用所述开销模型选出一个效率最优的第二候选切分方案作为所述分布式执行切分方案。
19.可选地,使用开销模型,从所述多个候选切分方案选出效率最优方案作为分布式执行切分方案包括:使用所述开销模型,基于通信开销和计算开销筛选出效率最优方案。
20.可选地,所述候选切分方案的描述方式为:针对算子的高级别优化中间表示(hloir)以及针对每条hloir的拆分状态描述信息。
21.可选地,使用开销模型,从所述多个候选切分方案选出效率最优方案作为分布式执行切分方案包括:基于所述拆分状态描述信息对每条hloir的拆分策略建模成变量;设定变量间的约束条件;根据所述开销模型对每个候选切分方案的全图建模进行约束条件下最小值的求解;以及将最小值对应的各条hloir的拆分状态描述信息作为所述分布式执行切分方案。
22.可选地,所述方法还包括:基于所述分布式执行切分方案生成任务子图;以及将所述任务子图发送至所述硬件资源,用于深度学习任务的执行。
23.根据本公开的第二个方面,提供了一种执行深度学习任务的分布式系统,包括:主节点,用于执行第一方面所述的分布式执行深度学习任务的优化方法,并将基于所述分布式执行切分方案生成的任务子图发送至所述硬件资源用于深度学习任务的执行;执行节点,包括作为所述硬件资源的一个或多个硬件设备,用于基于所述分布式执行切分方案执行所述深度学习任务。
24.可选地,所述主节点将基于所述分布式执行切分方案生成的任务子图发送至所述硬件资源用于深度学习任务的执行包括:基于所述分布式执行切分方案,生成针对所述硬件资源的dag任务图并确定任务执行顺序;为每个执行节点生成带有所述任务执行顺序的任务子图;以及向每个执行节点发送专属的任务子图用于执行。
25.可选地,所述主节点还用于:汇总执行节点的当前运行状态;以及根据所述当前运行状态和接收到的深度学习任务,为各个深度学习任务分配所述硬件资源。
26.根据本公开的第三个方面,提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行如上述第一方面所述的方法。
27.根据本公开的第四个方面,提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行如上述第一方面所述的方法。
28.由此,本发明能够在计算图已知和分配硬件设备数量已知的情况下,自动为这些分配的硬件设备生成优化的分布式执行策略。具体地,本发明根据深度学习模型计算的普遍性特点,设计了普适的分布式策略描述形式和推导验证方法,能够实现分布式切分策略候选集生成和最佳策略筛选的全自动化规则制定;进一步地,可以根据优化级别限定候选切分策略的生成并控制筛选时间。
附图说明
29.通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
30.图1示出了典型cnn的组成例。
31.图2示出了基于深度计算框架构建的一个cnn网络训练的计算图的一个例子。
32.图3示出了张量的一个例子。
33.图4示出了针对batchmatmul算子进行几种拆分的例子。
34.图5示出了根据本发明一个实施例的分布式执行深度学习任务的优化方法的示意性流程图。
35.图6a-图6f示出了对计算图中的算子进行不同切分的例子。
36.图7示出了多个设备分组方案下获取分布式执行切分方案的例子。
37.图8示出了执行深度学习任务的分布式系统的组成示意图。
38.图9示出了本发明分布式系统主从架构的示意图。
39.图10示出了本发明分布式系统主从架构执行的分布式计算的简要流程例。
40.图11示出了在切分策略不匹配时的通信操作。
41.图12描述了多个dot算子组成的图结构在不同分布式策略情况下的通信开销情况。
42.图13示出了流水线并行的两个例子。
43.图14示出了基于计算耗时评估计算图划分位置的例子。
44.图15示出了根据本发明一实施例可用于实现上述分布式执行深度学习任务的优化方法的计算设备的结构示意图。
具体实施方式
45.下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
46.机器学习算力的不断发展推动了超大参数规模的各类模型、领域基础模型的开发和应用,与之相应的高效ai分布式计算框架和平台技术成为一个重要挑战。
47.数据并行(data parallel)是对深度学习模型进行分布式训练的一种常见形式,即把训练数据样本分成多份,在不同设备上复制出同样的模型参数同时进行训练,并将训练产生的参数梯度通过网络进行聚合之后完成参数更新。对于超大参数的模型,参数无法以复制的存放于单一设备上,因此数据并行会遭遇瓶颈,此时需要支持对模型本身进行切分实现大模型的分布式支持,并因此涉及模型并行(model parallel)。模型并行的常见操作包括把整个计算图按不同的先后阶段的划分到不同设备上,或是将超大的单个计算算子(数据)进行切分由多个设备共同计算并在特定位置进行数据交换或聚合。计算图划分的模型并行还可以与数据并行相结合,在同一设备上处理多个样本微批次(micro batch),实现流水线并行(pipeline parallel),并在处理完一定样本数量后进行结果聚合,以提高计算
设备的资源使用率。
48.通过上述这些并行手段,业界得以利用更大规模的算力平台支撑发展更大的深度学习模型,例如2022年上半年发布的先进语言类模型,参数规模达到5400亿,使用了6144块tpu处理器并达到57.8%的硬件flops效率。围绕大规模分布式模型的性能调优虽然目前有一些业内可参考工作,但由于需要给合模型的具体结构和计算访存特征,考虑硬件平台和网络连接的异构性,整个过程仍然有很大的复杂性,需要专业人员考虑各方面因素后进行手动性能调优,时间开销大,自动化程度低。
49.本发明提供一种深度学习任务的分布式训练平台及其优化执行方法,能够将分布式模型并行优化手段(包括数据并行、模型并行、流水并行、梯度累加、数据重用优化、通讯量优化等)进行整体建模并按不同优化等级进行求解,并联合运行时环境和编译联合优化等手段,满足不同场景下的各类需求,为每个模型自动产生专属的优化方案,提升单个任务的执行效率并改善平台整体设备使用率。
50.为了方便对本发明原理的理解,如下将首先对深度学习任务执行的相关概念进行描述。
51.人工神经网络(ann)是人工智能应用的核心,深度学习神经网络算法是其中最常见的一种神经网络模型。深度学习神经网络由具有一定深度的一系列层组成,并且工作负载特征是计算和数据密集。一种常见的深度学习模型包括卷积神经网络(cnn)的结构。cnn的权值共享网络结构使之类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。近年来,基于自注意力机制的transformer模型以相比于cnn更大的感知域更容易解决远距离依赖问题,因此在计算机视觉和语言模型领域(例如,预训练语言模型bert)得到迅猛发展。
52.虽然新的模型结构层出不穷,如下仍结合具有代表性的cnn进行神经网络基本概念的说明。图1示出了典型cnn的组成例。如图1所示,典型的cnn由一系列有序运行的层组成。
53.cnn模型的参数被称为“权重”(weights)。cnn的第一层读取输入图,并输出一系列的特征图(featuremap)。下面的层读取由上一层产生的特征图,并输出新的特征图。最后一个分类器(classifier)输出的是输入图可能属于某一类别的概率。conv层(卷积层)和fc层(全连层)是cnn中两种基本层类型。conv层后,通常有池化层(pooling layers)。
54.conv层以一系列特征图作为输入,并以卷积内核卷积获得输出特征图。通常与conv层相连的非线性层,即,非线性激励函数,被施加到输出特征图中的每个元素。使用的激励函数一般为relu函数,该层也通常称为relu层。池化(pooling)层:通常与conv层相连,用于输出每个特征图中的每个分区(subarea)的最大值或平均值。这种非线性的“降采样”不仅为下一层降低了特征图的大小和计算,还提供了一种平移不变性。cnn可用于前向推理过程中进行图像分类。
55.在部署使用模型进行推理(例如,图像分类)之前,首先需要对模型进行训练。通过训练数据的大量导入,确定神经网络模型各层的参数,例如权重和偏置。
56.训练模型表示可以通过有标签样本来学习(确定)所有权重和偏置的理想值。这些确定了的权重和偏置则能够在神经网络部署阶段对输入的特征值进行高准确率的推理,例如,对输入的图片进行正确的分类。
57.在监督式学习中,机器学习算法通过检查多个样本并尝试找出可最大限度地减少损失的模型来学习参数,这一过程称为经验风险最小化。
58.损失是对不良预测的惩罚。即,损失可以是一个表示对于单个样本而言模型预测的准确程度的数值。如果模型的预测完全准确,则损失为零,否则损失会较大。训练模型的目标是从所有样本中找到一组平均损失“较小”的权重和偏差。
59.在神经网络的训练过程中,为了量化目前的权重和偏置是否能够让网络输入拟合所有的网络输入,需要定义一个损失函数(如下图2中使用的cross_entropy,即,交叉熵)。由此,训练网络的目的可以转变为最小化权重和偏置的损失函数的过程。通常,使用梯度下降算法(多层神经网络训练中,使用反向传播算法)来实现上述最小化的过程。
60.在反向传播算法中,涉及前向传播和反向传播的重复迭代过程。前向传播过程是层间神经元通过权值矩阵的连接使得刺激(特征值)经每一层的激励函数不断由前一层向下一层传递的过程。而在反向传播中,本层的误差需要由下一层的误差反向推导。由此通过上述正向和反向传播的迭代过程不断调整权重和偏置,使得损失函数逐渐接近最小值,从而完成对神经网络的训练。
61.深度学习框架通过高级编程接口为神经网络的设计、训练和验证提供了构建模块。换句话说,深度学习框架为神经网络具体算法(例如,图1所示神经网络构造)提供了实现途径。
62.随着深度学习、神经网络算法的发展,出现了许多面向研究人员和开发者的顶层深度学习框架,例如tensorflow和pytorch等。开发者可以使用这些框架的dsl和api设计不同的计算图模型,实现特定的任务,例如人脸识别、图像检测、语音识别等。
63.这些计算框架的编程方式有着很大的差异。无论是编译类型的语言还是脚本语言,都是一步一步的计算变量,从而得到结果。而tensorflow和pytorch则不一样,首先需要通过编程构建一个计算图,然后将数据作为输入,通过计算图规定的计算操作进行计算,最后得到计算结果。由此能够摆脱编程语言的限制,帮助前后端解耦并能呈现更为直观的图像化效果。
64.计算图模型由节点(nodes)和边(edges)组成,节点表示操作符operator,或者称之为算子,边表示计算间的依赖,实线表示有数据传递依赖,传递的数据即张量。
65.图2示出了基于深度计算框架构建的一个cnn网络训练的计算图的一个例子。图2所示的计算图可由根据tensorflow编程得到的cnn网络训练代码获取。图示的计算图将与conv2d(二维卷积)相邻的pad或者biasadd(加偏置)都融合到该conv2d所代表的边中,将所有的常数节点都融合到相应运算符对应的边的属性当中去,由此构建出一个有向无环图。
66.在训练神经网络时需要每次提供一个批量的训练样本,如果每次迭代选取的数据要通过常量表示,会导致tensorflow的计算图变得极大。因为每增加一个常量,tensorflow都会在计算图中增加一个结点,而placehold(占位符)却可以解决这一点,它只会拥有占位符这一个结点。可由feed_dict(字典)给出每一个用到的占位符的取值。
67.在计算图最左侧的数据输入阶段,字典通过向占位符送入训练图像(train_img)
来实现初始训练图像的输入。在预测(predict)框,二维卷积(conv2d)操作使用由get_varible(获取变量)获取的卷积核对输入数据进行卷积,并且通过reshaped(重构)操作使得卷积得到是数据符合深度学习框架内各种api调用的形状需求。在多个卷积层(预测框内的卷积操作可以重复进行,即,可以存在多个如图1所示的卷积 池化操作)之后,特征值被送入第一个全连接层,并使用get_varible(获取变量)获取的向量实现全连接计算,获取的特征值随后被送入第二个全连接层,并使用get_varible(获取变量)获取的向量实现全连接计算,由此得到的计算结果,可由字典通过向占位符送入训练标签(train_lab)来进行基于softmax分类的交叉熵反向传播(softmax_cross_entropy_with_logits)。在分批次(batch)输入训练图像进行多次训练后,各个参数(例如,卷积核的取值)会收敛为一个相对固定的分布,由此可以使用上述参数作为经训练的神经网络参数来对新的图像进行预测。
68.图2示出的是动态计算图,即,每使用一个算子后,该算子会被动态加入到隐含的默认计算图中立即执行得到结果的计算图,由此方便调试和使用。
69.在基于深度框架的cnn计算(包括训练和预测)中,特征值沿着图2中的节点操作逐一流动,即沿着图示的路径conv2d

reshaped

matmul

matmul

softmax_cross_entropy_with_logits流动。在此,特征值可以看作是计算图中输入算子的操作数以及算子输出的计算结果,并且通常是多维矩阵,可被称为张量(tensor)。这也是深度框架tensorflow名称的由来。
70.张量具有形状。形状(shape)指代张量的每个轴的长度(元素数量)。秩(rank)指代张量的轴数。标量的秩为0,向量的秩为1,矩阵的秩为2。轴或维度可以用于指代张量的一个特定维度。大小或尺寸(size)可以指代张量的总项数,即乘积形状向量。
71.通常用索引来指代轴。轴通常按照从全局到局部的顺序进行排序:首先是批次,随后是空间维度,最后是每个位置的特征。由此使得在内存中特征向量可以位于连续的区域。
72.图3示出了张量的一个例子。图示的张量是一个4秩张量,形状表示为[2,4,5,3],大小(尺寸)为120,即,含有120个元素。具体地,该张量可以包括批次(batch)、宽度(width)、高度(height)、和特征(feature)这四个维度。例如,当以4x5像素的rgb图像作为训练图像,并且每次训练两幅图像作为一个批次时,就可以得到如图3所示的输入张量。此时,图中每一个单位立方体可以表示某一幅训练图像的某一个像素点的r或g或b的取值。
[0073]
应该理解的是,图3是为了示出方便给出了一个数据量较小的例子,在真实的训练常见中,每一幅训练图像可以具有更高的像素,例如40x60,每一批次可以训练更多的图像,例如512,并且用于训练的图像也可以不是rgb图像。另外,虽然图中为了方便理解将张量示出为四维张量在三维空间的表示,但上述表示通常不是用来描述空间的。
[0074]
张量会在实现为有向无环图的计算图中单向流动,例如从图2的左侧流到右侧,并且会因为节点算子的操作而更改形状。例如,由不同的卷积核进行卷积,用不同的填充策略进行填充,被重构以符合api调用需求等。
[0075]
在进行分布式操作时,需要对计算图中的节点计算进行拆分。无论是对算子内的模型并行,还是数据并行,本质上都是对算子的操作数进行拆分。在此,“算子”表示计算图中的一个节点,用于执行相应的计算操作。在实际的ir指令描述中,一个算子可能对应于一个或多个ir指令。在如下的描述中,将主要使用“算子”进行说明(例如,下文将提及的“关键算子”),并且本领域技术人员应该理解,“算子”在实现本发明方法的程序中仍然以ir指令
的形式表示。
[0076]
图4示出了针对batchmatmul算子进行几种拆分的例子。batchmatmul指令可以指代对一个batch(批次)的数据进行乘加(matmul)操作。计算图中的batchmatmul,可以对应于一条中间表示(ir)形式的指令,例如dot.1 = dot[b, m, n](left_op.2[b, m, k], right_op.3[k, n])。这也对应于计算图中的一个算子,即,如图左侧所示,该batchmatmul算子接收张量形状为[b, m, k]的左操作数和张量形状为[k, n]的右操作数作为输入,进行乘加操作后得到张量形状为[b, m, n]的输出,该张量形状为[b, m, n]的输出可以作为操作数输入后续算子。
[0077]
图4右侧给出了batch matmul算子操作对应于d个设备(在图示的例子中,d取值为2,因此对相应维度的切分是二等分)进行的几种可能的分布式拆分:第一行是左操作数(left op)在0维(b)进行拆分,这将导致指令输出也在0维(b)进行拆分,反之也成立,即dot(矩阵乘)输出在0维拆分对应于left op在0维拆分;第二行的情况与第一行类似,对应于在left op和dot输出的第1维(m)进行拆分;第四行则是对应于右操作数(right op)和dot输出的最后一维(n)进行拆分;第三行的情况较为特殊,是left op和right op在矩阵乘的合并维度(k)都进行了拆分,而输出dot产生的结果是完整的[b, m, n]大小的数值,但只是一部分(partial)的加和,需要将d个设备上的dot结果进行累加,才能得到正确的dot结果。
[0078]
应该理解的时,图中为示出简明,并未显示出操作数的每一个维度,例如,张量形状为[b, m, k]的左操作数应该对应于图3所示的一个三维长方体,而非图4所示的二维矩形。因此图4第一行是左操作数(left op)在0维(b)的拆分,可以看作是将一个三维长方体沿着高度方向切开。
[0079]
除了dot(矩阵乘)指令会有这样的输入输出对应关系之外,ir集合中的其它指令也会有各自相应的输入输出对应关系。在对深度学习任务进行分布式执行进行调优时,对如图4所示的batch matmul ir指令究竟采取哪种拆分方式才能与其他指令的恰当拆分方式相结合对深度学习任务进行高效的执行(例如,在给定硬件计算资源的情况下,优化的拆分方案能够更快的完成深度学习任务)则是本发明所要解决的技术问题。
[0080]
不同于现有技术依赖专用人员进行基于经验的手动调优,本发明的优化方法将分布式模型并行优化手段进行整体建模并按不同优化等级进行求解,并联合运行时环境和编译联合优化等手段,满足不同场景下的各类需求,为每个模型自动产生专属的优化方案,提升单个任务的执行效率并改善平台整体设备使用率。
[0081]
在这其中,尤其重要的是分布式切分方案(也可以称为分布式切分策略)的生成。图5示出了本发明一个实施例的分布式执行深度学习任务的优化方法的示意性流程图。该方法尤其可由深度学习任务执行平台上用于生成分布式执行方案的主节点执行。另外,应该明确的是,该方法尤其可以是针对hlo ir(高级别优化中间表示)指令执行的分布式执行优化方案,即,并非是在程序编译阶段针对每个具体执行硬件进行的优化,而是从深度学习任务的任务描述和分配层面执行的优化。
[0082]
在一个实施例中,本发明的优化方法可以看作是在给定深度学习任务(计算图组成和张量形状已知)和要执行该任务的硬件资源(即,分配的硬件设备数已知)的情况下,自动生成当前任务在分配资源上的优化的分布式执行方案的方法。通过本发明优化方法获取
的优化的分布式执行方案应当能够实现当前任务在分配资源上的最快执行(包括合理的算子切分和可选地计算图分割),并且该最快执行需要考虑实际计算时的并行度及通信开销,并且在涉及流水线执行时考虑气泡(bubble)的影响。
[0083]
在步骤s510,基于深度学习任务生成计算图并为所述深度学习任务的分布式执行分配硬件资源。在此,深度学习任务执行平台可以接收用户上传的深度学习任务,该深度学习任务可以是针对特定模型的训练任务,在某些情况下,也可以是经训练模型的调优或是推理任务。具体地,可以获取用户上传的深度学习模型代码或描述,并将代码或描述转换成特定格式的计算图,例如,tensorflow格式的计算图或是其他形式的计算图。无论哪种计算图,都以节点和边来表示数据和计算的关系。
[0084]
在本发明中,接收到的计算图可以具有hlo ir(高级别优化中间表示)的指令形式。ir(intermediate representation,中间描述)通常用于计算机编译技术,指的是从高级语言代码生成可被特定设备直接执行的二进制指令过程中,一类可由编译器后端支持的,不包括设备属性的中间态的指令描述。深度学习框架通常以有向图形式描述模型的数据和计算流程,这些描述抽象程度较高,会带有更多的应用属性。在此,hlo技术指的是利用较高层次的计算描述相关的特性进行优化,提供不依赖于低层硬件的通用优化效果,即,hlo ir并非是针对硬件编译器的ir,而是用于生成向各硬件设备分发策略时使用的更高抽象层次的ir。
[0085]
为深度学习任务的分布式执行分配硬件资源则可以包括为所述深度学习任务分配多个硬件节点作为分配的硬件资源,其中,每个硬件节点上包括多个硬件设备。换句话说,本发明的分布式切分方案需要以确定分配的硬件设备数量为基础。例如,为当前深度学习任务分配2个节点,每个节点上包括8个硬件设备(例如,8块gpu卡),即,以供分配16个硬件设备。通常情况下,为了计算方便也为了平台管理方便,每个节点以及节点上包括的每个硬件设备各自是等价的。即,每个节点享有相同的硬件设备配置,并且每一个硬件设备的算力基本相同。
[0086]
随后,在步骤s520,对分配的所述硬件资源进行分组以获取以获取至少一种分组方案,每个分组方案包括对所述硬件资源的设备数进行因数分解得到的至少一个因子。在此,进行分组可以是对给定的硬件设备数进行整数因式分解,由此得到每组包括相同硬件设备数的分组方案。例如,在如上分配的硬件资源为2个节点每节点8个硬件设备共16个硬件设备的例子中,可以进行例如2*8,4*4和8*2甚至16*1的分组。在此,由于是对硬件设备数(一个整数)进行因式分解,因此可以看作是对硬件设备数进行整数分解。
[0087]
在16*1的情况下,即分组方案仅包括一个因子(在此,不将1看作因子),该因子的取值对应于所述硬件资源设备数(例如,在硬件设备数为16的情况下,分组方案1包括一个因子,取值为16)。而在其他情况下,分组方案包括多个因子,所述多个因子取值的乘积对应于所述硬件资源设备数(例如,在硬件设备数为16的情况下,分组方案2包括两个因子,取值分别为2和8;分组方案3包括两个因子,取值分别为4和4)。在本发明的某些实施例中,还可以进行三因数甚至更多因数的整数分解,尤其是在涉及如下将详述的流水线并行的实施例中(即,包括计算图分割的情况)。此时,在硬件设备数为16的情况下,分组方案4可以包括三个因子,取值分别为2、4和2。
[0088]
应该理解的是,由于算子的切分可以叠加,并且计算图划分可以在算子切分之前
或之后进行,因此在包括计算图划分的某些实施例中,例如先2切再8切或是先8切再2切不被算作是同一个分组方案,即,对相同因子组成的分组方案需要进行基于因子前后顺序的划分;而在其他实施例中,则存在无需对因子前后顺序加以区分的情况。
[0089]
在获取了分组信息之后,在步骤s530,针对每个分组方案,基于该分组方案下的至少一个因子和所述计算图包含的多个算子各自涉及的张量信息,获取多个候选切分方案,其中,所述多个候选切分方案是使用该分组方案下的至少一个因子的值作为切分值,对所述多个算子各自涉及的张量进行不同维度上的切分而获取的。在此,分组方案包括如上所述的整数分解得到的因子。例如,在16个硬件计算设备被分为2*8的分组方案中,可以以一个因子的取值2作为切分值,对计算图中的算子进行切分。每个算子涉及的张量可以仅包括输入该算子的操作数(在此称为“输入张量”),也可以仅包括该算子输出的计算结果(在此称为“输出张量”),也可以包括输入张量和输出张量两者。
[0090]
由此,所述切分可以是针对每个算子,对该算子涉及的张量中的一个或多个的任一个维度进行切分或是不进行切分。算子涉及的张量包括输入张量(即,操作数)、输出张量、或是输入输出张量两者。在一个实施例中,可以仅考虑操作数的切分,并使得输出结果的切分与操作数的切分策略对齐(即,输出结果的切分不引入额外的通信开销),此时多个候选方案仅涉及针对输入张量(即,操作数)的切分。在其他实施例中,也可以根据输出张量的切分来决定该算子输入张量的切分。
[0091]
进一步地,所述切分是基于所述切分值的均匀切分,而不进行切分则对应于null(即,“空”操作)。在进行切分的维度无法被切分值整除时,例如图6a的例子中op1~op3的第2维k=3,无法被切分值2整除,可以对相应维度的取值进行padding(补齐)操作后在进行均分,或者不对无法整除的维度进行切分。例如,针对图6a的例子,可以进行padding操作使得k=4,并由此可以对该维度进行2均分;或者如图6b的例子所示,不对无法整除的这一维度进行切分。
[0092]
在图4的例子中,可以对左操作数的[b, m, k]三个维度中的任一个维度进行2切分,可以对右操作数[k, n]两个维度中的任一个维度,也可以对输出结果[b, m, n] ]三个维度中的任一个维度,也可以同时对左右操作数和输出结果中的任两个或全部的一个维度进行2切分,或者保持对左右操作数和输出结果都不进行切分。在本发明的不同实施例中,可以根据操作数的切分方法确定输出结果的切分方法,也可以反过来基于输出结果的切分方法确定操作数的切分方法。在仅仅考虑左右操作数的情况下,图4的例子就可以包括12种切分方法。但这些切分方法有些并不符合算子的计算逻辑,因此可以在使用开销模型进行筛选之前就被去除。在某些情况下,可以直接限制输出dot的切分与输入相应,此时不会为该算子引入新的切分方法。在另一些情况下,则可对输出的张量进行与输入张量不相应的自由切分,由此进一步引入切分自由度。
[0093]
在计算图包括具有操作数输入和输出的多个算子的情况下,可以对每个算子各自涉及的一个或多个张量进行如上所述的切分。由此,一整张计算图在每个算子进行针对组数的一次切分时,其自由组合得到的候选切分方案数可以是每个算子对应的切分排列的乘积。
[0094]
进一步地,在基于一个因子的一次切分方案中,假设每个分组内的硬件设备执行相同的计算。这种方案显然没有充分发挥每个硬件设备的作用。因此,针对每个分组方案,
基于该分组方案下的至少一个因子和所述计算图包含的多个算子各自涉及的张量信息,获取多个候选切分方案包括:在当前分组方案包括多个因子的情况下,使用所述多个因子中的一个因子的值作为第一切分值,对所述计算图的多个算子各自涉及的张量(例如,操作数)进行不同维度上的一次切分;以及在一次切分的基础上,使用所述多个因子中除用作第一切分值的因子之外的一个其他因子的值作为第二切分值,对所述计算图的多个算子各自涉及的张量(例如,操作数)进行不同维度上的二次切分,其中,所述多个候选切分方案基于多个算子的所述二次切分排列组合得到。
[0095]
例如在如上所述针对图4所示算子进行12种2切分方案(对应于一次切分)之后,还可以在此基础上,对每一种2切分方案进行后续的8切分(对应于二次切分)。此时,二次切分后该算子可以包括例如12*12共144种切分方法。在某些实施例中,基于硬件设备的整数分解可以包括三因子,甚至四因子。此时,可以对算子涉及的张量进行三次甚至四次切分;也可以在本发明的某些优选实施例中,首先对计算图进行一次分割得到多个阶段性子图,再对阶段性子图内的算子进行切分(此时,对算子的一次切分对应于当前深度学习任务整体的二次切分,对算子的二次切分对应于当前深度学习任务整体的三次切分)。针对计算图的切分将在如下结合图13和图14进行描述。在其他实施例中,计算图分割也可以在算子切分之后或两次算子切分之间进行。
[0096]
在基于例如优选的针对算子的二次切分,并对每个算子的切分进行自由组合之后,可以获取多个候选切分方案。在对每个算子的切分不加以限制时,即,每个算子都进行自由切分时,会得到海量的候选切分方案。虽然此时的候选切分方案包含实际上最优的切分方案,但由于候选方案过多,增加了后续从候选方案种挑选出最优方案所需的计算量。因此在本发明的一个优选实施例中,所述多个候选切分方案是使用该分组方案下的至少一个因子的值作为切分值,对所述多个算子各自涉及的张量进行不同维度上的切分而获取的包括:针对每个算子,采用预设优化策略,对该算子的张量进行预设维度的切分,得到一组切分排列;汇总所述计算图的每个算子的切分排列,得到针对该分组方案下的切分排列组合,将该切分排列组合作为多个候选切分方案。
[0097]
在此,预设的优化策略可以是如上所述的对该算子的张量中的一个或多个进行任一维度的切分,或者对该算子的张量不进行切分。此时的切分自由度最大,肯定会包括真实的最优切分方案,但获取最优切分方案的代价过大。因此,在一个实施例中,对该算子的张量中的一个或多个进行任一维度的切分需要是符合逻辑的切分,例如图6b所示例子中的划分方式8和9就是在此划分方式下无法得出计算结果的不符合逻辑的划分,因此可以被直接排除在针对该算子的可选划分方式中(由此也减少了该算子的划分排列)。在此,符合逻辑的切分可以是针对算子本身的符合逻辑的切分,或是是对应于算子的指令的上下游指令候选方案的影响,逻辑可推导出的切分方案。
[0098]
在其他的实施例中,预设的优化策略可以对切分空间进行剪枝,从而讲候选方案的数量控制在合理的范围内。在一个实施例中,预设优化策略可以包括策略a),即,将所述计算图划分为多个优化子图,所述每个优化子图中包括至少一个算子;针对每个优化子图内的各算子的张量,使得各算子的切分策略对齐,即,采用在该优化子图内不产生通信开销的的方式进行切分。在此,可以基于计算图算子所在的分支等依据进行优化子图的划分。
[0099]
在一个实施例中,预设优化策略可以包括策略b),即,确定至少一个关键算子,对
所述关键算子的张量进行任意维度的切分;针对所述关键算子预定相邻范围内的其他算子,采用在该预定相邻范围内不产生通信开销的的方式进行切分。通常,关键算子对应于涉及大量计算的算子,例如乘加算子。
[0100]
在另一个实施例中,预设优化策略可以包括策略c)从预设的规则库中筛选出与当前计算图和/或张量匹配的规则;基于匹配的规则进行当前计算图中关联算子的切分。所述预设的规则库中包括可扩展添加的启发式规则。
[0101]
如下将结合图6a-图6f的具体例子,对算子的切分以及预设的优化策略进行描述。图6a-图6f示出了对计算图中的算子进行不同切分的例子。
[0102]
图6a示出了计算图中包括的两个算子及其涉及张量进行具体操作的例子。图6a示出了计算图中涉及的两个算子,算子1(add)涉及多维矩阵加,算子2(dot)涉及多维矩阵乘。算子1和算子2的计算涉及五个张量(对应于图中的操作数op1~op5),图中可视化地示出了各个张量的组成。三秩张量表示为长方体,二秩张量表示为矩形,小立方体或是小方格内的数字表示具体取值,并且使用斜体数字标注出了张量的相应维度。
[0103]
算子1包括两个操作数(即,输入张量)op1和op2,由于需要进行矩阵加,因此op1和op2的张量形状相同,即都是包括bmk三个维度的三秩张量,并且第0维b=2,第1维m=2,第2维k=3。
[0104]
在矩阵加操作中,相同位置上的数值直接相加,因此在进行12次加法运算之后,算子1计算得到张量形状与op1和op2相同的输出结果。由于算子1的输出张量需要送入算子2进行操作,因此算子1的输出张量对应于算子2的一个输入张量,即,操作数op3。显然,操作数op3的张量形状与op1和op2相同,即都是包括bmk三个维度的三秩张量,并且第0维b=2,第1维m=2,第2维k=3。
[0105]
算子2包括两个操作数(即,输入张量)op3和op4。操作数op3是算子1矩阵加得到的结果,因此显然,操作数op3的张量形状与op1和op2相同,即都是包括bmk三个维度的三秩张量,并且第0维b=2,第1维m=2,第2维k=3。op4由于需要与op3进行矩阵乘操作,因此其第0维的取值应该与op3的第2维相同,即第0维k=3。在图6a的例子中,op4还包括第1维n=2。为此,op3和op4的矩阵乘可以表示为:即,可看作是op3第0维第1层的矩阵与op4进行矩阵乘,得到的2x2矩阵结果作为算子2输出结果(图中示出为op5,即可作为下一个算子的操作数)第0维的第一层,同时op3第0维第2层的矩阵与op4进行矩阵乘,得到的2x2矩阵结果作为算子2输出结果第0维的第二层,两层拼接得到包括bmn三个维度的三秩张量op5,其中第0维b=2,第1维m=2,第2维n=2。
[0106]
如前所述,为了获取计算图的候选切分方案,需要对算子进行切分。该切分可以是针对每个算子,对该算子涉及张量(例如,输入张量;或者张量;或者输入张量和输出张量)中的一个或多个的任一个维度进行切分或是不进行切分。图6b示出了针对算子涉及的操作数(即,输入张量)op1和op2的可选切分方式。在图6b的切分中,切分值d=2。在此,为了避免繁琐细节混淆对本发明主旨的阐述,对无法被2整除的第2维不进行关于切分的考虑;同时
仅考虑对操作数(即,输入张量)的切分(即,默认输出结果的切分与操作数切分对齐,如果可以的话)。但应该理解的是,在其他实施例中,可以通过padding操作将第二维补齐为4并考虑对其进行切分,并且也可以同时考虑输出张量的不同切分。
[0107]
由于op1包括切分第0维、切分第1维和不进行切分三种情况,op2页包括切分第0维、切分第1维和不进行切分三种情况,因此获取的切分方式即op1和op2各自三种切分的排列组合,一共3x3=9种,即图示的切分方式1~9。
[0108]
在切分值d对应于分配用于执行该计算图(或该计算图的算子1和2)的两个硬件设备时,如上不同的划分,会导致这两个设备不同的计算开销和通信开销(应该理解的是,在更复杂的例子中,切分值d=2也可以对应于分配的两组硬件设备,其中每组包括至少两个硬件设备)。图6c至图6f给出了不同切分方式下在进行算子1的操作时硬件设备1和2所需进行的操作。
[0109]
具体地,图6c示出了切分方式1下硬件设备1和2所需进行的操作。切分方式1对应于在op1第0维上的2切分,对op2则不进行切分,因此设备1获取op1第0维第1层对应于的6个数字的数据以及op2的全部12个数据,并且对op1和op2的第0维第1层进行相加操作,由此得到op3第0维第1层对应的6个数字的数据。相应地,设备2获取op1第0维第2层对应于的6个数字的数据以及op2的全部12个数据,并且对op1和op2的第0维第2层进行相加操作,由此得到op3第0维第2层对应的6个数字的数据。由此,在切分方式1中,设备1和设备2各自需要获取18个数据并进行6次相加,并且将两设备各自的计算结果拼接就能够得到op3。
[0110]
显然在图6c的例子中,op2的第0维第2层的六个数字的数据对设备1是无用的,op2的第0维第1层的六个数字的数据对设备2是无用的,因此单就算子1的计算而言,划分方式1引入了不必要的数据传输和存储,并不对应于最优的效率。
[0111]
为此,图6d示出了切分方式5下硬件设备1和2所需进行的操作。切分方式5对应于在op1和op2各自在第0维上的2切分,因此设备1获取op1第0维第1层对应于的6个数字的数据和op2第0维第1层对应于的6个数字的数据,通过对op1和op2的第0维第1层进行相加操作,得到op3第0维第1层对应于的6个数字的数据。类似地,设备2获取op1第0维第2层对应的6个数字的数据和op2第0维第2层对应于的6个数字的数据,通过对op1和op2的第0维第2层进行相加操作,得到op3第0维第2层对应的6个数字的数据。在切分方式5中,设备1和设备2各自需要获取12个数据并进行6次相加,并且将两设备各自的计算结果拼接就能够得到op3。
[0112]
在图6d的例子中,单就算子1的计算而言,划分方式5并未引入不必要的数据传输和存储,其计算和通信效率要高于如上的切分方式1。
[0113]
图6e示出了切分方式6下硬件设备1和2所需进行的操作。与切分方式5类似,切分方式6对op1和op2进行了同一维度(第1维)的2切分,为此设备1和设备2同样各自仅需要获取12个数据并进行6次相加,并且将两设备各自的计算结果拼接就能够得到op3,不同之处仅在于设备1和设备2各自得到的是到op3第1维第1层和第2层对应的6个数字的数据。因此单就算子1的计算而言,划分方式6并未引入不必要的数据传输和存储,其计算和通信效率要高于如上的切分方式1,并与划分方式5的效率相同。
[0114]
图6f示出了切分方式7下硬件设备1和2所需进行的操作。切分方式7对op1和op2进行了不在同一维度上的2切分(op1切分第1维,op2切分第0维),为此虽然设备1和设备2同样
各自仅需要获取12个数据,但只能进行3次相加,并且将两设备各自的计算结果拼接无法得到完整的op3。因此单就算子1的计算而言,划分方式7虽然通信效率高但无法直接得出op3。为此,在本发明的优选实施例中,针对每个算子的划分,可以是针对算子涉及张量进行符合逻辑的划分,例如,划分方式7和8由于无法直接得到op3而被排除。
[0115]
如图6d和6e所示,在仅考虑算子1本身计算的情况下,划分方式5和6都能够实现在如上9种划分方式中效率最优。此时进一步地,考虑结合算子2进行矩阵乘操作的情况。如前所述,op3和op4的矩阵乘可以表示为:即,可看作是op3第0维第1层的矩阵与op4进行矩阵乘,同时op3第0维第2层的矩阵与op4进行矩阵乘,各自得到的2x2矩阵结果作为op5第0维的第一层和第二层,两层直接拼接就可以得到张量op5。
[0116]
为了顺利求取op5,可以限定算子2的切分方式对应于op3第0维的2切分并对op4不进行切分。此时,设备1进行如上第一行的矩阵乘操作,设备2进行如上第二行的矩阵乘操作。即,设备1需要获取12个数据,进行12次乘法和4次加法以获取op5第0维第1层的4个数字的数据,设备2需要获取12个数据,进行12次乘法和4次加法以获取op5第0维第2层的4个数字的数据。
[0117]
在对算子2进行如上切分时,如果设备1和设备2对算子1进行对应于切分方式5的操作,则设备1和设备2可以各自直接利用针对算子1操作获取的是op3第0维第1层和第2层,再各自获取op4的6个数据可以进行操作;如果如果设备1和设备2对算子1进行对应于切分方式6的操作,则设备1和设备2需要各自获取对方的计算结果,拼接成完整op3后再进行针对第0维的划分。换句话说,在考虑算子2的切分后,算子1的划分方式5要优于划分方式6。
[0118]
如上结合图6a-图6f描述了算子的不同切分导致的不同通信和计算开销的例子。虽然在一个实施例中,可以对每个算子涉及的张量进行任一维度的切分(由此确保候选方案中涵盖真正的最优效率方案),然而很多切分方式其实是效率低下并无法由此得到最优切分方案的,可以根据预设的优化策略加以剪枝。例如,策略c)对应于从预设的规则库中筛选出与当前计算图和/或张量匹配的规则,并基于匹配的规则进行当前计算图中关联算子的切分。所述预设的规则库中包括可扩展添加的启发式规则。例如,其中一条启发式规则可以限制涉及多维矩阵乘算子的切分方式,即,限定为对前一算子获取的计算结果进行第0维的切分。图6a的算子2由于与该条启发式规则匹配,因此可以仅对算子2的op3进行第0维的切分,从而减少算子2对应的切分方式的数量,从而降低针对计算图整体效率最优方案的检索计算量。
[0119]
再例如策略a)对应于将所述计算图划分为多个优化子图,所述每个优化子图中包括至少一个算子;针对每个优化子图内的各算子的张量,采用在该优化子图内不产生通信开销的的方式进行切分。同样以图6a为例,如果算子1和算子2位于同一优化子图内,并且根据启发式规则需要对算子2的op3进行第0维的切分。由于算子1的切分方式需要与算子2的
对齐,则可以直接将图6b中所示的切分方式5作为算子1的切分排列组合(此时算子1的切分排列组合仅包括1种),由此进一步降低候选方案的数量,降低最优方案的检索计算量。
[0120]
而对于策略b),同样以图6a为例,由于算子2涉及多维矩阵乘,即,涉及乘加操作,因此可以将算子2看作是关键算子。处于算子2邻域内的算子1的切分同样需要与算子2对齐。
[0121]
在实际使用中,可以根据不同的优化级别来选择优化策略的使用。例如,对于一个规模相对较小的深度学习任务,可以仅使用策略c),由此通过已有规则的匹配来避免一些不必要的切分方式。而对于某些大规模甚至超大规模的深度学习任务,由于算子数量巨大,可以额外施加策略b)甚至策略a),由此将分布式执行方案的搜索空间限制在一个时间可控的范围内。
[0122]
另外,应该理解的是,虽然图6a-图6f中为了阐述简明,给出了维度取值分别为b=2,m=2,k=3,n=2的张量的例子,但在实际操作中涉及的操作数及其相应的计算结果通常具有大得多的维度。另外,虽然在图4以及图6a针对矩阵乘的例子中都给出了张量形状为[b, m, k]操作数与张量形状为[k,n]操作数进行矩阵乘的例子(此时,矩阵乘操作涉及b个[m,k]分别与单一[k,n]乘加),但在实际操作中,可以是张量形状为[b, m, k]操作数与张量形状为[b,k,n]操作数进行矩阵乘(此时,矩阵乘操作涉及b个[m,k]分别与b个[k,n]乘加)。换句话说,实际操作中涉及的算子操作通常比图6a的示例复杂很多。
[0123]
为了避免硬件设备在执行深度学习任务时内存耗尽,还可以根据内存空间的占用情况(在使用gpu进行计算的情况下,内存对应于gpu的“显存”),来对算子切分进行限制,从而在避免内存耗尽的同时,限制优化策略的搜索空间。此时,针对每个分组方案,基于该分组方案下的至少一个因子和所述计算图包含的多个算子各自涉及的张量信息,获取多个候选切分方案包括:统计多个算子各自涉及的训练参数输入张量的总存储空间大小;以及在统计值超过预定阈值的情况下,选择一个或多个训练参数输入张量进行切分。在此,无论对应哪种分组方案,都需要考虑内存空间的占用情况。训练参数输入张量是模型的可训练变量(即,模型权重参数)。算子在进行具体操作时,通常会涉及输入数据张量(即,特征值)与训练参数张量(模型权重)的计算。在本发明的优选实施例中,可以预先统计训练参数张量占用的总存储空间大小。如果这个空间大于预定阈值,例如单个gpu显存的70%,则可选择一些训练参数张量作为切分候选,以保证单个gpu卡能够保存各自的分片数据。
[0124]
在获取了多个候选切分方案之后,可以在步骤s540,使用开销模型,从所述多个候选切分方案选出效率最优方案作为分布式执行切分方案,其中,所述分布式执行切分方案用于所述硬件资源对所述深度学习任务的执行。在此,开销模型可以评估每一种切分方案在计算和通信上开销,并由此找出效率最优的候选切分方案作为分布式执行切分方案。
[0125]
如前所述,针对所述多个算子,可以使用高级别优化中间表示(hloir)进行描述,而对于每个算子的切分方案,则可以使用针对每条hloir的拆分状态描述信息进行描述。换句话说,对于每一条ir指令,可以会为它附加上拆分状态描述信息(distribution specification, dist_spec),用以表示对该指令执行输出时的某种拆分策略。具体可以记录“拆分于哪一个维度”,“拆分成多少份”,“拆分组装的粒度”,以及“是否是完整形状但只是部分结果需要累加(对应于partial(部分)的情况)”这些信息,如遇其它特殊情况,这些策略可以扩展。对于这个拆分策略的描述,可以将其一般化,不会去显示的区分它属于“数
据并行”“模型并行”的哪一类。可以设想,如果ir中所有的计算指令都于第0维被拆分,而所有的参数都没有做任何拆分,则其梯度最终是在前的partial状态,这就是数据并行。整个计算图的disthlo ir,则是由所有的原hlo ir指令,根据已知执行资源(计算设备 网络)的限定下,各自附加上不同的dist spec之后得到的全图分布式执行策略。这些执行策略是候选策略,可以基于开销模型进行筛选。具体地,开销模型可以对每个算子的拆分方式进行罗列,同时给出约束条件,由此求出满足约束条件下的最小开销值。这一最小开销值所对应的各个算子的切分方法相组合,就可以得到最终的分布式切分策略。具体地,使用开销模型选出效率最优的候选切分方案作为分布式执行切分方案包括:基于所述拆分状态描述信息对每条hloir的拆分策略建模成变量;设定变量间的约束条件;根据开销函数对每个候选切分方案的全图建模进行约束条件下最小值的求解;以及将最小值对应的各条hloir的拆分状态描述信息作为所述分布式执行切分方案。
[0126]
如上描述了基于分组信息决定计算图中各个算子的二次切分方式,通过对如上切分方式排列组合得到候选方案的开销评估,从中选择优化的方案用于计算图的实际分布式执行。在本发明的优选实施例中,由于对分配的硬件资源对应硬件设备总数通常对应于多种分组方案,因此对分配的所述硬件资源进行分组以获取至少一个分组方案包括:对所述硬件设备数进行整数因式分解,获取多个分组方案,每个所述分组方案的因式分解方案不相同。例如,在分配为16个计算设备的情况下,每个分组方案各自包括不同的因子组成,例如,1*16(对应于仅包括一个因子的分组方案,此时可以不认为1是因子);2*8和4*4(对应于包括两个因子的分组方案);2*4*2(对应于包括三个因子的分组方案);甚至2*2*2*2(对应于包括四个因子的分组方案)。通常可以不考虑组数和组内设备数相反的方案,例如,分两组每组八个和分八组每组两个,因为在进行二次切分后,两种分组对应的候选切分方案实际上相同的。可以使用开销模型为不同的分组方案获取各自的最优候选切分方案。由此,使用开销模型,从所述多个候选切分方案选出效率最优方案作为分布式执行切分方案,包括:针对每个分组方案,使用所述开销模型选取该分组方案下的效率最优的第一候选切分方案,得到多个第一候选切分方案;以及从所述多个第一候选切分方案中,选出一个效率最优的第二候选切分方案作为所述分布式执行切分方案。
[0127]
图7示出了多个设备分组方案下获取分布式执行切分方案的例子。在分配为8个计算设备的情况下,每个分组方案各自包括不同的因子,例如,2*4;1*8。在2*4的情况下,如图7左侧所示,可以首先生成2切分下第一次切分方案候选集(即,一次切分下的多个候选切分方案),随后生成4切分下第二次切分方案候选集(即,二次切分下的多个候选切分方案)。基于开销模型评估和求解这一分组方案下的最优方案并进行记录(对应于2*4分组下的第一候选切分方案)。而在1*8分组时,实际上仅进行一次切分(8切分),随后于开销模型评估和求解这一分组方案下的最优方案并进行记录(对应于1*8分组下的第一候选切分方案)。比较这两个分组方案中各自的最佳方案并选取开销更小的一个,作为第二候选切分方案,用于最终的分布式执行切分方案。
[0128]
由于不同的分组方案可以使用相同的开销模型进行各自方案下的第一候选切分方案的筛选,因此得到各自方案下效率最优的第一候选切分方案时,能够同时获取该第一候选切分方案的开销值。此时,第二候选切分方案的选取可以通过比较多个分组方案各自的第一候选切分方案的开销值的大小来进行(即,从多个第一候选切分方案中选取开销值
最小的方案作为分布式执行切分方案)。
[0129]
在本发明的优选实施例中,除了进行算子切分,还可以通过计算图分割来引入流水线并行。此时,基于所述分组信息和所述计算图包含的多个算子各自涉及的张量信息,获取多个候选切分方案还包括:使用所述分组数或所述组内设备数作为分割值,将所述计算图分割成用于流水线并行执行的多个阶段性子图。多个阶段性子图的切分可以通过评估计算图的分割位置实现,并由此得到各自计算耗时相同的所述多个阶段性子图。评估计算图的分割位置以得到各自计算耗时相同的所述多个阶段性子图可以包括:选取所述计算图中的关键算子并统计所有关键算子的总计算开销;根据所述总计算开销平均划分多个阶段性区间;基于每个关键算子本身及其前后关键算子计算开销设置该关键算子的区间范围;以及以跨区间张量的总通信开销最小为目标求取使得每个关键算子都落入各自设置区间范围内的优化解作为所述分割位置。
[0130]
如上的计算图分割可以与本发明的算子划分相结合,例如,首先使用分组数作为分割值进行计算图分割,再在每个阶段性子图内进行基于组内设备数的算子划分(可以包括三因子分解下的二次算子划分)。也可以先进行算子划分,再对算子划分后的计算图进行分割。对计算图分割涉及的流水线并行操作将在下文结合图13和14进行详细描述。
[0131]
在选出了分布式执行切分方案之后,可以基于所述分布式执行切分方案生成任务子图,并将所述任务子图发送至所述硬件资源,用于深度学习任务的执行。在此,生成的任务子图可以是与硬件资源所包含的硬件设备数量相对应的多个任务子图,并且这些子图可以被逐一发送至对应的硬件设备,或是包括具体硬件设备的执行节点,由执行节点确定其所包含的多个硬件设备的具体执行。
[0132]
本发明还可以实现为一种执行深度学习任务的分布式系统。图8示出了执行深度学习任务的分布式系统的组成示意图。系统800包括主节点810和多个执行节点820。
[0133]
主节点810用于执行如上所述的分布式执行深度学习任务的优化方法,并将基于所述分布式执行切分方案生成的任务子图发送至所述硬件资源用于深度学习任务的执行;执行节点820包括作为所述硬件资源的一个或多个硬件设备,如图所示的包括8个gpu设备的节点,用于基于所述分布式执行切分方案执行所述深度学习任务。
[0134]
具体地,主节点810可以基于所述分布式执行切分方案,生成针对所述硬件资源的dag任务图并确定任务执行顺序;为每个执行节点生成带有所述任务执行顺序的任务子图;以及向每个执行节点发送专属的任务子图用于执行。
[0135]
主节点810可以在集群层面上优化硬件资源的分配,可以汇总执行节点的当前运行状态;以及根据所述当前运行状态和接收到的深度学习任务,为各个深度学习任务分配所述硬件资源。
[0136]
如上所述,本方案的主要系统架构设计为两个部分,以1对n的主从(master-worker)模式形态运作。图9示出了本发明分布式系统主从架构的示意图。
[0137]
策略探索部分由master端(主端),即图8所示的主节点执行。该部分可以实现为全局唯一的组件,接受到训练任务请求后,承担并驱动本方案主要流程的进行,并通过rpc机制驱动各个worker端(执行端)完成训练过程。主要功能包括ai模型和硬件资源描述的接收处理、分布式策略的规划决策、最终分布式执行计划的生成、以及执行任务的分发等。
[0138]
分布式执行部分由worker端执行,在一个实施例中,一个worker端可以对应于图7
所示的一个执行节点,因此图9中示出了m个执行节点,这m个执行节点是被分配用于执行当前深度学习任务的硬件资源,这m个执行节点中各自可以包括多个硬件设备,例如gpu卡。该部分组件负责驱动单个计算部件(如节点)的具体计算,在整个系统中根据硬件资源的配置会启动多个worker(如每节点一个),全局会启动多个逻辑上对等的客户端,每个客户端都接收来自master端的rpc执行请求,在本地计算部件上完成下发任务的即时编译(以及缓存)和执行。全局所有worker一起,完成一次完整的分布式训练流程迭代。
[0139]
方案的主要执行流程包括:(1)模型和执行条件设定、(2)计算图解析和分布式策略搜索决策、(3)分布式任务生成、调度和编译执行等三大部分。在这其中,模型和执行条件设定是机器学习和深度学习任务执行的通用必备过程,需要由系统的使用者提供用于特定ai任务(或其它机器智能相关任务)的基于某类前端编程语言或规范的描述,同时设定该任务的各执行特性和条件(如训练或推理、数据格式、算法参数、终止条件、存储位置、资源配置等)。(2)计算图解析和分布式策略搜索决策和(3)分布式任务生成、调度和编译执行则涉及本发明的主要内容。图10示出了本发明分布式系统主从架构执行的分布式计算的简要流程例。
[0140]
具体地,计算图解析和分布式策略搜索决策包括:a. 【输入计算图】在接收到模型执行的任务之后,将前端模型代码或描述转化为可被本方案处理的特定格式的计算图(如tensorflow graph,以节点和边来表示数据和计算的关系)进行后续处理;b. 【聚合】对接收到的计算图进行划分和聚合(预处理过程),排除特例(如特定io过程、自定义函数)节点,圈出可支持分布式执行(通常覆盖图的99%以上的节点和边)的主要计算图,并以hlo ir形式进行后续分布式任务探索;c. 【候选切分方案生成】结合执行环境资源生成分布式执行方案,根据优化级别,依据不同的规则,进行分布式探索策略的方案的生成;由于该问题属np难问题,可以设定不同优化级别,影响可探索策略空间的深度和搜索复杂度,同时也可能会影响是否会探索到全局最优的策略;d. 【内存节省方案】根据给定的任务执行环境,根据物理资源情况(这里特指运行内存)限定部分特例节点的可行策略,例如,如上所述的如果可训练参数占据单个gpu显存的70%,则需要进行强制的可训练参数的张量切分;e. 【基于开销的策略筛选】根据开销模型(cost model)求解和评估全图的分布式策略,获取一个当前最优解;f. 【其他操作】如有必要(如环境执行方案灵活可控,优化级别支持、执行搜索策略等),返回步骤c,针对环境资源的其它执行方案进行执行策略探索,否则进入到后续的分布式任务生成、调度和编译执行部分;而在分布式任务生成、调度和编译执行部分,直接上接计算图解析和分布式策略搜索决策的f.的流程;g. 【计算图重写】确定最终执行的分布式策略,对计算图(对应的hlo ir)进行改写,记录分布式策略信息,准备分布式执行;h. 【建立运行时静态图、静态调度&执行方案下发】按照逻辑顺序,建立执行期的静态任务图和调度序列,并将待执行的带有分布式策略信息的中间代码(ir)指令序列封装下发到分布式环境的各个本地执行服务(worker端);
i. 【cuda本地编译& dapple运行时】本地执行服务(worker端)接收到任务之后,调用编译器(例如,基于cuda)对分布式的中间代码进行硬件相关的底层代码生成、编译和执行,并完成执行前后的运行时(runtime)准备和维护过程,提供必要的基础函数库和通信库的调用支持。在此,dapple对应于用于训练的流水线数据并行方法。
[0141]
针对步骤c,在给定设备分组方案后,会依据设备分组每一维度大小,按这一维的设备数量,逐轮的对所有算子(或,对应于算子的指令)生成可能的拆分方案。执令切分方案生成可以由几方面产生和影响:1.对应于算子的指令本身可产生的基本逻辑,参见图4所示batch matmul的例子,枚举该指令逻辑上可行的可能性。举个简单的例子如一个二元操作指令add = add[1024, 1024] (left_op[1024, 1024],right_op[1024, 1024])需要分布到2个设备上,那么可以直接列举出三种策略:(1)是第0维切成2份,(2)第1维切成2份,(3)不切(或叫复制),每个设备存完整数据做完整的指令计算;2. 受对应于算子的指令的上下游指令候选方案的影响,逻辑可推导出的切分方案。这里依赖于一系列符合基本逻辑的推导规则,根据每条指令的含义,对这些规则进行维护,确认某个指令的分布式策略,在计算中没有数据缺失(即需要进行通信)的情况下,是否可以将该策略反向传递到其输入指令(生成者)或正向传递给期消费者。对于上面的add的例子,对add如果做第0维的切分,那势必要求(1)left_op和right_op同样也是对0维进行切分,或者(2)不切分;3. 与求解复杂度设定或叫做优化级别相关,利用计算图逻辑和拓扑,为了减少搜索空间加快求解速度,来对一组指令的切分方案进行绑定和剪裁。包括但不限于:(1)按照计算图的执行路径限定关键算子对应指令(如指定的计算密集型指令,如下可称为“关键指令”)与其周边指令组成的集合,必须对齐关键指令被切分的方案;(2)按照模型结构,将计算图划分成有特定输入输出特性的子集(如每个子集都只有单输入等),并在子集内对齐策略;(3)专家式或启发式规则,如模型输入参数分布式方案与更新计算部分逻辑的对齐。这部分可能也会是后续需要持续演进之处,影响实际使用体感和效果;4.分布式策略仍然接受由用户给出的一些特别限定,这个来源主要是保留对传统用法的兼容性,以及更好地支持验证和调试过程。
[0142]
另外,需要强调的是,对于一个给定的设备组织方案和与其对应的整个disthlo ir表示的计算图,不论每个指令的切分策略是什么样的,只要逻辑可行,这个图在disthlo的后续任务生成、执行和运行时中,理论上都是可以被执行并且得到正确结果的,区别只是执行开销上的不同。这正如一个逻辑正确的c语言程序,不论用什么编译器什么编译选项在什么处理器上,它的结果都应该是一致的,只是生成的二进制代码和执行开销的不同。
[0143]
对于给定的带有分布式策略的disthlo ir,如果出现前后两条指令的分布式策略不兼容(或是不能相互推导,比如add切分在第0维,但其left_op记录的dist_spec却切分在第1维)的情况,则称之为切分策略不匹配(splitting mismatch),对于这种情况的处理,最容易理解的做法是,用一个通信操作将上一指令输入操作数(对应上面left_op)从带分布式策略的情况合并成为完整的形态,再处理成为满足下一指令切分策略的形态(对应add如设定0维切分,则left_op也需要0维切分)。这一过程,如果只考虑一个维度,通常可被总结归纳为图9所示的几类通信操作来完成。
[0144]
图11示出了在切分策略不匹配时的通信操作的例子。应该理解,图11仅示出了常规的通信操作例,在多维切分场景下还可以包括其他用于应对策略不匹配的通信操作。
[0145]
如图左上所示,在前一算子输入为m维被切分d份,后一算子需要经由all gather指令得到完整的bmn输入张量,此时all gather指令的通信开销系数为(d-1)/d。在如图右上涉及张量部分加时,all reduce的指令开销系数为1或2,而如下部所示,先合并再切分下all-to-all指令的开销系数则为1/d-1/d*d。实际产生的通信开销是由如上系数乘以需要通信的数据量得到的。在此, allgather指令用于在数据分布在所有的进程中时将所有的数据聚合到每个进程中。allreduce从多个发送方接收数据,最终结合到每一个节点上。all-to-all指令则对应于多对多的情况。
[0146]
复杂分布式系统下,这些优化的集合通信操作通常不可能完全避免,因此优化目的是获得最低的运行开销。图12描述了多个dot算子组成的图结构在不同分布式策略情况下的通信开销情况。图中左右两侧示出了在针对三个相同的算子1、2、3和相同张量形状的操作数时,不同的切分策略可以导致不同的通信开销。如图左侧所示,由于在前算子输出的张量一直保持相同的切分,因此无需为了后续算子的计算进行张量合并或是重新切分,因此无需通信开销。而在图右侧的例子中,由于算子1的切分策略与算子2不同,因此算子1输出的张量需要通过额外的通信操作(如图所示的reduce指令)切分为算子2所需的张量形式。类似地,由于算子2和3的切分策略也不匹配,因此也需要额外的通信操作来进行切分形式的转换,从而导致额外的通信开销。
[0147]
除了通信开销之外,计算图在分布式执行之后,其本身的计算开销,也是求解时需要考虑的主要因素。通过一定的模型(如线性关系式)将对这些开销进行科学预估(evaluation)进行组合建模,便得到开销模型(cost model)。在给定设备分组方案的情况下,需要对每个指令的分布式策略候选集进行上下文开销的评估,获得整体开销最优的解。
[0148]
如下给出了根据切分和限定求取最小值的一个例子。对于每一条指令(或者分块)的每一种策略,将之建模成变量形式(可以使用二值变量,对应于第1部分,strategyvariable,策略变量),通过cost函数(第2部分,constant,常量)以及变量间约束的设计(第3部分,constraints,约束),最后对全图总开销进行公式化表达,并求解其在约束条件下的最小值作为优化目标(第4部分,optimaizaiton objective,优化目标)。因此,通过如下所示的建模和求解过程,将分布式策略的选取转换为一个整数线性规划(ilp)的数学问题,利用利数学求解器即可求解上述问题。例如,可以使用专用的求解器加速该过程。
[0149]
在具体实现中,由于模型计算图不断扩大,会使得全局待求解的变量(分布式策略)变得很多,令求解过程变慢。因此本发明在分布式策略生成阶段可以通过优化级来对变量空间进行简化;此外可以设定优化级别,即能够通过不同的拓扑关系分析算法,来将全图分解成若干相互关联的小子图,子图间仅记录和考察关联边之间的开销并通过贪心或动态规划算法进行组合,子图内则通过上述ilp来进行求得局部最优解,由此可以大幅降低求解的开销,使得求解过程工程上可控。
[0150]
如上结合图4-图12描述了本发明基于分组进行算子切分并优化模型并行流程的例子,这对应于算子级分布式策略的生成,对任务执行进行数据并行和模型并行优化。而在本发明的优选实施例中,可以在进行算子切分之前,首先进行计算图的切分,由此引入本发明基于流水线并行的深度学习任务执行优化。
[0151]
具体地,pipeline(流水线)并行需要将一个完整的计算图,根据一定的逻辑(即,需要考虑执行顺序),划分成若干个子图。基于流水线并行划分得到的子图在此通常称之为阶段性(stage)子图。对于每个阶段性子图的计算,则可再采用如上所述的算子级分布式策略对应于一组计算设备上分布式执行,阶段性子图之间涉及到的计算图数据依赖可以通过点对点(p2p)通信来完成;流水线并行更重要的一点是,同一个迭代步内,每组计算设备上会对若干个微批次(micro_batch)的样本数据进行连续计算,以使得计算资源在宏观时间段内得到更高的使用率。图13示出了流水线并行的两个例子。在图13的例子中,一个完整计算图被分为三个阶段性子图,分别由三个gpu(即,gpu0~gpu2)执行。图中(a)和(b)都使用相同的微批次(图示的数字0~6表示的7个微批次)大小,区别在于微批次调度执行的顺序不同,而这会影响执行过程中显存资源的占用量,即,会导致bubble(气泡,即图中表示gpu空
闲的空白格)的量和分布不同。应该注意的是,为了简明起见,图13的示意图中仅考虑了流水线,并未包含算子级分布式执行策略。
[0152]
根据深度学习模型的特点,对给定模型结构(算子集合)的反向(求导/梯度计算)计算通常会依赖于其前向计算的部分结果,对全图切分阶段性子图时,也会根据这样的关系,使得前向和反向计算部分在同样设备上计算(即两部分位于同一个阶段性子图,或者前向反向各自安排一组镜象阶段性子图但被调度于同一设备上执行,后者的总阶段性子图数为设备组数*2),这对模型参数的存储与更新也是更为友好的选择。在如下的本发明的流水线并行策略生成优化中也会用到这样的关系。
[0153]
在本发明中,如前所述可对分配给当前深度学习任务的硬件资源对应硬件设备总数进行因式分解以获取至少一个分组方案(例如,16个硬件设备被两因子分解为2*8,被三因子分解为4*2*2,也可以对应于单个因子16)。由此获取的分组方案在包括多因子时,可以首先用于计算图的分割,以获取多个阶段性子图。随后在针对划分的阶段性子图,进行各自的算子级分布式切分方案的生成;或是在进行算子切分后或是两次算子切分之间,进行阶段性子图的分割。
[0154]
对于流水线并行而言,期望每个阶段性子图的划分是均衡的,包括每个阶段性子图在其对应执行设备上的计算耗时大致相同。同时,还期望阶段性子图之间的通信量尽可能小。此外,还需要保证每个阶段性子图的计算过程不会耗尽对应设备上的内存资源。
[0155]
因此,对流水线并行的自动分布式策略生成,关键在于如何根据给定的计算图来划分出合理的阶段性子图。在此基础上,评估选择合理的微批次数量,再结合如上所述的算子级分布式策略方案生成过程,从而形成完整的、包括流水线并行优化和算子级并行优化的分布式执行方案。
[0156]
在分布式执行策略包括流水线并行优化时,需要对计算图hlo ir指令中的dist_spec描述额外附加一个信息,即,阶段性子图编号信息。同一个阶段性子图的算子对应指令,将在执行期间被安排到同一组设备上执行。流水线并行还需要设定微批次的数量,而微批次的划分本质是数据并行,即从输入指令开始进行第0维的切分,切分数为微批次的数量。这部分的具体处理,可以通过直接记录于dist spec上实现,也可以通过复制出若干个计算图,并修改微批次对应操作数的形状来实现。
[0157]
为了得到计算耗时相同(其实是相近)的多个子图,需要对计算图的切分位置进行合理评估。在本发明的一个实施例中,评估计算图的切分位置以切分得到各自计算耗时相同的所述多个子图包括:选取所述计算图中的关键算子并统计所有关键算子的总计算开销;根据所述总计算开销平均划分多个区间;基于每个关键算子本身及其前后关键算子计算开销设置该算子的区间范围;以及以跨区间张量的总通信开销最小为目标求取使得每个关键算子都落入各自设置区间范围内优化解作为所述切分位置。
[0158]
为了更好地理解本发明的计算图分割方法,如下结合图14进行描述。图14示出了基于计算耗时评估计算图划分位置的例子。即,图13示出了如何对计算图中各个算子(即,各条指令)确定其所处阶段的编号信息。由于模型前向和反向计算通常会在同一组设备上执行,因此在此以前向图计算部分(亦即推理过程)为例来描述如何确定各算子所属的阶段性子图,随后可以通过镜像来确定反向图。此处前向图和反向图的判断既可以在客户端构图和聚合过程中进行标注,也可以通过分析图结构获得。
[0159]
首先,可以选取图中的关键算子,例如,在其提及的指定的计算密集算子等(在其他实施例中,也可以针对所有执行进行评估,但这样计算复杂性会大幅提升),并根据开销模型评估这些算子的计算开销。图中灰色的节点对应于关键算子,白色节点对应于非关键算子。灰色节点中的数字表示开销模型评估出的计算开销,白色节点中的0则表示不考虑这些节点的计算开销。
[0160]
随后,统计所有关键算子的总开销cost_all,按照需要划分的阶段性子图数,将[0, cost_all]平均划分为n个阶段性区间。
[0161]
对于每一条关键算子,寻找到其确定的“前驱集合”和“后继集合”,求出其“前驱”和“后继”的总开销,前驱开销加上该算子本身开销,cost_all减去后继开销再减去指令本身开销,对应于上一步所划定的两个区间值,设置为该算子的区间范围。而其余非关键算子,则根据其前后关键算子的阶段性区间值范围取并集。图14的左侧和右侧部分示出了相同的计算图,并且各自示出了对于关键指令a和关键指令b的区间划分。在图13的例子中,计算图总共包括9个关键算子,它们的总开销cost_all为16。如果假设分组为4,即,需要将计算图划分为4个阶段性子图,则将[0, cost_all]平均划分为n个阶段性区间对应于:区间0:0~4;区间1:4~8;区间2:8~12;区间3:12~16。
[0162]
在左侧的例子中,关键算子a的前驱开销为0,后续开销为14,前驱开销加上算子本身开销为1(落入区间0),总开销减去后继开销再减去算子本身开销为1(落入区间0),因此关键节点a所处的区间范围为[0,0],即该关键节点a的阶段性子图划分方案中将始终被划分在第0个子图内。
[0163]
相应地,在右侧的例子中,关键算子b的前驱开销为3,后续开销为4,前驱开销加上算子本身开销为6(落入区间1),总开销减去后继开销再减去算子本身开销为9(落入区间2),因此关键节点b所处的区间范围为[1,2],即该关键节点b的阶段性子图划分方案中将被划分在第1或2个子图内。
[0164]
对应于全图的所有的边,配合如上求取的关键算子阶段性区间进行建模求解,以确定具体每个算子的阶段性取值。在一个实施例中,可以以所有跨阶段的边其张量传输总开销做为目标函数的因子求解最小值。得到全部的关系式之后,获取传输总开销最小时的计算图划分。
[0165]
在一个实施例中,可以按上述逻辑以镜像阶段的方式来求解反向图,同时可以在建模时考虑前向反向对应关系,做为建模求解的约束条件。
[0166]
计算图分割确定之后,根据输入的批次信息,确定一个微批次的可取值范围,使得整个流水线资源使用率大于一定阈值(如80%,即气泡率小于20%),而后进行枚举,将第一个整除的微批次数作为该流水线并行方案所采取的微批次数,随后再获取算子级分布式策略,统一评估整体开销。
[0167]
在本发明涉及流水线并行优化的实施例中,虽然额外涉及计算图的划分,但整体上仍然是自动化的分布式策略优化方法。因此,如上所述的流水线方案还需要和仅有算子级分布式的方案进行开销评估,最终选取最佳方案。换句话说,在例如为当前深度学习任务
分配16个gpu卡(硬件设备)用于模型并行执行的情况下,可以对16个gpu卡进行例如4*4(纯算子二次切分)、4(计算图分割)*2*2(算子二次切分)、2(计算图分割)*8(算子一次切分)等的各种切分方式下的开销评估,并从中优选出最佳方案(可以包括计算图切分,也可以仅包括算子切分)。当然,在不同的实现中,用户可以要求需要流水线并行,此时,则是不同分组对应生成的流水线并行在完成全部算子分布式策略生成之后相互进行开销评估并筛选最佳方案。
[0168]
图15示出了根据本发明一实施例可用于实现上述分布式执行深度学习任务的优化方法的计算设备的结构示意图。
[0169]
参见图15,计算设备1500包括存储器1510和处理器1520。
[0170]
处理器1520可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器1520可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(gpu)、数字信号处理器(dsp)等等。在一些实施例中,处理器1520可以使用定制的电路实现,例如特定用途集成电路(asic,application specific integrated circuit)或者现场可编程逻辑门阵列(fpga,field programmable gate arrays)。
[0171]
存储器1510可以包括各种类型的存储单元,例如系统内存、只读存储器(rom),和永久存储装置。其中,rom可以存储处理器1520或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器1510可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(dram,sram,sdram,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器1510可以包括可读和/或写的可移除的存储设备,例如激光唱片(cd)、只读数字多功能光盘(例如dvd-rom,双层dvd-rom)、只读蓝光光盘、超密度光盘、闪存卡(例如sd卡、min sd卡、micro-sd卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
[0172]
存储器1510上存储有可执行代码,当可执行代码被处理器1520处理时,可以使处理器1520执行上文述及的分布式执行深度学习任务的优化方法。
[0173]
上文中已经参考附图详细描述了根据本发明的分布式执行深度学习任务的优化方法。本发明根据深度学习模型计算一般性特点,设计了不包含特定模型假设的分布式策略描述形式和推导验证原则,并实现了全自动分布式策略候选集生成规则,实现对解空间的尽可能覆盖;利用了多级动态规划算法和ilp整数线性规划给合的手段,将问题求解划分为多个层次,并制定了丰富的剪枝策略,提升求解方案搜索效率,按需高效快速的求解;设计了包括通信和访存在内的开销模型(cost model)限定和合理评估策略,用于候选解的搜索;考虑了设定多级优化水平,根据不同场景的服务质量需求,提供不同优化效果的解。
[0174]
本方案实现了一套全自动分布式训练方案生成的方法,使用者无需在单机模型上做任何标注修改,通过配置执行参数即可实现分布式训练。
[0175]
本方案搜索策略速度快,提供不同的优化级别,从亚秒级到分钟级均可生成具备
正确性,仅是运行性能不同分布式训练方案。
[0176]
本方案基于开销模型(cost model)搜索出来的最佳策略具备优秀的执行效率和扩展性,能够与传统专家提供的深度模型手工训练方案持平甚至做到更优。
[0177]
本方案的算法针对各种模型普遍适用,不限模型参数结构的宽窄、层次的深浅、模型计算的稠密或稀疏性,均普遍适用,能够为每个模型自动定制其最优策略,不像部分竞对的方案仅针对特定类型的模型提供遵循固定模式的方案。
[0178]
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
[0179]
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
[0180]
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
[0181]
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0182]
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献