Tvm一些基本技术

一、总体流程:

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

 图1 tvm 工作流程

首先,将不同的框架下的模型载入,并使用NNVM将模型转换成中间表示的计算图,并对图进行优化,如算子融合、减枝、图变换等;然后,TVM对张量运算进行优化,TVM将代码的调度和计算分开(计算:定义需要进行的运算,调度:具体如何来进行运算);最后,使用不同的后端,来生成对应设备代码,如图1所示,使用LLVM生成x86,ARM和Javescript/WASM系统代码,OpenCL、Metal和CUDA生成对应的GPU代码,通过这种中间堆栈(IR Stack)表示的方式,实现端到端的深度学习模型优化和部署,这种方式将实现op的复杂度转移到了编译规则的复杂度。

二、优化计算图

1、算子融合(operator Fusion)

算子融合,即将多个算子组合在一起放到同一个核中,通过算子融合的方式,不需要将中间结果保存到全局内存,进而减少执行所需要的时间,已知的算子融合分为四种,如图2所示:

图2 算子融合示意图

injective(单射性):一到一的映射,如:add / sqrt / exp / sum 等操作算子(operator);

reduction(简约):多到少的映射,如:sum / max / min等操作操作算子(operator);

complex-out-fusable:逐元素复用映射到输出,如:conv2d / bn /  relu等操作算子(operator);

opaque:不能被复用

这种算子组合太多了,专门针对这些组合手写底层优化不太现实,需要做一些自动代码生成。

2、数据布局变换:

当代计算架构中,从内存中载入数据的时间要远远大于进行一次浮点运算所耗费的时间,要重复使用载入内存或寄存器中的数据。

首先看一下3x3的卷积操作,如图3所示:

图3 无tile的3x3卷积操作示意图

不采用tile的方式,每个线程载入一个3x3大小输入得到一个输出,16个线程需要进行16x9次数据载入,如果采用tile方式,如图4所示:

  图4 有tile的数据载入

采用tile方式时,每个线程载入4x4大小输入得到2x2大小的输出,4个线程需要进行4x16次数据载入。

三、优化张量计算

张量表达语言(Tensor Expression Language):直接描述每一个单元如何计算。

这样的tensor表示(数学公式表达),可以涵盖几乎所有的高层算子,可以很容易做代码生成,因为对应的表达式已经确定了。然后就是将tensor expression映射到不同硬件上:

这里涉及到的问题有:算子张量化的问题、cache问题、数据类型问题(float32,float16,、int8)

  解决方案: 将所有手工优化的可能(10亿级别的)总结起来,并将他们作为搜索空间的一部分,然后自动进行搜索,这里采用auto-tvm来自动进行搜素每个算子的最优实现。

  tvm的上限比手写优化做得更好

如果是机器和人同时去解决一个问题的优化,人通过不断的去解决,可以做到比机器好一些,实际上,机器不一定要和人解决一样的问题,比如融合算子,其可能性太多,人可能没有力气去优化这些融合算子,机器通过去解决这些人没有解决的问题,进而达到更高的效率;反过来,当搜索空间越来越大,包含了人所有的搜索空间时,这时,哪怕直接和人的手写优化一一对应,机器也可以达到和人做的优化差不多,甚至更好都有可能。

总之:

Tvm一些基本技术的更多相关文章

  1. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  2. tvm install

    一.系统需求:1.可以访问互联网2.关闭防火墙和selinux 二.安装步骤(进入软件包所在目录):1.rpm -ivh daemontools-0.76-1.el6.x86_64.rpm2.yum ...

  3. 深入了解当前ETL中用到的一些基本技术

    数据集成是把不同来源.格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享,是企业商务智能.数据仓库系统的重要组成部分.ETL是企业数据集成的概念出发,简要分析了当前ETL中用到的 ...

  4. 深入了解当前ETL的一些基本技术

    数据集成是把不同来源.格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全 面的数据共享,是企业商务智能.数据仓库系统的重要组成部分.ETL是企业数据集成的概念出发,简要分析了当前ETL中用到 ...

  5. WiFi广告强推的基本技术原理和一些相关问题

    WiFi推原理(转) 本文地址:http://jb.tongxinmao.com/Article/Detail/id/412 WiFi广告强推的基本技术原理和一些相关问题 WiFi广告推送原理就是利用 ...

  6. 关于 TVM

    偶然间对 arm 中 mali 显示核心感兴趣,找到的 TVM.将了解到的信息做个备忘. TVM 是 Tensor Virtual Machine 的所写? 官网上,TVM 定义自己为一种 Inter ...

  7. RISC设计原则及基本技术

    CISC的特点: 指令系统庞大,指令功能复杂,指令寻址方式多,指令格式多 绝大多数指令须要多个机器周期完毕 各种指令都能够訪问存储器 採用微程序控制 有专用寄存器,少量 难以用优化编译技术生成高效的目 ...

  8. TVM:

    Hello TVM  发表于 2019-06-29 TVM 是什么?A compiler stack,graph level / operator level optimization,目的是(不同框 ...

  9. TVM图优化(以Op Fusion为例)

    首先给出一个TVM 相关的介绍,这个是Tianqi Chen演讲在OSDI18上用的PPThttps://files.cnblogs.com/files/jourluohua/Tianqi-Chen- ...

随机推荐

  1. 02- HTML网页基础知识与浏览器介绍

    1.认识网页 网页主要由文字,图像和超链接等元素构成.当然,除了这些元素,网页还可以包含音频,视频,以及flask等. 如图所示就是一个网页: 网页是如何形成的呢? 它是由前端人员写的代码,经过浏览器 ...

  2. 基于路由器的VRRP技术--VRRP的应用

    目录 无Vlan的VRRP 有Vlan的VRRP 今天要讲的VRRP都是基于路由器的VRRP. 一:无Vlan的VRRP 如图,PC1和PC2是企业内网主机,AR1和AR2是企业访问外网的路由器,有一 ...

  3. hdu4884 模拟

    题意:       一个厨师,他能炒n道菜,他每次炒菜用时t分钟,每次最多可以炒同样的菜k分,有m个人来买饭,给你每个人来的时间和菜的种类以及份数,问你每个人都是什么时候离开的. 思路:       ...

  4. 神经网络与机器学习 笔记—多层感知器(MLP)

    多层感知器(MLP) Rosenblatt感知器和LMS算法,都是单层的并且是单个神经元构造的神经网络,他们的局限性是只能解决线性可分问题,例如Rosenblatt感知器一直没办法处理简单异或问题.然 ...

  5. Sublime text3 的破解

    下载sublimeText3的安装包并安装(已经安装的可以忽略) 在hosts文件中添加:127.0.0.1 license.sublimehq.com(hosts文件地址:C:\Windows\Sy ...

  6. Java_常用类API之一

    Math类 Math类中包含一些对数据进行数学运算的方法,而该类中的方法全都是静态的.像这样的类称之为工具类. 1 public static int abs(int a) 2 对一个数据求绝对值 3 ...

  7. Linux下线程pid和tid

    #include <stdio.h> #include <pthread.h> #include <sys/types.h> #include <sys/sy ...

  8. volatile关键字的作用-respect

    volatile关键字的含义? volatile定义的变量可能会意外的改变,改变它的情况有很多(例如:操作系统,硬件,线程),编译就不会去假设这个值,也就是说每次访问这个变量时,系统就会小心翼翼的去从 ...

  9. safari模拟IE

    在如下网站找到相对应的useragent https://developers.whatismybrowser.com/useragents/explore/software_name/interne ...

  10. CentOS 7 调整home大小

    把/home内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/root文件系统,新建/home: tar cvf /tmp/home.tar /home #备份/home umount /ho ...