生活服务
MNN推理引擎:轻量级深度学习优化实践
2024-12-23 21:09  浏览:50

随着手机算力的不断提升,以及深度学习的快速发展,特别是小网络模型不断成熟,原本在云端执行的推理预测就可以转移到端上来做。端智能即在端侧部署运行AI算法,相比服务端智能,端智能具有低延时、兼顾数据隐私、节省云端资源等优势。

MNN推理引擎:轻量级深度学习优化实践

MNN(Mobile Neural Network)一个轻量级的深度神经网络推理引擎,在端侧加载深度神经网络模型进行推理预测。目前,MNN已经在阿里巴巴的手机淘宝、手机天猫、优酷等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景。此外,IoT等场景下也有若干应用。

图 1:MNN概述图

图 2:MNN框架

由上图所示,MNN基本的工作流由两部分组成,即Offline Conversion和On-device Inference。

Converter由Frontends和Graph Optimize构成。前者负责支持不同的训练框架,MNN当前支持Tensorflow(Lite)、Caffe和onNX(PyTorch/MXNet的模型可先转为ONNX模型再转到MNN),最终全部转换为MNN自定义的模型格式(.mnn);后者通过算子融合、算子替代、模型压缩、布局调整等方式对图进行基本的优化操作。

On-device Inference由三部分组成,分别是:Pre-inference、算子级优化和Backend Abstraction。在Pre-inference模块中引入了一种对可选计算方案的代价评估机理,在已知输入大小和内核形状的前提下,从多种方案中选择一种最优的方案;算子级优化主要包括在卷积和反卷积中应用Winograd算法、在矩阵乘法中应用Strassen算法、低精度计算、手写汇编、多线程优化、内存复用等;Backend Abstraction主要是提供了一套统一的接口来隐藏后端的差异,支持多种硬件架构,支持OpenCL,OpenGL,Vulkan和metal等,可以方便地进行扩展,比如TPU、FPGA等。

图 3:加速方案选择

在移动应用中,计算速度和轻量化是主要考虑的因素,为了实现轻量化,就不能使用OpenBLAS和Eigen等加速库,所以有一些推理引擎框架中使用手工搜索的方式,不依赖于任何外部库,使用汇编指令case by case地实现算子,这种方式可以使推理引擎变得轻量化和高效,但是case by case的优化是非常耗时的,而且很难覆盖所有算子。这种推理引擎的代表如NCNN (Tencent, 2017),MACE (Xiaomi, 2018)和Anakin (Baidu, 2018)。

与手工搜索形成强烈对比的是全自动搜索,其典型代表是TVM,它不仅解决了多余依赖的问题,同时为模型和后端提供了图级和算子级的优化,所以TVM在模型和设备多样性方面的支持非常好,但是这也是有代价的,TVM生成的运行时是模型特例化的,换句话说,当需要更新模型时,就需要TVM重新生成运行时库,这对于移动应用来说是不可接受的。MNN采用的是一种半自动搜索的方式,在通用性和高性能上都实现了增强。

3.1 计算方案选择

MNN实现了一种代价评估机理,充分考虑了算法实现和后端特性,从多种实现方案中找到最优的方案,如下是代价计算公式:

为了使总的代价最小,那么就需要在算法和后端上分别选择最快的方式,针对算法部分的代价,以卷积为例,目前最快的实现算法有两种选择Sliding window和Winograd,针对各种各样的卷积配置,动态地选择计算代价最小的算法,选择方式是:

- 如果kernel size为1,就是一个矩阵乘,那么使用Strassen算法是最合适的。

- 如果kernel size大于1,使用Winograd 将卷积操作转换为矩阵乘,理论上卷积的代价用如下公式表示:

基于这个公式,可以选择最优的输出大小来最小化cost。所以对于卷积的代价评估如下:

第二个问题就是怎么计算后端的代价,最小化后端代价,其实就是针对每个算子,选择最佳的后端,这样可以保证全局是代价最小的:

3.2 准备—执行解耦

