一种内存复用方法及其相关产品转让专利
申请号 : CN201910750827.7
文献号 : CN110490313B
文献日 : 2022-03-18
发明人 : 不公告发明人
申请人 : 中科寒武纪科技股份有限公司
摘要 :
权利要求 :
1.一种可用于神经网络的内存复用方法,其特征在于,所述内存复用方法包括:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间;
通过所述当前算子对所述输入数据进行处理,获得对应的输出数据;
判断所述输入数据是否继续用于所述计算图中其他算子的处理,获取第一判断结果;
根据所述第一判断结果对所述存储空间进行复用;
所述第一判断结果为所述输入数据不再继续用于所述计算图中其他算子的处理时,释放所述输入数据占用的存储空间,以使所述存储空间用于存储其他数据;判断输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果;其中,所述输入数据的数据集包括至少两个输入数据子集;所述存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;
根据所述第二判断结果对所述存储空间进行复用。
2.如权利要求1所述的内存复用方法,其特征在于,所述其他数据是与所述输入数据不相关的数据。
3.如权利要求1所述的内存复用方法,其特征在于,所述第二判断结果为所述输入数据子集不再继续用于所述当前算子的处理时,释放所述输入数据子集占用的存储空间,以使所述输入数据子集占用的存储空间允许用于存储未被所述当前算子进行处理的其他输入数据子集所对应的输出数据。
4.一种可用于神经网络的内存复用方法,其特征在于,所述内存复用方法包括:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间;所述输入数据的数据集包括至少两个输入数据子集;所述存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;
通过所述当前算子对所述输入数据子集进行处理,获得对应的输出数据;
判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果;
根据所述第二判断结果对所述存储空间进行复用。
5.如权利要求4所述的内存复用方法,其特征在于,所述第二判断结果为所述输入数据子集不再继续用于所述当前算子的处理时,释放所述输入数据子集对应的存储空间,以使输入数据子集对应的存储空间允许用于存储未被所述当前算子进行处理的其他输入数据子集所对应的输出数据。
6.一种计算机可读存储介质,包括存储于其上的计算机可执行指令,所述可执行指令在被处理器执行时实施如权利要求1‑3或4‑5中任一项所述的内存复用方法。
7.一种可用于神经网络的内存复用装置,其特征在于,所述内存复用装置包括:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间的单元;其中,所述输入数据的数据集包括至少两个输入数据子集;所述存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;
通过所述当前算子对所述输入数据子集进行处理并获得对应的输出数据的单元;
判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果的单元;和
根据所述第二判断结果对所述存储空间进行复用的单元。
8.一种计算设备,其特征在于,所述计算设备包括:一个或多个处理器;和
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1‑5中任一项所述的内存复用方法。
说明书 :
一种内存复用方法及其相关产品
技术领域
背景技术
指数级地增加。因此,运算操作量以及内存访问量也随之快速地增加,远远超出了硬件处理
的能力,尤其对于嵌入式系统来说,问题尤为严重。业界已经提出了一些解决方案,例如剪
枝(pruning)、数据压缩、低精度量化等。但是,现有的通用处理器平台(例如CPU、FPGA、DSP
等)仍然难以充分满足实际应用的要求。
(DRAM)被加载到片上存储器,完成计算之后,计算结果被存储回外部存储器中。然而,对于
大部分神经网络加速器来说,计算资源的大量增加将会使得内存带宽的短缺以及片上网络
的资源竞争的问题更加严重。内部存储和外部存储之间的数据传输延迟占据了程序执行时
间中的一大部分。神经网络加速器的发展,使得深度神经网络的运行越来越快,但是,外部
存储器DRAM的带宽的缓慢发展,使得内存访问称为加速器发展的一个瓶颈问题。亟需解决
这个问题,才能更有效地利用加速器。
发明内容
存储的数据规模小于所述输入数据的数据集的数据规模;
储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;
附图说明
具体实施方式
因此,附图和描述被认为本质上是示例性的而非限制性的。
露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,
都属于本披露保护的范围。
中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,
但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一
步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一
个或多个的任何组合以及所有可能组合,并且包括这些组合。
果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”
或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
采用了不同的称呼,例如Operator,但与Caffe的layer在核心思想上依旧是相似的,都是将
神经网络计算进一步拆分为各类常见的面向张量数据的算子,深度学习框架需要将神经网
络映射的计算图结构所表达的深度学习任务具体化成可以在CPU或者人工智能处理器执行
的指令和数据。在这个过程中,深度学习框架采用算子作为落实计算任务的具体元素,为每
个算子都提供了在CPU或者人工智能处理器上执行的核函数(Kernel),根据计算图,深度学
习框架调度执行计算图中每个算子对应的核函数,完成整个神经网络的计算。
步骤S101中的当前算子可以为神经网络对应计算图中的任一算子。当接收到当前算子的输
入数据后,将其存入到人工智能处理器的片上存储器的存储空间中。
后,当前处理层基于该输入数据,根据其预设的处理操作或处理函数,执行相应的处理,获
得对应的输出数据。
然需要使用该输入数据时,第一判断结果为“是”;否则当其他处理层不再需要使用该输入
数据时,第一判断结果为“否”。
空间可用于存储其他数据。例如可以清空该存储空间,或者将该存储空间标记为“可用”,来
释放该存储空间。根据本申请的一个优选实施例,所述其他数据例如是与所述输入数据不
相关的数据。
时间例如定义为该数据的存储器空间的分配时间点与释放时间点之间的时间段。
空间Ram C也是相关的,因为二者的存续时间具有重叠。但是对于随机访问存储器空间Ram
A和Ram C,它们是不相关的,因为二者的存续时间不具有重叠,因此二者可以共用同一个存
储器空间。
输入数据已经被使用过,并且其他层不再需要该输入数据,那么该输入数据的存储空间可
以被复用。另外,在大部分的推理阶段,数据的形状可以提前获得,这也有助于片上存储器
的复用。为了简化,此处只关注存储器使用状态发生变化的时间点,并且限定每个数据从分
配点到释放点的存续时间。为了更清楚地示出这个过程,图2中示出了一个序列作为范例。
的输出数据存储到该存储空间中。这种实现方式是特别有利的,尤其是在一些逐元素层中,
例如Add、BatchNorm、Scale层等,输入数据与输出数据具有相同的大小,并且可以共用相同
的存储器空间,通过将输出数据直接写入输入数据的存储器空间中,可以避免为输出数据
重新分配存储器空间,大大节省了片上存储器的使用。
理结果。片上存储空间所允许存储的数据规模或数据量例如小于所述输入数据的数据集的
数据规模或数据量,在此情况下,根据本申请的一个优选实施例,所述内存复用方法100还
包括:判断当前输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果;其
中,所述输入数据的数据集包括至少两个输入数据子集;根据所述第二判断结果对所述存
储空间进行复用。
况下,例如不足以同时存储所述m*n个数据子集,那么可以顺序地、或者分批次地向片上存
储器空间中载入一个或多个数据子集,称为当前输入数据子集。当前处理层对当前输入数
据子集进行处理之后,判断已经载入的当前输入数据子集是否还继续用于当前算子,获得
第二判断结果,并根据第二判断结果来进行存储空间的复用。
输入数据子集所对应的输出数据。
的处理后,判断这n个输入数据子集是否还需要继续用于当前处理层的处理。如果不再需
要,则释放这n个输入数据子集所占用的空间,并且读入第二行的n个输入数据子集ID(2,
1)…ID(2,n)。或者可替换的,如果这n个输入数据子集中的一部分还需要继续用于当前层
的处理,其余部分不再需要继续用于当前层的处理,那么则可以释放不需要继续使用的部
分,以节约片上存储器空间,释放出的部分可用于读入新的输入数据或者存放输出数据。
前输出点的地址。此处将这些点连接成两条线,如图4所示。对于每个点,那些地址位于输入
地址线下方的输入数据的存储器空间可以被复用,因为这些数据已经被用于计算当前点之
间的输出数据。
的地址范围是从0(字节)到5952(字节)。因此,在这种情况下,减少了31%的存储器使用。
一部分,那么该输入数据的所述一部分的存储器空间可以被复用。因此,即使输入数据的存
续时间与输出数据的存续时间具有重叠,但是输出数据可以复用输入数据的存储器空间。
尤其是对于一些逐元素层(element‑wise layer),例如Add、BatchNorm、Scale层等,更是这
样。这些层中,输入数据与输出数据具有相同的大小,并且可以共用相同的存储器空间。
存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模。
当前算子进行处理的输入数据子集所对应的输出数据。
同时存储所述m*n个数据子集,那么可以顺序地、或者分批次地向片上存储器空间中载入一
个或多个数据子集,称为当前输入数据子集。当前处理层对当前输入数据子集进行处理之
后,判断已经载入的当前输入数据子集是否还继续用于当前处理层,获得第二判断结果,并
根据第二判断结果来进行存储空间的复用。
算子进行处理的输入数据子集所对应的输出数据。
的处理后,判断这n个输入数据子集是否还需要继续用于当前处理层的处理。如果不再需
要,则释放这n个输入数据子集所占用的空间,并且读入第二行的n个输入数据子集ID(2,
1)…ID(1,n)。或者可替换的,如果这n个输入数据子集中的一部分还需要继续用于当前层
的处理,其余部分不再需要继续用于当前层的处理,那么则可以释放不需要继续使用的部
分,以节约片上存储器空间。
输出数据的地址范围是从0(字节)到5952(字节)。因此,在这种情况下,减少了31%的存储
器使用。
610或者它们的组合,其存储可配置处理单元以执行先前描述的过程中的全部或一些的编
程指令604。这些指令可以包括例如用于使一个或多个处理器执行如下处理的一个或多个
可执行指令:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数
据存储到一存储空间;通过所述当前算子对所述输入数据进行处理,获得对应的输出数据;
判断所述输入数据是否继续用于所述计算图中其他算子的处理,获取第一判断结果;根据
所述第一判断结果对所述存储空间进行复用。
710或者它们的组合,其存储可配置处理单元以执行先前描述的过程中的全部或一些的编
程指令704。这些指令可以包括例如用于使一个或多个处理器执行如下处理的一个或多个
可执行指令:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数
据存储到一存储空间;所述输入数据的数据集包括至少两个输入数据子集;所述存储空间
允许存储的数据规模小于所述输入数据的数据集的数据规模;通过所述当前算子对所述输
入数据子集进行处理,获得对应的输出数据;判断所述输入数据子集是否继续用于所述当
前算子的处理,获取第二判断结果;根据所述第二判断结果对所述存储空间进行复用。
述存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;
空间用于存储其他数据。
于所述输入数据的数据集的数据规模;
数据子集占用的存储空间允许用于存储未被所述当前算子进行处理的其他输入数据子集
所对应的输出数据。
存储的数据规模小于所述输入数据的数据集的数据规模;
数据子集对应的存储空间允许用于存储未被所述当前算子进行处理的其他输入数据子集
所对应的输出数据。
储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;
成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的
形式实现。
工智能处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特
别说明,所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储
器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random
Access Memory)、静态随机存取存储器SRAM(Static Random‑Access Memory)、增强动态随
机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High‑
Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。
上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形
式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机
设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或
部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储
器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介
质。
附着在其他哪个子处理连接点的输出上,因为系统会自动地完成输入和输出的匹配。对于
子处理单元的输出也是同样的。这样,每个子处理单元只需要关注自身的输入输出连接点
与哪个数据队列连接,而不需要关注它的任何一个前向节点,达到了插件间解耦的效果。子
处理单元只需要考虑自身的输入输出,关注点的确定使子处理单元的实现变得简单,可复
用性提高。考虑流水线的灵活性,每个子处理单元的连接点(无论是输入输出连接点)的数
量不作任何限制,可根据需求进行配置。连接点的个数通过软件或硬件的参数进行配置,甚
至可以实现连接点个数动态可变的子处理单元。
分,并且本公开的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺
序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本公开
的实施例所属技术领域的技术人员所理解。
中,该程序在执行时,包括方法实施例的步骤之一或其组合。
块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如
果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机
可读存储介质中。所述存储介质可以是只读存储器,磁盘或光盘等。
后应说明的是:以上所述仅为本公开的优选实施例而已,并不用于限制本公开,尽管参照前
述实施例对本公开进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各
实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本公开
的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之
内。