本申请涉及人工智能应用的,特别是一种面向卷积神经网络中大尺度运算的编译器内存分配方法。
背景技术:
1、随着深度学习不断发展,卷积神经网络(convolutional neural network)成为人工智能的代表性技术之一,其在计算机视觉,自然语言处理和自动驾驶等多个领域广泛应用,并取得了前所未有的突破和成就,展现了卷积神经网络应用的重要性。
2、随着人工智能+物联网的兴起,面向嵌入式设备的人工智能应用发展刻不容缓。深度学习编译器为嵌入式设备的人工智能硬件加速器生成从卷积神经网络框架到优化后的目标代码,但是嵌入式设备的内存与计算资源有限,同时卷积神经网络结构种类繁多,数据流的大小也大小不一,如何处理大尺度运算在有限的内存空间中的正确高效地进行成为一个难点。
技术实现思路
1、本申请提供一种面向卷积神经网络中大尺度运算的编译器内存分配方法,来解决如何处理大尺度运算在有限的内存空间中的正确高效地进行这一难点,从而实现人工智能硬件加速器对大尺度神经网络运算的高效执行。
2、第一方面,提供了一种面向卷积神经网络中大尺度运算的编译器内存分配方法,包括:
3、将卷积神经网络算子的特征图进行存储,当特征图的大小大于所分配的存储空间时,对特征图切图;
4、按照切图数量对特征图进行切图,再次判断切图后的子特征图是否内存溢出,如果仍然溢出,重新确定切图数量进行切图,直至切图后的子特征图不再内存溢出;
5、标记每份切图在整个特征图所在的始末位置,再根据标记依次将切图送入硬件加速单元中计算,最后进行算子的归约计算,得到最终的输出,包括根据每份切图在整个特征图所在的始末位置,将每份切图的输出对应。
6、结合第一方面,在第一方面的某些实现方式中,根据公式(1)
7、
8、其中rowfm、colfm、chfm代表特征图的行、列、通道数,ch为通道对齐数,n为lines数,bytedata代表数据所占字节数,offset代表特征图所占内存空间大小,当offset>sramspace时则内存溢出。
9、结合第一方面,在第一方面的某些实现方式中,针对从输出到输入切分特征图或从任意方向切分特征图,则对输入特征图进行切图;
10、针对从输入到输出切分特征图,则对输出特征图进行切图。
11、结合第一方面,在第一方面的某些实现方式中,如果是卷积类算子,根据公式(2):
12、row_inchunk=(row_outchunk-1)*stride+kernel (2)
13、其中stride是卷积核步长,kernel是卷积核大小,row_inchunk是输入特征图单个切图的行数量,row_outchunk是输入特征图单个切图在输出特征图上的对应行数,将row_inchunk代入公式(1)中的rowfm,计算此时输入特征图所占内存空间是否溢出,如果溢出则继续切分输出特征图,更新row_outchunk,直至满足内存分配条件为止。
14、结合第一方面,在第一方面的某些实现方式中,如果是上采样类算子,根据公式(3):
15、row_outchunk=row_inchunk*stride (3)
16、其中stride是上采样步长,row_inchunk是输入特征图单个切图的行数量,row_outchunk是输入特征图单个切图在输出特征图上的对应行数,将row_outchunk代入公式(1)中的rowfm,计算此时输出特征图所占内存空间是否溢出,如果溢出则继续切分输入特征图,更新row_inchunk,直至满足内存分配条件为止。
17、结合第一方面,在第一方面的某些实现方式中,如果是反卷积类算子,根据公式(4):
18、
19、其中stride是反卷积步长,padrow_col是相邻行列间填充的行列数,kernel是卷积核大小,row_outchunk是输入特征图单个切图在输出特征图上的对应行数,将row_outchunk代入公式(1)中的rowfm,计算此时输出特征图所占内存空间是否溢出,如果溢出则继续切分输入特征图,更新row_inchunk,直至满足内存分配条件为止。
20、结合第一方面,在第一方面的某些实现方式中,所述方法还包括:
21、面向大尺度卷积核的切分及计算,包括:
22、按照硬件加速器支持的卷积核大小为单位对大卷积核进行切分,得到子卷积核;
23、针对子卷积核的计算域进行计算并归约,每个子卷积核在对应特征图上的输出是大卷积核卷积计算的部分和。
24、结合第一方面,在第一方面的某些实现方式中,如果卷积核切分数量不能整除,则切分的数量按照向上取整的方式,同时对大卷积核的左侧及下侧补零,补零后卷积核大小计算见公式(5):
25、
26、其中kernelbig为大卷积核行列数,kernelunit为支持的卷积核行列数,kernelout为补零之后的大卷积核行列数。
27、结合第一方面,在第一方面的某些实现方式中,子卷积核是大卷积核行方向上第i个、列方向第j个切分卷积核,子卷积核计算域的始末位置见公式(6):
28、
29、其中rowst、colst是行列的起始位置,rowed、coled是行列的终止位置,rowtotal为输入特征图的总行数,coltotal为输入特征图的总列数。
30、结合第一方面,在第一方面的某些实现方式中,大尺度输入输出的特征图切分和大尺度卷积核切分同时参与运算,包括:根据大尺度输入输出的特征图切分方法,结合内存溢出判断,得到切分后的子特征图;根据大尺度卷积核的切分方法,结合子特征图大小及算子属性,得到切分后的子卷积核;在归约计算时,先归约计算子卷积核的输出得到大尺度卷积核的输出,再归约计算子特征图的输出得到大尺度输入输出的特征图的输出。
31、与现有技术相比,本申请提供的方案至少包括以下有益技术效果:
32、1.本发明中的大尺度输入输出的特征图切分方法使得硬件加速器适用更大尺度的神经网络结构。该方法提出了一种适用于一般ram的数据存储格式,也可以更改在某维度的数据排布来适配特殊的ram设计。在此基础上,该方法将算子分类,每种分类的算子有不同计算方向的切分方法,针对任意大小的输入或输出特征图提出了解决方案,因此该方法可以在基本不依赖ram设计结构的情况下处理绝大部分神经网络在有限内存上的数据内存分配问题。
33、2.本发明中的大尺度卷积核的切分及计算方法可以在一定程度上简化硬件加速器的设计,该方法将大尺度卷积核拆分为经典卷积核大小下的归约运算。神经网络硬件加速器一般对卷积操作有特殊的加速设计,需要支持至少一种卷积核尺度的运算,在这种情况下,大尺度卷积核可以通过被拆分并补零的方法转换为以支持卷积核为尺度单位的子卷积核集合。
1.一种面向卷积神经网络中大尺度运算的编译器内存分配方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,根据公式(1)
3.根据权利要求2所述的方法,其特征在于,
4.根据权利要求3所述的方法,其特征在于,如果是卷积类算子,根据公式(2):
5.根据权利要求3所述的方法,其特征在于,如果是上采样类算子,根据公式(3):
6.根据权利要求3所述的方法,其特征在于,如果是反卷积类算子,根据公式(4):
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述方法还包括:
8.根据权利要求1所述的方法,其特征在于,如果卷积核切分数量不能整除,则切分的数量按照向上取整的方式,同时对大卷积核的左侧及下侧补零,补零后卷积核大小计算见公式(5):
9.根据权利要求1所述的方法,其特征在于,子卷积核是大卷积核行方向上第i个、列方向第j个切分卷积核,子卷积核计算域的始末位置见公式(6):
10.根据权利要求1所述的方法,其特征在于,大尺度输入输出的特征图切分和大尺度卷积核切分同时参与运算,包括:根据大尺度输入输出的特征图切分方法,结合内存溢出判断,得到切分后的子特征图;根据大尺度卷积核的切分方法,结合子特征图大小及算子属性,得到切分后的子卷积核;在归约计算时,先归约计算子卷积核的输出得到大尺度卷积核的输出,再归约计算子特征图的输出得到大尺度输入输出的特征图的输出。
