TVM概述

2023-11-04

TVM

TVM是陈天奇领导的一个DL加速框架项目。它处于DL框架(如tensorflow、pytorch)和硬件后端(如CUDA、OpenCL)之间,兼顾了前者的易用性和后者的执行效率。

官网:

https://tvm.apache.org/

代码:

https://github.com/apache/tvm

在这里插入图片描述

论文:

《TVM: End-to-End Optimization Stack for Deep Learning》

和同类项目的差异:

  • TFLite和ONNXRuntime只能接收特定格式的模型。而TVM这些都能接收。

  • NCNN、MACE之类的项目,一般只考虑了ARM CPU的优化,对于异构计算做的比较少。

  • TVM强化了图优化的部分,使之更类似于编译器的架构。

架构

官网:

https://tvm.apache.org/docs/arch/index.html

在这里插入图片描述

在这里插入图片描述

安装

TVM暂时不支持pip安装,pip install tvm安装的是另一个同名软件。。。

TVM Runtime

在这里插入图片描述

TVM采用C/S模式进行部署,其中在target机器上的部分,被称为TVM Runtime。

TVM Runtime的代码通常比较薄,只需要把host发过来的优化结果执行即可。

官方文档:

http://tvm.apache.org/docs/dev/runtime.html

TVM Runtime也是BYOC的重要组成部分。

BYOC:Bring Your Own Codegen

https://tvm.apache.org/2020/07/15/how-to-bring-your-own-codegen-to-tvm

How to Bring Your Own Codegen to TVM

这是中文翻译版:

https://zhuanlan.zhihu.com/p/337033822

如何在TVM上集成Codegen(上)

https://zhuanlan.zhihu.com/p/337037547

如何在TVM上集成Codegen(下)

示例:

https://github.com/antkillerfarm/antkillerfarm_crazy/blob/master/python/ml/tvm/pytorch2tvm.py

该示例包含以下内容:

1.如何导入pytorch和tflite的模型。

2.local执行和remote执行。

3.使用print(mod.astext(show_meta_data=False))可以打印相关IR的内容。meta data有的时候包含了权重,打印出来意义不大,反而导致其他有意义的部分,淹没在大量的log中,没法看了。

参考:

https://zhuanlan.zhihu.com/p/369981405

部署TVM Runtime

https://zhuanlan.zhihu.com/p/352988283

TVM学习记录——pytorch

NNVM

NNVM是一个类似于ONNX、NNEF的中间表示。

官网:

https://github.com/dmlc/nnvm

参考:

https://mp.weixin.qq.com/s/qkvX0rmEe0yQ-BhCmWAXSQ

李沐:AWS开源端到端AI框架编译器NNVM

Relay

Relay是TVM中用来替代NNVM的模块,其本身被认为是NNVM第二代。

官网:

https://tvm.apache.org/docs/arch/relay_intro.html

NNVM本质上只能描述传统的计算图,这属于Data Flow的范畴。但是现在的DL框架越来越灵活,不仅能对数据进行计算,还能对数据进行一定的控制处理,也就是所谓的Control Flow(if-else/ADT matching/递归调用)。

论文:

《The Deep Learning Compiler: A Comprehensive Survey》

参考:

https://zhuanlan.zhihu.com/p/91283238

TVM图编译器Relay简单探究

https://zhuanlan.zhihu.com/p/390087648

Relay IR与Relay Pass

https://mp.weixin.qq.com/s/Kt4xDLo-NRui8Whl0DqcSA

Data Flow和Control Flow

Pass

https://tvm.apache.org/docs/how_to/extend_tvm/use_pass_infra.html

和LLVM类似,TVM的Pass也可分为两类:

ModulePass:将整个程序视作一个单元处理的pass。

FunctionPass:以单个函数为作用域的pass, 每个函数间是相互独立的。

FunctionPass包括了Relay层的tvm.relay.transform.FunctionPass和TIR层的tvm.tir.transform.PrimFuncPass

部分pass:

  • FoldConstant: src/relay/transforms/fold_constant.cc

  • AlterOpLayout: src/relay/transforms/alter_op_layout.cc

  • Legalize: src/relay/transforms/legalize.cc

  • MergeComposite: src/relay/transforms/merge_composite.cc