在程序执行期间,正常情况下计算是伴随着内存的申请和释放的,对于移动应用来说,在内存管理上的开销是不可忽视的。考虑到输入大小已经确定,引擎可以将所有的算子虚拟执行一遍,得到确切的内存需求。这样的话,可以在Pre-Inference阶段预先将需要的内存分配出来,并在在执行阶段重复利用,原理如图4所示:

MNN宣称采用准备—执行解耦,在CPU上有7%~8%的提升,在GPU上50%~75%的提升,GPU上提升明显,是因为GPU上需要设置命令Buffer和与之相关的命令描述等,这些工作对于GPU来说也是非常耗时的,将其放在准备阶段,能有非常大的性能提升。

内核指的是一个算子的详细实现。这块的优化主要来源于两个方面:算法和调度,即选择具有最低复杂度的算法和对硬件资源进行充分利用。

4.1 Winograd 优化

Winograd快速卷积算法已经被很多推理框架所广泛采用,定义如下:

其中内核W(大小为[k,k]),输入为X(大小为[n+k-1,n+k-1]),输出Y(大小为[n,n]),G,B,A分别为对应的转换矩阵。

块划分和Pipelining

在Winograd卷积算法中,X只是整个输入的一小部分,问题是怎么进行块划分,划分多少个块?从输出看,假如输出的大小为[![img](file:///C:Users00239830AppDataLocalTempksohtml16672wps13.png)],用T表示每次并行计算的Blocks数,则T为:

    以上就是本篇文章【MNN推理引擎:轻量级深度学习优化实践】的全部内容了,欢迎阅览 ! 文章地址:http://ktsh.xhstdz.com/xwnews/679.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://ktsh.xhstdz.com/mobile/ , 查看更多   
最新文章
揭秘SEO网络优化平台,企业网站搜索引擎排名提升秘籍
SEO网络优化平台是提升企业网站搜索引擎排名的关键工具。通过深度分析、关键词优化、内容质量提升等策略,该平台助力企业快速提
搜索引擎优化(SEO)优惠,提升网站排名与流量的(黑帽seo)机会
在当今数字化时代,企业和网站所有者越来越意识到搜索引擎优化(SEO)的重要性,SEO 是通过优化网站内容和结构,提高其在搜索引
5个好用的WordPress seo插件!
WordPress经常被用来搭建外贸英文网站,因为他的拓展性能非常强,通过各种插件来拓展各种功能,非常强大,而且WordPress非常适合
MNN推理引擎:轻量级深度学习优化实践
随着手机算力的不断提升,以及深度学习的快速发展,特别是小网络模型不断成熟,原本在云端执行的推理预测就可以转移到端上来做。
分区类型MBR和GPT有什么区别|简述分区表MBR与GPT
磁盘分区,有两种类型可选,分别为MBR和GPT,但是很多用户在使用快速分区的时候,不知道这两个分区表类型有什么区别,这篇文章是
外链建设蓝图:提升 SEO 排名和网站权威
前言外链建设对于提升您的网站 SEO 排名和建立权威至关重要。通过采取战略性方法,您可以获得高质量的反向链接,这些反向链接将
360智脑2024最新版 v1.2.0
360智脑是一款AI智能软件,基于多模态大语言模型提供高效便捷的API接入服务,让AI触手可及,能够满足用户日常工作、生活、学习中
ai写作-ai写作免费一键生成
在信息爆炸的时代内容创作成为了多企业和个人关注的点。传统的人工写作方法耗时耗力效率低下。随着人工智能技术的发展写作逐渐走
Yoast SEO Premium插件下载,为你的网站实现卓越的SEO优化!
全面的关键词优化功能 Yoast SEO Premium插件提供了强大的关键词优化功能。它通过实时分析你的网页内容,提供关键词密度、
SEO优化在推广行业中的核心战略,企业腾飞的关键动力
SEO优化推广在当今企业竞争中扮演着关键角色。通过提升网站排名、提高搜索引擎曝光度,助力企业拓展市场份额,实现品牌影响力与
相关文章