CN115269205A - 一种面向神经网络计算的内存优化方法和装置 - Google Patents

一种面向神经网络计算的内存优化方法和装置 Download PDF

Info

Publication number
CN115269205A
CN115269205A CN202211177786.5A CN202211177786A CN115269205A CN 115269205 A CN115269205 A CN 115269205A CN 202211177786 A CN202211177786 A CN 202211177786A CN 115269205 A CN115269205 A CN 115269205A
Authority
CN
China
Prior art keywords
tensor
register
life cycle
node
interval
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
Application number
CN202211177786.5A
Other languages
English (en)
Other versions
CN115269205B (zh
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.)
Zhejiang Lab
Original Assignee
Zhejiang Lab
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 Zhejiang Lab filed Critical Zhejiang Lab
Priority to CN202211177786.5A priority Critical patent/CN115269205B/zh
Priority to PCT/CN2022/124000 priority patent/WO2024065865A1/zh
Publication of CN115269205A publication Critical patent/CN115269205A/zh
Priority to US18/072,969 priority patent/US20240104395A1/en
Application granted granted Critical
Publication of CN115269205B publication Critical patent/CN115269205B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种面向神经网络计算的内存优化方法和装置,包括以下步骤:步骤S1:将计算图重构为拓扑结构计算图;步骤S2:构建关于张量变量的生命周期区间;步骤S3:构建关于生命周期区间的扫描线;步骤S4:将张量变量分配到空闲寄存器;步骤S5:分配给超出寄存器需求数量的张量变量;步骤S6:将已过期的所述生命周期区间所分配的寄存器分配给超出寄存器需求数量的张量变量;步骤S7:将转移到内存中的张量变量添加回处于激活状态的所述生命周期区间并为其分配空闲寄存器。本发明优化用于神经网络计算的计算图的数据流的内存,减少数据流中张量变量所需的内存开销,降低大模型对于硬件内存资源的要求。

Description

