模型转换、模型压缩、模型加速工具汇总

目录

    • 一、场景需求解读
    • 二、模型转化工具汇总
      • 1、模型转换工具的作用
      • 2、模型转换工具简介
        • 1、MMdnn
        • 2、 ONNX
        • 3、 X2Paddle
    • 三、模型压缩和加速工具汇总
      • 1、模型压缩加速工具的作用
      • 2、模型压缩加速工具简介
        • 1、PocketFlow
        • 3、distiller
        • 4、TVM
        • 5、tflite
        • 6、ncnn
        • 7、MNN
        • 8、OpenVIO
        • 9、Tengine
        • 10、ARMNN
        • 11、Paddle Lite
        • 12、FeatherCNN
        • 13、DNNL
        • 14、MACE
        • 15、SNPE
        • 16、model-compression
        • 17、MediaPipe
        • 18、Glow
        • 19、TNN
        • 20、Tengine Lite
        • 21、rknn与rknpu
    • 四、其它加速工具
        • 1、Halide
        • 2、TACO
        • 3、weld
        • 4、ATLAS
        • 5、TensorComprehensions
        • 6、opentuner
    • 参考资料
    • 注意事项

一、场景需求解读

  在现实场景中,我们经常会遇到这样一个问题,即某篇论文的结果很棒,但是作者提供的训练模型是使用pytorch训练的,而我自己却比较擅长用tensorflow,我想要使用该模型做一些其它的项目。那么很多人就会采取一种方式,去阅读别人的论文、理解别人的代码,然后使用自己熟悉的工具进行代码重现、重新训练一个模型。这个阶段会耗用大量的人力和物力,最终还不能保证一定能得到论文的效果。本文即将介绍的几个模型转换的工具就可以很好的帮你解决你的这个问题,比较有名的包括mmdnn、onnx等
  除此之外,我们的目的是将深度学习模型应用到现实场景中的任务中,但是现实场景中的硬件五花八门,包含着大多数的算力不足的设备,以ARM处理处居多。那么这里面就涉及到了一个问题,即使你说你的模型有多牛逼,但是如果你的模型比较大,需要大量的算力才能跑起来,那么对于应用场景而言,你这个算法其实没有多少利用价值的。为了将使用N卡的GPU训练出来的模型成功的部署在这些低功耗的设备上面,我们通常需要对这些模型进行模型压缩和模型加速操作,比较有名的几个工具包括TensorRT、PocketFlow、TVM等

二、模型转化工具汇总

1、模型转换工具的作用

  简而言之,模型转换工具的作用是:将使用不同训练框架训练出来的模型相互联系起来,用户可以进行快速的转换,节省了大量的人力和物力花销

2、模型转换工具简介

1、MMdnn

官网链接
在这里插入图片描述  上图展示了MMdnn的主要功能。MMDNN是一套帮助用户在不同的深度学习框架之间进行交互操作的工具。例如,模型转换和可视化。转换caffe、keras、mxnet、tensorflow、cntk、pytorch onnx和coreml之间的模型。 简而言之,通过这个工具,我们可以方便的将某一个框架训练出来的模型转换成另外一个框架所支持的模型,图中基本上包含了当前所有主流的深度学习训练框架,包括Tensorflow、Pytorch、Caffe、MxNet等。除此之外,图中包含了一个关键的概念,那就是Intermediate Representation-中间表示,即这个工具首先将输入框架的模型转换为IR,然后通过IR转换成另外一个框架所支持的模型。
在这里插入图片描述
  上图展示了MMdnn工具当前所支持的模型。上面的对号表示的是你可以随意的在不同框架之间进行该模型的转换。

# 将Tensorflow的resnet_v2_152模型转换为Pytorch支持的模型
mmdownload -f tensorflow -n resnet_v2_152 -o ./
mmconvert -sf tensorflow -in imagenet_resnet_v2_152.ckpt.meta -iw imagenet_resnet_v2_152.ckpt --dstNodeName MMdnn_Output -df pytorch -om tf_resnet_to_pth.pth
  • 1
  • 2
  • 3

  上面展示了一个简单的使用案例,通过简单的两行指令就可以将Tensorlfow的模型转换为pytorch所支持的模型,是不是很方便呢!

