机器学习计算优化方法和平台与流程

文档序号:29867857发布日期:2022-04-30 16:07阅读:154来源:国知局
机器学习计算优化方法和平台与流程

1.本公开涉及一种机器学习领域,尤其涉及一种机器学习计算优化方法和平台。


背景技术:

2.目前,深度学习任务的数据处理和训练位于同一段代码中,被一并编译并在相同的机器上运行。然而,不同深度学习任务所需要的通用计算资源(例如,cpu)与专用计算资源(例如,gpu、asic)的配比差异较大,这种多样性导致计算设备的硬件资源配比总是无法满足任务需求。并且随着单个专用计算资源计算能力的提升,现有技术中通常是配备的通用计算资源无法为专用计算资源提供足够的数据,从而导致由通用和专用计算能力失配引起的深度学习任务运行效率降低。
3.为此,需要一种能够解决因硬件资源失配导致的深度学习任务运行效率低下的问题。


技术实现要素:

4.本公开要解决的一个技术问题是提供一种机器学习计算优化方法和平台。该方案基于节点有无状态划分计算图并插入通信节点,使得同一深度学习任务中的数据工作和训练工作彼此解耦,从而能够基于运行时训练工作的效率动态分配参与数据工作的通用计算资源,解决因无法为诸如gpu的专用计算单元提供足够的预处理数据而导致的深度学习任务运行效率降低的问题。进一步地,该方案能够与平台调度器相结合,在集群范围内进行通用计算资源调度,从而打破机器界限,提升平台整体的硬件利用效率。
5.根据本公开的第一个方面,提供了一种机器学习计算优化方法,包括:识别机器学习计算图中的有状态节点;将所述机器学习计算图切分为由所述有状态节点的上游节点组成的数据工作子图以及由所述有状态节点及其下游节点组成的训练工作子图;以及在被切分边的两侧,向所述数据工作子图添加数据发送节点,并向所述训练工作子图添加数据接收节点。
6.可选地,所述方法还包括:异步执行所述数据工作子图和所述训练工作子图。
7.可选地,异步执行所述数据工作子图和所述训练工作子图包括:基于所述数据工作子图的数据产生和所述训练工作子图的数据消耗的失配指标动态伸缩执行所述数据工作子图的cpu资源量。
8.可选地,动态伸缩执行所述数据工作子图的cpu资源量包括如下至少一项:在失配指标指示失配时,增加参与执行所述数据工作子图的cpu核的数量;以及在失配指标指示失配时,请求用于独立执行所述数据工作子图的新的cpu资源。
9.可选地,所述新的cpu资源在被分配后,复制所述数据工作子图,从训练数据集中选取与执行所述数据工作子图的已有cpu资源选取数据不同的数据以进行处理,并将经处理的数据送至相同的所述数据接收节点。
10.可选地,异步执行所述数据工作子图和所述训练工作子图包括:数据工作单元获
取第一预定量的训练数据并基于所述数据工作子图进行预处理操作;经预处理的数据被从所述数据发送节点发送至对应的预处理结果存放队列;以及所述数据接收节点从所述对应的处理结果存放队列中获取所述经预处理的数据;以及根据所述经预处理的数据,训练工作单元基于所述训练工作子图进行训练操作。
11.可选地,经预处理的数据被从所述数据发送节点发送至对应的预处理结果存放队列包括:所述数据接收节点对应的数据接收算子维护所述预处理结果存放队列,并且持续从所述数据发送节点将所述经预处理的数据拉取至所述预处理结果存放队列。
12.可选地,所述数据接收节点每次从所述预处理结果存放队列中拉取第二预定量的所述预处理结果,并向所述数据工作单元分发新的第一预定量的训练数据索引。
13.可选地,将所述机器学习计算图切分为由所述有状态节点的上游节点组成的数据工作子图以及由所述有状态节点及其下游节点组成的训练工作子图包括:从所述计算图中所有会进行模型参数更新的有状态节点开始,搜索找到所有下游节点,得到的节点集合及其边构成所述训练工作子图;从源节点进行搜索,获得不包含所述训练工作子图节点的节点集合,得到所述训练工作子图。
14.根据本公开的第二个方面,提供了一种机器学习计算优化方法,包括:基于cpu执行计算的数据工作单元获取第一预定量的训练数据并基于数据工作子图进行预处理操作,并经由数据发送节点发送经预处理的数据;基于异构处理单元执行深度学习计算的训练工作单元经由数据接收节点获取所述经预处理的数据以基于所述训练工作子图进行训练操作,其中,将当前机器学习任务的计算图切分为由所述有状态节点的上游节点组成的所述数据工作子图以及由所述有状态节点及其下游节点组成的所述训练工作子图,并且在被切分边的两侧,向所述数据工作子图添加数据发送节点,并向所述训练工作子图添加数据接收节点。
15.可选地,所述方法还包括:在所述数据工作子图的数据产生和所述训练工作子图的数据消耗产生失配时,执行如下至少一项的操作:为所述数据工作单元分配更多的cpu核;以及请求为所述当前深度学习任务分配新的数据工作单元。
16.根据本公开的第三个方面,提供了一种机器学习计算优化平台,包括:编译服务器,用于将接收到的机器学习任务的计算图切分一个数据工作子图和一个训练工作子图,其中,由所述有状态节点的上游节点组成的数据工作子图,由所述有状态节点及其下游节点组成的训练工作子图,并且在被切分边的两侧,向所述数据工作子图添加数据发送节点,并向所述训练工作子图添加数据接收节点;计算服务器,用于为接收到的机器学习任务提供计算服务,并且包括:各自执行一个数据工作子图的多个数据工作单元,以及各自执行一个训练工作子图的多个训练工作单元,其中,来自同一个计算图的所述数据工作子图和所述训练工作子图被异步执行;以及调度服务器,用于接收为机器学习任务增加新的数据工作单元的请求,并基于不同机器学习任务的数据工作单元相比于训练工作单元的失配指标,向特定机器学习任务分配新的数据工作单元。
17.根据本公开的第四个方面,提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行如上述第一或第二方面所述的方法。
18.根据本公开的第五个方面,提供了一种非暂时性机器可读存储介质,其上存储有
可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行如上述第一或第二方面所述的方法。
19.由此,通过抽象出数据工作(dw)和训练工作(tw)部分,将深度学习任务的数据处理和训练解耦。dw负责读取和预处理原始训练数据,tw使用dw预处理好的数据来计算梯度和更新模型。这样的设计允许动态调整dw的数量以及每个dw所使用的资源,使其可满足不同深度学习任务对cpu资源的不同要求。本发明的上述方案尤其适用于在集群水平上的应用,通过调度器对整个集群cpu资源的合理调度,大幅提升用于数据处理的cpu资源的供给灵活性,同时不影响gpu端训练子图的运行,从而提升平台整体的深度学习任务处理效率。
附图说明
20.通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
21.图1示出了根据本发明一个实施例的机器学习计算优化方法的示意性流程图。
22.图2示出了基于本发明的一个实施例进行计算图划分的例子。
23.图3示出了在图划分后通过插入通信算子来实现支持动态伸缩的数据通信的例子。
24.图4示出了本发明的机器学习计算优化方案的系统架构图。
25.图5示出了根据本发明的数据流水线调度方法。
26.图6示出了根据本发明一个实施例的机器学习计算优化平台的组成示意图。
27.图7示出了根据本发明一实施例可用于实现上述机器学习计算优化方法的计算设备的结构示意图。
具体实施方式
28.下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
29.深度学习近年得到迅速发展,在图像分类、检测、视频和语音处理等领域取得良好的应用效果,并且依然具备极大的发展前景。神经网络是深度学习应用的核心,深度学习神经网络算法是其中最常见的一种神经网络模型。神经网络的工作负载特征是计算和数据密集。神经网络计算所需的乘加操作通常为g数量级,而计算所需参数则通常为m至数百m字节数量级等。
30.神经网络的具体算法可基于深度学习计算框架实现。深度学习计算框架是指端到端的深度学习任务平台,各种深度学习框架往往都拥有各自的生态系统,其中包含各种工具、库等资源,可助力开发者,使其能够轻松地构建和部署由深度学习提供支持的应用。深度学习框架通过高级编程接口为神经网络的设计、训练和验证提供了构建模块。
31.在实际执行时,由于神经网络巨大的参数规模、庞大的计算量和极高并行度的特点,以及对于硬件平台稳定性和高计算能耗比的要求,常规的cpu已经无法满足神经网络的
计算需求。为此,利用fpga、gpu、asic等异构处理器实现的深度计算加速器成为领域内的必然选择。例如,现有的深度学习专用gpu已经可以配置多达几千的计算核,并通过高度优化的调度实现强大的并行乘加计算。
32.然而,这些异构处理器的出现并不能在深度学习任务中完全去除对通用计算单元(即,cpu)的需要。这是因为深度学习数据集需要经过一系列的操作,才能转换为深度学习模型能够理解的形式。这些转换操作,并不适合如上所述的诸如gpu的异构处理器进行执行,而通常由通用计算单元执行。在本发明中,采用“深度学习任务数据流水线”指代对于深度学习数据集的一系列操作,其输出将直接用来进行深度学习模型的训练和推理。这些操作通常包括但不限于数据准备和数据预处理等,通过将数据转换成深度学习模型可以理解并使用的形式来驱动接下来的模型训练或推理。
33.在现有的深度学习领域中,存在各类的深度学习任务。由于模型中cpu密集的预处理操作的量彼此相差甚远,因此这些深度学习任务对cpu资源有着不同的要求。举例而言,针对处理能力相对固定的cpu和gpu,对cpu和gpu的需求比可以从2到64。这意味如果在一台8-gpu的机器上运行多个wdl或deepfm任务,将会需要至少512个cpu核才能跟上gpu的数据消耗速度。而在同样的8-gpu的机器上运行bert任务时,则仅需要16个cpu核。由于通常无法确定某一台机器上要运行的深度学习任务的类型,因此无论配备更多或是更少的cpu,都会因为cpu与gpu比例的失配而导致硬件利用效率低下。
34.为此,本发明提出一种能够抽象出data worker(dw,即,数据工作器/单元)和training worker(tw,即,训练工作器/单元),并由此将深度学习任务的数据处理部分和训练部分解耦的方案。data worker负责读取和预处理原始训练数据,training worker使用data worker预处理好的数据来计算梯度和更新模型。这样的设计允许动态调整data worker的数量以及每个data worker所使用的资源,使其可满足不同深度学习任务对cpu资源的要求。本发明的上述方案尤其适用于在集群水平上的应用,通过调度器对整个集群cpu资源的合理调度使用,大大提升了用于data worker的cpu资源的供给灵活性,同时不影响gpu端training worker的运行,从而提升平台整体的深度学习任务处理效率。
35.图1示出了根据本发明一个实施例的机器学习计算优化方法的示意性流程图。该方法是针对计算图的划分,可以看作是机器学习编译器所执行的内容。在单个任务的层面上,用户对原始代码无需做任何修改,即可提交深度学习任务,例如,交由本地进行单机运行,或交由云上布置的深度学习训练平台运行。对于一段给定的深度学习代码,本方案可以利用图解耦器(graph decoupler),从计算图中识别并解耦出数据预处理部分,分发给data worker运行。data worker会通过通信将预处理好的数据传输给training worker,进行后续的训练过程。在一个实施例中,图解耦器可以看作是本发明向深度学习框架的编译器添加的一个额外部件。在编译器交由用户提交的代码生成计算图之后,便可由本发明的图解耦器执行针对计算图的数据处理和训练的解耦操作。
36.在步骤s110,识别机器学习计算图中的有状态节点。在此,“有状态(stateful)”节点是相对于“无状态(stateless)”节点的概念。有状态节点是在运行时会随着训练的迭代而发生改变的节点,即,用于维护模型参数的节点,这些节点会因为训练时基于损失函数的反向传播而发生状态改变。相比之下,无状态节点则不涉及训练时的状态改变。
37.在识别了有状态节点之后,在步骤s120,可以将所述机器学习计算图切分为由所
述有状态节点的上游节点组成的数据工作(dw)子图以及由所述有状态节点及其下游节点组成的训练工作(tw)子图。换句话说,只要一个节点位于所有有状态节点的上游,则意味着该节点不会由于实际训练而发生状态改变,因此可以被异步执行而无需等待状态的更新。
38.在划分出用于数据处理和训练的两个子图之后,为了保证后续异步执行时数据的正确通信,还可以在步骤s130,在被切分边的两侧,向所述数据工作子图添加数据发送节点(dwsend),并向所述训练工作子图添加数据接收节点(dwrecv)。
39.在此,可以将数据发送节点和数据接收节点统称为“通信节点”。应该理解的是,由于计算图中的每个节点对应于一个特定的算子(op),节点之间的边则对应于数据的流动,因此通过向被切分的边的两端增加“通信节点”,可以确保dw和tw在异步执行时,数据也能够沿着原有的边所指示的途径正确流动。
40.由此,通过在编译阶段依据节点状态有无对计算图的划分以及划分处通信节点的添加,使得同一个深度学习任务的数据处理和训练部分解耦,从而为后续用于数据处理的通用计算资源的动态分配提供了前提基础。
41.如下结合图2用一个具体例子展示了本发明的切图策略如何能够自动化地从一张原始的数据流图中识别出可以被分离到data worker侧执行的最大范围。图2示出了基于本发明的一个实施例进行计算图划分的例子。
42.由于深度学习框架tensorflow提供了tf.data.service库,因此用户可以依据已有的tf.data算子来对代码进行手动重构,从而实现一定程度上的预处理部分加速。训练数据集可经由计算图中的dataset(数据集)、map(映射)和iterator(迭代器)的tf.data算子而进行初步处理,并且可以如图所示,基于tf.data算子的身份来对计算图进行简单的划分。然后上述切分的范围显然不够优化,因为非tf.data算子(如图所示的stringops(字符串算子)、unique(去重)、validation(去除不合法)算子)实际上也是由cpu异步执行的、用于对数据进行预处理的算子。
43.为此,本发明从计算图的角度定义了数据预处理部分的子图,即该子图中的节点不会进行反向传播。因为假如节点需要反向传播,在每一个训练步骤中节点都需要等待后向计算更新完参数后才能处理下一个步骤,无法异步地提前进入下一个步骤。从数据流图的角度来看,没有后向计算这一属性可以解释为节点不依赖于有状态节点(即用于维护模型参数的节点),因为只要一个节点位于所有有状态节点的上游,就可以异步执行而无需等待状态更新。
44.由此,基于节点状态有无的划分标准,如图所示的stringops(字符串算子)、unique(去重)、validation(去除不合法)算子以及其他涉及数据变换(例如,图形变换)的算子也可被划入本发明的dw子图。而只有在行进到图示的左侧特征列涉及读取embedding表(嵌入表)的embeddinglookup(嵌入查找)节点时,才由于涉及该特征列的嵌入读取而遇到第一个有状态节点。此时,可以依据步骤s120规定的切分标准,在embeddinglookup节点的输入边(即,上部)进行切分(如图2左侧的
×
符号所示)。
45.类似地,图示的右侧特征列所涉及的算子仅涉及数据预处理,而由于并入主干后matmul(乘加)算子需要进行涉及该特征列的嵌入读写操作,因此可以依据步骤s120规定的切分标准,在右侧特征列与主干算子matmul算子的连接边上进行切分(如图2右侧的
×
符号所示)。可以对其他特征列进行类似的操作,由此实现基于本发明的划分。
46.在实际操作中,可以采用优化的图划分算法来进行计算图划分。在一个实施例中,步骤s120可以包括:从计算图中所有会进行模型参数更新的有状态节点开始,搜索所有下游节点,得到的节点集合及其边构成所述训练工作子图;以及从源节点进行搜索,获得不包含所述训练工作子图节点的节点集合,得到所述训练工作子图。具体地,可以首先从有状态节点开始,通过广度优先搜索找到所有下游节点,得到的节点集合及其边构成了training worker子图。然后,从源节点进行另一次广度优先搜索,获得不包含training worker子图节点的节点集合,构成data worker子图。
47.如前所述,在划分了dw和tw子图之后,还可以在每一条被划分的边的两侧,增加一对通信节点。以图2所示的计算图为例,可以在左侧
×
符号的上端添加一个dwsend节点(即,在其他转换之后),在左侧
×
符号的下端添加一个dwrecv节点(即,在embeddinglookup节点之上);同样地,可以在右侧
×
符号的上端添加一个dwsend节点(即,在右侧的其他转换之后),在右侧
×
符号的下端添加一个dwrecv节点(即,在matmul节点之上)。
48.由此,在被划分出的dw中,左侧特征列经过其他变换所得到的经处理的数据,可最终交由该dwsend节点发送,并由被划分出的tw中的左侧对应dwrecv节点接收。类似地,左侧特征列经过其他变换所得到的经处理的数据,可最终交由右侧dwsend节点发送,并由被划分出的tw中的右侧对应dwrecv节点接收。
49.另外,虽然未在图2中示出,但应该理解的是,可以存在同一个计算图节点连接多个dwsend节点或dwrecv节点的情况,这对应于连接该节点的多条边同时被切分的情况。换句话说,计算图的切分是针对边进行的,每一条被切分边的两侧的dwsend节点和dwrecv节点可以看作是异步执行的数据工作子图和训练工作子图之间的数据传递路径。
50.在划分出dw子图和tw子图并添加了通信节点之后,就可以实现dw和tw子图的异步执行。由此,本发明的优化方法还包括:异步执行所述数据工作子图和所述训练工作子图。在此,“异步执行”指的是dw子图和tw子图可以不被归于同一条流水线中执行。在本发明中,可以使用不同的硬件资源(尤其是不同类型的硬件资源),在不同的进程中实现dw子图和tw子图的执行。在一个实施例中,可以使用dataworker(数据工作单元)来执行dw子图,使用trainingworker来执行tw子图。数据工作单元使用cpu来执行dw子图所涉及的各类数据准备和预处理操作。训练工作单元则可以主要使用异构处理器,例如深度学习专用的gpu来执行tw子图所涉及的神经网络训练操作。但应该理解的是,tw子图的执行也涉及一部分的cpu操作,例如调度操作,但上述调度操作通常不构成效率瓶颈也不是tw子图操作的主要部分。
51.由于随着异构处理器处理能力的提升,现阶段深度学习任务所面临的效率问题已逐渐从计算瓶颈转到数据瓶颈。在此情况下,本发明通过解耦数据预处理和训练操作实现的异步执行,尤其适用于解决由于数据预处理能力不足而导致的任务整体执行效率低下的问题。为此,在一个实施例中,异步执行数据工作子图和训练工作子图可以包括:基于所述数据工作子图的数据产生和所述训练工作子图的数据消耗的失配指标,动态伸缩执行所述数据工作子图的cpu资源量。在此,“动态伸缩”指根据任务计算力需求,自动调整计算处理能力的技术。通过该技术,任务使用的计算资源会根据负载进行运行时调整。尽可能做到在节约资源成本的同时,提供足够的算力。
52.由于dw子图和tw子图由不同的硬件资源在不同的进程中执行,因此通过执行dw子图产生经处理数据的速度和执行tw子图进行训练所消耗的经处理数据的速度可能会发生
不匹配。例如,现有的cpu单位时间可以对a数量的数据进行预处理,但现有的异构处理器(例如,gpu)单位时间可以处理对应于4a数量的预处理数据。换句话说,现有的cpu的处理能力产生的经处理数据无法“喂饱”gpu,从而造成gpu的利用率低下,并由此产生由处理能力失配导致的浪费。
53.为此,在以执行tw子图的异构处理器(例如,gpu)的处理速度为判定基准的情况下,可以根据失配指标动态伸缩执行所述数据工作子图的cpu资源量。在不同的情况下,动态伸缩执行所述数据工作子图的cpu资源量可以包括不同实现方式。例如,在失配指标指示失配时(即,现有dataworker产生的经处理数据无法喂饱trainingworker时),可以增加参与执行所述数据工作子图的cpu核的数量。换句话说,可以增加当前dataworker能够调配的cpu资源(例如,在本机上为当前的dataworker进程分配更多的cpu核),由此提升当前dataworker的数据产生效率。作为替换或者补充,还可以在失配指标指示失配时,请求用于独立执行所述数据工作子图的新的cpu资源。换句话说,可以增加执行当前任务的dataworker的数量。由此,所述新的cpu资源在被分配后(并由此生成新的dataworker的对应线程之后),新的dataworker可以复制所述数据工作子图,从训练数据集中选取数据进行处理(与执行所述数据工作子图的已有cpu资源选取的数据不同),并将经处理的数据送至相同的所述数据接收节点。换句话说,同一个任务可以有一个trainingworker,但是可以根据trainingworker的数据消耗需求,设置多个dataworker。多个dataworker各自独立工作,但向同一个trainingworker的dwrecv算子提供经处理的数据。
54.图3示出了在图划分后通过插入通信算子来实现支持动态伸缩的数据通信的例子。如图所示,可以假设在任务实际执行时,默认采用如虚线框所示的一个dataworker执行一个dw子图,一个trainingworker执行一个tw子图的配置。此时,由于子图划分时切开了两条边,因此存在两对通信算子,即,dwsend1和dwrecv1,以及dwsend2和dwrecv2。
55.在运行开始后,如果发现dwrecv1和dwrecv2的数据消耗速度要大于dwsend1和dwsend2的数据发送速度(即,dwrecv1和dwrecv2一直处于等数据的状态),则可以为当前任务分配新的dataworker。此时,可以如图中的复制箭头所示,由新的dataworker直接复制一个新的dw子图(包括dwsend1和dwsend2的数据发送节点)。但此时在tw子图部分,仍然保持dwrecv1和dwrecv2不变。由此,dwrecv1可以接收来自dwsend1和dwsend1’的经处理数据,dwrecv2可以接收来自dwsend2和dwsend2’的经处理数据。当新的dataworker具有与原有dataworker相同的数据处理能力时,新dataworker的加入可以使得dw子图的数据生产能力加倍,由此改善失配问题。
56.由于tw子图针对每一个被切分的边仅设置一个dwrecv节点,并且由于dw子图和tw子图被异步执行,因此优选地,可以为每个dwrecv节点创建一个队列用来存放来自一个或多个对应的dwsend节点。并且优选地,还可以使用该队列的队列状态作为监控的性能指标,该指标能够指示当前dw子图和tw子图的执行失配状况。在一个实施例中,可以将该队列的状态看作是如上所述的失配指标。
57.为此,异步执行所述数据工作子图和所述训练工作子图包括:数据工作单元获取第一预定量的训练数据并基于所述数据工作子图进行预处理操作;经预处理的数据被从所述数据发送节点发送至对应的预处理结果存放队列;以及所述数据接收节点从所述对应的处理结果存放队列中获取所述经预处理的数据;以及根据所述经预处理的数据,所述训练
工作单元基于所述训练工作子图进行训练操作。
58.相应地,经预处理的数据被从所述数据发送节点发送至对应的预处理结果存放队列包括:所述数据接收节点对应的数据接收算子维护所述预处理结果存放队列,并且持续从所述数据发送节点将所述经预处理的数据拉取至所述预处理结果存放队列。
59.所述数据接收节点每次从所述预处理结果存放队列中拉取第二预定量的所述预处理结果,并向所述数据工作单元分发新的第一预定量的训练数据索引。在优选的实施例中,dw每次处理的第一预定量的训练数据可以恰好对应于tw每次拉去的第二预定量(因为在预处理过程中数据量可能发生变化)。优选地,第二预定量可以是tw执行神经网络的一个训练步骤所需的训练量。
60.换句话说,在对原始数据流图进行解耦后,本发明可以在一个training worker以及一个和多个data worker之间并发执行不同子图。为了实现水平扩展性和资源弹性,不同data worker使用数据并行的方式执行,即每个data worker每次获取的第一预定量的训练数据可以正好产出training worker一个训练步骤(run)所需的一整个小批量(mini-batch)数据。优选地,不在多个data worker间切分同一个小批量数据,以避免诸如去重和验证操作的重复低效执行。同时,本发明可以采取一种动态数据分发机制,即系统持续地将小批量需要的源数据索引(如文件名)持续分发给data worker,由此避免了在data worker动态伸缩时对数据的重切分。优选地,可由training worker端的dwrecv算子实现了一个数据队列,算子在后台持续地调用data worker端的dwsend算子并拉取数据到队列中。training worker每次执行一次其计算图都会从队列中取出一个小批量的数据,同时触发下一次对该data worker的数据索引分发。
61.由此,本发明还可以实现为一种机器学习计算优化方法。由于针对同一个任务的dw和tw优选在一个物理设备(例如,计算服务器)上实现,因此该方法可以看作用于执行计算图的物理设备所执行的方法,该方法包括:基于cpu执行计算的数据工作单元获取第一预定量的训练数据并基于数据工作子图进行预处理操作,并经由数据发送节点发送经预处理的数据;以及基于异构处理单元(例如,gpu)执行深度学习计算的训练工作单元经由数据接收节点获取所述经预处理的数据以基于所述训练工作子图进行训练操作。其中,在编译阶段将当前机器学习任务的计算图切分为由所述有状态节点的上游节点组成的所述数据工作子图以及由所述有状态节点及其下游节点组成的所述训练工作子图,并且在被切分边的两侧,向所述数据工作子图添加数据发送节点,并向所述训练工作子图添加数据接收节点。针对深度学习任务的如上编译可以在实现dw和tw的同一物理设备上实现,也可由不同的物理设备实现,进一步地,该方法还可以包括:在所述数据工作子图的数据产生和所述训练工作子图的数据消耗产生失配时,执行如下至少一项的操作:为所述数据工作单元分配更多的cpu核;以及请求为所述当前深度学习任务分配新的数据工作单元。
62.图4示出了本发明的机器学习计算优化方案的系统架构图。首先系统可以接收未经修改的用户代码,并在编译阶段经由图解耦器将计算图切分成dw图和tw图。随后,在运行阶段,可以根据队列状态,由调度器进行资源分配,实现dw的弹性伸缩。例如,在数据预处理能力不足时,提供更多的dw,而在dw的数据处理能力超过tw的数据消耗能力时,则可以停用已有的dw。
63.图4所示的系统可由单机实现,例如,同时配备了多核cpu和深度学习专用gpu的单个物理设备实现。在单机实现时,调度器可以是本机资源调度器。单机可以在执行经编译的代码时(此时计算图已经被划分为dw和tw子图)首先进行计算时实现一个dw线程和一个tw线程,并在基于队列状态判定dw线程的数据生产速度不足时,选择增加当前dw的cpu核数,或是增开一个dw线程。
64.在一个优选实施例中,图4所示的系统可由提供深度学习计算服务的云上平台实现。平台可以配备例如专用的gpu集群,并同时对不同用户(例如,各类租户)提及的深度学习任务提供计算服务。如下将结合图5和图6详述本发明的集群层面的应用。
65.随着深度学习算法的在众多领域的广泛应用,深度学习任务规模以及支持深度学习任务的集群规模都逐渐增大。因此大型云服务提供商往往会自建大规模多租户的异构处理器集群并在其上构建大规模机器学习平台,用以支持数量众多的深度学习应用。在众多的异构处理器中,gpu以其更为优异性能而成为深度学习专用处理器的主流。由于gpu卡的硬件成本较高,因此这些大规模深度学习集群通常采用多租户形式构建,众多用户同时共享gpu计算资源。
66.现今业界主要使用大规模gpu集群进行深度学习训练。为了提升集群利用率和训练任务的性能,现有工作主要集中在深度学习任务的调度和计算加速上。然而随着训练数据规模的快速增长和深度学习模型计算效率的提高,大规模集群中深度学习任务的训练逐渐从计算瓶颈转到数据瓶颈。通过对大量实际的深度学习生产任务的数据流水线进行详细的测量和分析,发明人发现了一系列表现出数据读取和数据预处理瓶颈的任务,这会导致深度学习任务性能显著下降,并且进一步造成了关键计算资源(如gpu)的利用率低,造成了极大的资源浪费。
67.目前深度学习任务的数据流水线是和训练过程绑定在一起,运行在相同的机器上的。然而,由于不同深度学习任务所需要的cpu资源与gpu资源的配比差异较大,这种多样性导致很多机器的硬件资源配比无法满足任务需求,最终导致资源的碎片化,大幅降低深度学习任务运行效率,并且影响集群硬件资源利用率造成资源浪费。因此,亟需提出一种可动态伸缩的深度学习任务数据流水线调度方法,使得深度学习任务数据流水线的计算能够打破机器界限,提升深度学习任务运行效率,并且提升cpu及gpu资源利用率。
68.进一步地,现有深度学习框架中数据流水线由深度学习训练任务各自的数据预取驱动,不会对cpu资源分配做全局和动态的规划,无法最大化带宽的利用效率。因此,亟需一套可以在深度学习任务间动态合理地分配cpu资源的策略,使任务尽可能运行在理想性能下(即不受数据预处理阻塞时的性能),提高集群cpu和gpu资源的有效利用率。
69.为此,本发明通过集群调度器与深度学习计算框架协同设计,实现了一套自动化可动态伸缩的深度学习任务数据流水线调度系统。方案从数据流水线的角度重新优化了深度学习训练,以更好地利用所提供的资源,实现深度学习任务数据流水线的加速。得益于自动化可动态伸缩方案的应用,深度学习任务的数据预处理时间显著下降,任务运行效率大幅提高。
70.图5示出了根据本发明的数据流水线调度方法。系统在两个层次上进行这一调度:系统在每个任务水平上探索对任务最合适的资源配置,同时在集群范围内持续调整任务间资源分配来实现全局调度目标。这一过程由一个统一的性能指标来驱动。性能指标的一个
显见的选择是数据队列的状态。如果将执行同一任务的data worker和training worker看作是一个生产者-消费者模型,则整体流水线的执行速率由更慢的一侧决定。因此,在任意时刻,可以通过监测training worker上数据队列的数据进队和出队速率来获取两端的生产和消费速度,以及它们之前的速度差,并且可以由此预估data worker获得更多资源时可能的性能上升空间。
71.如图5所示,可以基于如下几个参数来从任务和集群层面进行针对data worker的资源调整:在此,可以将
µ
表示为任务i从队列中拉取并使用数据的吞吐量;将λ表示为任务i对应的数据流水线生产并推送数据到队列中的吞吐量。在此,
µ
可由tw使用的gpu和cpu资源决定,λ则可由每个dw的cpu资源(即,并行度p)和使用的dw的数量k所决定。在任务层面上,如果基于
µ
和λ的变化判定dw生产速率不足,则可以通过增加并行度(

λ/

p)来实现dw的处理能力改善。而在集群层面,如果基于
µ
和λ的变化判定dw生产速率不足,则可以通过增加新的dw(

λ/

k)来实现dw的处理能力改善。
72.在一个优选实施例中,系统通过三个步骤完成以上两个层次的调度工作:(1)调整每个data worker的cpu资源,即寻找一个最大cpu数量,使data worker在单个进程内部保持线性可扩展性,从而在开销和可扩展性之间取得平衡。系统初始为每个training worker分配1个使用1个cpu核的data worker,并且优选地初始的data worker可以与training worker位于同一个物理设备上(此时,gpu可以看作是cpu的协处理器),或是物理位置相近。然后系统使用以下方法调整data worker的cpu数量:如果队列已经达到理想状态,即data worker与training worker一样快,则不新增加cpu资源数量。如果dw开始出现亚线性加速,或者当前机器上的cpu资源已经耗尽,那么会选择能够实现线性加速的最高cpu数作为每个data worker的最大资源使用。(2)调整任务data worker数量。如果单个data worker不足以满足任务要求,那么任务会向调度器申请更多data worker,申请同时根据当前队列状态预估相应的性能提升。调度器每次可以从所有任务中选取一个性能提升最大的任务,并为其多分配一个data worker。这一过程重复,直到无性能提升,或者集群中的cpu资源耗尽。此外,调度器还可以优选地尝试将dw放置到对tw更为友好的位置,比如tw的本地机器以减少网络通信。(3)调整training worker的cpu资源:执行tw子图除了专有gpu之外,也会需要cpu来执行一些通用的操作,当一个任务发现它的数据队列已经处于理想状态时,它将尝试为tw分配更少的cpu,直到它找到能维持这一理想状态的最小值。
73.为此,本发明还可以实现为一种机器学习计算优化平台。图6示出了根据本发明一个实施例的机器学习计算优化平台的组成示意图。如图所示,平台600可以包括编译服务器610、计算服务器620和调度服务器630。
74.编译服务器610可以获取用户提交的深度学习任务代码,并对代码进行编译;进一步地,可以将编译得到的机器学习任务的计算图切分一个数据工作子图和一个训练工作子图,其中,由所述有状态节点的上游节点组成的数据工作子图,由所述有状态节点及其下游节点组成的训练工作子图,并且在被切分边的两侧,向所述数据工作子图添加数据发送节点,并向所述训练工作子图添加数据接收节点。
75.计算服务器620可以包括大量的通用和专用计算资源,例如cpu集群和gpu集群,并且用于为接收到的机器学习任务提供计算服务,并且包括:各自执行一个数据工作子图的
多个数据工作单元,以及各自执行一个训练工作子图的多个训练工作单元,其中,来自同一个计算图的所述数据工作子图和所述训练工作子图被异步执行。在某些实施例中,计算服务器620也可以直接获取用户代码并执行编译,即,计算服务器本身可以包含编译服务器的功能。
76.调度服务器630可以用于接收为机器学习任务增加新的数据工作单元的请求,并基于不同机器学习任务的数据工作单元相比于训练工作单元的失配指标(例如上文中任务基于当前队列状态预估的相应性能提升),向特定机器学习任务分配新的数据工作单元。
77.图7示出了根据本发明一实施例可用于实现上述机器学习计算优化方法的计算设备的结构示意图。
78.参见图7,计算设备700包括存储器710和处理器720。
79.处理器720可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器720可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(gpu)、特定用途集成电路(asic,application specific integrated circuit)或者现场可编程逻辑门阵列(fpga,field programmable gate arrays)。这些协处理器可以是专用于深度学习计算的具有并行性的异构处理器。
80.存储器710可以包括各种类型的存储单元,例如系统内存、只读存储器(rom),和永久存储装置。其中,rom可以存储处理器720或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器710可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(dram,sram,sdram,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器710可以包括可读和/或写的可移除的存储设备,例如激光唱片(cd)、只读数字多功能光盘(例如dvd-rom,双层dvd-rom)、只读蓝光光盘、超密度光盘、闪存卡(例如sd卡、min sd卡、micro-sd卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
81.存储器710上存储有可执行代码,当可执行代码被处理器720处理时,可以使处理器720执行上文述及的机器学习计算优化方法。
82.上文中已经参考附图详细描述了根据本发明的机器学习计算优化方案。
83.本方案不依赖于用户手动进行计算的切分和放置。用户无需修改自己的代码,本系统能够自动从其数据流图中识别出可以被卸载到dataworker异步执行的部分;在运行时系统可以自行启动data worker,并获取它所需要执行的数据流图(dw子图),在tw和dw之间完成数据交换。整个流程自动化,对用户完全透明。
84.本方案根据数据流图节点是否有反向计算的规则对图进行自动切分,由此能够找出计算图中数据流水线的最大范围,最大化计算切分带来的收益。如图2所示,在一个常见的推荐模型中,如果使用类似tf.data.service的方式进行切分,只能切出封装在这些api内部的一些io操作(图中的简单划分)。但实际上,在这部分计算以外仍有一些没有后向、可
以被切分的计算,但这些计算由于api原因无法被封装到tf.data.service内部。本方案的切图算法可以自动化地将切分范围拓展到这类算子,提升切分收益。
85.本方案率先设计了支持动态伸缩的数据通信算子,以及运行时的伸缩机制,使得data worker可以透明地动态伸缩,不影响训练计算,充分提升资源利用效率。
86.进一步地,本方案能够让深度学习框架和集群调度两个层次进行协同。具体地,本方案可以提出利用data worker和training worker间的数据队列状态作为性能指标,指导系统在任务和集群两个层次动态调整资源分配,提升集群效率。
87.由此,本发明提出自动化的计算解耦方法,可以将一个原始的深度学习模型的数据流图自动切分为data worker和training worker两部分,通过搜索原图中无反向计算的部分,最大化可被切分的计算范围,提升计算切分的收益。
88.本方案进一步提出可动态伸缩的data worker执行机制,通过引入支持动态伸缩的数据通信算子,实现在多个data worker间的数据收发,同时使得data worker可以在运行时透明地伸缩,以提升资源利用效率。
89.本方案还提出了数据流水线的调度方法,利用data worker和training worker的生产者-消费者模型来体现每个任务data worker资源是否充分及可能的性能上升空间,根据此信息在任务和集群两个层次动态调整资源分配,以最大化集群效率。
90.此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
91.或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
92.本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
93.附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
94.以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1