tvm的一个大体介绍

article/2025/10/3 19:28:01

TVM的一个大体介绍

  • 导入模型
  • 模型转换到relay
  • 转换到 _tensor_ _expression_ (TE)
  • 自动优化调度
  • 模型编译
  • 转换到TIR(tensor IR)
  • 编译器编译到机器码

tvm从模型到机器码的流图

导入模型

可以支持从tf,pytorch,或者onnx框架中导入模型。

模型转换到relay

上述框架中产生的模型可以转换到tvm的relay上,relay是一个高级模型描述语言和IR,能做的东西还挺多:

  • 传统的数据流表述
  • 泛函表达,可以绑定出可微分变成语言
  • 两者的混合使用
    同时,relay也会针对模型做些图级别的优化。

转换到 tensor expression (TE)

通过relay做过高级优化后,relay会用FuseOps pass去把模型分解成一个个子图,并且把子图转化到低阶表达TE中去。TE已经是一个描述张量计算的dsl。TE阶段也会提供一些调度原语去做更底层的循环优化,比如loop tile,vectorization,并行,loop unroll和loop fusion。tvm中还封装了一些常见的张量计算像conv2d,transpose这样。(tvm中叫这些为TOPI)

自动优化调度

在tvm中,可以使用 AutoTVMAutoScheduler 去搜索出一个张量计算的最佳优化调度方式。每个调度(schedule)会针对算子或者张量运算指定一种低级循环优化。自动优化模块会找出一个最佳调度方案并且把它和cost model中的方案或者片上的实际测量作对比。自动优化共有两种方式:

  • AutoTVM:一个模板化的自动优化模块,通过运行搜索算法找到在用户定义模板内的最佳的优化组合方案。对于常见算子,TOPI会提供一套优化调度的搜索空间出来。
  • AutoScheduler(a.k.a Ansor):一个非模板化的自动优化模块。他并不需要一些预定义的调度模板,它会通过分析计算定义自动生成搜索空间,并且在空间内搜索最佳优化调度方案。

模型编译

选择最优的模型编译配置。通过上一步的优化调度搜索,各个子图最佳的优化方案会保存在一份JSON文件中。

转换到TIR(tensor IR)

TIR就是TVM能玩的最底层的IR。获取到最佳的优化调度空间后,TE的子图会被转化(lower)到TIR上面并且会执行更底层的循环优化。随后,优化后的TIR会被转换到目标平台的编译器(codegen)上。最后由编译器产生机器码,codegen包含以下编译器后端:

  • LLVM:支持X86,arm,AMDPGU,nvptx
  • NVCC:nv的编译器
  • 自定义编译器(BYOC)框架定义的嵌入式平台

编译器编译到机器码

最后会由编译器把code编译成机器码到目标平台运行。

综上,tvm可以把一个model编译成为一个机器码(linkable object),通过轻量级的runtime接口动态加在动态链接库。基本上可以理解为把一个深度学习模型转换成平台的运行库。


http://chatgpt.dhexx.cn/article/617dbwEg.shtml

相关文章

TVM 架构设计

TVM 架构设计 本文面向希望了解TVM体系结构和/或,积极参与项目开发的开发人员。 主要内容如下: 示例编译流程,概述了TVM将模型的高级概念,转换为可部署模块的步骤。 逻辑架构组件部分,描述逻辑组件。针对每个逻辑组…

TVM的安装过程

最近在看深度学习编译器相关的工作,其中FlexTensor给我留下了比较深刻的印象,加上这项工作是开源的,所以想看看这份工作的源码。首先是怎么把工程跑起来,FlexTensor倚仗TVM做代码生成,所以首先得安装TVM。 首先给出官…

TVM系列 - 图优化 - 算子融合