2、 ONNX

官网链接
  ONNX是一个开放的生态系统,它使人工智能开发者能够随着项目的发展选择正确的工具。ONNX为人工智能模型提供了一种开源格式,包括深度学习和传统的ML。它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型的定义。目前,我们关注的是推断(评分)所需的能力。
  ONNX得到了广泛的支持,它可以应用到很多框架、工具和硬件中。它可以实现不同框架之间的相互转换,并加速研究到产品的速度。
在这里插入图片描述
  上图展示了ONNX所支持的一些深度学习框架,图中包括了一些主流的框架,但是并不完善,tensorflow的身影竟然没有出现。
在这里插入图片描述
  上图展示了该工具所支持的一些Converters,不仅包括深度学习框架Tensorflow、Keras等,而且包括ML工具Scikit-learn、Xgboost、LibSVM等。
在这里插入图片描述
  上图展示了该工具所支持的一些Runtimes(运行时),它更偏向模型的部署端,图中包含了多个大厂,包括NVIDIA、Qualcomm、Tencent、synppsys等。
在这里插入图片描述
  上图展示了该工具所支持的底层编译器,包括了大名鼎鼎的TVM,下面会对该工具进行详细的介绍。除此之外,包含了一些可视化网络模型的工具,NETRON工具相当好用,具体的细节请看这里。

3、 X2Paddle

官网链接
X2Paddle支持将其余深度学习框架训练得到的模型,转换至PaddlePaddle模型。一个比较小众的工具,感兴趣的请在官网查看具体的细节,这里不再祥述。

三、模型压缩和加速工具汇总

1、模型压缩加速工具的作用

  简而言之,模型压缩加速工具的作用是:将训练好的模型进行压缩和加速,然后将其部署到一些特定的设备上去,从而满足现实场景的需求

2、模型压缩加速工具简介

1、PocketFlow

官网链接
  PocketFlow是一个开源框架,可以使用最少的人力压缩和加速深度学习模型。深度学习广泛应用于计算机视觉、语音识别、自然语言翻译等各个领域。然而,深度学习模型通常计算成本很高,这限制了在计算资源有限的移动设备上的进一步应用。
PocketFlow旨在为开发人员提供一个易于使用的工具包,以提高推理效率,而不会降低或降低性能。开发人员只需要指定所需的压缩比或加速比,然后PocketFlow将自动选择适当的超参数来生成高效的压缩模型以进行部署。
在这里插入图片描述
  上图展示了PocketFlow的整个框架。该框架主要由两类算法组件组成,即学习器和超参数优化器,如上图所示。给定一个未压缩的原始模型,学习模块使用随机选择的超参数组合生成一个候选压缩模型。然后对候选模型的精度和计算效率进行评估,并将其作为反馈信号,用于确定学习模块要探索的下一个超参数组合。经过几次迭代,所有候选模型中最好的一个输出为最终的压缩模型。
在这里插入图片描述
  上图展示了该工具中所包含的压缩方法。主要包括3大类:裁剪、权重稀疏和量化。

# 对网络进行裁剪操作
./scripts/run_seven.sh nets/resnet_at_cifar10_run.py \--learner channel \--cp_prune_option uniform \--cp_uniform_preserve_ratio 0.5
# 对网络进行权重稀疏操作
./scripts/run_local.sh nets/resnet_at_cifar10_run.py \--learner weight-sparse \--ws_prune_ratio_prtl uniform \--data_disk hdfs
# 对网络进行量化操作
./scripts/run_local.sh nets/resnet_at_cifar10_run.py \--learner uniform \--uql_use_buckets \--uql_bucket_type channel \--data_disk hdfs
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

  上面分别展示了一个网络裁剪、网络权重稀疏、网络量化的实例。整个工具操作起来比较简单,用户仅仅需要确定自己需要的压缩比或者加速比即可,工具可以通过强化学习算法来帮你找到一个最优的结果。

