System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种面向微控制器的循环内存管理方法技术_技高网
当前位置: 首页 > 专利查询>北京大学专利>正文

一种面向微控制器的循环内存管理方法技术

技术编号:41151948 阅读:6 留言:0更新日期:2024-04-30 18:17
本发明专利技术公开一种面向微控制器的循环内存管理方法,属于在微控制器上部署深度学习算法领域。本发明专利技术将物理内存抽象为以数据元素为单位的虚拟循环内存,并通过设置DNN算子输入和输出张量在虚拟内存的首地址位置、计算顺序、指针移动细节实现输入和输出共享同一份物理内存且计算正确性不变。利用本发明专利技术提供的方法,可以在不影响DNN计算准确性的情况下进一步节约运行所需的内存,将更多的DNN模型部署在内存空间有限的MCU上。

【技术实现步骤摘要】

本专利技术涉及在微控制器上部署深度学习算法,具体涉及一种在微控制器上利用循环内存管理方法,节约内存开销从而实现深度学习算法的部署的方法。


技术介绍

1、深度学习算法在图像识别,语音识别的方面取得了超出人类的水平。随着智能算法的普及,越来越多的终端设备也配备有低算力的计算设备,如微控制器(microcontroller unit,mcu)。微控制器能耗极低,因此能长期伺服,如手机唤醒功能,手表注视检测功能,智能家居监测功能等等,都可以通过微控制器进行部署。但是微控制器的内存极小,常常只有几百kb,在其上部署深度学习算法中的神经网络模型十分困难。因为神经网络中的计算需要大规模的张量计算,即使是为终端设备设计的小模型,内存需求也常常会超过微控制器的内存。例如由mit提出的mcunet-320kb-imagenet模型,需要320kb的内存进行部署,但是很多微控制器设备的内存都低于这个数量,比如stm32-f411re设备只有128kb的内存,无法部署这个模型。为了解决这个问题,往往只有重新训练模型以进一步压缩模型参数量这一种方法。但是这就导致模型的能力和准确性下降,而且并不是所有场景都可以进行重训练,大部分部署场景下,都没有再次训练的条件(因为训练需要大量的计算资源和时间开销)。

2、一个神经网络模型在部署的时候主要内存开销由两部分组成,一部分是模型参数,另一部分是运行时中间结果占据的空间。往往中间结果也会占据总体开销中很大的比例,因此减小内存开销可以从中间结果的大小入手,而不改变参数量,从而不需要重新训练、也不需要更改参数,就可以进一步减少整体内存开销。

3、2018年,由arm公司开发并开源的神经网络计算库cmsis-nn(cmsis-nn:efficientneural network kernels for arm cortex-m cpus)通过用低比特的方式支持多种算子,并压缩内存开销。他们支持了矩阵乘法,卷积等重要算子,使用8比特的数据精度,相比单精度浮点数,可以减少75%的内存。

4、2020年,mit韩松团队提出的tinyengine(mcunet:tiny deep learning on iotdevices)通过将深度可分离卷积(depthwise convolution)的输入和输出结果在内存中共享同一块地址而节约内存。这种方法完美地节约了网络算子的内存开销,但是仅仅适用于深度可分离卷积,网络中其他算子如矩阵乘法和卷积的内存开销没有被节约,成为了整体网络的内存瓶颈。


技术实现思路

1、为了方便,用mcu代指微控制器,dnn代指深度学习中的神经网络模型。

2、本专利技术的目的是提供一种面向微控制器的循环内存管理方法,使得对于dnn中的矩阵乘法,卷积算子都可以实现输入输出张量数据的地址空间复用,在不改变计算正确性和dnn精确度的情况下节约dnn内存开销,目标部署硬件是mcu。

3、本专利技术提供的技术方案如下:

4、一种面向微控制器的循环内存管理方法,包括如下步骤:

5、a.dnn计算前准备阶段:

6、a.1dnn算子分类;

7、a.2构建虚拟循环内存,即将实际物理内存抽象为以数据元素为单位的虚拟循环内存;

8、a.3在循环内存中初始化输入输出数据的指针位置;

9、b.dnn计算阶段:

10、b.1首先判断是否计算结束,如果无需计算,则直接结束,否则进入b.2;

11、b.2根据当前输入指针,读入输入数据,从内存加载到寄存器,使用向量化读取指令进行加速;

12、b.3在读入的数据上进行计算,使用mcu的向量化计算指令进行加速;

13、b.4判断当前计算中间结果是否应该从寄存器存储出去,对于矩阵乘法和卷积,需要沿着规约维度完成完整的累加运算才能得到完整计算结果,此时会存储出去,进入b.5,否则进入.b.7;

14、b.5根据当前的输出数据指针,将中间结果从寄存器存储出去;

15、b.6将输出数据指针进行更新,更新方式为后移指针,移动量等于b.5中存出的数据元素数;

16、b.7更新当前的输入数据指针,输入数据指针更新方式为后移指针,移动量等于b.2中读入的数据元素数,然后返回b.1步骤。

17、本专利技术的有益效果:

18、本专利技术将物理内存抽象为以数据元素为单位的虚拟循环内存,并通过设置dnn算子输入和输出张量在虚拟内存的首地址位置、计算顺序、指针移动细节实现输入和输出共享同一份物理内存且计算正确性不变。利用本专利技术提供的方案,可以在不影响dnn计算准确性的情况下进一步节约运行所需的内存,将更多的dnn模型部署在内存空间有限的mcu上。

本文档来自技高网...

【技术保护点】

1.一种面向微控制器的循环内存管理方法,包括如下步骤:

2.如权利要求1所述的面向微控制器的循环内存管理方法,其特征在于,步骤A.1中分为矩阵乘法和卷积两类DNN算子。

3.如权利要求1所述的面向微控制器的循环内存管理方法,其特征在于,步骤A.2中通过循环数组方式进行实现,循环数组中地址计算方法为addr=vaddr%length,其中addr是实际物理内存地址,vaddr是抽象后的虚拟地址,length是循环数组长度,%是取模运算。

4.如权利要求1所述的面向微控制器的循环内存管理方法,其特征在于,步骤A.3中输出数据指针记为vaddr_out,输入数据指针记为vaddr_in,vaddr_out<=vaddr_in,计算vaddr_in-vaddr_out的距离后,将vaddr_out总设置在0地址位置。

5.如权利要求4所述的面向微控制器的循环内存管理方法,其特征在于,对于矩阵乘法算子,计算vaddr_in-vaddr_out的距离方法为,输入形状为M,N,K,M为左矩阵行数,K为左、右矩阵列数,N为右矩阵行数,vaddr_in-vaddr_out=min(N,K)-1。

6.如权利要求4所述的面向微控制器的循环内存管理方法,其特征在于,对于卷积算子,计算vaddr_in-vaddr_out的距离方法为,卷积的窗口大小为RxS,输入形状为B,C,H,W,K,B为批处理大小,C为输入图像通道数,H,W是输入图像的行数和列数,K是输出图像的通道数,vaddr_in–vaddr_out=min(C,K)-1。

...

【技术特征摘要】

1.一种面向微控制器的循环内存管理方法,包括如下步骤:

2.如权利要求1所述的面向微控制器的循环内存管理方法,其特征在于,步骤a.1中分为矩阵乘法和卷积两类dnn算子。

3.如权利要求1所述的面向微控制器的循环内存管理方法,其特征在于,步骤a.2中通过循环数组方式进行实现,循环数组中地址计算方法为addr=vaddr%length,其中addr是实际物理内存地址,vaddr是抽象后的虚拟地址,length是循环数组长度,%是取模运算。

4.如权利要求1所述的面向微控制器的循环内存管理方法,其特征在于,步骤a.3中输出数据指针记为vaddr_out,输入数据指针记为vaddr_in,vaddr_out<=vaddr_in,计算vaddr_in-vad...

【专利技术属性】
技术研发人员:梁云郑思泽
申请(专利权)人:北京大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1