一种面向神经网络计算的内存优化方法和装置
技术领域
本发明涉及一种基于特定计算模型的计算机***技术领域,尤其涉及一种面向神经网络计算的内存优化方法和装置。
背景技术
随着工业界复杂场景对大规模神经网络应用的需求越来越紧迫,大模型对于内存空间的占用不断增大,人工智能硬件操作***自身的内存资源不能满足大模型训练对于内存的需求,所以优化面向神经网络计算的内存技术变得极为重要。
为此,我们提出一种面向神经网络计算的内存优化方法和装置。
发明内容
本发明的目的在于提供一种面向神经网络计算的内存优化方法和装置,解决了如何优化减少了张量变量对于深度学习操作***内存资源的持久依赖和占用,减少数据流中张量变量所需的内存开销,降低了大模型对于硬件内存资源的要求的问题。
本发明采用的技术方案如下:
一种面向神经网络计算的内存优化方法,包括以下步骤:
步骤S1:将计算图重构为拓扑结构计算图;
步骤S2:构建关于张量变量的生命周期区间;
步骤S3:构建关于生命周期区间的扫描线;
步骤S4:将张量变量分配到空闲寄存器;
步骤S5:将最远终点的所述生命周期区间对应张量变量的寄存器分配给超出寄存器需求数量的张量变量;
步骤S6:将已过期的所述生命周期区间所分配的寄存器分配给超出寄存器需求数量的张量变量;
步骤S7:将转移到内存中的张量变量添加回处于激活状态的所述生命周期区间并为其分配空闲寄存器。
进一步地,所述步骤S1具体包括以下子步骤:
步骤S11:后序顺序遍历计算图,得到子图访问列表;
步骤S12:逆序后序所述子图访问列表,得到计算图的拓扑结构顺序;
步骤S13:根据所述拓扑结构顺序重构计算图,得到拓扑结构计算图。
进一步地,所述后序顺序为当访问所述计算图的某个节点时,则优先递归地访问所述节点的后继节点。
进一步地,所述步骤S2具体为构建关于每个节点中包含张量变量的生命周期区间,所述节点包含的张量变量对应的关于生命周期区间起始于所述张量变量处于存活状态的第一个节点的位置,终止于所述张量变量处于存活状态的最后一个节点的位置。
进一步地,所述步骤S3具体为在所述拓扑结构计算图的起始节点处,构建一条与所述生命周期区间平行的扫描线,所述扫描线用于从所述生命周期区间的起始端向所述生命周期区间的终止端移动过程中,观察是否存在空闲寄存器可以分配给数据流执行过程中的张量变量。
进一步地,所述步骤S5具体为执行流位于某个节点的位置时,当所述节点既没有空闲寄存器,也没有可以从处于激活状态的所述生命周期区间中移除的已经被扫描过期的所述生命周期区间,则将最远终点的所述生命周期区间对应的张量变量所分配的寄存器中的张量变量转移到内存中,然后将所释放的寄存器分配给超出寄存器需求数量的张量变量。
进一步地,所述步骤S6具体为执行流位于某个节点的位置时,当所述扫描线已经穿过张量变量所分配寄存器对应的所述生命周期区间,将张量变量从处于激活状态的所述生命周期区间中移除,对应分配的寄存器回收到空闲寄存器列表中,将所述空闲寄存器分配给超出寄存器需求数量的张量变量。
进一步地,所述步骤S7具体为执行流位于某个节点的位置时,当存在空闲寄存器,则将转移到内存中的张量变量添加回处于激活状态的所述生命周期区间,并且将空闲寄存器分配给对应的所述生命周期区间。
本发明还提供一种面向神经网络计算的内存优化装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现上述实施例任一项所述的一种面向神经网络计算的内存优化方法。
本发明还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例任一项所述的一种面向神经网络计算的内存优化方法。
本发明的有益效果是:本发明提供了计算图执行过程中产生的张量变量与物理寄存器和内存的映射关系,并且提供了基于所述映射关系的优化方法。寄存器可以存储计算图执行过程中产生的张量变量在内存中的存储位置。传统的张量变量存储方法是直接将张量变量的值存储到内存中。由于张量变量的值既可以存储在内存中也可以存储在寄存器中,考虑到寄存器允许中央处理器单元直接访问和访问速度快的特性,所以本发明提出的借助寄存器优化内存的方法优化了用于神经网络计算的计算图的数据流的内存,减少数据流中张量变量所需的内存开销,降低了大模型对于硬件内存资源的要求。所述的用于神经网络计算的内存优化方法提高整个计算图的计算效率,节约硬件和时间成本。
附图说明
图1为本发明一种面向神经网络计算的内存优化方法的流程示意图;
图2为实施例1将计算图重构为拓扑结构的过程示意图;
图3为实施例1拓扑结构计算图;
图4为实施例1构建关于拓扑结构计算图节点包含张量变量生命周期的区间;
图5为实施例1将拓扑结构计算图节点包含的前两个张量变量分配到两个寄存器;
图6为实施例1将寄存器中张量变量转移到内存和将新张量变量分配到已空闲寄存器;
图7为实施例2用于神经网络计算的计算图;
图8为实施例2构建关于数据流中张量变量生命周期区间;
图9为实施例2构建关于张量变量生命周期区间的扫描线;
图10为实施例2将寄存器r3分配给节点V1处的变量x;
图11为实施例2将寄存器r1分配给节点V2处的变量y;
图12为实施例2将寄存器r2分配给节点V3处的变量z;
图13为实施例2将最远终点区间lx对应张量变量x的寄存器r3分配给超出寄存器需求数量的张量变量b;
图14为实施例2将已过期生命周期区间ly所分配的寄存器r1分配给超出寄存器需求数量的张量变量w;
图15为实施例2将已过期生命周期区间所对应的张量变量从处于激活状态的生命周期区间列表中移除并回收寄存器;
图16为实施例2将已过期生命周期区间对应的张量变量从处于激活状态的生命周期区间列表中移除并回收寄存器;
图17为实施例2将空闲寄存器r3分配给lr3对应生命周期区间;
图18为实施例3一种面向神经网络计算的内存优化装置的示意图。
具体实施方式
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,一种面向神经网络计算的内存优化方法,包括以下步骤:
步骤S1:将计算图重构为拓扑结构计算图;
步骤S11:后序顺序遍历计算图,得到子图访问列表;
所述后序顺序为当访问所述计算图的某个节点时,则优先递归地访问所述节点的后继节点。
步骤S12:逆序后序所述子图访问列表,得到计算图的拓扑结构顺序;
步骤S13:根据所述拓扑结构顺序重构计算图,得到拓扑结构计算图。
步骤S2:构建关于张量变量的生命周期区间;
具体为构建关于每个节点中包含张量变量的生命周期区间,所述节点包含的张量变量对应的关于生命周期区间起始于所述张量变量处于存活状态的第一个节点的位置,终止于所述张量变量处于存活状态的最后一个节点的位置。
步骤S3:构建关于生命周期区间的扫描线;
在所述拓扑结构计算图的起始节点处,构建一条与所述生命周期区间平行的扫描线,所述扫描线用于从所述生命周期区间的起始端向所述生命周期区间的终止端移动过程中,观察是否存在空闲寄存器可以分配给数据流执行过程中的张量变量。
步骤S4:将张量变量分配到空闲寄存器;
步骤S5:将最远终点的所述生命周期区间对应张量变量的寄存器分配给超出寄存器需求数量的张量变量;
为执行流位于某个节点的位置时,当所述节点既没有空闲寄存器,也没有可以从处于激活状态的所述生命周期区间中移除的已经被扫描过期的所述生命周期区间,则将最远终点的所述生命周期区间对应的张量变量所分配的寄存器中的张量变量转移到内存中,然后将所释放的寄存器分配给超出寄存器需求数量的张量变量。
步骤S6:将已过期的所述生命周期区间所分配的寄存器分配给超出寄存器需求数量的张量变量;
为执行流位于某个节点的位置时,当所述扫描线已经穿过张量变量所分配寄存器对应的所述生命周期区间,将张量变量从处于激活状态的所述生命周期区间中移除,对应分配的寄存器回收到空闲寄存器列表中,将所述空闲寄存器分配给超出寄存器需求数量的张量变量。
步骤S7:将转移到内存中的张量变量添加回处于激活状态的所述生命周期区间并为其分配空闲寄存器。
为执行流位于某个节点的位置时,当存在空闲寄存器,则将转移到内存中的张量变量添加回处于激活状态的所述生命周期区间,并且将空闲寄存器分配给对应的所述生命周期区间。
对下述实施例中对应附图的函数定义如下:
Figure 519451DEST_PATH_IMAGE001
:表示随机生成形状为5行3列的张量。
Figure 967750DEST_PATH_IMAGE002
:表示进入执行
Figure 419591DEST_PATH_IMAGE003
节点的计算流。
if表达式
Figure 80380DEST_PATH_IMAGE002
:表示判断表达式的值是否为真,如果为真,则执行
Figure 301277DEST_PATH_IMAGE003
节点的计算流;否则执行其他分支节点的计算流。
Figure 654898DEST_PATH_IMAGE004
:表示张量 x 与张量y 进行相加操作。
Figure 328456DEST_PATH_IMAGE005
:表示创建一个与张量
Figure 792935DEST_PATH_IMAGE006
形状相同且所有元素都为1的张量。
Figure 992972DEST_PATH_IMAGE007
:表示张量变量
Figure 891396DEST_PATH_IMAGE006
和张量变量
Figure 911304DEST_PATH_IMAGE008
关于张量变量a的正确定义的路由选择器。
Figure 54841DEST_PATH_IMAGE009
:表示将张量x输入整流线性单元。
Figure 109384DEST_PATH_IMAGE010
:表示张量 x 与张量 y 进行矩阵乘法操作。
Figure 945753DEST_PATH_IMAGE011
:表示返回执行包含
Figure 718537DEST_PATH_IMAGE012
张量变量的分支。
Figure 259240DEST_PATH_IMAGE013
:表示张量变量x的生命周期区间。
Figure 309236DEST_PATH_IMAGE014
:表示张量 x 与张量y 进行相减操作。
Figure 175561DEST_PATH_IMAGE015
:表示将空闲寄存器
Figure 809542DEST_PATH_IMAGE016
分配给所对应生命周期区间的张量变量。
Figure 153936DEST_PATH_IMAGE017
:表示存储操作,代表将寄存器
Figure 58438DEST_PATH_IMAGE016
中的张量变量
Figure 361243DEST_PATH_IMAGE018
存储到内存中。
Figure 718406DEST_PATH_IMAGE019
:表示存储操作,代表将内存中的张量变量
Figure 866491DEST_PATH_IMAGE018
加载到寄存器
Figure 750133DEST_PATH_IMAGE016
中。
实施例1:
参见图2,步骤S1:将计算图重构为拓扑结构计算图;
步骤S11:后序顺序遍历计算图,得到子图访问列表;
按照后序顺序遍历计算图,得到子图访问列表为:D,B,E,C,F,A;
所述后序顺序为当访问所述计算图的某个节点时,则优先递归地访问所述节点的后继节点。
每当计算图中的某个节点C被按照后序顺序被访问完成时,那么与所述节点
Figure 99206DEST_PATH_IMAGE020
的所有连边都已经被访问过了。所述后序顺序的遍历可以确保计算图遍历中关于从节点
Figure 68299DEST_PATH_IMAGE021
指向节点
Figure 393976DEST_PATH_IMAGE022
的路径中节点
Figure 132125DEST_PATH_IMAGE022
一定优先于节点
Figure 652099DEST_PATH_IMAGE021
被访问。
步骤S12:逆序后序所述子图访问列表,得到计算图的拓扑结构顺序;
逆序后序所述子图访问列表,得到计算图的拓扑结构顺序为:A,F,C,E,B,D;
所述逆序后序节点列表是指将第一步后序顺序访问所得节点的列表进行逆序。所述逆序后序节点列表确保如果图中存在从节点
Figure 108488DEST_PATH_IMAGE021
指向节点
Figure 739321DEST_PATH_IMAGE022
的路径,那么所得拓扑顺序的列表中节点
Figure 331976DEST_PATH_IMAGE021
出现在节点
Figure 881906DEST_PATH_IMAGE022
之前。所述逆序后序的过程保证了拓扑结构的计算图在访问由某个节点
Figure 700958DEST_PATH_IMAGE023
连接的任何其他节点之前,需要优先访问所述的
Figure 260115DEST_PATH_IMAGE023
节点。
步骤S13:根据所述拓扑结构顺序重构计算图,得到拓扑结构计算图,参见图3。
参见图4,步骤S2:构建关于张量变量的生命周期区间;
具体为构建关于每个节点中包含张量变量的生命周期区间,所述节点包含的张量变量对应的关于生命周期区间起始于所述张量变量处于存活状态的第一个节点的位置,终止于所述张量变量处于存活状态的最后一个节点的位置。
对于节点包含的张量变量v,所述张量变量对应的关于生命周期区间lv起始于张量变量v处于存活状态的第一个节点的位置,终止于张量变量v处于存活状态的最后一个节点的位置。
步骤1:构建关于张量变量
Figure 364335DEST_PATH_IMAGE024
的生命周期区间
Figure 819588DEST_PATH_IMAGE025
,所述关于张量变量
Figure 125935DEST_PATH_IMAGE024
的生命周期区间
Figure 223204DEST_PATH_IMAGE025
起始于节点
Figure 931397DEST_PATH_IMAGE026
,终止于节点
Figure 557551DEST_PATH_IMAGE027
步骤2:构建关于张量变量
Figure 475828DEST_PATH_IMAGE028
的生命周期区间
Figure 252154DEST_PATH_IMAGE029
,所述关于张量变量
Figure 673908DEST_PATH_IMAGE028
的生命周期区间
Figure 110443DEST_PATH_IMAGE029
起始于节点
Figure 250438DEST_PATH_IMAGE030
,由于子图E与子图D之间存在由子图E指向子图D的连边,所以张量变量
Figure 830455DEST_PATH_IMAGE028
会穿过节点
Figure 372295DEST_PATH_IMAGE031
到达子图D,因此关于张量变量
Figure 605830DEST_PATH_IMAGE028
的生命周期区间
Figure 108486DEST_PATH_IMAGE029
终止于节点
Figure 351249DEST_PATH_IMAGE031
步骤3:构建关于张量变量
Figure 357382DEST_PATH_IMAGE032
的生命周期区间
Figure 27398DEST_PATH_IMAGE033
。所述关于张量变量
Figure 515886DEST_PATH_IMAGE032
的生命周期区间
Figure 296760DEST_PATH_IMAGE033
起始于节点
Figure 688558DEST_PATH_IMAGE034
,由于子图E与子图D之间存在由子图E指向子图D的连边,所以张量变量
Figure 263896DEST_PATH_IMAGE032
会穿过节点
Figure 865779DEST_PATH_IMAGE031
到达子图D,因此关于张量变量
Figure 60131DEST_PATH_IMAGE032
的生命周期区间
Figure 431069DEST_PATH_IMAGE033
终止于节点
Figure 318254DEST_PATH_IMAGE031
步骤S3:构建关于生命周期区间的扫描线;
在所述拓扑结构计算图的起始节点处,构建一条与所述生命周期区间平行的扫描线,所述扫描线用于从所述生命周期区间的起始端向所述生命周期区间的终止端移动过程中,观察是否存在空闲寄存器可以分配给数据流执行过程中的张量变量。
参见图5,步骤S4:将张量变量分配到空闲寄存器;
所述将拓扑结构计算图节点包含的张量变量分配到两个寄存器r0和r1中包含以下过程:
步骤1:将张量变量
Figure 141853DEST_PATH_IMAGE024
分配到寄存器r0中。
步骤2:将张量变量a1分配到寄存器r1中。
步骤S5:将最远终点的所述生命周期区间对应张量变量的寄存器分配给超出寄存器需求数量的张量变量;
为执行流位于某个节点Vi的位置时,当所述节点既没有空闲寄存器,也没有可以从处于激活状态的所述生命周期区间中移除的已经被扫描过期的所述生命周期区间,则将最远终点的所述生命周期区间对应的张量变量i所分配的寄存器ri中的张量变量i转移到内存中,然后将所释放的寄存器ri分配给超出寄存器需求数量的张量变量j。
步骤S6:将已过期的所述生命周期区间li所分配的寄存器分配给超出寄存器需求数量的张量变量j;
为执行流位于某个节点Vi的位置时,当所述扫描线已经穿过张量变量i所分配寄存器ri对应的所述生命周期区间li,将张量变量i从处于激活状态的所述生命周期区间中移除,对应分配的寄存器ri回收到空闲寄存器列表中,将所述空闲寄存器ri分配给超出寄存器需求数量的张量变量j。
参见图6,步骤S7:将转移到内存中的张量变量添加回处于激活状态的所述生命周期区间并为其分配空闲寄存器。
为执行流位于某个节点Vi的位置时,当存在空闲寄存器ri,则将转移到内存中的张量变量i添加回处于激活状态的所述生命周期区间,并且将空闲寄存器ri分配给对应的所述生命周期区间li
每当数据流流经包含张量变量i的重定义节点时,需要将寄存器ri中张量变量i存储到内存中;每当数据流流经包含张量变量i的使用节点时,需要将张量变量i从内存中加载到寄存器ri中。所述将转移到内存中的张量变量添加回处于激活状态的区间列表的过程
Figure DEST_PATH_IMAGE035
标记所示位置。
第一步、由于节点V1和V9处均包含张量变量a0的定义,所以需要将节点V1和V9处寄存器r0中的张量变量a0存储到内存中。如图6中
Figure 169590DEST_PATH_IMAGE036
标记所示位置。
第二步、由于节点V2,V4,V5,V9和V3处均包含张量变量a0的使用,所以需要在所述节点处将张量变量a0从内存中加载到寄存器r0中。
参见图7,实施例2:一种面向神经网络计算的内存优化方法,在内存优化过程中用于神经网络计算的计算图执行流中的张量变量分配3个寄存器,具体如下:
步骤S1:将计算图重构为拓扑结构计算图;如图8左边所示的计算图。
步骤S2:构建关于张量变量的生命周期区间;如图8右边边所示的计算图。
步骤S3:构建关于生命周期区间的扫描线;
在拓扑结构计算图的起始节点V1处,构建一条与所述生命周期区间起始线平行的扫描线。所述扫描线用来辅助观察空闲寄存器和张量变量的状态。扫描线的工作方式是在扫描线从生命周期区间的起始端向生命周期区间的终止端移动的过程中,观察是否存在空闲寄存器可以分配给数据流执行过程中的张量变量,参见图9,顶部横线代表扫描线。
步骤S4:将张量变量分配到空闲寄存器;
参见图10,将空闲寄存器r3分配给张量变量x,扫描线的起始位置,也就是节点V1处,发现存在空闲寄存器r3可以分配给张量变量x。
参见图11,将寄存器r1分配给节点V2处的张量变量y。扫描线扫描至节点V2的位置时,发现扫描线已经穿过寄存器r1的所述生命周期区间,所以可以将寄存器r1的所述生命周期区间从处于激活状态的所述生命周期区间列表中移除,将寄存器r1回收到空闲寄存器列表中。最后将所述空闲寄存器r1可以分配给张量变量y。
参见图12,将寄存器r2分配给节点V3处的张量变量z。扫描线扫描至节点V3的位置时,发现扫描线已经穿过寄存器r2的所述生命周期区间,所以可以将寄存器r2的所述生命周期区间从处于激活状态的所述生命周期区间列表中移除,将寄存器r2回收到空闲寄存器列表中。最后将所述空闲寄存器r2可以分配给张量变量z。
步骤S5:将最远终点的所述生命周期区间对应张量变量的寄存器分配给超出寄存器需求数量的张量变量;
参见图13,扫描线扫描至节点V4的位置时,发现既没有空闲寄存器,也没有可以从处于激活状态的所述生命周期区间列表中移除的已经被扫描过期的所述生命周期区间。所以需要将最远终点的所述生命周期区间对应张量变量x所分配的寄存器r3中的张量变量转移到内存中,然后将所释放的寄存器r3分配给超出寄存器需求数量的张量变量b。由于张量变量x被存储到内存中,所以张量变量x对应的所述生命周期区间更新为虚线。
参见图14,将已过期的生命周期区间ly所分配的寄存器分配给超出寄存器需求数量的张量变量w。扫描线扫描至节点V5的位置时,发现扫描线已经穿过张量变量y所分配寄存器r1对应的生命周期区间ly,所以可以将张量变量y从处于激活状态的生命周期区间列表中移除,将寄存器r1回收到空闲寄存器列表中。最后将所述空闲寄存器r1可以分配给超出寄存器需求数量的张量变量w。
步骤S6:将已过期的所述生命周期区间所分配的寄存器分配给超出寄存器需求数量的张量变量;
参见图15,将已过期生命周期区间所分配的寄存器回收到空闲寄存器列表中。扫描线扫描至节点V8的结束位置时,发现扫描线已经穿过张量变量z所分配寄存器r2对应的生命周期区间lz和张量变量w所分配寄存器r1对应的生命周期区间lw。所以将已过期生命周期区间lz和lw所对应的张量变量z和w从处于激活状态的生命周期区间列表中移除,将寄存器r2和r1回收到空闲寄存器列表中。
参见图16,将已过期生命周期区间所分配的寄存器回收到空闲寄存器池中并将空闲寄存器分配给处于激活状态的生命周期区间。扫描线扫描至节点V9的位置时,发现扫描线已经穿过张量变量b所分配寄存器r3对应的生命周期区间lb。所以将已过期生命周期区间lb所对应的张量变量b从处于激活状态的生命周期区间列表中移除,将寄存器r3回收到空闲寄存器列表中。扫描线扫描至节点V9的位置时,发现发现存在空闲寄存器r1,将空闲寄存器r1分配给
Figure DEST_PATH_IMAGE037
对应生命周期区间。扫描线扫描至节点V10的位置时,发现发现存在空闲寄存器r3,将空闲寄存器r3分配给
Figure DEST_PATH_IMAGE038
对应生命周期区间。
步骤S7:将转移到内存中的张量变量添加回处于激活状态的所述生命周期区间并为其分配空闲寄存器。
参见图17,扫描线扫描至节点V10的位置时,发现发现存在空闲寄存器r2,将转移到内存中的变量x添加回处于激活状态的生命周期区间列表,并且将空闲寄存器r2分配给lx对应的生命周期区间。
与前述一种面向神经网络计算的内存优化方法的实施例相对应,本发明还提供了一种面向神经网络计算的内存优化装置的实施例3。
参见图18,本发明实施例3提供的一种面向神经网络计算的内存优化装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现上述实施例中的一种面向神经网络计算的内存优化方法。
本发明一种面向神经网络计算的内存优化装置的实施例3可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例3可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图18所示,为本发明一种面向神经网络计算的内存优化装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图18所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例3中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例3而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例3仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的一种面向神经网络计算的内存优化方法。
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(Smart Media Card,SMC)、SD卡、闪存卡(Flash Card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种面向神经网络计算的内存优化方法,其特征在于,包括以下步骤:
步骤S1:将计算图重构为拓扑结构计算图;
步骤S2:构建关于张量变量的生命周期区间;
步骤S3:构建关于生命周期区间的扫描线;
步骤S4:将张量变量分配到空闲寄存器;
步骤S5:将最远终点的所述生命周期区间对应张量变量的寄存器分配给超出寄存器需求数量的张量变量;
步骤S6:将已过期的所述生命周期区间所分配的寄存器分配给超出寄存器需求数量的张量变量;
步骤S7:将转移到内存中的张量变量添加回处于激活状态的所述生命周期区间并为其分配空闲寄存器。
2.如权利要求1所述的一种面向神经网络计算的内存优化方法,其特征在于,所述步骤S1具体包括以下子步骤:
步骤S11:后序顺序遍历计算图,得到子图访问列表;
步骤S12:逆序后序所述子图访问列表,得到计算图的拓扑结构顺序;
步骤S13:根据所述拓扑结构顺序重构计算图,得到拓扑结构计算图。
3.如权利要求2所述的一种面向神经网络计算的内存优化方法,其特征在于,所述后序顺序为当访问所述计算图的某个节点时,则优先递归地访问所述节点的后继节点。
4.如权利要求1所述的一种面向神经网络计算的内存优化方法,其特征在于,所述步骤S2具体为构建关于每个节点中包含张量变量的生命周期区间,所述节点包含的张量变量对应的关于生命周期区间起始于所述张量变量处于存活状态的第一个节点的位置,终止于所述张量变量处于存活状态的最后一个节点的位置。
5.如权利要求1所述的一种面向神经网络计算的内存优化方法,其特征在于,所述步骤S3具体为在所述拓扑结构计算图的起始节点处,构建一条与所述生命周期区间平行的扫描线,所述扫描线用于从所述生命周期区间的起始端向所述生命周期区间的终止端移动过程中,观察是否存在空闲寄存器可以分配给数据流执行过程中的张量变量。
6.如权利要求1所述的一种面向神经网络计算的内存优化方法,其特征在于,所述步骤S5具体为执行流位于某个节点的位置时,当所述节点既没有空闲寄存器,也没有可以从处于激活状态的所述生命周期区间中移除的已经被扫描过期的所述生命周期区间,则将最远终点的所述生命周期区间对应的张量变量所分配的寄存器中的张量变量转移到内存中,然后将所释放的寄存器分配给超出寄存器需求数量的张量变量。
7.如权利要求1所述的一种面向神经网络计算的内存优化方法,其特征在于,所述步骤S6具体为执行流位于某个节点的位置时,当所述扫描线已经穿过张量变量所分配寄存器对应的所述生命周期区间,将张量变量从处于激活状态的所述生命周期区间中移除,对应分配的寄存器回收到空闲寄存器列表中,将所述空闲寄存器分配给超出寄存器需求数量的张量变量。
8.如权利要求1所述的一种面向神经网络计算的内存优化方法,其特征在于,所述步骤S7具体为执行流位于某个节点的位置时,当存在空闲寄存器,则将转移到内存中的张量变量添加回处于激活状态的所述生命周期区间,并且将空闲寄存器分配给对应的所述生命周期区间。
9.一种面向神经网络计算的内存优化装置,其特征在于,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现权利要求1-8中任一项所述的一种面向神经网络计算的内存优化方法。
10.一种计算机可读存储介质,其特征在于,其上存储有程序,该程序被处理器执行时,实现权利要求1-8中任一项所述的一种面向神经网络计算的内存优化方法。
CN202211177786.5A 2022-09-27 2022-09-27 一种面向神经网络计算的内存优化方法和装置 Active CN115269205B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202211177786.5A CN115269205B (zh) 2022-09-27 2022-09-27 一种面向神经网络计算的内存优化方法和装置
PCT/CN2022/124000 WO2024065865A1 (zh) 2022-09-27 2022-10-09 一种面向神经网络计算的内存优化方法和装置
US18/072,969 US20240104395A1 (en) 2022-09-27 2022-12-01 Memory optimization method and device oriented to neural network computing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211177786.5A CN115269205B (zh) 2022-09-27 2022-09-27 一种面向神经网络计算的内存优化方法和装置

Publications (2)

Publication Number Publication Date
CN115269205A true CN115269205A (zh) 2022-11-01
CN115269205B CN115269205B (zh) 2022-12-27

Family

ID=83756875

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211177786.5A Active CN115269205B (zh) 2022-09-27 2022-09-27 一种面向神经网络计算的内存优化方法和装置

Country Status (2)

Country Link
CN (1) CN115269205B (zh)
WO (1) WO2024065865A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118093452B (zh) * 2024-04-22 2024-07-05 北京壁仞科技开发有限公司 一种内存架构映射方法、设备、存储介质及程序产品

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101246434A (zh) * 2008-03-06 2008-08-20 中国人民解放军国防科学技术大学 一种利用剩余资源分配寄存器的方法
CN105653472A (zh) * 2015-12-31 2016-06-08 北京中科晶上科技有限公司 缓存辅助的向量寄存器堆的缓冲方法
CN107609641A (zh) * 2017-08-30 2018-01-19 清华大学 稀疏神经网络架构及其实现方法
US20190258251A1 (en) * 2017-11-10 2019-08-22 Nvidia Corporation Systems and methods for safe and reliable autonomous vehicles
CN112948001A (zh) * 2021-03-25 2021-06-11 安徽寒武纪信息科技有限公司 设定张量硬件配置的方法、可读存储介质及装置
US20210182077A1 (en) * 2017-10-30 2021-06-17 Shanghai Cambricon Information Tech Co. Ltd. Information processing method and terminal device
CN113050951A (zh) * 2021-03-31 2021-06-29 上海天旦网络科技发展有限公司 基于计算图的协议描述和解码方法
CN114556372A (zh) * 2019-09-03 2022-05-27 辉达公司 用于在机器学习中转换张量运算的处理器和***

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111814971B (zh) * 2020-06-30 2022-08-05 杭州国芯科技股份有限公司 一种神经网络的内存分配方法
CN112199190B (zh) * 2020-07-31 2023-11-03 星宸科技股份有限公司 内存分配方法、装置、存储介质及电子设备
CN114936099B (zh) * 2022-07-25 2022-09-30 之江实验室 一种用于神经网络计算的图优化方法和装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101246434A (zh) * 2008-03-06 2008-08-20 中国人民解放军国防科学技术大学 一种利用剩余资源分配寄存器的方法
CN105653472A (zh) * 2015-12-31 2016-06-08 北京中科晶上科技有限公司 缓存辅助的向量寄存器堆的缓冲方法
CN107609641A (zh) * 2017-08-30 2018-01-19 清华大学 稀疏神经网络架构及其实现方法
US20210182077A1 (en) * 2017-10-30 2021-06-17 Shanghai Cambricon Information Tech Co. Ltd. Information processing method and terminal device
US20190258251A1 (en) * 2017-11-10 2019-08-22 Nvidia Corporation Systems and methods for safe and reliable autonomous vehicles
CN114556372A (zh) * 2019-09-03 2022-05-27 辉达公司 用于在机器学习中转换张量运算的处理器和***
CN112948001A (zh) * 2021-03-25 2021-06-11 安徽寒武纪信息科技有限公司 设定张量硬件配置的方法、可读存储介质及装置
CN113050951A (zh) * 2021-03-31 2021-06-29 上海天旦网络科技发展有限公司 基于计算图的协议描述和解码方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
MARCO SIRACUSA等: "Tensor Optimization for High-Level Synthesis Design Flows", 《IEEE TRANSACTIONS ON COMPUTER-AIDED DESIGN OF INTEGRATED CIRCUITS AND SYSTEMS》 *
王金铭等: "基于半张量积的图像加密", 《中国图象图形学报》 *
马玮良等: "深度学习中的内存管理问题研究综述", 《大数据》 *

Also Published As

Publication number Publication date
CN115269205B (zh) 2022-12-27
WO2024065865A1 (zh) 2024-04-04

Similar Documents

Publication Publication Date Title
WO2022222839A1 (zh) 一种面向神经网络模型计算的中间表示方法和装置
EP4209902A1 (en) Memory allocation method, related device, and computer readable storage medium
CA2181099C (en) Method and means for scheduling parallel processors
CN111768006A (zh) 一种人工智能模型的训练方法、装置、设备及存储介质
CN115269204B (zh) 一种用于神经网络编译的内存优化方法及装置
CN114936099B (zh) 一种用于神经网络计算的图优化方法和装置
CN111338695B (zh) 基于流水线技术的数据处理方法及相关产品
CN114237918B (zh) 一种面向神经网络模型计算的图执行方法和装置
CN105164639A (zh) 控制由计算***执行的任务
WO2023093185A1 (zh) 一种用于神经网络计算的数据流动方法和装置
WO2023082575A1 (zh) 一种面向神经网络模型计算的图执行流水并行方法和装置
CN115269205B (zh) 一种面向神经网络计算的内存优化方法和装置
CN112084037A (zh) 神经网络的内存分配方法及装置
Cole et al. Analysis of randomized work stealing with false sharing
US20240104395A1 (en) Memory optimization method and device oriented to neural network computing
US20240104016A1 (en) Intermediate Representation Method and Apparatus for Compiling Computation Graphs
CN113407343A (zh) 一种基于资源分配的业务处理方法、装置及设备
CN110163791B (zh) 数据计算流图的gpu处理方法及装置
WO2023082901A1 (zh) 一种用于计算图编译的优化方法及装置
CN111290855B (zh) 分布式环境中多gpu服务器的gpu卡管理方法、***及存储介质
US11915135B2 (en) Graph optimization method and apparatus for neural network computation
WO2024065869A1 (zh) 一种用于图计算的指令执行方法及装置
US20240104341A1 (en) Memory optimization method and apparatus for neural network compilation
WO2024065866A1 (zh) 一种用于计算图编译的中间表示方法及装置
KR100912114B1 (ko) 디지털 신호처리 프로세서에서 효과적인 데이터 전송을위한 메모리 운용 방법

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