参考:

https://zhuanlan.zhihu.com/p/378739411

万字长文入门TVM Pass

https://www.cnblogs.com/wujianming-110117/p/14580172.html

TVM Pass IR如何使用

https://zhuanlan.zhihu.com/p/112813859

Relay Pass in TVM

https://zhuanlan.zhihu.com/p/358437531

pass总结

Schedule Primitives

https://tvm.apache.org/docs/how_to/work_with_schedules/schedule_primitives.html

Layout

TVM默认的input layout: NCHW,kernel layout: OIHW。

Backend

python层面:

python/tvm/relay/op/contrib/ethosn.py

@register_pattern_table("ethos-n")
def pattern_table():
@tvm.ir.register_op_attr("nn.max_pool2d", "target.ethos-n")
def max_pool2d(attrs, args):

relay层面:

src/relay/backend/contrib/ethosn

TVM_REGISTER_GLOBAL("relay.ext.ethos-n").set_body_typed(CompileEthosn);

runtime层面:

src/runtime/contrib/ethosn

test:

tests/python/contrib/test_ethosn

代码分析

TVM建立了一套类型系统:

class BaseExprNode : public Object;
class BaseExpr : public ObjectRef;

根据基类,查看实际类型:

XX->checked_type()

Quantize

在这里插入图片描述

microTVM

microTVM可用于那些没有OS的单片机。

官网:

https://tvm.apache.org/docs/arch/microtvm_design.html

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

从上面的图来看,microTVM只要在单片机的main函数中启动即可,同时参数也可以放到FLASH上。

PS:这种能直接寻址的FLASH,多半是NOR FLASH。

参考:

https://zhuanlan.zhihu.com/p/337085225

TinyML-TVM是如何驯服Tiny的(上)

https://zhuanlan.zhihu.com/p/337087273

TinyML-TVM是如何驯服Tiny的(下)

参考

https://zhuanlan.zhihu.com/p/139552817

一篇关于深度学习编译器架构的综述论文

https://www.zhihu.com/question/396105855

针对神经网络的编译器和传统编译器的区别和联系是什么?

https://mp.weixin.qq.com/s/8bXwxYyNjdThlGQQ70cgWQ

TVM:端到端自动深度学习编译器,244页ppt

https://zhuanlan.zhihu.com/p/333706468

TVM学习系列blog

https://zhuanlan.zhihu.com/p/163717035

AI编译优化

https://www.zhihu.com/question/267167829

如何看待Tensor Comprehensions?与TVM有何异同?(这个问题下的答案不多,但基本都是陈天奇、贾扬清之类的大佬)

https://mp.weixin.qq.com/s/irvBbPKENiZX9G_6wh5c-Q

陈天奇等人提出TVM:深度学习自动优化代码生成器

https://mp.weixin.qq.com/s/28n8g_epHsYB0I9GVc_lww

陈天奇团队TVM重磅更新:直接在浏览器使用GPU

https://mp.weixin.qq.com/s/7JGLm-hkCZBNDLA98qvWNA

自动生成硬件优化内核:陈天奇等人发布深度学习编译器TVM

https://mp.weixin.qq.com/s/YVIvdMznb3oatIXqD5a5_A

陈天奇等人提出AutoTVM:让AI来编译优化AI系统底层算子

https://mp.weixin.qq.com/s/HquT_mKm7x_rbDGz4Voqpw

阿里巴巴最新实践:TVM+TensorFlow提高神经机器翻译性能

https://zhuanlan.zhihu.com/p/50529704

手把手带你遨游TVM

https://mp.weixin.qq.com/s/z5rsU_uAAaRxgD9YAxDkZA

陈天奇:深度学习编译技术的现状和未来

https://zhuanlan.zhihu.com/p/75203171

如何利用TVM快速实现超越Numpy(MKL)的GEMM

https://zhuanlan.zhihu.com/p/58918363

TVM: Deep Learning模型的优化编译器

https://zhuanlan.zhihu.com/p/87664838

也谈TVM和深度学习编译器

