一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种用于边缘ai推理框架的内存调度方法与流程

2021-12-17 21:57:00 来源:中国专利 TAG:


1.本技术涉及嵌入式边缘计算技术领域,特别涉及一种用于边缘ai推理框架的内存调度方法。


背景技术:

2.近年来,随着深度学习技术的快速发展以及高性能硬件的广泛应用,在工业界,越来越多的厂商逐渐将传统的视觉算法替换为卷积神经网络模型。在计算机视觉领域中,人们的需求一般有:图像分类,目标检测,语义分割等。神经网络已经成为图像识别中识别效果最好的方法,神经网络中包含有成千上万个神经元,并且这些神经元通过和非线性激活函数组合,将获得无比强大的函数拟合能力。许多专家认为神经网络是模拟人脑中神经系统搭建而成。其识别图像的流程也是先通过浅层神经网络识别出低级语义信息,然后在后续深层神经网络中分类出高级别的信息。对于人类而言,由于天生自带的视觉注意力系统,在很复杂的环境中搜寻出自己想要的目标是很容易的。但是对于机器想要理解物体代表的含义极其困难,到目前为止,在一系列的目标检测竞赛中(比如:imagenet,ms coco)夺取前几名的方案无不是使用深度学习,深度学习已经经历了三次发展浪潮。1940年到1960年是深度学习的第一次发展历史,其初始模型出现在控制论(cybernetics)中;在1980年到1990年,这10年中,双层神经网络也逐渐浮现;直到21世纪初,深度学习才因为多层神经网络的出现而繁荣起来。神经网络一共经历了三次较大的发展。
3.然而,随着智能手机、移动边缘嵌入式设备的发展,其便捷性、灵活性以及定型化等特性相比于传统的服务器设备运行深度学习模型推理服务,嵌入式设备具备很多独特的优势,能很好的满足部分工业领域的需求。包括实时性好、响应速度快、隐私保护好以及安全性高。比如针对自动驾驶、行人识别、车辆超载识别等等领域,由于高清摄像头录制视频信息及其庞大,而无线网络的带宽是无法满足视频实时回传至服务器的需求的,并且考虑到隐私和保密性的要求,很多数据也是只能保存在边缘设备端。因此,基于边缘设备运行深度学习推理网络而将推理结果直接反馈,其不仅可以避免网络传输的速度限制和波动,还能极好的保护了客户的隐私。
4.边缘计算是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。边缘计算处于物理实体和工业连接之间,或处于物理实体的顶端。恩智浦预计在2021年底边缘ai将会被一下几个关键性需求推动,真正的发展起来。首先是带宽:就算用5g,可能也没有足够的带宽将所有原始数据发送到云端。其次是延迟:许多应用要求较快的响应时间,比用户从云端接收到数据的时间还要短。然后是经济性:某个应用如果使用云端,即使能从技术上解决带宽和延迟问题,但在边缘执行ai可能更划算。以及可靠性:某个应用如果使用云端,即使能从技术上解决带宽和延迟问题,但到云端的网络连接并非一直可靠,而应用可能需要一直运作。在这种情况下,就要使用边缘ai了。例如人脸辨识门锁,如果网络连接断开,你希望门
锁仍然正常工作。最后是隐私:某个应用如果使用云端,即使能从技术上解决带宽、延迟、可靠性和经济性等问题,可能仍有许多应用出于隐私考虑而需要进行本地处理。例如婴儿监控器或卧室安全监控摄影机。
5.边缘嵌入式设备虽然具备实时性好、响应速度快、隐私保护好以及安全性高等优点,但是嵌入式边缘计算系统目前的问题是,与固定式的桌面系统相比,嵌入式系统在处理器,内存和存储容量方面更为有限,因此计算能力较低。然而深度学习算法,计算量非常大,通常需要运行在高性能的服务器上,对于在前端运行提出了非常高的要求。这些正是基于嵌入式系统的边缘计算设备深度学习应用的机遇与挑战。
6.目前深度学习边缘推理框架,比如libtorch,tensorflow lite以及ncnn等都针对模型需求算力过高、推理时间过长以及占据内存资源过大等问题都采取了优化策略。常见的方法有:张量低秩分解、模型权重量化与共享、模型结构轻量化设计、模型网络结构剪枝,指令集以及硬件优化等。其中张量低秩分解是应用奇异值分解等技术将权重矩阵降低维度,然而这个需要大量时间和算力进行矩阵分解,并且会很大的影响模型精度。权重量化是通过减小表达权重参数所需的比特数,然而这同样会影响模型精度。轻量化设计是在构建模型网络结构时使用更轻量化的模块,这无法保证模型具有很好的泛化性以及较高的准确度。指令集以及硬件优化是通过总结模型运行特征,开发专用指令集以及系统调度策略,这个缺点是硬件设计复杂、昂贵。以上方法出发点都是通过减小模型计算量来减小内存需求,对内存调度策略没有进行优化。