TVM系列 - 图优化 - 算子融合 图优化综述 声明一下,本文所有的理解都是基于个人理解。 图优化算是一个推理框架前端比较成熟的操作了,一般来说,针对模型做图优化有两个目的(对于通用框架来说,就加速减少计算一个目的…

TVM 从入门到精通 | 安装 TVM (Part 2)

本文首发自:公众号 HyperAI超神经 内容一览:TVM 共有三种安装方法:从源码安装、使用 Docker 镜像安装和 NNPACK Contrib 安装。本文讲解如何通过 Docker 镜像 和 NNPACK Contrib 安装。 关键词:TVM Docker 基础教程 欢迎回…

初识 TVM

如有图像或公式显示错误,可以访问我的个人博客:https://www.wanglichun.tech/2019/11/15/tvm/ 笔者也是最近偶然的机会才开始接触TVM,使用过后发现,经过auto-tuning后的TVM模型在速度是竟然超过了TensorRT,并且笔者使用的是MXNet…

TVM(端到端深度学习编译器)简介

TVM-算子编译器前后端 前言TVM出现背景TVM是什么为什么用TVM,TVM解决了什么当前问题:TVM解决了 TVM如何解决具体实现手段如何设计搜索空间Search Space优化策略图优化 - 算子融合图优化 - Layout Transform张量优化 - 矩阵乘法 GEMM张量优化 - 调度算法张…

tvm学习笔记(五):tvm工作原理

一、总体流程: TVM的工作流程:首先,将网络表示成统一的表示形式(Intermediate Representation),并进行一些可重用的图优化;然后,利用不同的后端生成对应设备代码,如图1所…

TVM系列 - 量化

TVM系列 - 量化 TVM量化原理TVM量化现状TVM量化原理介绍TVM量化代码解析 TVM量化原理 关于量化的方式其实已经有足够的文章去了解目前最主流的两种:离线量化及训练时量化(大家应该能理解,其实就是伪量化),而tvm的作者…

TVM-初识TVM

目录 TVM简介那么TVM是什么?TVM做了哪些工作 TVM简介 随着深度学习的发展,深度学习的能力可以说是越来越强大,识别率节节攀升,与此同时,深度学习框架也变得越来越多,目前比较主流的深度学习框架包括&#…

【TVM系列二】TVM介绍

文章同步更新在公众号 AIPlayer,欢迎扫码关注,共同进步 目录 一、TVM的工作流程 1、整体流程 2、关键数据结构 3、Transformations 4、搜索空间和基于机器学习的转换 5、目标代码转化 二、逻辑架构组件 三、运行TVM实例 1、交叉编译runtime 2、…

TVM:简介

TVM:简介概述 Apache TVM 是一个用于 CPU、GPU 和机器学习加速器的开源机器学习编译器框架。它旨在使机器学习工程师能够在任何硬件后端上高效地优化和运行计算。本教程的目的是通过定义和演示关键概念,引导您了解 TVM 的所有主要功能。新用户应该能够从…

TVM简介

TVM与LLVM的架构非常相似。TVM针对不同的深度学习框架和硬件平台,实现了统一的软件栈,以尽可能高效的方式,将不同框架下的深度学习模型部署到硬件平台上。 如果从编译器的视角来看待如何解决这个问题,各种框架写的网络可以根据特…

TVM概述

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

TVM[2] —— TVM简介和发展

TVM[2] —— TVM简介和发展 文章目录 TVM[2] —— TVM简介和发展1. TVM 简介1.1 是什么1.2 做什么1.3 基本步骤 2. TVM 的发展2.1 现状——四类抽象2.2 问题——两向boundary2.3 未来——从箭头到圈2.4 New Capabilities with Unity 下期预告:3. TVM 技术栈全解析&a…

TVM 学习指南(个人版)

文章目录 0x0. 前言0x1. 前端0x1.1 Tensor IR(TIR)0x1.2 了解tvm.ir基础设施0x1.3 Relay IR0x1.4 RelaxD0:数据流块作为第一优先级的构造D1:形状推导作为第一优先级的计算D1a: match_shapeD1b. 从符号整数元组构造ShapeShape传播的方法Implications for …

一步一步解读神经网络编译器TVM(一)——一个简单的例子

TOC 前言 这是一个TVM教程系列,计划从TVM的使用说明,再到TVM的内部源码?为大家大致解析一下TVM的基本工作原理。因为TVM的中文资料比较少,也希望贡献一下自己的力量,如有描述方面的错误,请及时指出。 那啥是TVM&am…

P29 JTextArea文本域

P29 JTextArea文本域 1.概述2.代码实例3.效果演示 系统:Win10 Java:1.8.0_333 IDEA:2020.3.4 Gitee:https://gitee.com/lijinjiang01/JavaSwing 1.概述 JTextArea:文本区域。JTextArea 用来编辑多行的文本。JTextArea…

java 刷新jtextarea_Java JTextArea不能实时刷新的问题

相信JTextArea用法都了解吧, JTextArea textArea new JTextArea();生成一块空白的区域, 我的需求就是点击发送邮件按钮后,后台的执行日志能输出到textArea中。 但是我点击发送按钮的时候,由于邮件的附件要好久,界面一…

java 获得jtextarea_java JTextArea中获得光标所在行数

[java]代码库import java.awt.BorderLayout; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextAre…

java jtextarea 事件_JTextArea事件处理

[java]代码库import java.awt.*; import java.awt.event.*; import javax.swing.*; /*由于会使用到复原和事件驱动功能,因此需要将javax.swing.undo和javax.swing.event两个package包含进来 */ import javax.swing.undo.*; import javax.swing.event.*; /*JTextArea…