深度学习编译中间件之NNVM(一)介绍

2023-10-29 05:08

本文主要是介绍深度学习编译中间件之NNVM(一)介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为参考文档

  1. https://github.com/dmlc/nnvm
  2. https://github.com/dmlc/tvm
  3. https://baijiahao.baidu.com/s?id=1580600243200331182 陈天奇团队发布NNVM编译器,性能优于MXNet
  4. https://mp.weixin.qq.com/s/CHUZX92tERidKq-y3EMTfQ NNVM 编译器导论:用于AI框架的一种新式端到端编译器
  5. http://dataunion.org/31598.html 如何使用CNN推理机在IoT设备上实现深度学习
  6. https://zhuanlan.zhihu.com/p/32711259 从NNVM和ONNX看AI芯片的基础运算算子

综述

NNVM是亚马逊和华盛顿大学合作发布的开源端到端深度学习编译器,支持将包括mxnet,pytorch,caffe2,coreml等在内的深度学习模型编译部署到硬件上并提供多级别联合优化。速度更快,部署更加轻量级。支持包括树莓派FPGA板卡,服务器和各种移动式设备和cuda,opencl,metal,javascript以及其它各种后端。

NNVM compiler可以将前端框架中的工作负载直接编译到硬件后端,能在高层图中间表示(IR)中表示和优化普通的深度学习工作负载,也能为不同的硬件后端转换计算图最小化内存占用优化数据分布融合计算模式

NNVM编译器基于此前发布的TVM堆栈中的两个组件:NNVM用于生成计算图,TVM用于映射张量运算

  • NNVM:将不同框架的工作负载表示为标准化计算图,然后将这些高级图转换为执行图

  • TVM:提供一种独立于硬件的特定域语言,以简化张量索引层次中的运算符实现。另外,TVM还支持多线程、平铺、缓存等。

TVM软件堆栈

这里写图片描述

上图基本上展示了TVM软件堆栈的功能构成:

  • Computation Graph Optimization
  • Tensor Compute Description
  • Schedule Space and Optimzation

值得关注的是TVM软件堆栈并不是一个完全重新创建的应用软件,作者本人也提供到TVM参考和继承的软件,其中提到了TOPI、HalideIR和Loopy,如果你的需求不是仅仅使用TVM,而是定制TVM来满足自己的需求的话了解TVM的软件继承关系是非常有必要的。

TOPI(TVM Operator Inventory)

TOPI即TVM操作符清单,一个TVM操作符收集库,是为了让TVM可以同时手工定制自动优化计算Kernel函数。具体的目标为:

  • 提供操作符声明的语法糖
  • 提供创建融合操作符的基础功能
  • 提供不同硬件下的通用调度器
文件组织
  • include:C++库,只包含头文件
  • python:TOPI的python库
  • recipe:包含一些有用的操作符示例集合
指导方针
  • 使用numpy-style操作符命名约定
  • 尽可能分离操作符声明和调度
  • 慎重地维护需求
  • 注意数据布局

未完待续…

这篇关于深度学习编译中间件之NNVM(一)介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/298417

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio