NNVM AI框架编译器
NNVM AI框架编译器
深度学习已变得无处不在且不可或缺。看到对在多种平台(例如手机,GPU,IoT设备和专用加速器)上部署深度学习工作负载的需求不断增长。TVM堆栈弥合深度学习框架与面向性能或效率的硬件后端之间的鸿沟。TVM堆栈使为深度学习框架轻松构建端到端编译变得容易。拥有适用于所有框架的统一解决方案更好。
NNVM编译器是一种开放式深度学习编译器,用于将前端框架工作负载直接编译到硬件后端。使用TVM堆栈中的两级中间表示(IR)来构建。可以参考原始的TVM公告,以获取有关TVM堆栈的更多技术细节。借助TVM堆栈,NNVM编译器可以:
- 在高级图IR中表示并优化常见的深度学习工作负载
- 转换计算图以最大程度地减少内存利用率,优化数据布局并融合不同硬件后端的计算模式。
- 提出从前端深度学习框架到裸机硬件的端到端编译管道。

NNVM编译器可以直接从深度学习框架(例如Apache MXNet)中获取模型。支持模型交换格式,例如ONNX和CoreML。ONNX支持使NNVM能够从PyTorch,Caffe2和CNTK编译深度学习模型。CoreML前端支持将CoreML模型部署到非iOS设备。

优化与部署分离

NNVM编译器应用图级和张量级优化,并共同优化它们以获得最佳性能。采用与现有深度学习框架不同的方法,后者将图形优化与部署运行时打包在一起。NNVM编译器采用了编译器的传统知识,将优化与实际部署运行时分开。这种方法提供了实质性的优化,但仍使运行时轻量级。编译后的模块仅取决于最小的TVM运行时,部署在Raspberry Pi或移动设备上时仅需300KB左右。
性能
NNVM编译器仍在积极开发中,可以期待会有更多的改进,但是已经开始看到令人鼓舞的结果。对它的性能进行了基准测试,并在两种典型的硬件配置上将其与Apache MXNet进行了比较:Raspberry PI上的ARM CPU和AWS上的Nvidia GPU。尽管这两款芯片在架构上存在根本差异,但可以使用相同的基础架构,只需要更改每种硬件的调度即可。
Nvidia GPU
GPU基准和调度将NNVM编译器与Apache MXNet与CUDA8和cuDNN7作为Nvidia K80的后端进行了比较。这是一个非常强大的基准,因为Apache MXNet会打开自动调整功能,以从CuDNN中选择最佳内核。使用了MXNet中优化的深度智能内核来优化MobileNet工作负载。


可以看出,NNVM编译器生成的代码胜过K80上的Apache MXNet。这些改进归因于联合图级别和内核级别的优化。值得注意的是,NNVM编译器可自行生成所有优化的GPU内核,而无需依赖诸如CuDNN之类的外部库。
树莓派3b
Rasberry Pi编译堆栈将NNVM编译器与带有OpenBLAS和NNPack的Apache MXNet进行了比较。探索了使MXNet发挥最佳性能的设置:为3x3卷积打开了NNPACK中的Winograd卷积,启用了多线程,并禁用了其他调度程序线程(因此,所有线程都被NNPack使用)。
可以看出,在ResNet18上,NNVM编译器生成的代码快两倍。MobileNet上的差距主要是由于现有CPU DNN库中缺乏深度卷积。NNVM编译器利用直接直接生成有效的ARM代码的优势。
在构建NNVM编译器时,包含以下项目内容。
- Theano:可能是最早的深度学习编译器
- Halide:TVM使用HalideIR作为数据结构,以简化数学运算和降低 low level lowering.。HalideIR衍生自Halide。当在TVM中实施降低流程the lowering pipeline时,参考了Halide结构。
- Loopy:使用整数集分析及其循环转换原语。
NNVM AI框架编译器的更多相关文章
- NNVM Compiler,AI框架的开放式编译器
NNVM Compiler,AI框架的开放式编译器 深度学习已变得无处不在且不可或缺.在多种平台(例如手机,GPU,IoT设备和专用加速器)上部署深度学习工作负载的需求不断增长.宣布了TVM堆栈,以弥 ...
- AI框架精要:设计思想
AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...
- 中国人工智能AI框架自主研发
中国人工智能AI框架自主研发 中国AI界争相构建AI开源框架的背后,技术和业务层面的考量因素当然重要,但也不应忽视国家层面的政策支持.对于AI基础设施的建设,中国政府在<新一代人工智能发展规划& ...
- AI框架中图层IR的分析
摘要:本文重点分析一下AI框架对IR有什么特殊的需求.业界有什么样的方案以及MindSpore的一些思考. 本文分享自华为云社区<MindSpore技术专栏 | AI框架中图层IR的分析> ...
- 昇思MindSpore全场景AI框架 1.6版本,更高的开发效率,更好地服务开发者
摘要:本文带大家快速浏览昇思MindSpore全场景AI框架1.6版本的关键特性. 全新的昇思MindSpore全场景AI框架1.6版本已发布,此版本中昇思MindSpore全场景AI框架易用性不断改 ...
- 针对深度学习(神经网络)的AI框架调研
针对深度学习(神经网络)的AI框架调研 在我们的AI安全引擎中未来会使用深度学习(神经网络),后续将引入AI芯片,因此重点看了下业界AI芯片厂商和对应芯片的AI框架,包括Intel(MKL CPU). ...
- 在windows上极简安装GPU版AI框架(Tensorflow、Pytorch)
在windows上极简安装GPU版AI框架 如果我们想在windows系统上安装GPU版本的AI框架,比如GPU版本的tesnorflow,通常我们会看到类似下面的安装教程 官方版本 安装CUDA 安 ...
- AI框架类FAQ
AI框架类FAQ 数据处理 问题:如何在训练过程中高效读取数量很大的数据集? 答复:当训练时使用的数据集数据量较大或者预处理逻辑复杂时,如果串行地进行数据读取,数据读取往往会成为训练效率的瓶颈.这种情 ...
- AI框架外部用户贡献代码
AI框架外部用户贡献代码 概述 飞桨是百度自主研发的一款开源的深度学习框架,是主流深度学习框架中首个完全国产化的产品,已经在农业.医疗.林业.科研.服务等领域成功应用.无论是已入职场的深度学习从业者. ...
随机推荐
- 5-tcp套接字服务端编程
import socket 1.创建套接字 sockfd= socket.socket(socket_family = AF_INIT,socket_type=SOCK_STREAM,proto) 功 ...
- win10 添加全局快捷键
前言 好久没写博客了,今天水一下 如何在win10 下添加一个全局唤醒的快捷键(打开截图软件) 步骤 win + Q 输入 管理工具 添加快捷方式 这里没有管理员权限,可以直接把创建好的 快捷方式 粘 ...
- 给HTML5 Video 设置多语言字幕文件
现在各种支持HTML5的浏览器都能够播放html5视频了,但是对于字幕的支持却很少,我们期待像DVD那样强大的字幕. 往往我们还不得不通过js来做,着实是一件痛苦的事情. 现在IE10率先对HTML5 ...
- Python socket(TCP阻塞模式)基础程式
前置知识:Python基础语法,socket库 tips: 1. 默认HOST_IP:127.0.0.1 2. 默认HOST_PORT:7676 参考代码: 1. 客户端程式 #!/usr/bin/e ...
- DVWA之File Inclusion
File Inclusion File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),req ...
- 查找和定位Android应用的按钮点击事件的代码位置基于Xposed Hook实现
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80956455 在进行Android程序的逆向分析的时候,经常需要通过Androi ...
- POJ3687拓扑排序+贪心
题意: 给你n个求,他们的重量是1-n(并不是说1号求的重量是1...),然后给你m组关系a,b,表示a的重量小于b的重量,然后让你输出满足要求的前提下每个球的重量,要求字典序最小. 思路 ...
- Markdown修改字体颜色
在写blog时,想高亮某些字,但是发现markdown更改字体颜色不像word里那么方便,于是查了一下,要用一下代码进行更改字体颜色,还可以更改字体大小,还有字体格式 <font 更改语法> ...
- c语言编程学习之字符串
字符串字面量与字符变量 1.字符串字面量 字符串字面量是一对双引号括起来的字符序列.当c语言编译器在程序中遇到长度为n的字符串字面量时,它会为字符串字面量分配长度为n+1的内存空间.这块内存空间用来存 ...
- Java 反编译工具哪家强?对比分析瞧一瞧
前言 Java 反编译,一听可能觉得高深莫测,其实反编译并不是什么特别高级的操作,Java 对于 Class 字节码文件的生成有着严格的要求,如果你非常熟悉 Java 虚拟机规范,了解 Class 字 ...