CN114692829A - 基于dnn模型的检查点选择方法、设备和存储介质 - Google Patents
基于dnn模型的检查点选择方法、设备和存储介质 Download PDFInfo
- Publication number
- CN114692829A CN114692829A CN202210296062.6A CN202210296062A CN114692829A CN 114692829 A CN114692829 A CN 114692829A CN 202210296062 A CN202210296062 A CN 202210296062A CN 114692829 A CN114692829 A CN 114692829A
- Authority
- CN
- China
- Prior art keywords
- video memory
- result
- calculation
- propagation
- dnn model
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003860 storage Methods 0.000 title claims abstract description 14
- 238000010187 selection method Methods 0.000 title claims abstract description 11
- 230000015654 memory Effects 0.000 claims abstract description 144
- 238000004364 calculation method Methods 0.000 claims abstract description 117
- 238000012549 training Methods 0.000 claims abstract description 52
- WURBVZBTWMNKQT-UHFFFAOYSA-N 1-(4-chlorophenoxy)-3,3-dimethyl-1-(1,2,4-triazol-1-yl)butan-2-one Chemical compound C1=NC=NN1C(C(=O)C(C)(C)C)OC1=CC=C(Cl)C=C1 WURBVZBTWMNKQT-UHFFFAOYSA-N 0.000 claims abstract description 19
- 238000000034 method Methods 0.000 claims description 48
- 238000013528 artificial neural network Methods 0.000 claims description 18
- 230000000644 propagated effect Effects 0.000 claims description 8
- 238000011084 recovery Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 4
- 238000001514 detection method Methods 0.000 claims description 3
- 230000005055 memory storage Effects 0.000 claims description 3
- 238000004422 calculation algorithm Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 238000010801 machine learning Methods 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 241001274656 Marisa Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- QBPFLULOKWLNNW-UHFFFAOYSA-N chrysazin Chemical compound O=C1C2=CC=CC(O)=C2C(=O)C2=C1C=CC=C2O QBPFLULOKWLNNW-UHFFFAOYSA-N 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- Artificial Intelligence (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Complex Calculations (AREA)
- Retry When Errors Occur (AREA)
Abstract
本发明公开了一种基于DNN模型的检查点选择方法、设备和存储介质,在DNN模型训练的前向传播时就动态的选定一部分中间计算结果tensor为检查点保留在显存中;并将其余tensor插入到单链表缓存队列中,当显存使用达到阈值时,再动态地释放单链表缓存队列中的一些tensor来换取显存,直到显存低于阈值;当反向传播需要用到已释放的tensor时再利用检查点进行前向传播来重新计算;通过在DNN模型训练时就动态的对中间计算结果进行分类,设置为检查点的中间计算结果可保留在显存中,其他的中间计算结果在显存溢出时进行释放,避免了因为网络复杂或batch size较大,而在显存中存储过多的中间变量导致的显存溢出或训练速度缓慢。
Description
技术领域
本发明属于机器学习技术领域,具体涉及一种基于DNN模型的检查点选择方法。
背景技术
近年来人工智能技术已应用到了我们生活的方方面面,越来越多的使用场景也正在挖掘,机器学习和神经网络的研究也如火如荼,为了实现人们对人工智能更多场景及更准确的应用,机器学习领域研究人员的训练数据集越来越大、模型的设计越来越复杂、神经网络层数越来越多,机器学习模型的网络深度和数据量呈指数型增长。
虽然目前使用GPU可以减轻一部分内存压力,但是在实际训练中仍然会有很多显存溢出的情况。这是因为在DNN模型中,显存的占用除了神经网络模型参数、训练数据之外,消耗更多的其实是神经网络训练时产生的中间计算结果(tensor)。在模型训练时,前向传播中每个网络层的中间计算结果都需要保存在显存中,以便反向传播时使用这些tensor计算梯度,随着DNN模型变的更深更大,存储tensor所占用的内存量会非常庞大。
针对这一问题,之前的解决方案多是从硬件入手,直接扩大显存,但这种直接的方法并不能提高现有GPU的利用率,也会造成GPU资源的浪费。为了在现有资源基础上保证神经网络的准确率和训练速度,文献《Tianqi Chen,Bing Xu,Chiyuan Zhang,and CarlosGuestrin.Training deep nets with sublinear memory cost.CoRR,abs/1604.06174,2016》提出一种设置检查点checkpoint的方法,只保留前向传播中一部分的中间计算结果,作为检查点,对于其他中间计算结果进行释放,等到反向传播时再重新运行一次检查点部分的前向传播来恢复被释放的中间计算结果,利用计算时间来换取显存空间。但这种方法需要许多DNN模型的先验条件来在DNN模型静态计算图上选择检查点后再进行训练。在此之后,又有文献《MarisaKirisame,StevenS.Lyubomirsky and AltanHaan.DYNAMIC TENSORREMATERIALIZATION.ICLR,2021》提出一种DTR算法,在检查点方法的基础上实现了用启发式的算法在DNN模型动态计算图上去选择要释放的tensor;但DTR算法需要不断计算选择应该被释放的最优张量,优化效果并不突出且带来了许多额外的开销。总的来说,检查点虽付出了重新计算的时间代价,但是却也在一定程度上缓解了存储大量中间计算结果带来的显存占用,而且计算时间是远远小于一切内存交换时间的。
但是目前检查点改进的方法多是通过算法将网络进行分段,将每段看作一个整体,只保留第一个中间计算结果tensor为检查点,在反向传播计算梯度时,每段内部会再利用检查点前向传播以便恢复其他中间结果,这种方法并没有考虑到DNN模型的结构特点和深度;基于动态计算图的DTR算法会导致过多的重计算开销。在当今蓬勃发展的机器学习领域,研究人员搭建的DNN模型越来越丰富,网络也不再只是线形,而是有更多样的形状,而检查点技术并不能完全适应于任意图的DNN模型,DNN模型训练时显存溢出的问题依然没有得到很好的解决。
发明内容
本发明提供了一种基于DNN模型的检查点选择方法、设备和存储介质,解决DNN模型训练时显存溢出的问题。
用Python代码实现的n层DNN模型调用本发明用C++编写的train_with_checkpoint()方法进行神经网络训练,DNN模型调用train_with_checkpoint()方法时传入DNN模型的网络层数n和设置的显存阈值B参数,train_with_checkpoint()通过C++中的智能指针shared_ptr<tensor>来管理神经网络训练过程中显存内的中间计算结果tensor,实现本发明。
为达到上述目的,本发明所述一种基于DNN模型的检查点选择方法,包括以下步骤:
S1、若训练n层的DNN模型,首先根据当前网络层Ti的输入ti-1进行前向传播计算Fi(ti-1),输出中间计算结果ti,并向GPU申请分配显存保存中间计算结果ti;i=1,2,......,n;
S2、根据中间计算结果ti所在网络层及网络层深度、计算开销、占用显存大小等特性来判断中间计算结果ti是否可作为检查点:
若是,则将ti保留在显存中;
否则,将ti依次插入到缓存队列L的队尾Lk;
S3、当前向传播时因GPU显存使用达到阈值,而不能为保存ti分配足够的显存时,将缓存队列L的队头L1出队,释放该非检查点的中间结果tensor换取显存,直到有足够的显存可以被申请来保存ti。
S4、将Ti层输出的中间计算结果ti作为Ti+1层的输入,重复步骤S1-S3步骤,直到进行T1…Tn的共n次前向传播Fi(ti-1)计算;
S5、前向传播计算完成后,开始反向传播,获取反向传播计算所需的前向传播的中间计算结果ti-1、反向传播的中间计算结果为反向传播父操作的计算结果直接进行获取;检测ti-1是否保存在显存中,若ti-1在显存中直接获取,并进行步骤S7,否则进行步骤S6;
S6、检测ti-1前向传播的父操作Fi-1(ti-2)重计算时所需的输入ti-2是否在显存中:
若在,则重计算父操作输出结果ti-1,并进行步骤S7;
否则,向前继续检测ti-2的父操作,以此类推,直到检测到父操作所需的输入在显存中,检测的最远距离为ti-1到保留在显存中的检查点:tc之间的距离;tc作为父操作,对tc和ti-1之间的一系列中间计算结果通过前向传播来重计算恢复输出结果ti-1,并向GPU申请分配显存保存ti-1;
S10、保存训练模型和训练日志:导入keras神经网络库中的model_from_json库,通过model.to_json()方法将训练模型保存为json格式,并保存到指定路径;设置训练日志中每条记录的格式,train_log_txt_formatter=″{time_str}[Epoch]{epoch:03d}[Loss]{loss_str}\n″,“{}”括起来的表示训练时要填入具体的内容,其他则是固定不变的字符串,记录时间、epoch和损失函数值,保存为.txt的训练日志,DNN模型训练结束。
进一步的,所述步骤S1具体为:
前向传播时,第一层神经网络T1对输入的训练数据t0进行前向传播F1(t0)计算,得到第一个中间计算结果t1,并向GPU申请分配显存进行保存,n层的DNN模型前向传播的简化过程表示为:
进一步的,所述步骤S2具体为:
S21、用train_with_checkpoint()方法中的结构体Track来追踪中间计算结果tensor的计算路径来获取当前网络层和tensor信息,获取的信息具体为:Curretnt_net_type表示网络层类型;Curretnt_net_depth表示网络层深度;Inputs和Outputs分别表示网络层计算需要的输入与输出的中间计算结果张量;Compute_overhead表示该中间结果实际的计算开销;Memory_usage表示该中间计算结果的显存占用大小;Checkpoint表示该中间计算结果是否为检查点的状态参数。
根据通过显存指针和结构体Track跟踪获取到前向传播中网络层Ti的类型C(ti)、网络层深度D(ti);通过前向传播得到ti的计算开销O(ti)、ti所占用显存大小M(ti)和ti的前一个中间计算结果ti-1是否为检查点的状态P(ti-1),计算出当前ti的权重W(ti);最后结合当前设置的显存阈值B及ti的权重W(ti)动态的设置检查点,平衡显存占用和重计算开销,相关计算公式如下:
C(ti)∈{0,1,2}
P(ti)∈{0,1}
其中,为最优化目标为最少的显存占用,最少的重计算开销,约束的含义依次为:
(1)C(ti)代表不同的网络层类型对应的默认参数值,如dropout层、解码器网络层等不能设置检查点,则对应的默认C(ti)值为0,权重W(ti)也等于0,不为该层设置检查点;普通网络层如池化层、全连接层的默认C(ti)值为1,根据权重W(ti)确定是否设置检查点;卷积层数据量较大,显存占用较多,则默认的C(ti)值为2,减少设置为检查点概率;
(2)P(ti)代表中间计算结果ti是否为检查点,若当前网络层中间计算结果ti为检查点,则P(ti)为0,否则为1,;每层的检查点权重W(ti)与前一个中间计算结果ti-1的P(ti-1)状态值有关,若ti-1为检查点则P(ti-1)为0,则当前ti的权重W(ti)为0,相应的P(ti)为1,ti不设置为检查点;否则默认P(ti+1)为1,根据最终W(t)结果判断当前ti是否设置为checkpoint。
S22、若ti为检查点,则将ti保留在显存中,神经网络继续进行前向传播计算;否则将ti插入到缓存队列L的队尾中,最终得到的队列L1,L2…Lk即非检查点的中间结果tensor输出的先后顺序。用单链表实现的队列来暂存非检查点的中间结果tensor,可利用队列先进先出的特点,入队直接插入,出队直接删除,且没有长度的限制不需担心溢出。
进一步的,所述步骤S3具体为:
S3、当DNN模型训练过程中显存使用达到阈值时,申请分配显存保存非检查点的中间结果tensor会失败,导致不能继续进行计算,依次将缓存队列L的队头L1出队,将L1所存放的非检查点的中间结果tensor释放换取显存,直到有足够的显存可以被分配给保存ti,既可以避免多次计算选择tensor再进行释放,又可以避免释放的tensor很快又要被用来反向传播计算,因前向传播计算后期,若释放的为邻近的tensor,反向传播时很快又需要重新计算。
进一步的,所述步骤S4具体为:
S4、t1作为第二层神经网络T2的输入;再进行F2(t1)计算,得到第二个中间计算结果t2;即第i次计算Fi(ti-1)得到的输出结果为Fi+1(ti)计算操作的输入,以此类推,重复S1-S3步骤,直到完成n次前向传播计算,神经网络前向传播计算时会同时进行n次检查点计算,总开销OF为二者之和:其中Oi(t)为第i次前向传播计算的开销,Ow(t)为第i次检查点计算的开销;
进一步的,所述步骤S5具体为:
S5、前向传播计算完成后,开始反向传播来计算梯度,获取反向传播计算所需的前向传播的中间计算结果ti-1、反向传播的中间计算结果为反向传播父操作的计算结果直接进行获取;检测ti-1是否保存在显存中,若ti-1在显存中直接获取,并进行下一步骤S7,否则进行步骤S6;
n层的DNN模型反向传播的简化过程表示为:
进一步的,所述步骤S6具体为:
S61、检测ti-1前向传播的父操作Fi-1(ti-2)重计算时所需的输入ti-2是否在显存中;若在则重计算父操作输出结果ti-1,并进行步骤S7;否则向前继续检测ti-2的父操作,执行步骤S62;
S62、若ti-1已被释放,继续向前检查父操作Fi-1(ti-2)所需的输入ti-2是否在显存中,若在则可完成重计算恢复ti-1;若ti-2也被释放,则需要ti-2的父操作Fi-2(ti-3)来重计算恢复结果ti-2,依次类推,直到父操作的输入保留在显存中可重新计算得到输出结果;因为作为检查点的tc是一定保留在显存中的,所以这里向前查找父操作的最长距离为ti-1到最近的检查点的tc距离,此时可用tc作为父操作来再次前向传播,重计算恢复之前的一系列子操作,逐步计算输出中间结果tc-1…ti-3,ti-2,ti-1,直到得到中间结果ti-1。
一种计算机设备,包括电连接的存储器和处理器,所述存储器上存储有可在处理器上运行的计算程序,所述处理器执行所述计算程序时,实现上述的基于DNN模型的检查点选择方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述的基于DNN模型的检查点选择方法的步骤。
与现有技术相比,本发明至少具有以下有益的技术效果:
本方法通过在DNN模型训练时的前向传播过程中就动态的对中间计算结果进行分类,任意计算图的DNN模型可直接调用本方法进行训练,DNN模型前向传播时设置为检查点的中间计算结果可保留在显存中,其他的中间计算结果在显存溢出时进行释放,当显存使用达到阈值时,释放非检查点的中间结果换取显存,当反向传播需要使用非检查点结果时再通过重计算进行恢复。避免了因为网络复杂或batch size较大,而在显存中存储过多的中间变量导致的显存溢出或训练速度缓慢;通过检查点方法释放部分中间计算结果来换取显存,增大了训练时的batchsize,可在有限的显存阈值下使用更大的batch size来进行前向传播,从而提升模型训练速度和精度,提高了显存的利用率;且不需要一直记录所有中间计算结果的参数和特性,用来在显存溢出时再计算选择最优张量进行释放,节省了计算开销。
进一步的,DNN模型训练过程中显存使用达到阈值时,申请分配显存保存非检查点的中间结果tensor会失败,导致不能继续进行计算,依次将缓存队列L的队头出队,将队头所存放的非检查点的中间结果tensor释放换取显存,直到有足够的显存可以被分配给保存ti,既可以避免多次计算选择tensor再进行释放,又可以避免释放的tensor很快又要被用来反向传播计算,因前向传播计算后期,若释放的为邻近的tensor,反向传播时很快又需要重新计算。
附图说明
图1是本发明中DNN模型结构的简化示意图;
图2是本发明应用架构图;
图3a是本发明前向传播具体实施流程图;
图3b是本发明反向传播具体实施流程图;
图4是本实施例中使用检查点恢复中间结果应用示意图;
图5是本实施例中缓存队列Lk应用示意图;
图6是实施本方法的ResNet模型训练的Batchsize对比图;
图7是实施本方法进行DNN模型训练的开销图;
图8本发明提供的计算机设备的结构示意图。
具体实施方式
下面将结合附图和实施例对本发明的技术方案进行清楚、完整地描述,以便本领域的技术人员更好的理解本发明。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在附图中展示了根据本发明公开实施例的各种结构示意图。这些图并非是按比例绘制的,其中为了清楚表达的目的,放大了某些细节,并且可能省略了某些细节。图中所示出的各种区域、层的形状及它们之间的相对大小、位置关系仅是示例性的,实际中可能由于制造公差或技术限制而有所偏差,并且本领域技术人员根据实际所需可以另外设计具有不同形状、大小、相对位置的区域/层。
实施例1
本发明针对现有技术中的上述缺陷或不足,提出一个基于DNN模型的检查点选择算法:首先简化DNN模型的训练由输入数据t0、n层神经网络T1…Tn,前向传播操作F1…Fn、中间计算结果t1…tn、反向传播操作Bn…B1组成,各神经网络层作为一个整体进行计算。在DNN模型训练的前向传播时就动态的选定一部分中间计算结果tensor为检查点保留在显存中;并将其余tensor插入到单链表缓存队列中,当显存使用达到阈值时,再动态地释放单链表缓存队列中的一些tensor来换取显存,直到显存低于阈值;当反向传播需要用到已释放的tensor时再利用检查点进行前向传播来重新计算;请参阅图2,本方法由C++代码实现,用PyTorch实现的DNN模型在GPU训练时的最小操作单元为缓冲区的视图tenosr,通过C++的智能指针shared_ptr<tensor>来管理和运算显存中的tensor,检查点的选择、显存的分配和释放、缓存队列的入队、出队等操作细节都封装在train_with_checkpoint()方法中,DNN模型训练时可直接调用,再通过train_after_checkpoint()方法返回训练结果。
参照图1,用Python代码实现的DNN模型通过调用本发明的train_with_checkpoint()方法进行训练,一种基于DNN模型的检查点选择方法,包括以下步骤:
S1、请参阅图2,在实验中,选择目前使用较多的几种主流DNN模型,如三种静态计算图DNN模型:ResNet、DenseNet、UNet,两种动态计算图DNN模型:LSTM、TreeLSTM,通过train_with_checkpoint()方法方法在NVIDIA Titan V GPU(CUDA 10.1,CuDNN 7.6.4,12GB)上进行训练,各模型Mi具体参数如表1所示,:
表1
S2、请参阅图3a,表1中的模型Mi进行前向传播时的具体步骤如下:
S21、首先初始化DNN模型Mi的网络参数和导入训练数据;
S22、根据当前网络层Ti的输入ti-1进行前向传播计算Fi(ti-1),输出中间计算结果ti,并向GPU申请分配显存保存ti;
S23、用track(ti)方法通过显存指针跟踪获取前向传播中Ti网络层的类型C(ti)、网络层深度D(ti);以及前向传播得到ti的计算开销O(ti)、ti所占用显存M(ti)和前一个中间计算结果ti-1是否为检查点的状态P(ti-1),计算出当前ti的权重W(ti);最后结合当前设置的显存阈值B及ti的权重W(ti)动态的设置ti是否为检查点;
S24、参阅图5的单链表队列示意图,若ti为检查点,则将ti保留在显存中,神经网络继续进行前向传播计算;否则将ti插入到缓存队列L的队尾中,最终得到的队列L1,L2…Lk即非检查点的中间结果tensor输出的先后顺序;
S25、当DNN模型训练过程中显存使用达到阈值时,申请分配显存保存计算结果tensor会失败,导致不能继续进行计算,依次将缓存队列L的队头L1出队,将L1所存放的中间结果tensor释放换取显存,直到有足够的显存可以被用来分配给保存ti,;
S26、t1作为第二层神经网络T2的输入;再进行F2(t1)计算,得到第二个中间计算结果t2;即第i次计算Fi(ti-1)得到的输出结果为Fi+1(ti)计算操作的输入,以此类推,重复S1-S3步骤,直到完成n次前向传播计算;
S3、请参阅图3b,表1中的模型Mi通过本方法进行反向传播时的具体步骤如下:
S31、获取反向传播计算所需的前向传播的中间计算结果ti-1、反向传播的中间计算结果为反向传播父操作的计算结果直接进行获取;检测ti-1是否保存在显存中,若ti-1在显存中直接获取,并进行步骤S33,否则进行步骤S32;
S32、检测ti-1前向传播的父操作Fi-1(ti-2)重计算时所需的输入ti-2是否在显存中:
若在,则重计算父操作输出结果ti-1,并进行步骤S33;
否则,向前继续检测ti-2的父操作,参阅图4,实线的节点为保留在显存中的中间计算结果tensor,虚线的节点为已释放的中间计算结果tensor,点状线的为当前正在计算结果tensor;若ti-1已被释放,继续向前检查父操作Fi-1(ti-2)所需的输入ti-2是否在显存中,若在则可完成重计算恢复ti-1;若ti-2也被释放,则需要ti-2的父操作Fi-2(ti-3)来重计算恢复结果ti-2,依次类推,直到父操作的输入保留在显存中可重新计算得到输出结果;因为作为检查点的tc是一定保留在显存中的,所以这里向前查找父操作的最长距离为ti-1到最近的检查点的tc距离,此时可用tc作为父操作来再次前向传播,重计算恢复之前的一系列子操作,逐步计算输出中间结果tc-1…ti-3,ti-2,ti-1,直到得到中间结果ti-1;
S4、将训练日志用json格式保存,并用编写的train_after_checkpoint()方法返回,DNN模型训练结束。
参阅图6,用ResNet模型来不断增加batch size大小进行验证,在12GB的显存阈值下,不断增加batch size大小,对比观察训练结果可以看到:普通的PyTorch实现的DNN模型,训练最大可处理的batch size为64个样本,超过就会导致显存溢出OOM,训练过程被中断;而通过本方法训练的DNN模型,一次最多可处理的batch size为180个样本。
参阅图7,对比观察表1中五种DNN模型:ResNet、DenseNet、UNet、LSTM、TreeLSTM使用本发明的训练开销,即图7中的实线部分,可以看到使用本方法进行DNN模型训练的开销,相比于未使用算法的DNN模型训练的Base开销,即图7中的虚线部分;将额外的计算开销控制在原开销的30%左右,较之前的DTR算法带来的平均50%左右的额外开销,减少了20%左右;因此,使用本方法进行训练,模型Mi在一定的显存阈值下平均可实现batch size 3倍大小的提升,换算成模型大小,在相同的显存阈值及Batch size大小情况下,可训练增大近5倍的模型,避免了显存溢出的情况,对比其他算法减少了额外计算开销,提高了显存利用率。
实施例2
本发明提供的一种计算机设备,如图8所示,包括电连接的存储器和处理器,其中,存储器上存储有可在处理器上运行的计算程序,所述处理器执行所述计算程序时,实现上述的基于DNN模型的检查点选择方法的步骤。
所述处理器可以是中央处理单元(CentralProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器(DigitalSignalProcessor,DSP)、专用集成电路(ApplicationSpecificlntegratedCircuit,ASIC)、现成可编程门阵列(Field-ProgrammableGateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述上述的基于DNN模型的检查点选择方法。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
实施例3
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
尽管上面对本发明的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,以上内容仅为说明本发明的技术思想,并不构成对本发明保护范围的限定。凡是根据本发明的技术构思所做出的各种改变与变形,均应包含在本发明权利要求的保护范围之内。
Claims (10)
1.一种基于DNN模型的检查点选择方法,其特征在于,包括以下步骤:
S1、根据当前网络层Ti的输入ti-1进行前向传播计算Fi(ti-1),输出中间计算结果ti,并向GPU申请分配显存保存中间计算结果ti;i=1,2,......,n;n为DNN模型的层数;
S2、根据中间计算结果ti所在网络层及网络层深度、计算开销、占用显存大小等特性来判断中间计算结果ti是否可作为检查点:
若是,则将ti保留在显存中;
否则,将ti依次插入到缓存队列L的队尾;
S3、当前向传播时,不能为保存ti分配足够的显存时,将缓存队列L的队头出队,释放该非检查点的中间结果tensor换取显存,直到有足够的显存可以被申请来保存ti;
S4、将Ti层输出的中间计算结果ti作为Ti+1层的输入,重复步骤S1-S3,直到进行T1…Tn的前向传播计算Fi(ti-1);
S6、检测ti-1前向传播的父操作Fi-1(ti-2)重计算时所需的输入ti-2是否在显存中:
若在,则计算父操作输出结果ti-1,并进行步骤S7;
否则,向前继续检测ti-2的父操作,以此类推,直到检测到父操作所需的输入在显存中,通过前向传播来重计算恢复输出结果ti-1,并向GPU申请分配显存保存ti-1;
S10、保存训练模型和训练日志,DNN模型训练结束。
2.根据权利要求1所述的一种基于DNN模型的检查点选择方法,其特征在于,所述S2包括以下步骤:
S21、获取前向传播中网络层Ti的类型、网络层深度;计算ti的计算开销、ti所占用显存大小和ti的前一个中间计算结果ti-1是否为检查点的状态,计算当前ti的权重;最后结合当前设置的显存阈值及ti的权重动态的设置检查点,平衡显存占用和重计算开销;
S22、若ti为检查点,则将ti保留在显存中,神经网络继续进行前向传播计算;否则,将ti插入到缓存队列的队尾中,最终得到的队列即非检查点的中间结果tensor输出的先后顺序。
3.根据权利要求2所述的一种基于DNN模型的检查点选择方法,其特征在于,所述步骤S21中,通过显存指针跟踪获取前向传播中网络层Ti的类型和网络层深度。
6.根据权利要求1所述的一种基于DNN模型的检查点选择方法,其特征在于,进一步的,所述步骤S4具体为:t1作为第二层神经网络T2的输入;再进行F2(t1)计算,得到第二个中间计算结果t2;即第i次计算Fi(ti-1)得到的输出结果为Fi+1(ti)计算操作的输入,以此类推,重复S1-S3步骤,直到完成n次前向传播计算,神经网络前向传播计算时同时进行n次检查点计算。
7.根据权利要求1所述的一种基于DNN模型的检查点选择方法,其特征在于,所述步骤S6包括以下步骤:
S61、检测ti-1前向传播的父操作Fi-1(ti-2)重计算时所需的输入ti-2是否在显存中:
若在,则重计算父操作输出结果ti-1,并进行步骤S7;
否则,向前继续检测ti-2的父操作,执行步骤S62;
S62、判断ti-1是否在显存中:
若ti-1不在显存中,继续向前检查父操作Fi-1(ti-2)所需的输入ti-2是否在显存中;
若在显存中,则完成重计算恢复ti-1;否则,判断ti-2是否在显存中,若ti-2也被释放不在显存中,则用ti-2的父操作Fi-2(ti-3)来重计算恢复结果ti-2,依次类推,直到父操作的输入保留在显存中重新计算得到输出结果;因为作为检查点的tc是一定保留在显存中的,所以这里向前查找父操作的最长距离为ti-1到最近的检查点的tc距离,此时可用tc作为父操作来再次前向传播,重计算恢复之前的一系列子操作,逐步计算输出中间结果tc-1…ti-3,ti-2,ti-1。
8.根据权利要求1所述的一种基于DNN模型的检查点选择方法,其特征在于,所述步骤S10完成后,保存训练日志。
9.一种计算机设备,其特征在于,包括电连接的存储器和处理器,所述存储器上存储有可在处理器上运行的计算程序,所述处理器执行所述计算程序时,实现权利要求1-8中任意一项所述的方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-8中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210296062.6A CN114692829B (zh) | 2022-03-24 | 2022-03-24 | 基于dnn模型的检查点选择方法、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210296062.6A CN114692829B (zh) | 2022-03-24 | 2022-03-24 | 基于dnn模型的检查点选择方法、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114692829A true CN114692829A (zh) | 2022-07-01 |
CN114692829B CN114692829B (zh) | 2024-04-02 |
Family
ID=82138593
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210296062.6A Active CN114692829B (zh) | 2022-03-24 | 2022-03-24 | 基于dnn模型的检查点选择方法、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114692829B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115688893A (zh) * | 2022-10-19 | 2023-02-03 | 北京百度网讯科技有限公司 | 内存调度方法及装置、电子设备和存储介质 |
CN115965070A (zh) * | 2022-11-11 | 2023-04-14 | 北京百度网讯科技有限公司 | 计算图处理方法、装置、设备、存储介质以及程序产品 |
CN117472447A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 寄存器重命名恢复方法、装置和设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190188572A1 (en) * | 2016-05-20 | 2019-06-20 | Deepmind Technologies Limited | Memory-efficient backpropagation through time |
CN112508191A (zh) * | 2020-12-14 | 2021-03-16 | 北京地平线信息技术有限公司 | 训练深度学习模型的方法及装置、电子设备及存储介质 |
CN112882830A (zh) * | 2021-02-03 | 2021-06-01 | 北京迈格威科技有限公司 | 显存管理、模型训练方法、装置、电子设备及存储介质 |
-
2022
- 2022-03-24 CN CN202210296062.6A patent/CN114692829B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190188572A1 (en) * | 2016-05-20 | 2019-06-20 | Deepmind Technologies Limited | Memory-efficient backpropagation through time |
CN112508191A (zh) * | 2020-12-14 | 2021-03-16 | 北京地平线信息技术有限公司 | 训练深度学习模型的方法及装置、电子设备及存储介质 |
CN112882830A (zh) * | 2021-02-03 | 2021-06-01 | 北京迈格威科技有限公司 | 显存管理、模型训练方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
冯诗影;韩文廷;金旭;迟孟贤;安虹;: "循环神经网络在语音识别模型中的训练加速方法", 小型微型计算机系统, no. 12, 11 December 2018 (2018-12-11) * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115688893A (zh) * | 2022-10-19 | 2023-02-03 | 北京百度网讯科技有限公司 | 内存调度方法及装置、电子设备和存储介质 |
CN115688893B (zh) * | 2022-10-19 | 2024-09-03 | 北京百度网讯科技有限公司 | 内存调度方法及装置、电子设备和存储介质 |
CN115965070A (zh) * | 2022-11-11 | 2023-04-14 | 北京百度网讯科技有限公司 | 计算图处理方法、装置、设备、存储介质以及程序产品 |
CN115965070B (zh) * | 2022-11-11 | 2023-10-20 | 北京百度网讯科技有限公司 | 计算图处理方法、装置、设备、存储介质以及程序产品 |
CN117472447A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 寄存器重命名恢复方法、装置和设备 |
CN117472447B (zh) * | 2023-12-28 | 2024-03-12 | 北京微核芯科技有限公司 | 寄存器重命名恢复方法、装置和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN114692829B (zh) | 2024-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114692829B (zh) | 基于dnn模型的检查点选择方法、设备和存储介质 | |
CN112236784B (zh) | 修改机器学习模型以改善局部性 | |
JP6898359B2 (ja) | ディープニューラルネットワーク用のアクセラレータ | |
US11836610B2 (en) | Concurrent training of functional subnetworks of a neural network | |
US10410112B2 (en) | Apparatus and method for performing a forward operation of artificil neural networks | |
CN110569979B (zh) | 面向嘈杂中型量子设备的逻辑-物理比特重映射方法 | |
CN106529668A (zh) | 加速深度神经网络算法的加速芯片的运算装置及方法 | |
JP7495480B2 (ja) | 共有スクラッチパッドメモリを用いたベクトル縮小 | |
US11295206B2 (en) | Interleaving memory requests to accelerate memory accesses | |
CN109635922B (zh) | 一种分布式深度学习参数量化通信优化方法及系统 | |
US20210019628A1 (en) | Methods, systems, articles of manufacture and apparatus to train a neural network | |
CN109636709B (zh) | 一种适用于异构平台的图计算方法 | |
WO2019182059A1 (ja) | モデル生成装置、モデル生成方法及びプログラム | |
KR102209917B1 (ko) | 심층 강화 학습을 위한 데이터 처리 장치 및 방법 | |
US20240004718A1 (en) | Compiling tensor operators for neural network models based on tensor tile configurations | |
KR20200023155A (ko) | 뉴럴 네트워크의 학습을 가속하는 방법 및 뉴럴 네트워크 시스템 | |
CN117112145B (zh) | 训练模型分配方法、装置、计算机设备和存储介质 | |
US11249724B1 (en) | Processing-memory architectures performing atomic read-modify-write operations in deep learning systems | |
US20240095492A1 (en) | Memory management for mathematical operations in computing systems with heterogeneous memory architectures | |
KR102704648B1 (ko) | 전자 장치 및 그 제어 방법 | |
KR20230095759A (ko) | 전자 장치 및 전자 장치의 제어 방법 | |
KR20240026081A (ko) | 기계 학습 기반 행렬 연산 선택기를 위한 시스템 및 방법 | |
CN115759208A (zh) | 基于脉冲神经网络的数据处理方法、电子设备及介质 | |
CN117834624A (zh) | 一种基于双重深度强化学习的算力分发网络在线调度方法 | |
Kim et al. | A deep learning convolution architecture for simple embedded applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |