CN115461718A - 神经网络中的内存分配 - Google Patents
神经网络中的内存分配 Download PDFInfo
- Publication number
- CN115461718A CN115461718A CN202080100235.1A CN202080100235A CN115461718A CN 115461718 A CN115461718 A CN 115461718A CN 202080100235 A CN202080100235 A CN 202080100235A CN 115461718 A CN115461718 A CN 115461718A
- Authority
- CN
- China
- Prior art keywords
- variables
- memory
- neural network
- variable
- computer
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- 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/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Neurology (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种将内存分配给神经网络的变量的方法。所述方法包括:确定所述变量的生存期;分析所述变量的控制依赖关系以标识不相交变量;根据所述变量的所述生存期和控制依赖关系,将内存位置分配给所述变量。不相交变量的标识有助于这些变量安全地分配到公共内存位置,而不管它们各自的生存期如何,因为即使这些变量的各自生存期重叠,不相交变量在神经网络期间也不会共存。与仅依赖于变量各自的生存期将内存位置分配给所述神经网络的每个变量相比,可以有利地进一步减少所述神经网络的内存占用。
Description
技术领域
本发明涉及将内存分配给神经网络的变量。
背景技术
深度神经网络采用连续的操作层,从输入数据中逐步提取特征,以生成输入数据的分类预测。人们普遍希望开发更深度的神经网络,即操作层增加的网络,目的是提高分类预测任务的准确性。然而,增加神经网络的层数通常会导致与神经网络相关的变量(例如中间结果)相应增加,因此通常导致神经网络的内存占用增加。当神经网络在具有相对小内存容量的计算设备(例如移动计算设备)上运行时,这种内存占用增加可能会产生特别的问题。因此,希望将神经网络的内存占用最小化。
发明内容
本发明的目的是提供一种安全的方法,用于根据变量的生存期和控制依赖关系将神经网络的多个变量分配到公共内存位置。对所述变量的生存期和控制依赖关系的了解可以将单个内存位置高效地分配给所述神经网络的多个不共存变量。将多个变量分配给公共内存位置可以有利地减少神经网络的内存占用。
上述和其它目的通过独立权利要求的特征来实现。根据从属权利要求、说明书以及附图其它实现方式是显而易见的。
本发明的第一方面提供了一种将内存分配给神经网络的变量的方法,所述方法包括确定所述变量的生存期;分析所述变量的控制依赖关系以标识不相交变量;根据所述变量的所述生存期和控制依赖关系,将内存位置分配给所述变量。
中间结果(例如特征图和梯度)等变量,以及神经网络的训练权重等参数,由神经网络的操作创建和/或消耗。变量的生存期(即变量的创建,例如在中间结果的情况下通过神经网络的操作生成变量,到变量最后一次被神经网络的操作消耗之间的时间)通常短于神经网络的第一次操作和最后一次操作之间的时间,即在神经网络的开始时间和结束时间之间。例如,由神经网络的第一层创建的第一变量A,例如特征图,可以仅由神经网络的第二层消耗,即用作输入,并且随后可以不被神经网络的稍后操作使用。类似地,第二变量B可以由神经网络的第三层创建,并且仅由第四层消耗。因此,第一变量和第二变量是不共存的,因为它们的生存期不重叠。考虑到神经网络的正确操作只要求变量在相应变量的生存期内存储在存储器中,而不一定在神经网络的整个周期内存储,不共存的变量可以允许地存储在公共内存位置中。因此,在该示例中,所述第一变量A和所述第二变量B可以允许在它们各自的生存期内分配给公共内存位置。与将唯一的内存位置分配给神经网络的每个变量相比,这可以有利地减少神经网络的内存占用。
然而,即使是具有重叠生存期的神经网络的变量也可能是不共存的,其中,变量是不相交的,例如,一个变量的创建取决于不创建另一个变量,反之亦然。例如,如果所述第一变量A和所述第二变量B是由切换语句操作创建的,例如“if/else”或“true/false”语句,则在所有情况下,无论变量A和B的理论生存期是否可能重叠,变量A和B是不相交的,即相互排斥的。通过分析神经网络变量的控制依赖关系,例如通过控制流分析的依赖关系分析,可以标识神经网络的不相交变量。不相交变量的标识有助于这些变量安全地分配到公共内存位置,而不管它们各自的生存期如何,因为即使这些变量的各自生存期重叠,不相交变量在神经网络期间也不会共存。与仅依赖于变量各自的生存期将内存位置分配给神经网络的每个变量相比,可以有利地进一步减少神经网络的内存占用。
在一种实现方式中,所述方法还包括确定用于将所述变量存储在存储器中的内存大小,其中,所述将内存位置分配给所述变量包括进一步根据所述内存大小将所述内存位置分配给所述变量。
换句话说,所述方法可以包括确定神经网络的每个变量的内存大小,例如以MB为单位,并且内存分配操作可以进一步考虑变量的内存大小。对变量的相应内存大小的了解可以有利地允许变量到存储器上的内存高效映射,因为变量的内存位置之间的间隔可以安全地最小化。
相比之下,在不确定变量的内存大小的更简单的替代方案中,内存分配操作可以只假定代表预期上限值的每个变量的默认内存大小,然后可以根据上限值分配内存位置。然而,内存效率可能相对较低,因为变量的实际大小可能小于上限值。
在一种实现方式中,所述将内存位置分配给所述变量还包括按照内存大小的递减顺序将所述内存位置分配给所述变量。换句话说,所述方法可以涉及首先将内存位置分配给较大的内存大小变量。这可以有利地允许变量到存储器上的内存高效映射,因为它可以确保相对较小的大小变量,可以相对容易地位于较小的内存位置,不会不适当地从较大的内存位置排除相对较大的变量。例如,所述方法可以包括按内存大小的递减顺序对变量进行排序,并首先将内存位置分配给最大变量,最后将最小变量分配给最小变量。因此,所述方法可以有利地进一步减少神经网络的内存占用。
在一种实现方式中,所述方法包括标识所述不相交变量并将公共内存位置分配给所述不相交变量。换句话说,在标识不相交变量之后,例如,使用控制流分析来表征控制依赖关系,所述方法可以包括将公共内存位置分配给不相交变量。将公共内存位置分配给不相交变量可以有利地进一步减小神经网络的内存占用,而不会在神经网络期间存在变量的任何实例的风险。
在一种实现方式中,所述方法还包括将变量存储在分配的内存位置中。换句话说,在内存分配操作之后,所述方法可以包括将变量存储在存储器的相应分配位置中的实际步骤。
在一种实现方式中,所述方法还包括:将内存位置分配给所述神经网络的变量;确定所述变量所在的所述神经网络中的最后一个用户;确定所述最后一个用户的结束时间;在所述结束时间之后释放所述内存位置。
换句话说,所述方法可以包括:通过确定最后一个用户,即所述神经网络中将所述变量作为输入的最后一个算子;确定所述最后一个用户的结束时间,即确定所述最后一个用户不再需要所述输入的时间;随后在最后一个用户完成所述变量的使用时,从所述内存位置释放所述变量。这可以有利地允许在所述神经网络周期的不同时间将多个变量分配给公共内存位置。
在一种实现方式中,所述方法还包括:将另一个变量分配给所述释放的内存位置。换句话说,所述方法可以包括等待释放所述内存位置,随后将另一个变量分配给同一内存位置。例如,可以使用根据上述语句中的任何一个的方法来实现将另一个变量分配给所述释放的内存位置。
在一种实现方式中,所述方法还包括:构建代表所述神经网络的计算图;确定所述神经网络的算子的执行顺序;对于每个变量,确定第一个算子和最后一个算子,其中,所述第一个算子和最后一个算子将所述变量作为输入或输出。构建计算图有助于通过遍历所述计算图的节点进行控制流分析,以确定所述神经网络模型中的数据流。确定将所述变量作为输入或输出的第一个算子和最后一个算子有助于确定所述变量的生存期。
在一种实现方式中,所述分析所述变量的控制依赖关系以标识不相交变量包括:对所述计算图执行控制流分析,以标识取决于条件分支的变量。
在一种实现方式中,所述方法还包括生成所述计算图的矩阵表示,在所述计算图中,所述变量被索引到相应的内存大小以及第一个算子和最后一个算子,其中,所述第一个算子和最后一个算子将所述变量作为输入或输出。
在一种实现方式中,所述根据所述变量的生存期和控制依赖关系将内存位置分配给所述变量包括:使用具有所述计算图的矩阵表示作为输入的约束编程方法,以标识存储器中可以存储所述变量的最小位置数量,而不重叠内存位置中的共存变量。因此,所述神经网络模型的内存占用可以有利地最小化。
本发明的另一方面提供了一种使用在计算机上运行的神经网络对输入数据进行分类的方法,所述方法包括:使用上述权利要求中任一项所述的方法,将所述计算机可访问的存储器的内存位置分配给所述神经网络的变量;输入所述计算机输入数据进行分类;使用所述计算机对所述输入数据执行分类操作;使用所述计算机输出用于分类的输入数据的分类预测。
本发明的另一方面提供了一种包括指令的计算机程序,所述指令由计算机执行时使所述计算机执行根据上述任一语句所述的方法。
本发明的另一方面提供了一种计算机可读数据载体,其上存储有上述语句的计算机程序。
本发明的另一方面提供了一种用于执行上述任一语句的方法的计算机。
根据下文描述的一个或多个实施例,本发明的这些和其它方面是显而易见的。
附图说明
为了更容易理解本发明,现在将参考附图通过示例的方式描述本发明的实施例,其中:
图1示意性地示出了体现本发明一方面的计算机的示例;
图2示出了使用在参考图1标识的计算机上运行的神经网络对输入数据进行分类的方法的过程,包括将计算机的存储器中的内存位置分配给神经网络的变量的过程;
图3示出了将存储器的内存位置分配给神经网络的变量所涉及的过程,包括优化内存位置分配给变量的过程;
图4示出了优化将内存位置分配给变量所涉及的过程;
图5示意性地示出了神经网络的计算图表示,其中节点表示神经网络的算子,算子之间的数据流由边表示;
图6示意性地示出了图5所示的计算图的拓扑排序形式;
图7示意性地示出了拓扑排序计算图的图表示,其中计算图的边由图中的框表示;
图8示意性地示出了使用控制流分析来分析神经网络的变量的控制依赖关系以标识不相交变量的过程;
图9示意性地示出了为神经网络模型的计算图表示的第一和第二平行分支计算内存占用的过程;
图10示意性地示出了之前参考图9标识的计算图的第一平行分支的边的图表示;
图11示意性地示出了之前参考图10标识的计算图的第二平行分支的边的图表示;
图12示意性地示出了生成表示第一和第二平行分支的内存占用的等效节点的过程,用于在之前参考图6标识的排序计算图中进行替换;
图13示意性地示出了记录图6所示的计算图的图表示的特征的表;
图14示意性地示出了用于优化将内存分配给神经网络模型的变量的约束编程模型的定义;
图15示意性地示出了约束编程模型的技术方案的图表示;
图16示意性地示出了图13中之前所示的表的更新版本。
具体实施方式
首先参考图1,体现本发明一方面的计算机101包括中央处理器102、闪存103、随机存取存储器104、输入/输出接口105和系统总线106。计算机101用于运行用于对输入文本、语音、图像或视频数据等输入数据进行分类的神经网络模型。
中央处理器102用于执行计算机程序的指令。闪存103用于对中央处理器102执行的计算机程序进行非易失性存储。随机存取存储器104配置为读/写存储器,用于存储与中央处理器102执行的计算机程序关联的操作数据。输入/输出接口105用于将外部计算设备和/或其它外围硬件连接到计算机101,以方便计算机101的控制和输入数据的输入。计算机101的组件102至105通过系统总线106通信。
在本实施例中,闪存103具有用于使用存储在其上的神经网络对输入数据进行分类的计算机程序。因此,计算机101用于根据所述计算机程序的指令,通过输入/输出接口105接收输入数据,例如,来自连接的摄像机的输入图像数据,并使用为分类任务训练的神经网络在中央处理器102上处理输入数据,从而生成输入数据的一个或多个分类预测,例如,输入图像数据的内容。然后,计算机101用于输出分类预测,例如,用于通过连接到输入/输出接口105的显示设备显示给计算机的用户。
具体参考图2,用于使用存储在计算机101的闪存103上的神经网络对输入数据进行分类的计算机程序包括六个阶段。
在阶段201中,计算机程序使中央处理器102定位并加载存储在闪存103中的深度神经网络模型。在本实施例中,深度神经网络模型是用于图像分类任务的卷积神经网络模型。
在阶段202中,计算机程序使中央处理器102标识参与神经网络模型执行的变量,并在随机存取存储器104中分配位置,用于在神经网络模型执行期间存储变量。
在阶段203中,计算机程序使中央处理器102定位用于通过神经网络模型分类的输入数据。例如,这一阶段可以涉及中央处理器102定位和加载存储在闪存103中的输入数据,例如输入图像数据。作为示例性替代方案,这一阶段可以包括中央处理器102向连接到输入/输出接口105的外部硬件输出命令,以使连接的硬件返回输入数据进行分类。
在阶段204中,计算机程序使中央处理器102对在阶段203中接收的输入数据执行神经网络模型。在神经网络模型的执行期间,中央处理器102根据在阶段202中确定的分配从随机存取存储器104读取和写入变量。
在阶段205中,计算机程序使中央处理器102:确定神经网络的一个或多个变量的最后一个用户,即神经网络中使变量作为输入的最后一个算子;确定最后一个用户的结束时间;从随机存取存储器104中的变量的相应位置释放变量;将一个或多个其它变量重新分配到随机存取存储器104中的释放位置。然后,计算机程序可以使中央处理器102返回到阶段204中的神经网络的执行。计算机程序可以使中央处理器102反复执行阶段204和205,直到神经网络模型的所有操作都被执行,并且得到输入数据的一个或多个分类预测。
在阶段206中,计算机程序使中央处理器102输出通过对接收到的输入数据执行神经网络模型得到的分类预测。例如,这一阶段可以涉及计算机101通过连接到输入/输出接口105的显示设备输出分类预测。
具体参考图3,用于将内存位置分配给神经网络模型的变量的阶段202的方法包括五个阶段。
在阶段301中,在阶段201中加载深度神经网络模型,并由解析器解析以提取神经网络结构、初始变量值、算子拓扑定义和张量信息。
在阶段302中,通过张量大小推断技术使用在阶段301中由解析器提取的信息确定神经网络模型的中间张量的大小。
在阶段303中,生成神经网络模型的计算图表示,其中,神经网络的算子表示为节点,算子(即变量,例如中间结果)之间的数据流表示为边。
在阶段304中,进行内存分配优化过程,以确定神经网络模型的变量在计算机101的随机存取存储器104中的最佳位置,以实现最小化神经网络模型的内存占用的目标。
在阶段305中,根据在阶段304中获得的变量的最佳位置的确定,将神经网络模型的变量(例如中间结果)分配到计算机101的随机存取存储器104中的位置。
特别参考图4,用于优化神经网络模型的变量分配到随机存取存储器104的位置的阶段304的方法包括五个阶段。
在阶段401中,在阶段303中获得的计算图被拓扑排序,以确定神经网络模型的算子的执行顺序。
在阶段402中,根据在阶段401中获得的排序计算图生成“生存期”矩阵,其中神经网络的变量被索引到相应的存储大小和神经网络中将变量作为输入或输出的第一个算子和最后一个算子。
在阶段403中,生成约束编程模型,其中定义用于将神经网络模型的变量分配到随机存取存储器104的约束和目标。
在阶段404中,约束编程模型由约束编程求解器寻址,以标识神经网络模型的变量在随机存取存储器104中的位置,该位置最小化神经网络模型的内存占用,同时满足在阶段403中的约束编程模型中定义的约束和目标。
在阶段405中,在阶段402中生成的生存期矩阵被更新,以包括在阶段404中由约束编程模型求解器获得的神经网络模型变量的优化内存分配。
参考图5,在所述方法的阶段401中,生成表示神经网络模型的逻辑遍历的计算图501。在计算图501中,对输入数据执行的神经网络模型的算子,例如卷积运算,表示为节点,并且变量,例如算子之间的数据流,例如中间结果,表示为边。为了提高清晰度,图5中省略了权重节点和权重的梯度。
计算图501的第一侧502表示神经网络模型的正向传递,其中正向传递算子F1至F5连续操作在IN0输入的输入数据,以在OUT1生成分类预测输出。计算图501的第二侧502表示神经网络模型的后向传递,其中遍历后向传递算子B4至B1以进行梯度计算。在所述方法的阶段302计算的边的内存大小在神经网络的前向和后向路径的计算图中定义。
参考图6,在所述方法的阶段401中,输入计算图501被拓扑排序。
计算图的拓扑排序确定神经网络模型F1至F4和B4至B1的算子的执行顺序。在该示例中,使用已知的拓扑排序方法,例如Kahn算法和/或深度优先搜索技术,对输入计算图进行拓扑排序。
通过拓扑排序,节点按其对神经网络模型的执行顺序排序,并分配逻辑时间索引,索引0至索引9,表示算子在神经网络模型过程中执行的逻辑时间。在图6的示例中,节点IN0和IN1处于平行关系,因为它们是平行可执行的,因此被分配了公共索引,节点OUT0和OUT1也是如此。
共同参考图7至图13,在所述方法的阶段402中,根据在阶段401中获得的计算图的拓扑排序形式生成计算图的“生存期”矩阵表示。
生存期矩阵701是神经网络模型在X轴上的逻辑时间索引与用于存储神经网络模型变量的随机存取存储器104在Y轴上的存储器中的位置的图。生存期矩阵701是通过遍历在阶段401获得的拓扑排序图的过程产生的。在生存期矩阵701中,排序计算图的边‘a’至‘j’由框表示,每个框的高度表示相应边的内存大小,每个框的宽度表示边的生存期,以及每个框的位置表示随机存取存储器104中用于存储边的位置。
图7中示意性地描绘的生存期矩阵701表示随机存取存储器104中的位置到神经网络模型的变量的非优化分配。在分配中,对于具有多个结束逻辑时间索引的边,如边‘b’,将边的结束时间索引作为最新的结束时间索引。在图7的图示中,模型的每个边‘a’至‘j’被分配在存储器中的唯一位置,使得存储器中的每个位置被用于存储神经网络模型的变量‘a’至‘j’中的单个变量。可以看出,在这种非优化的内存分配中,神经网络变量的存储需要随机存取存储器104中的37个块,例如37MB的内存空间。因此,示例性神经网络模型的非优化内存占用是37个内存块,例如37MB。然而,参考逻辑时间索引5处的框的位置,可以看到,实际上,在神经网络模型操作期间的任何时候共存变量的最大内存大小是24个内存块,例如24MB。这一观察得出的结论是,通过优化神经网络模型变量的内存位置分配,可以将模型的内存占用从37个内存块减少到24个内存块,从而节省了13个内存块。
通过将随机存取存储器104的位置分配给神经网络模型的不共存变量,即具有不重叠的生存期的变量,可以减少神经网络模型的内存占用。因此,例如,可以很容易地观察到,具有相同内存大小的变量‘a’和‘d’是不共存的,因为它们的生存期不重叠。这一观察得出的结论是,边‘a’和‘d’可以在各自的生存期内交替分配给内存位置0至4,从而节省5个内存块。
然而,已经进一步认识到,即使是具有重叠生存期的神经网络的变量也可能是不共存的,其中变量是不相交的,即相互排斥的。如果一个变量的创建取决于不创建另一个变量,则必然会出现这种情况。例如,如果变量X和Y是由切换语句操作创建的,如“if-then-else”函数,则变量X和Y是不相交的,即相互排斥的,因此在所有情况下都不共存。
通过分析神经网络变量的控制依赖关系,例如通过控制流分析的依赖关系分析,可以标识神经网络的不相交变量。不相交变量的标识有助于这些变量安全地分配到公共内存位置,而不管它们各自的生存期如何,因为即使这些变量的各自生存期重叠,不相交变量在神经网络期间也不会共存。与仅依赖于变量各自的生存期将内存位置分配给神经网络的每个变量相比,可以有利地进一步减少神经网络的内存占用。
图8至图12示意性地描述了分析变量的控制依赖关系以标识不相交变量所涉及的过程。参考图8至图12,这些过程包括三个阶段。
首先参考图8,在过程的第一阶段中,通过遍历在阶段401中获得的排序计算图,通过控制流分析分析神经网络模型的变量的控制依赖关系。控制流分析有助于标识神经网络模型的切换算子,如“switch”、“if/else”或“true/false”语句,这些语句产生多个相互排斥的平行分支。
在图8中描述的说明性示例中,控制流分析有助于标识“if”/“switch”操作节点“N”,例如,该节点可以是计算图的节点“a”。if/switch运算符节点N根据输入变量的特性产生平行分支801、802。分支801涉及操作“op0”、“op1”和“op2”,导致变量的生成,具体来说,中间结果,由边n1、n2、n3和n4描绘。相反,分支802涉及操作“op3”和“op4”,生成边n5、n6和n7。节点N的“end-if”/“end-switch”算子也可以通过控制流分析检测。因此,控制流分析操作揭示,由边n1、n2、n3和n4描绘的对应于第一分支801的变量组和由边n5、n6和n7描绘的对应于第二分支802的变量组是不相交的,也就是说,相互排斥的,因为在任何分类任务中,变量集之一的存在必然意味着另一组变量的不存在。因此,在任何分类任务中,仅需要对其中一组变量进行内存分配。换句话说,不相交变量可以分配给相同的内存位置,而不管它们的生存期如何。如图8所示,控制流可以由树式时间数据结构803存储。因此,可以观察到,通过控制流分析来标识切换算子,对变量的控制依赖关系的分析有助于标识神经网络的不相交变量。
其次,集体参考图9至图11,在该过程的第二阶段中,使用在第一阶段获得的数据结构803计算神经网络模型的平行分支801、802的内存占用。
每个分支801、802的内存占用是通过为每个分支生成辅助“生存期”矩阵来计算的,该矩阵使用下文描述的约束编程方法求解。参考图10,第一分支801的子生存期矩阵包括四个块,代表四个边n1至n4,每个边具有9个块的内存占用,例如9MB。参考图11,第二分支802的辅助“生存期”矩阵包括三个块,代表三个边n5至n7,每个边具有11个块的内存占用,例如11MB。在所述方法中,产生平行分支801、802的节点N的内存占用被视为分支的内存大小中的较大者,在示例中,为分支的2、11个块。
平行分支的内存占用被视为内存大小最大的分支。因此,分配由节点N产生的变量所需的最大内存大小为11个块。因此,可以看出,所公开的通过控制流分析分析变量的控制依赖关系的方法能够安全地将算子N的变量的最大内存大小分配从20个块减少到11个块,从而将算子的内存占用减少9个块。
第三参见图12,在该过程的第三阶段中,一旦标识了切换算子的最大内存占用,就生成等效节点1201并将其替换到在阶段401获得的排序计算图中。
等效节点1201替换节点N,即替换“if”/“switch”节点和“end-if”/“end-switch”之间的所有操作和边。对等效节点1201的输入被定义为节点N的平行分支801、802的最大内存占用,在示例中,为11个块。
接下来参考图13,作为参考图7至图12描述的过程的结果,可以获得表1301。因此,此表定义了图7中生存期矩阵中描述的非优化内存分配的参数。
接下来参考图14,在所述方法的阶段403中,使用表1301中记录的信息定义约束编程模型1401。
根据表1301,约束编程模型1401将问题空间定义为:(a)十个框;(b)在任何内存位置中共存框不重叠的约束;(c)每个框的时间索引的约束,例如开始和结束索引,以及生存期,是固定的;(d)用户指定的目标函数,在所示的示例中,其目标是最小化神经网络模型的内存占用,但可选地,例如,可以设置满足指定的整数内存预算的目标;和(e)分配顺序,其中内存位置按内存大小的递减顺序分配给框,即首先分配给最大内存大小的框。
参考图15,在所述方法的阶段404中,约束编程模型求解器方法被用于标识适合在阶段403中定义的约束编程模型的定义的内存分配。因此,如图中所示,为了最小化内存占用,神经网络模型的多个不共存变量,例如由边“a”、“d”、“i”和“j”表示的变量,可以安全地分配给公共内存位置,在示例中,内存位置0至4。如将理解的,由于网络变量的控制依赖关系在参考图8至图12描述的过程的结果中被理解,具有重叠理论生存期的不相交变量可以被标识为不共存,因此可以被分配到公共内存位置。
因此,参考图7和图15的表示之间的比较,可以看出,目前公开的内存分配优化方法促进了神经网络模型的内存占用从37个框(例如37Mb)减少到24个框(例如24MB)。因此,在该示例中,所述方法将神经网络模型的内存占用减少了13个块,例如13MB。
最后参考图16,在所述方法的阶段405中,更新在阶段402中获得的表1301,以根据在阶段404中由约束编程模型求解器识别的技术方案将内存位置分配给神经网络模型的变量。
虽然已详细地描述了本发明及其优点,但是应理解,可以在不脱离如所附权利要求书所界定的本发明的精神和范围的情况下对本发明做出各种改变、替代和更改。在权利要求书中,词语“包括”不排除其它元件或步骤,“一”不排除多个元件或步骤。
Claims (15)
1.一种将内存分配给神经网络的变量的方法,其特征在于,所述方法包括:
确定所述变量的生存期;
分析所述变量的控制依赖关系以标识不相交变量;
根据所述变量的所述生存期和控制依赖关系,将内存位置分配给所述变量。
2.根据权利要求1所述的方法,其特征在于,还包括确定用于将所述变量存储在存储器中的内存大小,其中,所述将内存位置分配给所述变量包括进一步根据所述内存大小将所述内存位置分配给所述变量。
3.根据权利要求2所述的方法,其特征在于,所述将内存位置分配给所述变量还包括按照内存大小的递减顺序将所述内存位置分配给所述变量。
4.根据上述权利要求中任一项所述的方法,其特征在于,还包括标识所述不相交变量并将公共内存位置分配给所述不相交变量。
5.根据上述权利要求中任一项所述的方法,其特征在于,还包括将所述变量存储在所述分配的内存位置中。
6.根据上述权利要求中任一项所述的方法,其特征在于,还包括:
将内存位置分配给变量;
确定所述变量所在的所述神经网络中的最后一个用户;
确定所述最后一个用户的结束时间;
在所述结束时间之后释放所述内存位置。
7.根据权利要求6所述的方法,其特征在于,还包括将另一个变量分配给所述释放的内存位置。
8.根据上述权利要求中任一项所述的方法,其特征在于,还包括:
构建表示所述神经网络的计算图;
确定所述神经网络的算子的执行顺序;
对于每个变量,确定第一个算子和最后一个算子,其中,所述第一个算子和所述最后一个算子将所述变量作为输入或输出。
9.根据权利要求8所述的方法,其特征在于,所述分析所述变量的控制依赖关系以标识不相交变量包括:对所述计算图执行控制流分析,以标识取决于条件分支的变量。
10.根据权利要求8或9所述的方法,其特征在于,还包括生成所述计算图的矩阵表示,在所述计算图中,所述变量被索引到相应的内存大小以及第一个算子和最后一个算子,其中,所述第一个算子和最后一个算子将所述变量作为输入或输出。
11.根据权利要求10所述的方法,其特征在于,所述根据所述变量的生存期和控制依赖关系将内存位置分配给所述变量包括:使用具有所述计算图的矩阵表示作为输入的约束编程方法来标识存储器中可以存储所述变量的最小位置数量,而不重叠内存位置中的共存变量。
12.一种使用在计算机上运行的神经网络对输入数据进行分类的方法,其特征在于,所述方法包括:
使用根据上述权利要求中任一项所述的方法,将所述计算机可访问的存储器的内存位置分配给所述神经网络的变量;
输入所述计算机输入数据进行分类;
使用所述计算机对所述输入数据执行分类操作;
使用所述计算机输出用于分类的输入数据的分类预测。
13.一种包括指令的计算机程序,其特征在于,所述指令由计算机执行时使所述计算机执行根据权利要求1至12中任一项所述的方法。
14.一种计算机可读数据载体,其特征在于,存储有根据权利要求13所述的计算机程序。
15.一种装置,其特征在于,用于执行根据示例1至12中任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/EP2020/061853 WO2021219211A1 (en) | 2020-04-29 | 2020-04-29 | Memory allocation in a neural network |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115461718A true CN115461718A (zh) | 2022-12-09 |
Family
ID=70480276
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080100235.1A Pending CN115461718A (zh) | 2020-04-29 | 2020-04-29 | 神经网络中的内存分配 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115461718A (zh) |
WO (1) | WO2021219211A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114548704A (zh) * | 2022-01-28 | 2022-05-27 | 联想(北京)有限公司 | 一种信息处理方法和信息处理装置 |
CN115033391B (zh) | 2022-08-10 | 2022-11-11 | 之江实验室 | 一种用于神经网络计算的数据流动方法和装置 |
US20240104395A1 (en) * | 2022-09-27 | 2024-03-28 | Zhejiang Lab | Memory optimization method and device oriented to neural network computing |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0867808B1 (en) * | 1997-03-29 | 2002-04-10 | IMEC vzw | Method and apparatus for size optimisation of storage units |
US11907760B2 (en) * | 2016-09-23 | 2024-02-20 | Apple Inc. | Systems and methods of memory allocation for neural networks |
-
2020
- 2020-04-29 CN CN202080100235.1A patent/CN115461718A/zh active Pending
- 2020-04-29 WO PCT/EP2020/061853 patent/WO2021219211A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2021219211A1 (en) | 2021-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210182036A1 (en) | Hardware platform specific operator fusion in machine learning | |
CN115461718A (zh) | 神经网络中的内存分配 | |
CN111104120B (zh) | 神经网络编译方法、系统及相应异构计算平台 | |
US6381739B1 (en) | Method and apparatus for hierarchical restructuring of computer code | |
CN113703775B (zh) | 一种编译方法、装置、设备及存储介质 | |
US11610117B2 (en) | System and method for adapting a neural network model on a hardware platform | |
JP3299611B2 (ja) | 資源割付装置 | |
US8315894B2 (en) | Workforce management using constraint programming with efficient ordering of variables | |
CN115543639A (zh) | 分布式执行深度学习任务的优化方法和分布式系统 | |
JPH09171503A (ja) | 並列処理方法および並列処理装置 | |
WO2024131097A1 (zh) | 神经网络模型的编译方法、装置、电子设备和存储介质 | |
US9213548B2 (en) | Code generation method and information processing apparatus | |
CN115269204B (zh) | 一种用于神经网络编译的内存优化方法及装置 | |
CN113672232B (zh) | 程序编译方法和装置 | |
CN116204847A (zh) | 一种计算图优化方法、装置及设备 | |
KR20210111677A (ko) | 뉴럴 네트워크의 클리핑 방법, 뉴럴 네트워크의 컨벌루션 계산 방법 및 그 방법을 수행하기 위한 전자 장치 | |
CN112015426A (zh) | 一种代码管理方法、装置及设备 | |
US20210182041A1 (en) | Method and apparatus for enabling autonomous acceleration of dataflow ai applications | |
JP3638171B2 (ja) | 資源割付装置 | |
CN117009092B (zh) | 基于多重多臂老虎机的编译时间资源动态分配方法及系统 | |
CN118709717A (zh) | 模型部署方式的确定方法、装置、电子设备和存储介质 | |
US11915135B2 (en) | Graph optimization method and apparatus for neural network computation | |
EP4443289A1 (en) | Method, device and electronic apparatus for generating instructions of artificial intelligence accelerator | |
CN112988372A (zh) | 确定硬件运算平台分配方式的方法和装置 | |
US20220383133A1 (en) | Processing of neural networks |
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 |