深度学习推理框架调研总结
深度学习推理框架
- 作者介绍
- 1.移动端深度学习推理框架调研
- 1.1 小米的MACE(2017)
- 1.2 阿里的MNN
- 1.3 腾讯的TNN
- 1.4 ARM的tengine
- 1.5 百度的paddle-mobie
- 1.6 Facebook的Caffe2(*)
- 1.7 Google的TensorFlow Lite (*)
- 1.8 Apple的Core ML(*)
- 1.9 OpenVINO(Intel,cpu首选OpenVINO)
- 1.10 TensorRT(Nvidia)
- 1.11 Mediapipe(Google)---处理视频、音频等
- 2. 重点对SNPE的介绍(高通芯片*)
作者介绍
张伟伟,男,西安工程大学电子信息学院,2019级硕士研究生,张宏伟人工智能课题组。
研究方向:机器视觉与人工智能
工作单位:三星电子研究所
记得关注和点赞收藏哈!
电子邮件:zhangweiweicpp@163.com
1.移动端深度学习推理框架调研
相关平台的介绍的链接
1.1 小米的MACE(2017)
比较:TensorFlow/Caffe
MACE最大的优势是对GPU和DSP等异构计算的支持,劣势则是知名度和生态有不小的差距。
小米AI推理框架MACE介绍
官方手册:https://buildmedia.readthedocs.org/media/pdf/mace/latest/mace.pdf
开源github地址:https://github.com/XiaoMi/mace.git
mace模型库地址:https://github.com/XiaoMi/mace-models.git
MACE 自定义了一种类似 Caffe2 的模型格式。Tensorflow 和 Caffe 训练得到的模型可以转换成 MACE 模型进行部署。MACE 采用 YAML 文件描述模型的部署细节。
小米则采用了半精度浮点和8比特整形量化的方法来进行压缩。
1.2 阿里的MNN
开源github地址:https://github.com/alibaba/MNN
支持 Tensorflow、Caffe、ONNX 等主流模型格式,支持 CNN、RNN、GAN 等常用网络;
支持 86 个 TensorflowOp、34 个 CaffeOp ;各计算设备支持的 MNN Op 数:CPU 71 个,Metal 55 个,OpenCL 40 个,Vulkan 35 个,Android 上提供了 OpenCL、Vulkan、OpenGL 三套方案,尽可能多地满足设备需求,针对主流 GPU(Adreno和Mali)做了深度调优。
1.3 腾讯的TNN
开源github地址:https://github.com/Tencent/TNN
1.4 ARM的tengine
它支持TensorFlow、Caffe、MXNet 、PyTorch、 MegEngine、 DarkNet、ONNX、 ncnn 等业内主流框架。
开源github地址:https://github.com/OAID/Tengine
1.5 百度的paddle-mobie
例程:在Android手机上使用PaddleMobile实现图像分类
开源github地址: https://github.com/PaddlePaddle/paddle-mobile
1.6 Facebook的Caffe2(*)
PyTorch在研究、实验和尝试新的神经网络方面做得很好;
caffe2正朝着支持更多工业强度的应用程序的方向发展,重点是移动应用程序。
pytorch转化到caffe2:
先将pytorch转化为caffe,然后再将caffe转化为caffe2:https://caffe2.ai/docs/caffe-migration.html
将caffe的model转化为caffe2model: https://caffe2.ai/docs/caffe-migration.html
1.7 Google的TensorFlow Lite (*)
TensorFlow Lite 指南csdn
TensorFlow Lite官网链接:https://tensorflow.google.cn/lite/guide
中文版部署教程
- TensorFlow Lite 是一组工具,可帮助开发者在移动设备、嵌入式设备和 IoT 设备上运行 TensorFlow 模型。它支持设备端机器学习推断,延迟较低,并且二进制文件很小。
- Android 和 Ios
- 大多数 TensorFlow Lite 运算都针对的是浮点(float32)和量化(uint8、int8)推断,但许多算子尚不适用于其他类型(如 tf.float16 和字符串)。
1.8 Apple的Core ML(*)
一切可在用户设备端完成
1.9 OpenVINO(Intel,cpu首选OpenVINO)
英特尔的cpu,
开源github地址: https://github.com/openvinotoolkit/openvino
模型优化器(Model Optimizer)将给定的模型转化为标准的 Intermediate Representation (IR) ,并对模型优化。同时对传统的OpenCV图像处理库也进行了指令集优化,有显著的性能与速度提升。
ONNX
TensorFlow
Caffe
MXNet
Kaldi
1.10 TensorRT(Nvidia)
只能用在NIVDIA的GPU上的推理框架。NIVDIA自家的Jetson平台。
在保证准确率的情况下,通过将模型量化到INT8来更大限度地提高吞吐量,TensorRT包含两个阶段:编译build和部署deploy,
- 编译阶段对网络配置进行优化,并生成一个plan文件,用于通过深度神经网络计算前向传递。plan文件是一个优化的目标代码,可以序列化并且可存储在内存和硬盘中。
- TensorRT为所有支持平台提供了C++实现,以及在x86、aarch64和ppc64le平台上提供Python支持
编译阶段在图层中执行如下优化:
消除输出未被使用的层
消除等价于no-op的运算
卷积层,偏差和ReLu操作的融合
聚合具有足够相似参数和相同目标张量的操作(例如,Googlenet v5 inception 模型的1*1卷积)
通过直接将层输出定向到正确最终目的来合并concatenation 层
- 部署阶段通常采用长时间运行的服务或者用户应用程序的形式。它们接收批量输入数据,通过执行plan文件在输入数据上进行推理,并且返回批量的输出数据(分类、目标检测等)
使用TensorRT的流程:
将一个训练好的模型部署到TensorRT上的流程为:
1.从模型创建一个TensorRT网络定义
2.调用TensorRT生成器从网络创建一个优化的运行引擎
3.序列化和反序列化,以便于运行时快速重新创建
4.向引擎提供数据以执行推断
# 导入TensorRT
import tensorrt as trt
# 日志接口,TensorRT通过该接口报告错误、警告和信息性消息
TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
- 创建TensorRT builder 和 network
为特定的格式创建TensorRT 解析器
使用解析器解析导入的模型并填充模型
import tensorrt as trt# 以CaffeParse为例
datatype = trt.float32 # 定义数据类型
# 定义配置文件和参数模型路径
deploy_file = 'data/mnist/mnist.prototxt'
model_file = 'data/mnist/mnist.caffemodel'
# 创建builder, network 和 parser
with trt.Builder(TRT_LOGGER) as builder, builder.create_network() as network, trt.CaffeParser() as parser:model_tensors = parser.parse(deploy=deploy_file, model=model_file, network=network, dtype=datatype)
3.序列化和反序列化
序列化,意味着将engine转化为一种可以存储的格式并且在以后可以进行推理。用于推理使用时,只需要简单地反序列化engine
# 序列化模型到modelstream
serialized_engine = engine.serialize()
# 反序列化modelstream用于推理。反序列化需要创建runtime对象。
with trt.Runtime(TRT_LOGGER) as runtime: engine = runtime.deserialize_cuda_engine(serialized_engine)# 序列化engine并且写入一个file中
with open(“sample.engine”, “wb”) as f:f.write(engine.serialize())# 从文件中读取engine并且反序列化
with open(“sample.engine”, “rb”) as f, trt.Runtime(TRT_LOGGER) as runtime:engine = runtime.deserialize_cuda_engine(f.read())
4.执行,分配内存,创建流,上下文,激活值,返回主机输出。
# engine有一个输入binding_index=0和一个输出binding_index=1
h_input = cuda.pagelocked_empty(trt.volume(context.get_binding_shape(0)), dtype=np.float32)
h_output = cuda.pagelocked_empty(trt.volume(context.get_binding_shape(1)), dtype=np.float32)
# 为输入和输出分配内存
d_input = cuda.mem_alloc(h_input.nbytes)
d_output = cuda.mem_alloc(h_output.nbytes)
# 创建一个流在其中复制输入/输出并且运行推理
stream = cuda.Stream()#创建一些空间来存储中间激活值。由于引擎包含网络定义和训练参数,因此需要额外的空间。它们被保存在执行上下文中。
with engine.create_execution_context() as context:# 将输入数据转换到GPU上cuda.memcpy_htod_async(d_input, h_input, stream)# 运行推理context.execute_async_v2(bindings=[int(d_input), int(d_output)], stream_handle=stream.handle)# 从GPU上传输预测值cuda.memcpy_dtoh_async(h_output, d_output, stream)# 同步流stream.synchronize()
# 返回主机输出
return h_output
1.11 Mediapipe(Google)—处理视频、音频等
MediaPipe是个基于图形的跨平台框架,用于构建多模式应用的机器学习管道。MediaPipe可在移动设备,工作站和服务器上跨平台运行,并支持移动GPU加速,服务端,移动端,嵌入式平台。
Mediapipe github链接:https://github.com/google/mediapipe
2. 重点对SNPE的介绍(高通芯片*)
最好的教程—官方文档:https://developer.qualcomm.com/sites/default/files/docs/snpe/setup.html
可供参考的SNPE学习:https://blog.csdn.net/qq_44635240?type=blog
其次csdn、知乎的博客内容结合来看,对比进行操作。
支持:TensorFlow, Caffe, Caffe2, ONNX, TensorFlow, PyTorch,转换成dlc文件
将训练好的模型用SNPE的工具转成DLC文件就可以在SNPE运行环境里跑了。装成DLC之后也可以用它自带的量化工具量化成8位整形。
基本的SNPE工作流程只包含几个步骤:
1.将网络模型转换为可由SNPE加载的DLC文件。
2.可选择量化DLC文件以在Hexagon DSP上运行。
3.准备模型的输入数据。
4.使用SNPE运行时加载并执行模型。
上手SNPE-推理inception_v3
SNPE的安装 snpe-tensorflow-to-dlc 模型转化工具的使用 snpe-net-run
在Ubuntu环境下的inceptionv3模型是推理。 如何在商用手机上使用SNPE 加速模型推理。
(1)TensorFlow和SNPE的环境:snpe高通官网下载,unzip snpe-1.52.0.zip 解压
python3-dev’, ‘wget’, ‘zip’,‘libc+±9-dev’
(2)NDK,路径配置(1.4 2.0以上的tensorflow版本)
SNPE_ROOT,TENSORFLOW_HOME,PATH, LD_LIBRARY_PATH, 和PYTHONPATH
(3)得到pb模型,将 pb模型转化为SNPE支持的DLC模型格式
root@3e28cb421090:/workspace/tutor/inceptionv3: snpe-tensorflow-to-dlc -i inception_v3.pb -d input 1,299,299,3 --out_node InceptionV3/Predictions/Reshape_1
(4)准备数据集和验证脚本
拷贝数据到\models\xxxx下面,在snpe环境下进行验证
snpe-net-run --version
(5)部署到手机端
手机上部署运行:https://blog.csdn.net/qq_44635240/article/details/127055258
1.将必要的lib,bin,模型,数据推送到手机端
2.设置环境变量
3.进行推理 snpe-net-run --container inception_v3.dlc --input_list target_raw_list.txt
推理的结果默认保存在output下,运行时,使用–output_dir参数,后面加上自己的输出路径
4.将运行结果pull到host上
NPE SDK 目前做的还不是非常完美,有些需要定制化的神经网络层可能在原生NPE中没有提供。但还好SDK提供了用户定义层(UDL)功能,通过回调函数可以自定义算子,并通过重编译C++代码将自定义文件编译到可执行文件中。如果开发就是使用的C++,那比较容易实现用户定义层,但如果是运行在Android上,开发者需要将上层Java代码通过JNI方式来调用NPE原生的C++编译好的.so文件
深度学习推理框架调研总结相关推荐
- 阿里 深度学习推理框架_如何通过Knative无服务器框架构建深度学习推理
阿里 深度学习推理框架 在某些学术界和行业界,深度学习正在获得巨大的动力. 推理(基于预训练模型从现实世界数据中检索信息的能力)是深度学习应用程序的核心. 深度学习推理可用于在图像到达对象存储时对其进 ...
- 腾讯优图开源深度学习推理框架 TNN,助力 AI 开发降本增效
从学界到工业界,"开源"已经成为AI领域的一个关键词.一方面,它以"授人以渔"的方式为AI构建了一个开放共进的生态环境,帮助行业加速AI应用落地:另一方面,在解 ...
- 自制深度学习推理框架-第七课-构建自己的计算图
自制深度学习推理框架-第六课-构建自己的计算图 项目主页 https://github.com/zjhellofss/KuiperInfer 感谢大家点赞和PR, 这是对我最大的鼓励, 谢谢. 现在K ...
- 自制深度学习推理框架-第十一节-再探Tensor类并构建计算图的图关系
自制深度学习推理框架-第十一节-再探Tensor类并准备算子的输入输出 本课程介绍 我写了一个<从零自制深度学习推理框架>的课程,课程语言是 C++,课程主要讲解包括算子实现和框架设计的思 ...
- 深度学习多框架多平台推理引擎工具
一种深度学习推理引擎工具,支持多框架.支持多平台推理 项目下载地址:下载地址 支持的计算平台: - Windows 10 (Visual Studio 2019 x64) - Linux (x64, ...
- NVIDIA TensorRT高性能深度学习推理
NVIDIA TensorRT高性能深度学习推理 NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK.此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和 ...
- TensorRT是NVIDIA开发的深度学习推理工具,只支持推理,不支持训练 引
. TensorRT是NVIDIA开发的深度学习推理工具,只支持推理,不支持训练: 目前TensorRT3已经支持Caffe.Caffe2.TensorFlow.MxNet.Pytorch等主流深 ...
- 飞桨深度学习开源框架2.0抢先看:成熟完备的动态图开发模式
百度飞桨于近期宣布,深度学习开源框架2.0抢先版本正式发布,进入2.0时代.其中一项重大升级,就是推出更加成熟完备的命令式编程模式,即通常说的动态图模式.同时在该版本中将默认的开发模式定为动态图模式, ...
- 英伟达深度学习推理引擎TensorRT,现在开源了
https://www.toutiao.com/a6703740623364555271/ 2019-06-18 13:37:53 机器之心报道 参与:李亚洲.李泽南.思 英伟达的深度学习推理引擎Te ...
最新文章
- 计算机网络基础常考面试题总结
- 八皇后算法python_Python学习二(生成器和八皇后算法)
- 嵌入式编程之模块化编程
- sql server agent会自动关闭_经常用微信支付,要关闭这个开关,不然每个月都会自动扣钱...
- hypermesh安装包百度云_新闻突然!全新百度网盘发布
- python 词云_python词云-数据产品岗位描述的词云
- fopen 參数具体解释
- 数据库、数据库系统、数据库管理系统
- 涉及金钱使用double的已经被公司开除了,要使用BigDecimal
- duilib加载xml以及资源文件的路径问题
- 绿盟安全扫描--检测到目标站点存在javascript框架库漏洞
- QGIS教程—缓冲区buffer
- 有了这四个网站 再也不用花钱啦
- 包子笔记 - 关于沉没成本
- 4和2大于号小于号箭头那边_大于号小于号顺口溜
- Python 猴子偷桃
- 北京开始整治互联网加班了!附 955 不加班公司名单(2022版)
- HDU 5514 Frogs 容斥
- 华为2012机试题目及解答程序(仅供参考,版权归华为所有)
- 数据库课程设计 大学生综合管理系统
热门文章
- Duplicate Finder for Mac 1.4.3 重复文件查找和删除 破解版下载
- GAN网络详解(从零入门)
- 《小狗钱钱》阅读笔记
- java输出中写html标签,java 输出html标签
- Docker fille实例讲解
- 堆、栈、队列的区别和联系
- 光滑性准则(Smoothness Rule) 递推方程(Recursive Equation)
- 计算机网络安全凭据,账户为用户或计算机提供安全凭证,以便用户和计算机能够登录到网络,并拥有响应访 - 百科题库网...
- i710750h和r74800h玩游戏哪个好 r7 4800h和i7 10750h哪个性能好
- 迭代瀑布不是Scrum