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

一种面向流水线并行训练的内存调度方法

2022-09-07 23:29:32 来源:中国专利 TAG:


1.本发明主要涉及到神经网络应用技术领域,特指一种面向流水线并行训练的内存调度方法。


背景技术:

2.目前,深度学习(deep learning)技术发展迅速,其在很多领域都得到了广泛的应用,同时也一跃成为学术界研究的热门领域。在深度学习技术中,关注度最高的便是深度神经网络模型。深度神经网络在许多人工智能应用中表现出很好的效果,包括计算机视觉、自然语言处理、机器翻译、图象识别等领域。然而,神经网络模型向着越来越深的趋势发展,导致存储负载与计算量急剧增加,尤其对于神经网络训练影响较大。
3.神经网络规模的增大导致训练变得困难,基于单个硬件设备的训练方法越来越难以为继。为了解决神经网络模型训练困难的问题,有研究者提出了“分布式并行训练”的概念。所谓“分布式并行方案”是通过部署多个通用加速器组成分布式并行系统,集合了多个加速器的物理内存与核心算力,用以实现训练大规模网络模型并加速训练过程的目的。
4.gpu是神经网络加速器的代表之一,也是目前应用最多最广泛的神经网络加速器,它是英伟达推出的面向深度学习推理过程的开源神经网络加速器平台。现有的分布式并行系统,大部分都是在多gpu平台上进行部署。
5.流水线并行是在分布式并行方案中的一种,在训练速度上相较其他方案具有明显速度优势,但是其仍然存在两个技术问题:
6.第一、存储负载过大。一般而言一个并行系统具有几级流水,相应内存和带宽需求就会增加几倍,因为其需要保存多个版本的数据与程序状态。流水线并行系统中保存数据最多的计算节点需要保存和流水级数相同数量的数据,导致流水线并行方案训练过程存储负载过高。
7.第二、通信开销过大。流水线并行系统进行训练时相邻的计算节点需要频繁交换激活与梯度,从而导致流水线巨大的通信开销,使得流水线无法达到与流水级数相应的理想加速比。
8.综上所述,现在亟需能够处理流水线并行进行训练任务时,存储负载与通信负载过高问题的方法。


技术实现要素:

9.本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、容易实现、可降低存储负载和通信开销的面向流水线并行训练的内存调度方法。
10.为解决上述技术问题,本发明采用以下技术方案:
11.一种面向流水线并行训练的内存调度方法,其包括:
12.部署阶段:将神经网络模型以网络层为单元进行分割,形成不同的网络分区;将不
同的网络分区部署到不同的计算节点上;
13.训练阶段:每个计算节点仅负责所部署的网络分区的计算;每个计算节点与上游和下游计算节点进行数据通信;前向传播过程中接收和发送激活数据,反向传播过程接收和发送梯度数据;
14.数据转移机制:将计算节点中的激活数据卸载到cpu内存,等待数据需要再次被使用时取回;
15.数据处理阶段:对激活数据进行压缩,再发送给下游计算节点或者cpu内存;下游计算节点接收到激活数据以后,或者原计算节点从cpu内存取回激活数据以后,计算节点内部对激活数据进行一次解压。
16.作为本发明的进一步改进:在所述训练阶段中,在前向传播阶段,接收来自上游计算节点的激活数据,完成前向计算,然后将自己的激活数据发送至下游计算节点。
17.作为本发明的进一步改进:在所述训练阶段中,在反向传播阶段,接收来自下游计算节点的梯度数据,完成反向计算,然后将自己的梯度数据发送给上游计算节点。
18.作为本发明的进一步改进:在所述训练阶段中,每个计算节点不断切换前向传播与反向传播的计算通道,使小批次训练数据不间断输入;不同小批次的训练过程参杂在一起,每个计算节点保存多个版本的激活数据与权重参数。
19.作为本发明的进一步改进:在所述训练阶段中,小批次的前向计算与反向计算存在时间间隔,在小批次的反向计算来临前,它产生的激活数据和它使用的权重参数在此时间间隔内不被使用。
20.作为本发明的进一步改进:在所述训练阶段中,所述计算节点完成一个小批次的前向计算以后,将产生的激活数据发送至下游计算节点;然后将激活数据卸载到其他的存储设备;在此小批次的反向计算来临前,从外部存储设备取回激活数据,用于反向计算。
21.作为本发明的进一步改进:在所述数据处理阶段中,通过配置一个解压和压缩模块来实现零值压缩算法。
22.作为本发明的进一步改进:在所述训练阶段中,所述计算节点前向传播时的激活数据通信操作包括:
23.所述计算节点产生的激活数据经过解压和压缩模块对数据进行压缩,然后将压缩后的数据发送至下游计算节点;
24.下游计算节点接收到压缩的激活数据以后,解压和压缩单元对数据进行解压,然后用于前向计算。
25.作为本发明的进一步改进:在所述训练阶段中,所述计算节点卸载激活数据的操作包括:
26.所述计算节点的内部计算核心将产生的激活数据经解压和压缩单元进行压缩;
27.将压缩后的激活数据卸载至cpu内存。
28.作为本发明的进一步改进:在所述训练阶段中,所述计算节点取回激活数据的操作包括:
29.计算节点从cpu内存中取回压缩的激活数据;
30.解压和压缩单元对数据进行解压;
31.解压的激活数据用于进行反向计算。
32.与现有技术相比,本发明的优点在于:
33.本发明的面向流水线并行训练的内存调度方法,为面向在多gpu平台下部署的流水线并行方案,将流水线gpu节点中部分激活数据转移到cpu内存,等待激活数据再次需要使用时取回,从而降低流水线的存储负载。同时本发明的内存调度方法在gpu节点内设置一个解压和压缩单元,将激活数据压缩后再进行传输,接收后再进行解压,可降低传输激活数据的通信开销。最终流水线并行方案可以大幅减低训练时存储负载,并且将训练速度损失控制在合理范围。本发明具有原理简单、容易实现、降低流水线并行方案的存储负载和通信开销等优点。
附图说明
34.图1是本发明在具体应用之后的拓扑结构原理示意图。
35.图2是本发明在具体应用实例中流水线并行方案的原理示意图。
36.图3是本发明在具体应用实例中流水线并行方案实现数据转移的原理示意图。
37.图4是本发明在具体应用实例中解压和压缩单元的原理示意图。
38.图5是本发明方法的流程示意图。
具体实施方式
39.以下将结合说明书附图和具体实施例对本发明做进一步详细说明。
40.如图1和图5所示,本发明的面向流水线并行训练的内存调度方法,包括:
41.部署阶段:将神经网络模型以网络层为单元进行分割,形成不同的网络分区;将不同的网络分区部署到不同的计算节点上;
42.训练阶段:每个计算节点仅负责所部署的网络分区的计算。在具体应用实例中,在前向传播阶段,接收来自上游计算节点的激活数据,完成前向计算,然后将自己的激活数据发送至下游计算节点。在反向传播阶段,接收来自下游计算节点的梯度数据,完成反向计算,然后将自己的梯度数据发送给上游计算节点。
43.数据转移机制:流水线并行方案的训练过程中,需要保存多个版本的激活数据以用于反向传播时计算梯度,是高存储负载的主要原因。本发明的内存调度方法将计算节点中的激活数据卸载到cpu内存,等待数据需要再次被使用时取回,避免数据累积在计算节点中。
44.数据处理阶段:激活数据卸载与取回操作、节点间激活数据发送与接收操作都具有大量通信开销,影响训练速度。本发明的内存调度方法在计算节点内设置压缩单元,对激活数据进行压缩,再发送给下游计算节点或者cpu内存。下游计算节点接收到激活数据以后,或者原计算节点从cpu内存取回激活数据以后,节点内部的解压和压缩单元对激活数据进行一次解压。
45.在具体应用实例中,在所述训练阶段的训练过程使用特殊的一前一后调度方法使训练过程流水化。训练过程每个计算节点不断切换前向传播与反向传播的计算通道,使小批次训练数据不间断输入。不同小批次的训练过程参杂在一起,要求每个计算节点需要保存多个版本的激活数据与权重参数。
46.在具体应用实例中,在所述数据处理阶段中,通过配置一个解压和压缩模块来实
现零值压缩算法。
47.完成部署阶段之后,就已经对网络模型进行分割了,网络分区已经部署到不同的计算节点上。在具体应用实例中,在所述训练阶段的内存调度流程包括:
48.步骤s1:数据集从第一个计算节点开始输入。前向计算时,首先计算节点接收上游计算节点压缩后的激活数据,然后解压和压缩单元对数据进行解压,最后发送至计算核心进行前向计算。
49.步骤s2:计算节点完成前向计算后,解压和压缩单元对自己产生的激活数据进行压缩,然后发送至下游计算节点和cpu内存。
50.步骤s3:计算节点反向计算来临前,首先计算节点从cpu内存中取回压缩的激活数据,同时也要接收来自下游节点的梯度数据。然后解压和压缩单元对激活数据进行解压,最后发送至计算核心进行反向计算。
51.步骤s4:计算节点完成反向计算后,将梯度数据发往上游计算节点。
52.如图2所示,在一个具体应用实例中,网络分区的模型参数,也即权重参数,如图2右侧所示的w方块。w方块下标数字一为网络分区id,下标数字二为权重参数的版本id。由于流水线并行方案多个小批次的训练参杂在一起,因此需要保存多个版本的权重参数。
53.如图2所示,在一个具体应用实例中,激活数据如图2右侧的a方块。a方块下标数字一为激活数据所属的网络分区的id,下表数字二为激活数据的版本id。由于流水线并行训练时存储负载过高,因此默认使用重计算策略。重计算策略下每个网络分区仅保留上下两个边界层的激活数据,其他层的激活数据在反向传播时刻重新计算。所以一个版本的激活数据包含上下两个边界层的输出。
54.如图2所示,在一个具体应用实例中,前向计算通道如图2中的空白方块,方块中的数字为训练时小批次的id;反向计算通道如图2中的网格方块,方块中的数字为训练时小批次的id。
55.如图2所示,在一个具体应用实例中,计算节点采用计算通道一前一后切换的调度方式。开始进入训练时,计算节点需要一个预备阶段。在完成第一个小批的反向计算以后,将进入一前一后的调度状态。此调度方式使得数据集以小批为单位不间断的输入。
56.在一个具体应用实例中,在所述训练阶段中需要进行权重更新,其权重更新策略是:计算节点每完成一次反向计算,就会立刻更新权重。具体流程包括:
57.步骤s10:数据集以小批为单位连续不断地输入,计算节点的前向阶段需要接收上游计算节点的激活数据,然后将自己的激活数据发送至下游计算节点。
58.步骤s20:计算节点每完成一个小批的前向计算以后,需要将此小批所使用的权重参数和产生的激活数据保留下来。
59.步骤s30:计算节点完成一个小批的前向计算以后,立刻切换到另一个小批的反向计算。反向计算阶段,计算节点接收来自下游的梯度数据,然后选取此前保存下来的激活数据进行反向计算,并对此前保存的权重参数进行更新。最后将自己的梯度数据发送至上游计算节点。
60.步骤s40:计算节点反向计算所更新的权重参数,用于下一个小批的前向计算。在具体应用时,例如小批5使用小批1更新的权重;小批6使用小批2更新的权重。
61.如图3所示,在具体应用实例中,本发明数据转移机制的数据转移流程包括:
62.步骤s100:计算节点完成一个小批的前向计算以后,将下边界层的激活数据发送至下游计算节点,然后将完整版本的激活数据卸载到cpu内存;
63.步骤s200:此小批的反向传播来临时刻,计算节点从cpu中取回激活数据,用于计算梯度。然后选取对应版本的权重参数进行更新。
64.如图4所示,为本发明中解压和压缩单元在具体计算实例中的示意图,利用gpu中的内存控制器所自带的解压和压缩单元。在具体计算实例中,上述所有的通信操作均需要以下步骤:
65.步骤s1000:gpu核心(流处理器)计算出激活数据或者梯度数据以后,经gpu内存控制器的压缩单元进行压缩;
66.步骤s2000:将压缩后的数据发送至下游gpu节点或者cpu内存。压缩后数据经pcie通道发送至其他gpu节点;经pcie通道和cpu内存控制器发送至cpu内存。
67.步骤s3000:gpu节点在前向计算阶段接收来自上游gpu节点的激活数据;在反向计算阶段接收来自下游gpu节点的梯度数据、来自cpu内存的激活数据。接受完数据以后,gpu节点内存控制器的解压和压缩单元对接收的激活数据进行解压,最后发送至gpu核心进行计算。
68.以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献