https://mp.weixin.qq.com/s/VE3CySjjS2rTpUDPnKcLTg

陈天奇最新研究:递归模型编译器CORTEX

https://zhuanlan.zhihu.com/p/358585143

深度学习编译器及TVM介绍

https://zhuanlan.zhihu.com/p/360385060

TVM中的scheduler

https://zhuanlan.zhihu.com/p/388452164

tvm or mlir?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TVM概述 的相关文章

  • TVM优化原理学习

    没有看论文 xff0c 看了b站陈天奇的视频 xff0c 还有一些博客的分析 xff0c 学习了优化原理 后续需要深入理解再看论文 TVM对于神经网络的优化主要有两部分 xff0c 计算图优化和算子优化 xff0c 下面分开说明 计算图优化
  • ubuntu20.04配置TVM环境

    官方安装教程 xff1a https tvm hyper ai docs install from source 安装环境配置信息 xff1a system xff1a ubuntu20 span class token punctuati
  • linux(ubuntu20.04)安装tvm-0.9.0+llvm+cuda/cudnn(一步到胃版)

    我是在双系统中linux上安装的 xff0c 不是Ubuntu虚拟机 xff0c 虽然两者过程基本一样 xff0c 但是在双系统上会更方便 文章目录 零 xff1a 究极大招版一 xff1a 环境准备1 1 安装gcc cmake等必要的依
  • TVM在Windows10下编译安装

    本教程记录了Windows端安装tvm的过程 xff0c 欢迎交流 教程参考 TVM Windows下全功能编译方法 xff1a 从入门到劝退 https blog csdn net znsoft article details 11503
  • TVM Windows conda 安装

    TVM Windows 安装 简介 本篇博客主要目的是帮助大家在windows平台上安装好tvm xff0c 并且可以顺利使用 因为有项目需要使用tvm xff0c 同时自己需要用windows做一些测试 xff0c 因此想要在window
  • 【从零开始学深度学习编译器】五,TVM Relay以及Pass简介

    TVM Relay以及Pass简介 0x0 介绍0x2 Relay介绍0x2 1 使用Relay建立一个计算图0x2 2 Module xff1a 支持多个函数 xff08 Graphs xff09 0x2 3 Let Binding an
  • TVM张量表达式

    Get Started with Tensor Expression TVM使用一个定义域特定张量表达式来高效地构造核 In 1 import tvm import tvm testing from tvm import te import
  • 编译 MXNet 模型

    本篇文章译自英文文档 Compile MXNet Models 作者是 Joshua Z Zhang Kazutaka Morita 更多 TVM 中文文档可访问 TVM 中文站 本文将介绍如何用 Relay 部署 MXNet 模型 首先安
  • TVM User Tutorial -- Blitz Course to TensorIR

    Author Siyuan Feng TensorIR 是一种特定领域语言 用于深度学习项目 有两个广泛的用途 在各种硬件后端上实现转换和优化程序 自动张力化程序优化的抽象 import tvm from tvm ir module imp
  • AutoSchedule和AutoTVM

    简介 AutoTVM 用户自己手写一个模版 在模版里面自己定义一下tune的参数 例如tile size等 给定一个模版 在这个模版里面去搜索参数 使得可以达到一组最好的参数使得张量计算的结果最好 但是 它是一种基于模板的方法 因此仍然需要
  • 【开发环境】Windows下搭建TVM编译器

    关于搭建TVM编译器的官方文档 Install from Source tvm 0 14 dev0 documentation apache org 1 安装Anaconda 首先我们需要安装Anaconda 因为其中包含着我们所需要的各类
  • 【TVM 学习资料】使用 Python 接口(AutoTVM)编译和优化模型

    本篇文章译自英文文档 Compiling and Optimizing a Model with the Python Interface AutoTVM 作者是 Chris Hoge 更多 TVM 中文文档可访问 TVM 中文站 TVMC
  • TVM概述

    TVM TVM是陈天奇领导的一个DL加速框架项目 它处于DL框架 如tensorflow pytorch 和硬件后端 如CUDA OpenCL 之间 兼顾了前者的易用性和后者的执行效率 官网 https tvm apache org 代码
  • 陈天奇等人提出TVM:深度学习自动优化代码生成器

    TVM 是由华盛顿大学在读博士陈天奇等人提出的深度学习自动代码生成方法 去年 8 月机器之心曾对其进行过简要介绍 该技术能自动为大多数计算硬件生成可部署优化代码 其性能可与当前最优的供应商提供的优化计算库相比 且可以适应新型专用加速器后端
  • TVM:源码编译安装

    TVM Linux源码编译安装 笔者环境 OS Ubuntu 18 04 CMake 3 10 2 gcc 7 5 0 cuda 11 1 编译安装过程总览 本文将简介 tvm 的编译安装过程 包含两个步骤 通过C 代码构建共享库 设置相关
  • TVM编译pytorch模型

    编译PyTorch模型 加载预训练的PyTorch模型 加载测试图像 将图形导入到Relay 构建Relay 在TVM上执行可移植图形 查找同义词集名称 本文是介绍如何使用Relay部署PyTorch模型的入门教程 首先 应该安装PyTor
  • windows11安装wsl2(linux)+VScode+ miniconda+TVM+python环境部署

    在wsl上运行 TVM demo 环境配置 预备加速工具 vpn 清华镜像 第一次安装 失败 1 Windows11 D盘安装wls linux 2 安装vscode并连接到WSL2 3 wsl 安装miniconda 4 wls安装TVM
  • 深度学习编译中间件TVM之编译&安装

    参考文档 mxnet官方install手册 TVM 0 4 0官方安装指导手册 LLVM下载地址 Debian Ubuntu Linux下安装LLVM Clang编译器 开发环境介绍 操作系统版本 Ubuntu16 04 LTS 64 bi
  • TVM系列---1.开始使用Tensor Expression

    Author Tianqi Chen https docs tvm ai tutorials tensor expr get started html Tensor Expression入门 这是TVM中Tensor表达语言的入门教程 TV
  • 【tvm官网教程01】设计和架构-1

    tvm官网教程01 设计和架构 1 目的 1 编译流 1 1 关键数据结构 1 2 Transformations 1 2 1 变换的分类 1 2 2 relay transform 1 2 2 1 子函数 1 2 2 2 overall问