2、TensorRT
官网链接
  Nvidia Tensorrt™是一个高性能深度学习推理平台。它包括一个深度学习推理优化器和运行时,为深度学习推理应用程序提供低延迟和高吞吐量。在推理过程中,基于Tensorrt的应用程序的执行速度比仅使用CPU的平台快40倍。使用Tensorrt,您可以优化在所有主要框架中训练的神经网络模型,高精度校准低精度,最后部署到超尺度数据中心、嵌入式或汽车产品平台。
  Tensorrt建立在Nvidia的并行编程模型CUDA上,使您能够利用CUDA-X人工智能、自主机器、高性能计算和图形中的库、开发工具和技术,优化所有深度学习框架的推理。
  Tensorrt为深度学习推理应用程序(如视频流、语音识别、推荐和自然语言处理)的生产部署提供了int8和fp16优化。降低的精度推断显著降低了应用程序延迟,这是许多实时服务、自动和嵌入式应用程序的一项要求。
在这里插入图片描述
  上图展示了TensorRT的整体框架。输入到整个tensorRT中的是一个训练好的神经网络,该工具中包含了多个优化工具,具体包括精度矫正、动态张量内存、层/张量融合、内核自动微调、多级流执行等,通过这些操作,我们可以对原始的输入模型进行快速的压缩和加速,从而满足我们的需求。但是细心的你可能注意到了该工具只适合应用在NVIDIA显卡上,在CUDA的基础上进行优化,通用性较差!!!

3、distiller

官网链接
  Distiller是一个用于神经网络压缩研究的开源python包。网络压缩可以减少神经网络的内存占用,提高其推理速度,节约能源。Distiller为原型制作和分析压缩算法提供了一个pytorch环境,如稀疏诱导法和低精度算法。

# 显示网络的稀疏度
python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_ch_regularized_dense.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=sparsity
  • 1
  • 2

在这里插入图片描述
  上图展示了使用该工具来显示某个网络的稀疏度。执行命令之后会输出一个文本表,详细说明参数张量的各种稀疏性。第一列是参数名,后面是它的形状、密集模型和稀疏模型中非零元素的数量(nnz)。下一组列显示列、行、通道、内核、过滤器和元素的稀疏度。概括起来就是元素绝对值的标准差、平均值和平均值。
在这里插入图片描述
  上图展示的是裁剪敏感性分析图。该图可以辅助你在模型压缩的过程中快速的定位到不同网络层对裁剪的敏感程度,然后有针对性的执行一些操作。

4、TVM

官网链接
  TVM是一个针对CPU、GPU和专用加速器的开放式深度学习编译器堆栈。它旨在缩小以生产力为中心的深度学习框架与以性能或效率为导向的硬件后端之间的差距。TVM提供以下主要功能:

  • 将keras、mxnet、pytorch、tensorflow、coreml、darknet中的深度学习模型编译为各种硬件后端上可部署的最小模块。
  • 自动生成和优化更多后端上的张量运算符并提高性能的基础结构。

  TVM提供两个级别的优化。执行高级操作员融合、布局转换和内存管理等任务的计算图优化。然后是张量运算符优化和代码生成层,用于优化张量运算符
