前端推理框架笔记

参考:https://blog.csdn.net/lixuejun2008/article/details/103897626

1) NCNN(腾讯)

ncnn加速不同于模型量化压缩, 而是采用另一种加速技巧,包括下面的几种:

使用低精度
采用openmp多线程加速
采用simd指令集

别的资料:

https://www.zhihu.com/question/62871439?sort=created

已实现 winograd 卷积加速,int8 压缩和推断,还有基于 vulkan 的 gpu 推断

而且针对不同kernel size做了优化

2. 默认的反卷积实现好像有点问题,出来的数据在kernel size 3, step 2时不对。我是自己重新实现了,也不麻烦,用自带的1x1卷积加自己写的neon优化版col2im。

2) MNN(阿里)

MNN 是一个轻量级的深度学习端侧推理引擎,核心解决深度神经网络模型在端侧推理运行问题,涵盖深度神经网络模型的优化、转换和推理。这和服务器端 TensorRT 等推理引擎的想法不谋而合。

支持异构设备混合计算,目前支持 CPU 和 GPU,可以动态导入 GPU Op 插件,替代 CPU Op 的实现;
iOS 设备上可以开启 GPU 加速(Metal);
Android 上提供了 OpenCL、Vulkan、OpenGL 三套方案,尽可能多地满足设备需求,针对主流 GPU(Adreno和Mali)做了深度调优;
针对 ARM v8.2 的新架构额外作了优化,新设备可利用半精度计算的特性进一步提速;
一般情况下,无需额外引入 libyuv 或 opencv 库处理图像。
 https://github.com/alibaba/MNN

3) Paddle-Lite(百度)

Paddle Lite旨在推动人工智能应用在端侧更好落地。该推理引擎在多硬件、多平台以及硬件混合调度的支持上更加完备,是飞桨在Paddle Mobile的基础上进行的一次大规模升级迭代。通过对底层架构设计的改进,拓展性和兼容性等方面实现显著提升。目前,Paddle Lite已经支持了ARM CPU,Mali GPU,Adreno GPU,华为NPU以及FPGA等诸多硬件平台,是目前首个支持华为NPU在线编译的深度学习推理框架。正在优化支持的有寒武纪、比特大陆等国产AI芯片,并会兼容支持的Intel、NVIDIA等主流云端芯片。

4) Tensorflow Lite

TensorFlow Lite 使开发者可以在移动设备上部署人工智能,是 TensorFlow Mobile 的一个延伸版本。TensorFlow Lite应该被视为TensorFlow Mobile的升级版。TensorFlow Lite可以与Android 8.1中发布的神经网络API完美配合,即便在没有硬件加速时也能调用CPU处理,确保模型在不同设备上的运行。 而Android端版本演进的控制权是掌握在谷歌手中的,从长期看,TensorFlow Lite会得到Android系统层面上的支持。
如果想要使用一些现成的tflite模型,可以从这里找到: 
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/g3doc/models.md

5)MACE(小米)

2018.6.28 ,小米开源移动端深度学习框架 MACE。该框架采用与 Caffe2 类似的描述文件定义模型,因此它能非常便捷地部署移动端应用。 MACE 主要从以下的角度做了专门的优化:

性能:代码经过 NEON 指令,OpenCL 以及 Hexagon HVX 专门优化。
功耗:支持芯片的功耗管理,例如 ARM 的 big.LITTLE 调度,以及高通 Adreno GPU 功耗选项。
模型加密与保护:支持将模型转换成 C++代码,以及关键常量字符混淆,增加逆向的难度。
硬件支持范围:支持高通,联发科,以及松果等系列芯片的 CPU,GPU 与 DSP(目前仅支持 Hexagon) 计算加速。同时支持在具有 POSIX 接口的系统的 CPU 上运行。
https://github.com/XiaoMi/mace

6)Tensor RT

TensorRT项目立项的时候名字叫做GPU Inference Engine(简称GIE),Tensor表示数据流动以张量的形式。RT个示Runtime.

TensorRT是专门针对部署端进行优化的,目前TensorRT支持大部分主流的深度学习应用。TensorRT所做的优化,总结下来主要有这么几点:

第一,把一些网络层进行了合并。

第二,不用专门做concat的操作,这一层取消掉。

第三,Kernel可以根据不同的batch size 大小和问题的复杂程度,去选择最合适的算法。

第四,不同的batch size会做tuning。

第五,不同的硬件如P4卡还是V100卡甚至是嵌入式设备的卡,TensorRT都会做优化,得到优化后的engine。

第六,支持不同精度的模型。

7) 实际部署中该如何选择框架

面对这么多的框架,在实际部署中该如何选择呢?其实它们有各自的特点。如果端侧设备是NVidia显示卡,则可考虑选用 TensorRT,如果不使用GPU,则可考虑用NCNN,移动设备可考虑Paddle Lite或MNN, 保密要求高可以选MACE。总之,要依据项目设备特点进行选择。
 

发布了2718 篇原创文章 · 获赞 1004 · 访问量 536万+

猜你喜欢

转载自blog.csdn.net/jacke121/article/details/104751310
今日推荐