随机推荐

  • 刷脸支付现已引领了新一轮科技开展浪潮

    人脸验证前 平台需要采集目标对象的人像数据 经过算法提取图画中的人脸特征值 树立个人独特的生物数据库 假定您的特征值存储在数据库中 在您的付出过程中 系统将您的人脸信息放入数据库进行云比较 从而到达辨认和付出的目的 刷脸支付有多重好处 将会
  • mysql中groupby用法_详解SQL中GroupBy的用法

    GROUP BY 语句用于结合合计函数 根据一个或多个列对结果集进行分组 1 概述 Group By 从字面意义上理解就是根据 By 指定的规则对数据进行分组 所谓的分组就是将一个 数据集 划分成若干个 小区域 然后针对若干个 小区域 进行
  • Unity 简单的虚拟摇杆

    需求 点击创建一个虚拟摇杆底盘 鼠标拖拽时候上方摇杆会跟随鼠标方向移动 并且不会超出摇杆盘范围 摇杆功能另外实现 UI显示 using System Collections using System Collections Generic
  • C语言---malloc函数详解

    引言 为什么使用动态内存分配 当你声明数组时 你必须用一个编译时常量指定数组的长度 但是 数组的长度常常在运行时才知道 这是由于它所需要的内存空间取决于输入数据 例如 一个用于计算学生等级和平均分的程序可能需要存储一个班级所有学生的数据 但
  • 新版支付宝开放平台 手机网页支付 整个流程

    新版支付宝开放平台 手机网页支付 整个流程 在支付宝签约如下产品 然后 使用支付宝最新的签名工具生成商户的私钥和公钥 值得注意的是 如果是 net c 请选择PKCS1 我只采用1024密钥长度 然后来到支付宝的账号管理中心 在如图的开放平
  • 搭建和运行hyperledger fabric1.0alpha版本过程分析

    搭建和运行hyperledger fabric1 0alpha版本过程分析 目录 1 主要步骤 1 安装docker和docker compose 2 下载相关镜像并tag重命名 3 安装git 并git下载fabric源码 4 安装go环
  • 解决scala.collection.mutable.WrappedArray$ofRef cannot be cast to [D的问题(Spark)

    Caused by java lang ClassCastException scala collection mutable WrappedArray ofRef cannot be cast to D at cn doitedu ml
  • A callback was made on a garbage collected delegate of type...

    最近在调试海康SDK时 遇到了标题写的这个错误 A callback was made on a garbage collected delegate of type XXX CHCNetSDK RemoteConfigCallback I
  • 游戏开发unity编辑器扩展知识系列:自定义Hierarchy右键菜单

    参考 https blog csdn net weixin 43994445 article details 107305810 总结 重写OnHierarchyGUI
  • Yolo模型部署的两种方法

    目录 1 需求描述 第1种 封装darknet框架 第2种 weights模型转pb模型 2 weights模型转pb模型方法 3 重要备注 1 关于预处理 2 关于模型输入输出的数据结构和节点名称 3 关于NMS 1 需求描述 工程部署使
  • C++ 成员运算符

    点 运算符和 gt 箭头 运算符用于引用类 结构和共用体的成员 点运算符应用于实际的对象 箭头运算符与一个指向对象的指针一起使用 例如 假设有下面的结构 struct Employee char first name 16 int age
  • GitHack & GitHacker

    写这个的原因是在做CTFHub的Git泄露题目时发现GitHack并不能正常将服务器中的 git 文件正常保存下来 问了问工作室的好哥哥 告诉我GitHack就是有这个问题 使用GitHacker即可 于是记录下此问题 GitHack 下载
  • Docker环境搭建以及相关指令

    一 实施背景 因项目中可能使用的opencv版本比较高 ubuntu18 04中ros自带opencv版本低 3 0 直接使用opencv编译比较麻烦 时间消耗太长 主要是依赖ros环境 所以直接使用docker安装ubuntu20 04的
  • python应用-输入三个数,输出其最大值

    输入三个数 输出其最大值 Author 罗万财 Date 2017 7 6 a int input a b int input b c int input c my max a gt b and a or b my max c gt my
  • Maven pom.xml <packaging>pom</packaging> 引发的问题

    文章目录 Maven pom xml pom 引发的问题 Maven pom xml pom 引发的问题 有一个项目在别人那运行的非常好 有一天 我开开心心的把这个项目作为一个新 module 导入到了当前的工程中 然后启动项目 发现启动端
  • su incorrect password问题 su无法切换用户问题 以及权限s、t、i、a补充

    摘要 最近遇到一个问题 在测试环境上发现使用su无法切换账户 但是这两个账户都是可以登录的 于是就开始百度 找到了解决问题的办法 解决方案如下 第一步 使用root用户登录系统 或者有root权限的用户登录 第二步 查看文件权限 例如 ll
  • win10系统QQ音乐安装包无法打开解决方法!

    在QQ音乐官网上下载了QQ音乐的安装包 结果执行安装包程序后无法打开安装 右键管理员模式也无法打开 试了很多方法也不行 最后听取建议卸载了电脑上的火绒安全后重启电脑 再从官网重新下载QQ音乐安装包就可执行 听说网易的有道云笔记和腾讯视频等类
  • python requests编码的问题_Requests 库编码问题及引出的 Python 编码问题

    Requests 编码 在使用 requests 访问微信接口的时候 requests 只根据 http headers 的信息来设置编码集 文档如下 response text Content of the response in uni
  • Qt_自定义控件

    1 自定义控件的步骤 一般先在类的私有属性中添加控件对象 然后在该类的构造函数中添加布局 connect函数等 若是指针类型 那构造函数中要new 就不用再setParent 若一般类型 那构造函数中要setParent 让控件显示在界面上
  • TVM概述

    TVM TVM是陈天奇领导的一个DL加速框架项目 它处于DL框架 如tensorflow pytorch 和硬件后端 如CUDA OpenCL 之间 兼顾了前者的易用性和后者的执行效率 官网 https tvm apache org 代码