技术实现要素:

7.本技术提供一种用于边缘ai推理框架的内存调度方法,所述方法包括:
8.根据深度学习模型,基于嵌入式硬件平台运行时权重载入行为,采用权重流水线加载方式;
9.根据所述深度学习模型运行时的张量,对所述张量进行重新内存的重新分配。
10.可选的,根据深度学习模型,基于嵌入式硬件平台运行时权重载入行为,确定权重流水线加载方式,之前,包括:
11.通过预加载,获取所述深度学习模型的每一层网络的推理运算时间以及每一层网络占用的内存空间,以及每一层网络对应的权重。
12.可选的,根据深度学习模型,基于嵌入式硬件平台运行时权重载入行为,采用权重流水线加载方式,包括:
13.根据获取的每一层网络的推理时间,预先在当前网络推理运算时间结束对应的节点之前,将下一层网络对应的权重提前读入内存中,掩盖下一层网络的权重读入内存的时间,实现权重流水线加载方式。
14.可选的,根据所述深度学习模型运行时的张量,对所述张量占用的内存进行重新内存的重新分配,包括:
15.根据所述深度学习模型运行时的张量,使用贪心算法重新分配张量占用的内存。
16.可选的,根据所述深度学习模型运行时的张量,使用贪心算法重新分配张量占用的内存,包括:
17.将所述张量按照其占据内存大小以非递增的顺序排序;
18.将所述张量依次按照内存从大到小的顺序进行内存分配,并将已分配好内存的张量加入预设队列中;所述预设队列对应已分配好内存的张量的内存以及已分配好内存的张量的生命周期;分配内存的过程中,任何有生命周期重叠的张量不使用同一内存空间。
19.可选的,根据所述深度学习模型运行时的张量,使用贪心算法重新分配张量占用的内存,还包括:
20.如果目标张量没有与其他张量有生命周期重叠,则遍历所述预设队列,找到能容纳所述目标张量的所有空隙,并选择所有空隙中的最小空隙,将所述最小空隙对应的内存分配给所述目标张量,并将所述目标张量加入所述预设队列中。
21.本技术提供的方法从系统层和深度学习推理框架层两个方面进行内存优化,在系统层通过贪心算法对深度学习模型运行时张量内存占用进行内存绝对地址重排,优化内存占用;在框架层通过权重流水线式加载,实现模型权重内存时间维度上复用,压缩内存消耗。本技术在不会影响模型精度的同时,有效降低模型内存资源消耗和能源消耗,使其可以部署在低功耗并且资源受限的嵌入式边缘设备上。所述针对基于通用嵌入式系统的边缘计算设备的深度学习推理框架的内存调度优化方法。
附图说明
22.图1为本技术实施例提供的一种用于边缘ai推理框架的内存调度方法的流程示意图;
23.图2为本技术实施例提供的一种深度学习边缘推理框架采用的内存池管理图;
24.图3为本技术实施例提供的一种alexnet模型基于边缘设备运行时的权重加载和网络层推理运算时间图;
25.图4为本技术实施例提供的一种alexnet模型经过本发明权重流水线加载优化后的网络层推理运算时间图;
26.图5为本技术实施例提供的一种resnet18网络中的shortcut结构示意图;
27.图6为本技术实施例提供的一种resnet18模型基于内存池调度的内存分布情况;
28.图7为本技术实施例提供的一种贪心算法的代码示意图;
29.图8为本技术实施例提供的一种实施效果示意图。
具体实施方式
30.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
31.在介绍本技术提供的方法前,首先对本技术针对的背景进行一定解释。
32.深度学习模型在边缘设备进行推理时,针对算子中的矩阵运算会采用线性代数库进行多线程计算,因此每个算子运算时,都会有临时张量保存在内存中,此外每层网络推导得到的特征图张量也会保存在内存中,然而目前深度学习边缘推理框架(libtorch,tensorflow lite以及ncnn等)都是基于内存池对内存分配进行管理。内存池是通过基于深度学习边缘推理框架层建立两个链表,分别管理已经使用的内存节点和空闲的内存节点。该方法虽然有效的降低了系统层回收和分配内存进入内核态的时间开销,但是也不可避免地带来了额外的内存空间浪费。
33.如图1所示,为本技术实施例提供的一种用于边缘ai推理框架的内存调度方法的流程示意图。
34.在执行本技术提供的方法前,还需要执行以下步骤:
35.通过预加载,获取深度学习模型的每一层网络的推理运算时间以及每一层网络占用的内存空间,以及每一层网络对应的权重。
36.本技术提供的方法包括以下步骤:
37.步骤s101,根据深度学习模型,基于嵌入式硬件平台运行时权重载入行为,采用权重流水线加载方式。
38.具体的,根据获取的每一层网络的推理时间,预先在当前网络推理运算时间结束对应的节点之前,将下一层网络对应的权重提前读入内存中,掩盖下一层网络的权重读入内存的时间,实现权重流水线加载方式。
39.需要说明的是,嵌入式硬件平台运行时权重载入行为指的是深度学习模型基于嵌入式平台推理时,由于嵌入式平台低算力的限制,无法同时运行两个算子计算,因此深度学习边缘推理框架(libtorch,tensorflow lite以及ncnn等)会将模型并行网络结构进行串行化,以保证嵌入式平台只运行一个算子。因此在模型结构被串行化以后,每层网络只会使用本层对应的权重。
40.如图2所示为本技术实施例提供的一种深度学习边缘推理框架采用的内存池管理图。具体的内存池共有两个链表budgets以及payouts,分别存储的是未使用和已经被使用的内存节点。比如,当模型申请一个大小为n
size
的新的内存空间时,它将首先到budgets链表中找到一个可以满足内存重用阈值的内存节点(假设该内存节点大小为budgets_node
size
,reuse_threshold代表内存节点复用比例),即n
size
/budgets_node
size
>reuse_threshold,如果该条件不满足,模型将会向操作系统申请一个新的内存空间地址,但是在该新的内存空间被使用完成后,模型不会向操作系统申请销毁该新的内存空间地址,而是通过payouts链表弹出,存放到budgets链表中,便于后续复用该内存空间。
41.如图3所示,为本技术实施例提供的一种alexnet模型基于边缘设备运行时的权重加载和网络层推理运算时间图。第一行表示alexnet模型每层网络的权重加载时间,第二行表示每层网络的推理运算时间。上下两行具有相同起始时间点的方格表示是同一层网络的权重加载时间以及推理运算时间。为了解决模型权重文件占据内存空间过大的问题,本本技术提出的权重流水线加载主要基于嵌入式端算力无法支持模型同时计算多个算子,需要将模型序列化的现象,让网络的每一层只使用当前层网络的权重,通过在时间维度上复用权重的内存空间,从而减少内存总消耗。
42.可以从图3中看到,每一网络的权重加载时间远小于网络推理运算时间,并且在现有技术中,只有当前一网络对应的推理运算时间结束才进行下一网络的权重加载,就造成时间维度上权重空间的浪费。
43.如图4所示,为本技术实施例提供的一种alexnet模型经过本发明权重流水线加载优化后的网络层推理运算时间图。alexnet模型在增量式权重加载优化方案下的每个网络层的推理运算时间图。具有相同起始时间的方格表示同一层网络,横轴表示时间,第一行代表alexnet模型每个网络层的权重读取生命周期,第二行表示模型每个网络层的推理运算时间。在每层网络使用对应的权重完毕后,直接将后续层对应的权重覆盖相同内存区域,实
现内存空间时间维度上的复用。
44.需要说明的是,为了实现没有多余的时间开销,需要满足的条件是:
[0045][0046]
表示的是第i个网络层对应的权重读取完成后的绝对时间。δ
loss
表示硬件平台的性能波动,该性能波动根据硬件平台的差异有不同的值,主要受到内存io读取速度以及cpu性能等等不可预知因素在运行时发生的波动影响。li
start_time
表示第i个网络层开始推理计算的绝对时间。
[0047]
需要说明的是,本技术实施例中,权重流水线加载方式是每一网络执行完毕之后,下一网络层才会执行,结合一个例子对本技术提供的方法进行说明,如图5所示,为本技术实施例提供的一种resnet18网络中的shortcut结构示意图。由于嵌入式平台的算力不足以支持同时运行两个神经节点的运算(比如同时进行两个卷积运算),并且嵌入式平台的内存访问带宽也不足以平稳支持多个内存调度行为。因此本技术提供的方法都是部署于嵌入式边缘平台的卷积神经网络模型都是预先被序列化,即将并行的网络结构进行编排,使其变为串行网络。图5中的序号,即为每个网络层依次被执行的顺序。
[0048]
步骤s102,根据深度学习模型运行时的张量,对张量进行重新内存的重新分配。
[0049]
本技术实施例根据深度学习模型运行时的张量,使用贪心算法重新分配张量占用的内存。
[0050]
具体的,将张量按照其占据内存大小以非递增的顺序排序。
[0051]
将张量依次按照内存从大到小的顺序进行内存分配,并将已分配好内存的张量加入预设队列中。预设队列对应已分配好内存的张量的内存以及已分配好内存的张量的生命周期。分配内存的过程中,任何有生命周期重叠的张量不使用同一内存空间。
[0052]
如果目标张量没有与其他张量有生命周期重叠,则遍历预设队列,找到能容纳目标张量的所有空隙,并选择所有空隙中的最小空隙,将最小空隙对应的内存分配给目标张量,并将目标张量加入预设队列中。
[0053]
如图6所示,为本技术实施例提供的一种resnet18模型基于内存池调度的内存分布情况。其中blob张量即为特征图张量。resnet18在整个推理流程中一共申请了3个内存节点,它们大小分别是12.25mb、3.06mb、3.06mb,横轴表示模型的生命周期,纵轴表示内存池中不同的内存节点,相同颜色表示同一个内存节点,而颜色占比的比例表示该内存节点的使用率。比如,resnet18模型首先申请了大小为12.25mb的内存节点(图6最下一层),当模型需要申请下一个$3.06$mb的内存使用空间时,此时内存池会在预算(budgets)链表中查询可以使用的内存节点,但是此时12.25mb的最下一层内存空间节点被占用,因此内存池又向操作系统申请了新的内存节点3.06mb(图6中间层)。然后,从resnet18整个生命周期观察发现,大部分的内存节点实际上都处于并未被完全使用的状态,浪费了大量宝贵的内存空间。本技术实施例则有效节约了内存空间。
[0054]
如图7所示,为本技术实施例提供的一种贪心算法的代码示意图。其中,图7(2)涉及到目标张量没有与其他张量有生命周期重叠的情形。
[0055]
如图8所示,为本技术实施例提供的一种实施效果示意图。基于模型alexnet、googlenet、shufflenetv1、resnet18、resnet50以及vgg16,中央处理器为quad

core
mpcore,内存为1gb 128

bit lpddr4 memory。对模型的权重内存使用以及特征图张量和临时存储张量进行优化,平均优化比例为43.74%。
[0056]
本技术提供的方法从系统层和深度学习推理框架层两个方面着手,在系统层通过贪心算法对深度学习模型运行时张量内存占用进行内存绝对地址重排,优化内存占用;在框架层通过权重流水线式加载,实现模型权重内存时间维度上复用,压缩内存消耗。本技术在不会影响模型精度的同时,有效降低模型内存资源消耗和能源消耗,使其可以部署在低功耗并且资源受限的嵌入式边缘设备上。所述针对基于通用嵌入式系统的边缘计算设备的深度学习推理框架的内存调度优化方法。
[0057]
本领域的技术人员可以清楚地了解到本技术实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本技术实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例或者实施例的某些部分所述的方法。
[0058]
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于服务构建装置和服务加载装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
[0059]
以上所述的本技术实施方式并不构成对本技术保护范围的限定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献