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

article/2025/10/3 2:59:36

TVM-算子编译器前后端

  • 前言
  • TVM
    • 出现背景
    • TVM是什么
    • 为什么用TVM,TVM解决了什么
      • 当前问题:
      • TVM解决了
    • TVM如何解决
      • 具体实现手段
      • 如何设计搜索空间Search Space
      • 优化策略
        • 图优化 - 算子融合
        • 图优化 - Layout Transform
        • 张量优化 - 矩阵乘法 GEMM
        • 张量优化 - 调度算法
        • 张量优化 - 搜索空间
    • 性能对比
    • 挑战 && TVM能做的
  • VTA(Versatile Tensor Accelerator)
  • reference

前言

深度学习high level已经内卷,
那么深度学习+编译器呢?

在此向陈天奇大佬致敬。

注:本文为博主的学习笔记,所用的图都是截取的,侵权联系删。


TVM

出现背景

传统深度学习框架:
在这里插入图片描述
对上图的补充说明:

  1. Graph IR:几层的Conv2d, Relu
  2. Operators: 比如矩阵乘法

TVM栈如下图:
在这里插入图片描述

把Operators换成了Tensor Expr, 生成代码后交给LLVM,CUDA编译器。即,通过编译的方式去解决,优点是通用性强,可部署到任何有编译器的环境中(比如手机、汽车)。

AutoTVM:是learning based optimization, 用机器学习去优化的ML编译器

在这里插入图片描述
有了Tensor Expression, TVM会去声明一个计算应该怎么做,然后再通过Schedule调度优化,之后就可以得到结果。
因此不依赖于计算库。
当有新算子时,对于TVM只是新加了Schedule,对此新算子进行适配对于TVM而言很高效。

TVM是什么

深度学习代码自动生成方法,自动的为各种硬件生成可部署的优化代码。

TVM是由华盛顿大学在读博士陈天奇等人提出的深度学习自动代码生成方法,该技术能自动为大多数计算硬件生成可部署优化代码,其性能可与当前最优的供应商提供的优化计算库相比,且可以适应新型专用加速器后端

TVM:End to End learning-based deep learning compiler

在这里插入图片描述

intermediate representation (IR).

注:上图中的VTA,会在本文的后面介绍

为什么用TVM,TVM解决了什么

在这里插入图片描述

当前问题:

若针对不同的硬件去设计算子,

  1. 不同的硬件用自己专有的一套库(比如Nvidia用cuDNN)去设计算子,
  2. 当需要组合或优化算子时,如上图把 分红+绿色 => 蓝色 时,现在库中没有此蓝色算子,就需要联系厂商或只能手写了
    那么工作量很大。
    尤其是当算子不断扩展,硬件不断更新变多时,此问题很大。

TVM解决了

TVM尝试解决底层代码自动生成的问题。

TVM如何解决

基于机器学习的程序优化器

在这里插入图片描述

具体实现手段

把算子用 Tensor Expression 表示
在这里插入图片描述
上面的搜索空间,需要补充一下:
在这里插入图片描述

对搜索空间的更新手段:
在这里插入图片描述上图中的c是IR。
而f(x) 理解为cost。
IR有对应的cost。
通过不断迭代优化,最终可对某个Expression针对某个硬件得到较优的IR。

如何设计搜索空间Search Space

基本目标:把相同的Tensor Expression 映射到不同的硬件上。

对于cpu、gpu而言已经有了一些经验,那么关键是如何针对TPU去设计SS.

说到TPU,那么需要先了解下compute primitives:

比如intel和ARM可以支持vector级别的计算即在一个寄存器中一次读多个浮点数然后运算,优点是加速,当然代价是我们需要设计出program去支持这种级别的计算。
而NPU/TPU的指令都是tensor级别的,可以直接做矩阵乘法或矩阵向量乘法。

在这里插入图片描述
挑战是:如何设计出一个系统,可以支持那么多的张量指令。
这里引入一个张量化Tensorization的概念

在这里插入图片描述如上图,希望:不仅仅Tensor Expression去表示高层的计算,也可以表示底层的硬件本身的特性。即,张量化的过程是:同时揭露高层张量表达式 和 底层硬件的特性描述,来把高层的表示映射到底层硬件所可以支持的指令上。

至此,使得TVM可以支持cpu、gpu、tpu等等

优化策略

图优化 - 算子融合

在这里插入图片描述
合成一个算子后,可以用cache,提高cache命中率(即尽可能从cache读取,而非从主存中读取)。

图优化 - Layout Transform

在这里插入图片描述

张量优化 - 矩阵乘法 GEMM

在这里插入图片描述

张量优化 - 调度算法

在这里插入图片描述上图箭头右方的代码是优化后的代码。

Schedule不会带来正确性的问题,只是性能上的优化。

张量优化 - 搜索空间

在这里插入图片描述

上图中的搜索空间大小是334.
[16,32,64], [16, 32, 64], [1,2,4,8]

性能对比

在这里插入图片描述

挑战 && TVM能做的

在这里插入图片描述


VTA(Versatile Tensor Accelerator)

VTA不仅仅是一个独立的加速器,它其实是一个端到端的解决方案,包含了驱动程序、JIT运行时以及基于TVM的优化编译器栈。

端(AI框架)到端(硬件)的解决方案;
high level的加速,图优化器,tensor优化器;

在这里插入图片描述

目标:
simple HardWare, smart Software.
硬件更加细粒度,高自由;对软件有更高的要求。
比如,内存使用。
cpu不需要对内存进行管理。
gpu需要对shared Mem进行管理使用。

自动代码生成:
可以建立搜索空间存储手动的优质代码,然后从此空间里拿代码为自动代码生成服务。

reference

https://www.bilibili.com/video/BV1kJ411X72Y?from=search&seid=13643575601862258075
https://www.bilibili.com/video/BV1T5411W7o8


http://chatgpt.dhexx.cn/article/0SaXjHNX.shtml

相关文章

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…

JTextArea用法

JTextArea用法 import java.awt.Color; import java.awt.Font; import java.awt.Point; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JFrame; import javax.swing.Imag…

7、Java Swing JTextArea:文本域组件。 JScrollPane:滚动窗口

文本域与文本框的最大区别就是文本域允许用户输入多行文本信息。在 Swing 中使用 JTextArea 类实现一个文本域, JTextArea常用构造方法如下: JTextArea()----创建一个默认的文本域。JTextArea(int rows,int columns)----创建一个具有指定行数和列数的文…

Swing014——JTextArea:文本域组件

一、API简介 二、实例 package component;import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; impor…

AUC和ROC

AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于yx这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器…

如何理解西瓜书中AUC和Lrank

首先AUC的定义就是ROC曲线的面积。这是西瓜书上给的定义式子 很容易看出是微积分的思想。 为什么说AUC越大ROC越理想呢?首先思考一下ROC的定义是什么,从定义入手一切都很简单。只不过是概念多了可能会把你给绕糊涂了。ROC曲线是这样画出来的&#xff1a…

模型评估指标AUC

模型评估指标AUC 、 AUC(Area Under Curve)被定义为ROC曲线下与坐标轴围成的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于yx这条直线的上方,所以AUC的取值范围在0.5和1之间。AUC越接近1.0,检测方法真实…