在这里插入图片描述
  上图展示了TVM工具的整体框图。整个工具具有如下的优势:

  1. 其输入时任意一个深度学习框架输出的模型,即该工具不挑模型,全部通吃!!! 其输出是针对现实场景中的各种硬件,具体包括Intel的CPU/GPU、NVIDIA的GPU、ARM的CPU\GPU、树莓派、FPGA、ASCI等,即该工具也不挑部署设备,基本上全部通吃。
  2. TVM中包含了多级模型优化机制,具体包括高级的IR优化和低级的图优化。除此之外,还有一个强大的工具就autotvm,这个工具可以通过一些ML算法寻找到针对不同硬件最优的一种卷积层实现方式,从而实现进一步的压缩和加速。
  3. TVM不想TensorRT那么局限,它几乎可以很好的支持市面上所有的硬件设备,这是它的一个强大之处。主要通过LLCM来支持Intel和ARM CPU等一些设备;通过Opencl来支持ARM的MailGPU;通过CUDA来支持NVIDIA的设备;通过Metal来支持苹果的设备;通过VTA来很好的支持FPGA和ASCI(即自己设计的芯片)。
    在这里插入图片描述
  4. TVM的众多优势之一在于它对多种平台和语言的丰富支持。我们提供了框架的两个组件:包含完整优化库以生成优化机器代码的编译器堆栈和轻量级的运行时,它提供了在不同平台上部署编译模块所需的可移植性。**TVM目前支持Python和C++接口到嵌入式编译器堆栈。**我们设计了具有最大重用的框架,以便编译器堆栈的改进可以在Python和C++组件之间互换应用。我们还提供了一个轻量级运行时,它可以直接运行在诸如JavaScript、Java、Python和C++等平台上的TVM编译代码,这些平台包括Android、IOS、树莓PI和Web浏览器

TVM装载ONNX模型并执行模型优化的简单案例

import onnx
import numpy as np
import tvm
import tvm.relay as relay
from tvm.contrib.download import download_testdata

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24779.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派与STM32之间串口通信

目录 一、树莓派串口通信模块介绍 二、树莓派蓝牙、串口引脚映射对换步骤 1.启动串口 2. 禁用蓝牙(硬件串口与mini串口映射对换) 3.验证是否交换成功 三、树莓派安装mini串口调试助手 四、树莓派与电脑串口调试 五、树莓派与STM32串口调试 一、树…

【python】选择合适的机器学习模型

文章目录 1. python包:lazypredict1.1 安装lazypredict1.2 使用lazypredict 2. 选择模型3. 常用第三方库 1. python包:lazypredict lazypredict包功能:了解哪些模型在没有任何参数调整的情况下效果更好 1.1 安装lazypredict 直接用pip安装…

AI是什么?AI工具集网站大全

大家好,我是网媒智星,今天给大家总结了一些AI工具,希望能给大家提供帮助。 AI是什么? AI 是人工智能的缩写,指的是通过计算机技术和算法来实现智能的能力。我们人类的智能是基于我们的大脑所实现的,而 AI…

文心一言的魔性作图,我愣住了……

最近啊,关于智能AI的新闻,可以说是一波接着一波。 刚开始的时候是关于AI绘画工具的,一键合成小姐姐,秒变插画大佬,只需要简单的输入几行描述就可以。 后来,ChatGPT爆火全网,且在程序员圈炸开了锅…

读者问:省厅选调 和 阿里开发岗怎么选?

经常有小伙伴问编程君:程序员年龄大了,要不要转公务员? 于我而言,虽然能去个不错的互联网公司或者也可能进事业单位。但是一旦走上创业这个道路,真的就是不回路! 很多时候别人问我如何做选择? 我…

“快跑”一个月后,我们上手实测了一把 360 智脑大模型!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 一个多月前,360 集团官方正式宣布了基于 360 GPT 大模型开发的 360 智脑的到来。不过,彼时对于这款 AIGC 产品,周鸿祎曾评价道:360 AI 就像是个“孩子”&…

大厂技术高管如何融入创业公司

来自互联网公司技术高管的亲身经历与感悟 作者 | 日之崖 责编 | 朱珂欣 出品 | 思辨致知(ID:gh_66c6f63fe6b7) 我从 19 年 9 月从阿里巴巴离开,有幸加入了一家高速发展的创业公司,较好的完成了团队融入&#xff…

ChatGPT爆火后,怎样跳脱算力困局?

英特尔7大算力神器助力极致算力。 “请代替基金经理写一段年终总结”,“如何评价春节档电影大混战”,“请写出一段爬取网页内容的程序”……诸如此类问题,OpenAI开发的ChatGPT都可以给出一段“中肯”的回答。 2023年开年,全球AI领…

可能被ChatGPT取代10大高危职位里,有没有你...

来自:新智元 编辑:David 【导读】ChatGPT一出,很多人害怕自己的工作会被AI取代。最近,有外媒盘点了最可能被ChatGPT取代10大高危职位。 进NLP群—>加入NLP交流群 自从去年11月发布以来,OpenAI的ChatGPT已经被用来…

【动手学深度学习】(task123)注意力机制剖析

note 将注意力汇聚的输出计算可以作为值的加权平均,选择不同的注意力评分函数会带来不同的注意力汇聚操作。当查询和键是不同长度的矢量时,可以使用可加性注意力评分函数。当它们的长度相同时,使用缩放的“点-积”注意力评分函数…

普通人应该怎么赚钱,下班后可在家操作的四个兼职副业分享

大家好,我是蝶衣王的小编 不少朋友发觉,单靠薪水好像已经很难再存下钱了,甚至有时候还不够一个月的开销。实际上,如果你想要提升月收益,你可以选择发展副业。那发展什么副业才能赚钱呢 有小伙伴要问:我要…

疫情期间谁干谁赚钱的三个小副业,普通人也能干,基本不用你投资

一切生意的本质,都是低买高卖,只是有时,这个利差来自货物,有时利差来自服务而已。 疫情过后,三个生意千万不要干,谁干谁倒闭,天王老子救不了你。还有三个生意,谁干谁发财&#xff0…

有稳定工作,千万不要裸辞摆地摊

千万别因为看抖音看视频看多了,听信别人说摆摊的上万的,那都搏流量和收徒用的,不过也有人赚的,要付出很多时间的那种,哈哈! 五月份从一家百人规模互联网公司设计岗裸辞,干起来摆地摊&#xff0c…

工作只能解决温饱,副业才是你的未来

欢迎关注勤于奋、每天12点准时更新国外LEAD相关技术 今天这个标题,有几个人理解? 本来这个标题都取好了,而且也想跟大家分享一些知识,结果突然我QQ被强制下线,原来是被举报了,我真的是服了。 真的把我吓了一…

非常适合金融人的副业,不用坐班,时间自由!

最近在论坛上看到一个测试,特扎心: 以下三种情况,哪个让你最绝望? ❶ 月薪4500,花呗欠了10000 ❷ 被领导骂到哭,因为没钱不敢裸职 ❸ 租房子的中介公司突然倒闭,房东逼你搬出去,…

该怎么选择副业,三条建议形成自己的副业思维

受经济环境的影响,许多年轻人觉得原来稳定的工作不那么稳定,看着周围的朋友因为企业破产和失业,生活变得没有信心,也想找到自己的副业,在紧急情况下赚更多的钱。所以,年轻人在选择副业时也面临着很多困惑&a…

辞职文案火了,程序员的辞职理由要命不要钱。

今日刷微博,一位在丽江乞讨的姑娘火了,因为她的乞讨理由是,“本人美貌如花,所以不想上班,在此乞讨”…… 敢用这么奇葩的乞讨理由,这位姑娘背后的真实目的,我们暂按下不表。不过不想上班的理由有…

微信为什么使用 SQLite 保存聊天记录?

概要 SQLite 是一个被大家低估的数据库,但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上,SQLite 是一个非常可靠的数据库,它可以处理 TB 级的数据,但它没有网络层。接下来,本文将与大家共同探讨 SQLite 在…

Linux找回用户密码

Linux中有两种用户模式,root用户和普通用户,这两种方法找回密码的方式各不相同,我们来分别在两种用户模式下完成找回密码的任务。 一.root用户找回密码 Linux拥有7个运行级别(0:关机、1:单用户、2&#xf…

Postgresql忘记密码,如何重置密码

一、前言 系统:windows系统 64位 Postgresql 版本:Postgresql 14 今天想测试一个PostgresSQL语法的 SQL,但是打开PostgresSQL之后沉默了。密码是什么? 想来当初知识安装随便玩一下,也没有太留意记一下密码,…