CN116166425A - 基于神经网络中动态计算图的内存优化方法及电子设备 - Google Patents

基于神经网络中动态计算图的内存优化方法及电子设备 Download PDF

Info

Publication number
CN116166425A
CN116166425A CN202211692183.9A CN202211692183A CN116166425A CN 116166425 A CN116166425 A CN 116166425A CN 202211692183 A CN202211692183 A CN 202211692183A CN 116166425 A CN116166425 A CN 116166425A
Authority
CN
China
Prior art keywords
operator
neural network
compatible
execution mode
graph
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.)
Pending
Application number
CN202211692183.9A
Other languages
English (en)
Inventor
冷静文
过敏意
郭聪
邱宇贤
李超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Zhizhi Research Institute
Shanghai Jiaotong University
Original Assignee
Shanghai Zhizhi Research Institute
Shanghai Jiaotong University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Zhizhi Research Institute, Shanghai Jiaotong University filed Critical Shanghai Zhizhi Research Institute
Priority to CN202211692183.9A priority Critical patent/CN116166425A/zh
Publication of CN116166425A publication Critical patent/CN116166425A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • G06F17/13Differential equations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Operations Research (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)

Abstract

本发明提供一种基于神经网络中动态计算图的内存优化方法及电子设备,所述方法包括:识别神经网络动态计算图中前向兼容算子,并计算前向算子的前向计算结果;根据张量‑算子对标记状态和前向算子类型确定当前的执行模态;在执行模态的输入张量为前向兼容类型时,对当前前向节点执行前向自动微分的求导过程,输出求导结果;在执行模态的后续算子为非前向兼容算子时,保存前一个前向节点执行前向自动微分的求导结果,更新前一个前向节点后向参数,输出后向处理结果;基于前向计算结果,求导结果和后向处理结果更新动态计算图的参数。本发明通过在动态计算图运行过程中动态切换使用前向自动微分来有效降低大部分神经网络中激活函数的内存占用。

Description

基于神经网络中动态计算图的内存优化方法及电子设备
技术领域
本发明涉及新一代信息技术领域,特别是涉及神经网络技术领域。
背景技术
随着以神经网络为主要内容的深度学习算法的不断进步,人工智能算法成功地广泛应用到了现实生活中的许多重要领域,包括图像处理、语言处理、文字处理等。作为深度神经网络的重要组成部分,许多不同的激活函数被用于不同类型的任务中,从而不断提高模型精度。比如说,对大多数视觉任务而言,使用Mish、Swish或GELU替代ReLU作为激活函数能够在ResNet架构的神经网络中取得1%的精度提升。另一方面,在自然语言处理领域中,GELU激活函数通常优于其他候选的激活函数。
然而,新型的激活函数通常有着复杂的结构与高昂的内存占用,尤其是在结合了未充足优化的实现之后。有些情况下,激活函数的内存占用在梯度计算过程中会超过卷积层与全连接层在前向过程中保存的中间变量成为最大的内存消耗方。这极大阻碍了新型激活函数在GPU等显存非常有限的主流神经网络训练加速硬件上的应用。
新型激活函数的高内存占用主要是因为主流的神经网络框架采用后向传播算法作为训练过程中自动微分的默认实现。后向自动微分需要保存前向过程中激活函数的中间变量,带来了额外的内存占用。而现有的适用于后向自动微分的内存优化方法通常会引入额外的计算开销,从而降低了神经网络训练速度。另一方面,采用前向传播算法实现自动微分能够降低新型激活函数的内存占用,但在卷积层、全连接层等神经网络主流结构中前向自动微分的计算效率又远低于后向自动微分,因此前向自动微分无法完全替代后向自动微分。
重计算(recomputation)是一种主流的基于后向自动微分的内存优化技术。后向自动微分将神经网络训练过程分为前向传播和后向传播两个阶段,在后向传播过程中,后向自动微分需要访问前向传播过程中产生的中间变量,因此在后向传播阶段对应层的梯度没有计算完之前,对应的中间变量必须一直保留,这些中间变量构成了后向自动微分过程中的主要内存占用。重计算技术为了减少不必要的中间变量占用,主动丢弃一部分经过简单计算就能恢复出来的中间变量,在后向传播阶段再根据需要重新计算对应的中间变量,从而节约了内存占用。在这个过程中,因为激活函数需要的计算资源远低于卷积层、全连接层等神经网络结构,绝大多数激活函数生成的中间变量会被丢弃。
这种方法存在的主要问题是引入了额外的计算开销。为了在后向传播阶段恢复出激活函数之后的中间变量,激活函数会被反复调用,如果新型激活函数中含有一些开销较大的计算步骤或者相对复杂的计算流程,那么对训练速度的负面影响便不可小觑。
采用前向自动微分作为神经网络框架默认的自动微分实现是一种有效的内存优化技术。与后向自动微分不同,前向自动微分没有后向传播过程,训练神经网络需要的梯度在前向传播过程中计算。由于不需要将梯度计算拆分到后向传播阶段,前向自动微分不需要保留前向传播阶段的中间变量,从而有效减少了训练过程中的内存占用。
这种方法在进行快速的量化的同时无法保证神经网络识别精度。这种方法的主要问题是前向自动微分采用的求导函数比后向自动微分的求导函数在卷积层、全连接层等占据主要计算资源的神经网络结构中计算开销更高,从而导致默认采用前向自动微分的训练过程耗时更长,无法被主流神经网络框架采用。
由此可见,当前已有的神经网络训练内存优化方法在处理激活函数上存在诸多问题,无法在减少内存占用的同时不引入额外的计算开销。这给超大模型训练的应用造成了严重阻碍,尤其是在大模型快速普及的背景下。因此如何减低神经网络训练过程中的内存占用,提高神经网络的训练速度,降低神经网络训练的资源消耗成为本领域技术人员亟待解决的技术问题。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于神经网络中动态计算图的内存优化方法及电子设备,用于减低神经网络训练过程中的内存占用,提高神经网络的训练速度,降低神经网络训练的资源消耗。
为实现上述目的及其他相关目的,本发明提供一种基于神经网络中动态计算图的内存优化方法,包括:识别神经网络动态计算图中前向兼容算子,并计算前向算子的前向计算结果;根据张量-算子对标记状态和前向算子类型确定当前的执行模态;在所述执行模态的输入张量为前向兼容类型时,对当前前向节点执行前向自动微分的求导过程,并输出求导结果;在所述执行模态的后续算子为非前向兼容算子时,保存前一个前向节点执行前向自动微分的求导结果,并更新前一个前向节点后向参数,输出后向处理结果;基于所述前向计算结果,所述求导结果和所述后向处理结果更新所述动态计算图的参数。
于本发明的一实施例中,所述识别神经网络动态计算图中前向兼容算子的方式包括以下任一种或多种组合:在当前算子为一元算子时,确定所述当前算子为前向兼容算子;将具有一个非常量输入的n元算子确定为前向兼容算子;将所有输入来自同一上游算子的n元算子确定为前向兼容算子。
于本发明的一实施例中,将由前向兼容算子组成的组合算子确定为前向兼容算子。
于本发明的一实施例中,还包括:将由互相连通的前向兼容算子组成的子图标记为前向兼容子图。
于本发明的一实施例中,将前向兼容类型的标记为Y,非前向兼容类型的标记为N,所述张量-算子对标记状态包括NN状态、NY状态、YY状态和YN状态。
于本发明的一实施例中,所述根据张量-算子对标记状态和前向算子类型确定当前的执行模态包括:动态计算图中的源节点被标记为NN类型;在当前前向算子的前向算子类型为前向兼容算子时,确定当前的执行模态为NY执行模态,并标记该前向兼容算子为前向兼容子图的入口节点;进入前向兼容子图后,在后续算子为前向兼容算子时,确定当前的执行模态为YY执行模态,在后续算子为非前向兼容算子时,确定当前的执行模态为YN执行模态。
于本发明的一实施例中,在确定当前的执行模态为NY执行模态时,还包括标记对应的所述前向兼容算子为前向兼容子图的入口节点;在确定当前的执行模态为YN执行模态时,标记对应的所述非前向兼容算子为前向兼容子图的出口节点。
于本发明的一实施例中,所述在所述执行模态的输入张量为前向兼容类型时,还包括:将输入张量的计算梯度的、在前向阶段保存的临时中间变量和前向自动微分求值结果的张量提供给后向求导函数作为附加属性。
于本发明的一实施例中,所述更新前一个前向节点后向参数包括:更新前一个前向节点的后向求导函数和指向下一个待执行的后向传播节点的指针。
为实现上述目的及其他相关目的,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的基于神经网络中动态计算图的内存优化方法。
为实现上述目的及其他相关目的,本发明还提供一种电子设备,包括存储器,用于存储计算机程序;处理器,用于运行所述计算机程序以实现如上所述的基于神经网络中动态计算图的内存优化方法。
如上所述,本发明的基于神经网络中动态计算图的内存优化方法及电子设备具有以下有益效果:
1、本发明能够在不引入额外计算开销的情况下,通过在动态计算图运行过程中动态切换使用前向自动微分来有效降低大部分神经网络中激活函数的内存占用。
2、本发明为大模型在内存受限设备上进行训练提供了有效支持,为新型激活函数的大规模应用铺平了道路,为大型神经网络基于动态计算图的训练节约了大量内存资源。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1显示为本申请一实施例中的基于神经网络中动态计算图的内存优化方法的原理示意图;
图2显示为本申请一实施例中的基于神经网络中动态计算图的内存优化方法中前向兼容算子与非前向兼容算子示意图;
图3显示为本申请一实施例中的基于神经网络中动态计算图的内存优化方法中基于有限状态机的前向算子标记算法原理示意图;
图4显示为本申请一实施例中的基于神经网络中动态计算图的内存优化方法中基于有限状态机的四模态交互式优化算法示意图;
图5显示为本申请一实施例中的基于神经网络中动态计算图的内存优化方法整体实施过程示意图;
图6显示为本申请一实施例中的基于神经网络中动态计算图的内存优化方法的逻辑流程图;
图7显示为本申请一实施例中的电子设备的原理框图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
本实施例提出了一种在后向自动微分中嵌套前向自动微分的内存优化方法,该方法能够自动识别出神经网络中需要替换为前向自动微分的激活函数,并在主流神经网络框架的动态计算图上进行交互式优化,实现后向自动微分到前向自动微分的自动切换,从而在不引入额外计算开销的同时,降低激活函数的内存占用,自动节省神经网络训练过程中的资源消耗,允许在同样的硬件条件下训练更大更复杂的神经网络。
具体地,本实施例的目的在于提供一种基于神经网络中动态计算图的内存优化方法及电子设备,用于减低神经网络训练过程中的内存占用,提高神经网络的训练速度,降低神经网络训练的资源消耗。
以下将详细阐述本发明的基于神经网络中动态计算图的内存优化方法及电子设备的原理及实施方式,使本领域技术人员不需要创造性劳动即可理解本发明的基于神经网络中动态计算图的内存优化方法及电子设备。
实施例1
步骤S100,识别神经网络动态计算图中前向兼容算子,并计算前向算子的前向计算结果;
步骤S200,根据张量-算子对标记状态和前向算子类型确定当前的执行模态;
步骤S300,在所述执行模态的输入张量为前向兼容类型时,对当前前向节点执行前向自动微分的求导过程,并输出求导结果;
步骤S400,在所述执行模态的后续算子为非前向兼容算子时,保存前一个前向节点执行前向自动微分的求导结果,并更新前一个前向节点后向参数,输出后向处理结果;
步骤S500,基于所述前向计算结果,所述求导结果和所述后向处理结果更新所述动态计算图的参数。
以下对本实施例的基于神经网络中动态计算图的内存优化方法进行详细说明。
本实施例的基本原理在于神经网络模型中,前向自动微分相对于后向自动微分在大部分激活函数上计算效率更高、内存占用更少。在阐述该基本原理之前,需要对前向自动微分与后向自动微分的求导过程进行描述。
对于一个函数
Figure BDA0004021703630000051
而言,自动微分可以将对其求导过程泛化为计算它的雅可比矩阵(Jacobian matrix)Jf,其计算过程可表示为:
Figure BDA0004021703630000052
其中,M表示输出向量的长度,N表示输入向量的长度,Jf的形状为(M×N)。
前向自动微分需要计算雅可比-向量积(Jacobian-vector product,JVP),表示为Jfv,后向自动微分需要计算向量-雅可比积(vector-Jacobian product,VJP),表示为
Figure BDA0004021703630000053
以Swish激活函数为例,Swish激活函数是一个由Mul和Sigmoid两个操作组合成的激活函数,其计算过程可表示为:
v1=σ(x),v2=x,v3=v1·v2
其中v3为Swish激活函数的输出结果。
在Swish激活函数上,前向自动微分需要计算v1,v2,v3对应的雅可比-向量积v′1,v′2,v′3,假设x′=1,则其中v′1和v′2的计算过程为:
Figure BDA0004021703630000061
v′3的计算过程为:
Figure BDA0004021703630000062
同理可得,对后向自动微分而言,需要计算对应的向量-雅可比积:
Figure BDA0004021703630000063
其中
Figure BDA00040217036300000610
从上述对前向自动微分和后向自动微分求导的推导结果可以看出,在
Figure BDA0004021703630000064
N≤M的情况下,前向自动微分在计算开销上相对于后向自动微分有优势;而在N>M的情况下,后向自动微分更有优势。为了简化前向自动微分在神经网络框架上的应用,本实施例只在/>
Figure BDA0004021703630000065
的情况下应用前向自动微分,这包括了所有单输入、任意数量输出的逐元素算子(element-wise operation),绝大多数激活函数都能被涵盖其中。
接下来本实施例描述前向自动微分嵌入后向自动微分过程的基本原理。假设神经网络计算图
Figure BDA0004021703630000066
中有v1,v2,...,vk这k个按拓扑顺序排列的计算图节点,其中vk为损失函数L。计算图节点vi在后向传播中的梯度可表示为:
Figure BDA0004021703630000067
其中,
Figure BDA0004021703630000068
为来自计算图节点vi+1的上游梯度,Jvi为计算图节点vi的雅可比矩阵。假设vn,...,vm为符合前向自动微分应用条件的按拓扑顺序排列的基础算子(primitiveoperation),它们共同构成了一个/>
Figure BDA0004021703630000069
的逐元素算子,则其梯度可表示为:
Figure BDA0004021703630000071
其中g为上游梯度。因此本实施例可以使用前向自动微分在前向传播阶段计算由vn,...,vm组成的逐元素算子的雅可比矩阵,并使用上游梯度
Figure BDA0004021703630000072
进行梯度更新。
基于上述思想,以下将详细介绍本实施例的实施细节。
步骤S100,识别神经网络动态计算图中前向兼容算子,并计算前向算子的前向计算结果。
为了识别出动态计算图中有哪些算子可以使用嵌套前向自动微分,如图2所示,本实施例将计算图中的算子分为两类:前向兼容算子与非前向兼容算子。
于本实施例中,所述识别神经网络动态计算图中前向兼容算子的方式包括以下任一种或多种组合:
1)在当前算子为一元算子时,确定所述当前算子为前向兼容算子。
所有一元算子(unary operation)都是前向兼容算子。一元算子可表示为
Figure BDA0004021703630000073
例如图2中的节点1就是一元算子。
2)将具有一个非常量输入的n元算子确定为前向兼容算子。
所有只有一个非常量输入的n元算子(n-ary operation)都是前向兼容算子。常见的n元算子为二元算子(binary operation),例如图2中的节点2和节点3都是二元算子.由于n个输入中只有一个不是常量,因此只有一个非常量输入的n元算子可以视作一种特殊的一元算子。
3)将所有输入来自同一上游算子的n元算子确定为前向兼容算子。
所有输入来自同一上游算子的n元算子都是前向兼容算子。例如图2中的节点2虽然有两个输入,但两个输入都最终来自同一上游节点,因此它是一个前向兼容节点。
所有不满足上述条件的基础算子都是非前向兼容算子。
对于由有限个基础算子组成的组合算子,使用以下算法流程自动识别前向兼容算子:
1)所有只由前向兼容算子组成的组合算子都是前向兼容算子。
2)所有不满足上述条件的组合算子都是非前向兼容算子。
即于本实施例中,将由前向兼容算子组成的组合算子确定为前向兼容算子。
于本实施例中,还包括:将由互相连通的前向兼容算子组成的子图标记为前向兼容子图。
步骤S200,根据张量-算子对标记状态和前向算子类型确定当前的执行模态。
于本实施例中,将前向兼容类型的标记为Y,非前向兼容类型的标记为N,所述张量-算子对标记状态包括NN状态、NY状态、YY状态和YN状态。
具体地,于本实施例中,如图3所示,为了针对不同算子执行不同的前向自动微分优化步骤,需要根据算子及其输入的类别标记前向算子。对于动态计算图,定义张量-算子对(tensor-operator pair)为基本的标记与优化单位。由于算子可分为前向兼容算子与非前向兼容算子两类,张量可分为由前向兼容算子生成和由非前向兼容算子生成两类,将前向兼容类型的标记为Y,非前向兼容类型的标记为N,则张量-算子对有四种类型:NN、NY、YY和YN。由于动态计算图每次执行一个前向算子,当前正在执行的算子对应的张量-算子对的四种类型也对应于前向算子标记过程中的四种状态。
于本实施例中,所述根据张量-算子对标记状态和前向算子类型确定当前的执行模态包括:动态计算图中的源节点被标记为NN类型;在当前前向算子的前向算子类型为前向兼容算子时,确定当前的执行模态为NY执行模态,并标记该前向兼容算子为前向兼容子图的入口节点;进入前向兼容子图后,在后续算子为前向兼容算子时,确定当前的执行模态为YY执行模态,在后续算子为非前向兼容算子时,确定当前的执行模态为YN执行模态。
于本实施例中,在确定当前的执行模态为NY执行模态时,还包括标记对应的所述前向兼容算子为前向兼容子图的入口节点;在确定当前的执行模态为YN执行模态时,标记对应的所述非前向兼容算子为前向兼容子图的出口节点。
具体地,本实施例中,将每个算子的执行视为一个单独的输入事件,本实施例可以将前向算子标记过程构建为如图3所示的有限状态机。前向算子标记过程伴随着前向阶段一起运行。在前向算子标记过程开始时,动态计算图中的源节点被标记为NN类型,因为源节点没有输入,对应的算子也不符合前向兼容算子的定义。在前向标记过程遇到前向兼容算子时,根据定义,其状态变为NY,这是前向兼容子图的入口节点。进入前向兼容子图后,如果后续算子为前向兼容算子,其状态变为YY,因为此时张量-算子对的张量部分是前向兼容的;如果后续算子为非前向兼容算子,则其状态由NY或YY变为YN,这些节点是前向兼容子图的出口节点,从这些节点开始,前向标记过程离开了前向兼容子图,直到再次遇到前向兼容算子,进入新的前向兼容子图。可以看到,上述前向算子标记算法保证了前向兼容子图满足
Figure BDA0004021703630000081
的特性,从而对其进行优化能够降低动态计算图内存占用。
图3展示了一个前向兼容子图的例子。节点1是默认的NN类型,它产生了一个非前向兼容的输出并传递给节点2。假设节点2为前向兼容算子,那么节点2为NY类型。节点2是前向兼容子图的入口节点。由于节点3和节点4为前向兼容类型并接受前向兼容算子产生的输出作为输入,它们都是YY类型。最后,由于节点5和节点6都是非前向兼容算子并接受前向兼容算子产生的输出作为输入,它们都为YN类型。
步骤S300,在所述执行模态的输入张量为前向兼容类型时,对当前前向节点执行前向自动微分的求导过程,并输出求导结果。
于本实施例中,所述在所述执行模态的输入张量为前向兼容类型时,还包括:将输入张量的计算梯度的、在前向阶段保存的临时中间变量和前向自动微分求值结果的张量提供给后向求导函数作为附加属性。
步骤S400,在所述执行模态的后续算子为非前向兼容算子时,保存前一个前向节点执行前向自动微分的求导结果,并更新前一个前向节点后向参数,输出后向处理结果。
于本实施例中,所述更新前一个前向节点后向参数包括:更新前一个前向节点的后向求导函数和指向下一个待执行的后向传播节点的指针。
步骤S500,基于所述前向计算结果,所述求导结果和所述后向处理结果更新所述动态计算图的参数。
为了降低动态计算图内存占用,本实施例需要使用前向算子标记结果精确地推断中间变量的生命周期并在合适时机释放中间变量的内存占用,这需要在动态计算图运行过程中交互式地执行优化。举例而言,当本实施例使用张量x作为输入运行算子时,本实施例并不知道是否张量x还会在后续计算中使用,这会影响本实施例释放张量x内存的位置和时机。如果本实施例在对应算子的前向自动微分执行结束后马上释放张量x的内存占用,那么如果后续算子使用了张量x将引起严重错误。另一方面,如果本实施例太晚释放张量x的内存,内存使用效率将受到影响。因此对使用动态计算图的神经网络框架而言决定张量x何时释放是至关重要的。为了解决这个问题,本实施例设计了一种基于有限状态机的四模态交互式优化算法,其四种执行模态分别对应上述前向算子标记算法中的四种状态。
如图4所示,原始的后向传播阶段有四种参数,为了交互式地嵌入前向自动微分本实施例还需要使用另外四种参数。其中原始的四种参数包括:
1、back_fn(简称为BFN)为后向求导函数,这是神经网络框架已经提供的默认实现。
2、saved_tensors(Node)(简称为STN)为提供给BFN以计算梯度的、在前向阶段保存的中间变量。
3、grad_node(简称为GFN)为动态计算图中的后向传播节点。
4、next_node(简称为NXN)为指向下一个待执行的后向传播节点的指针。
本实施例需要使用的另外四种参数包括:
1、isFAD(简称为FAD)用于标记某个张量是否为前向兼容算子产生的。
2、saved_tensors(tensor)(简称STT)语义与STN一样,区别在于STT是临时变量,当对应张量被释放时,STT也会被递归释放。
3、fad_tensors(简称FTR)是作为前向自动微分求值结果的张量。对NY类型的节点而言,FTR会被设置为标量值1。
4、src_node(简称SCN)是前向兼容子图的起始节点。最后的YY类型节点的NXN会在后处理阶段指向SCN。
如图4所示,原始的后向传播阶段有四种参数(BFN、STN、GFN、NXN),为了交互式地嵌入前向自动微分本实施例还需要使用另外四种参数(FAD、STT、FTR、SCN)。
交互式优化的过程共包括以下四个不同的基本执行过程:
A)前向算子计算过程。该执行过程会运行前向算子,是所有执行模态共通的执行过程。
B)前向自动微分计算过程。该过程可以对当前前向节点立即执行前向自动微分的求导过程。该过程只会在输入张量为前向兼容类型的情况下被触发,即执行模态为YY或YN的情况下。该过程会将输入张量的STT和FTR提供给原来的BFN作为附加属性,如图3中在YY执行模态下的fad_t1所示。
C)前向自动微分后处理过程。该过程只在YN执行模态下触发,即离开前向兼容子图的时候。该过程会将前向自动微分的输出保存为STN,并更新前一个前向节点的BFN和NXN。举例而言,图4中YN执行模态下前向自动微分的结果fad_t2会被保存为节点f2的STN。接着,后处理过程会将原来的BFN替换为接受上游梯度的Multiplication算子,并将NXN替换为节点f。对二元算子而言,后处理过程会累加来自两个输入张量的前向自动微分结果。
D)参数更新过程。该过程是所有执行模态下都会触发的基础过程。该过程将更新节点和模型参数。在NN执行模态下,该过程使用原来的后向节点参数更新过程。在NY和YY执行模态下,该过程只会更新张量相关的信息,后向节点的执行会被跳过,因为前向自动微分并不需要执行这些后向节点。在YN执行模态下,该过程将根据前向自动微分的后处理结果更新后向节点。
总结上述基本执行过程的功能,交互式优化算法在四种不同执行模态下分别使用以下过程执行流程:
1、NN执行模态使用前向算子计算过程A和参数更新过程D。
2、NY执行模态使用前向算子计算过程A和参数更新过程D。
3、YY执行模态使用前向算子计算过程A、前向自动微分计算过程B和参数更新过程D。
4、YN执行模态使用前向算子计算过程A、前向自动微分计算过程B、前向自动微分后处理过程C和参数更新过程D。
在四种执行模态运行之后,图4中的张量w,x和节点f1都没有后续引用。取决于f3的求导函数,张量y可能有后续引用。由于使用动态图的神经网络框架(如PyTorch)通常使用宿主语言(如Python)自身的引用计数和垃圾回收机制进行内存管理,神经网络框架可以确保所有没有后续引用的中间变量被宿主语言的垃圾回收机制恰当地回收。当张量ω,x和节点f1都被回收时,它们引用的STT和FTR也会被递归地自动释放。
该交互式优化方法能够利用不同算子的信息有效提高执行效率和鲁棒性。首先,该方法并不影响原来的前向执行过程。其次,该方法能够跳过没必要执行的中间节点,比如节点f1和原先的节点f2,从而有效提高后向阶段的执行效率。优化之后的节点f2可以直接将梯度传递给节点f。另外,如果前向兼容子图只包含了单个前向兼容算子,比如NY节点直接连接YN节点,那么YN执行模态下的前向自动微分后处理过程可以轻易跳过前向自动微分计算过程来避免在FTR为1的情况下的额外计算。因此,对于满足
Figure BDA0004021703630000111
M≥1模式的激活函数而言,该方法非常鲁棒。
图5为本实施例的算法框架图。算法框架主要分为前向兼容算子自动识别、前向算子计算过程、前向自动微分计算过程、前向自动微分后处理过程、参数更新过程五部分。算法首先使用前向兼容算子自动识别算法标识出当前算子的执行模态,然后执行原有的前向算子计算过程,得到前向计算的结果。如果当前执行模态显示输入张量为前向兼容的,则执行前向自动微分计算过程,将当前节点从原来的后向求导切换为前向求导。之后,如果当前执行模态显示当前算子为非前向兼容算子,则需要执行前向自动微分后处理过程,为离开当前前向兼容子图做必要的后处理步骤。在上述过程都根据需要执行完毕后,统一执行参数更新过程,将前向自动微分或后向自动微分的结果更新到模型参数中。在上述执行过程中,通过将部分算子执行流程从后向自动微分切换为前向自动微分,该部分算子的内存占用得到了自动优化。
图6显示为本实施例中的基于神经网络中动态计算图的内存优化方法的逻辑流程图,如图6所示,本实施例中的基于神经网络中动态计算图的内存优化方法的流程如下:
1)选择待优化的前向算子。
2)使用前向兼容算子自动识别算法判断该算子是否为前向兼容算子,并同时设置当前的执行模态。
3)使用前向算子计算过程运行当前算子原有的前向计算流程。
4)如果当前为YY或YN执行模态,则执行前向自动微分计算过程;否则跳过该过程。
5)使用前向自动微分计算过程调用前向自动微分流程对算子内存占用进行优化,同时跳过后向自动微分流程。
6)如果当前为YN执行模态,则执行前向自动微分后处理过程;否则跳过该过程。
7)使用前向自动微分后处理过程在离开前向兼容子图前将前向自动微分的求导结果传递给下游求导节点,从而无缝替换原先的后向自动微分求导结果。
8)使用参数更新过程将通过前向自动微分或后向自动微分获得的结果更新到模型参数中。
9)在运行动态计算图的过程中,内存优化过程也随之完成,输出结果并结束。
本实施例中用户与软件层的交互包括:用户指定系统所需要优化的神经网络动态计算图。
本实施例中运行逻辑包括:
a)运行神经网络动态计算图,在运行过程中识别出可优化的前向兼容算子,切换执行模态;
b)将待优化的算子由原来的后向自动微分切换为前向自动微分,从而自动优化其内存占用;
c)不可优化的算子依然使用原来的后向自动微分流程,不会引入额外的计算开销;
d)在神经网络动态计算图运行结束时,内存占用优化算法也运行结束,重置执行模态即可。
本实施例针对神经网络中新型激活函数内存占用过高的主要问题,提出了一种在后向自动微分中嵌套前向自动微分的内存优化方案,本实施例能够在不引入额外计算开销的情况下,通过在动态计算图运行过程中动态切换使用前向自动微分来有效降低大部分激活函数的内存占用。本实施例能为大模型在内存受限设备上进行训练提供了有效支持,为新型激活函数的大规模应用铺平了道路,为大型神经网络基于动态计算图的训练节约了大量内存资源。
实施例2
如图7所示,本实施例提供一种电子设备101,所述电子设备101包括:处理器1001及存储器1002;所述存储器1002用于存储计算机程序;所述处理器1001用于执行所述存储器1002存储的计算机程序,以使所述电子设备101执行如实施例1中基于神经网络中动态计算图的内存优化方法的步骤。由于基于神经网络中动态计算图的内存优化方法的步骤的具体实施过程已经在实施例1中进行了详细说明,在此不再赘述。
处理器1001为(Central Processing Unit,中央处理器)。存储器1002通过系统总线与处理器1001连接并完成相互间的通信,存储器1002用于存储计算机程序,处理器1001用于运行计算机程序,以使所述处理器1001执行所述的基于神经网络中动态计算图的内存优化方法。存储器1002可能包含随机存取存储器(Random Access Memory,简称RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
此外,本实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器1001执行时实现实施例1中所述的基于神经网络中动态计算图的内存优化方法。实施例1已经对所述基于神经网络中动态计算图的内存优化方法进行了详细说明,在此不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分结构可以通过计算机程序相关的硬件来完成。前述的计算机程序可以存储于一计算机可读存储介质中。该程序在执行时,生成上述基于神经网络中动态计算图的内存优化方法;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
综上所述,本发明能够在不引入额外计算开销的情况下,通过自动优化动态计算图有效降低大部分神经网络激活函数的内存占用;本发明为大模型在内存受限设备上进行训练提供了有效支持,为新型激活函数的大规模应用铺平了道路,为大型神经网络基于动态计算图的训练节约了大量内存资源。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中包括通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

Claims (11)

1.一种基于神经网络中动态计算图的内存优化方法,其特征在于:包括:
识别神经网络动态计算图中前向兼容算子,并计算前向算子的前向计算结果;
根据张量-算子对标记状态和前向算子类型确定当前的执行模态;
在所述执行模态的输入张量为前向兼容类型时,对当前前向节点执行前向自动微分的求导过程,并输出求导结果;
在所述执行模态的后续算子为非前向兼容算子时,保存前一个前向节点执行前向自动微分的求导结果,并更新前一个前向节点后向参数,输出后向处理结果;
基于所述前向计算结果,所述求导结果和所述后向处理结果更新所述动态计算图的参数。
2.根据权利要求1所述的基于神经网络中动态计算图的内存优化方法,其特征在于:所述识别神经网络动态计算图中前向兼容算子的方式包括以下任一种或多种组合:
在当前算子为一元算子时,确定所述当前算子为前向兼容算子;
将具有一个非常量输入的n元算子确定为前向兼容算子;
将所有输入来自同一上游算子的n元算子确定为前向兼容算子。
3.根据权利要求1或2所述的基于神经网络中动态计算图的内存优化方法,其特征在于:将由前向兼容算子组成的组合算子确定为前向兼容算子。
4.根据权利要求1所述的基于神经网络中动态计算图的内存优化方法,其特征在于:还包括:
将由互相连通的前向兼容算子组成的子图标记为前向兼容子图。
5.根据权利要求4所述的基于神经网络中动态计算图的内存优化方法,其特征在于:将前向兼容类型的标记为Y,非前向兼容类型的标记为N,所述张量-算子对标记状态包括NN状态、NY状态、YY状态和YN状态。
6.根据权利要求5所述的基于神经网络中动态计算图的内存优化方法,其特征在于:所述根据张量-算子对标记状态和前向算子类型确定当前的执行模态包括:
动态计算图中的源节点被标记为NN类型;
在当前前向算子的前向算子类型为前向兼容算子时,确定当前的执行模态为NY执行模态,并标记该前向兼容算子为前向兼容子图的入口节点;
进入前向兼容子图后,在后续算子为前向兼容算子时,确定当前的执行模态为YY执行模态,在后续算子为非前向兼容算子时,确定当前的执行模态为YN执行模态。
7.根据权利要求6所述的基于神经网络中动态计算图的内存优化方法,其特征在于:在确定当前的执行模态为NY执行模态时,还包括标记对应的所述前向兼容算子为前向兼容子图的入口节点;在确定当前的执行模态为YN执行模态时,标记对应的所述非前向兼容算子为前向兼容子图的出口节点。
8.根据权利要求1所述的基于神经网络中动态计算图的内存优化方法,其特征在于:所述在所述执行模态的输入张量为前向兼容类型时,还包括:将输入张量的计算梯度的、在前向阶段保存的临时中间变量和前向自动微分求值结果的张量提供给后向求导函数作为附加属性。
9.根据权利要求1所述的基于神经网络中动态计算图的内存优化方法,其特征在于:所述更新前一个前向节点后向参数包括:更新前一个前向节点的后向求导函数和指向下一个待执行的后向传播节点的指针。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至8中任一项所述的基于神经网络中动态计算图的内存优化方法。
11.一种电子设备,其特征在于:包括存储器,用于存储计算机程序;处理器,用于运行所述计算机程序以实现如权利要求1至权利要求8任一权利要求所述的基于神经网络中动态计算图的内存优化方法。
CN202211692183.9A 2022-12-28 2022-12-28 基于神经网络中动态计算图的内存优化方法及电子设备 Pending CN116166425A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211692183.9A CN116166425A (zh) 2022-12-28 2022-12-28 基于神经网络中动态计算图的内存优化方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211692183.9A CN116166425A (zh) 2022-12-28 2022-12-28 基于神经网络中动态计算图的内存优化方法及电子设备

Publications (1)

Publication Number Publication Date
CN116166425A true CN116166425A (zh) 2023-05-26

Family

ID=86421240

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211692183.9A Pending CN116166425A (zh) 2022-12-28 2022-12-28 基于神经网络中动态计算图的内存优化方法及电子设备

Country Status (1)

Country Link
CN (1) CN116166425A (zh)

Similar Documents

Publication Publication Date Title
CN110659728B (zh) 神经网络优化方法、装置、计算机设备及存储介质
WO2021057720A1 (zh) 神经网络模型处理方法、装置、计算机设备及存储介质
CN110321999B (zh) 神经网络计算图优化方法
WO2021057746A1 (zh) 神经网络处理方法、装置、计算机设备及存储介质
US20180260710A1 (en) Calculating device and method for a sparsely connected artificial neural network
US11755367B2 (en) Scheduling operations on a computation graph
WO2022068663A1 (zh) 内存分配方法、相关设备及计算机可读存储介质
CN111160551A (zh) 计算图执行方法、计算机设备及存储介质
CN112579063A (zh) 一种用于深度学习编译器中探索优化空间的加速方法
US20200004514A1 (en) High parallelism computing system and instruction scheduling method thereof
CN110689116B (zh) 一种神经网络剪枝方法、装置、计算机设备及存储介质
CN110659069B (zh) 用于执行神经网络计算的指令调度方法及相应计算系统
US11775832B2 (en) Device and method for artificial neural network operation
CN112084037A (zh) 神经网络的内存分配方法及装置
CN115033391B (zh) 一种用于神经网络计算的数据流动方法和装置
CN115269204B (zh) 一种用于神经网络编译的内存优化方法及装置
CN117971354B (zh) 基于端到端学习的异构加速方法、装置、设备及存储介质
CN116185610A (zh) 基于神经网络中静态计算图的内存优化方法及电子设备
TW202427274A (zh) 機器學習編譯器優化中的節點對稱性
CN116166425A (zh) 基于神经网络中动态计算图的内存优化方法及电子设备
CN113435565A (zh) 神经网络模型的处理方法、推理方法及其装置和电子设备
US20220180187A1 (en) Method and apparatus for performing deep learning operations
KR102372869B1 (ko) 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
CN116755714B (zh) 深度神经网络模型的运行方法、装置、设备和存储介质
US20230376735A1 (en) Neural topological ordering

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