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. sed高级指令

    N命令 n命令 n命令简单来说就是提前读取下一行,覆盖模型空间前一行,然后执行后续命令.然后再读取新行,对新读取的内容重头执行sed //从test文件中取出偶数行 [root@localhost ~ ...

  2. 小图标文字对齐的终极解决方案demo

    CSS代码: .icon { display: inline-block; width:20px; height:20px; background: url(delete.png) no-repeat ...

  3. 【Vue】Vue学习(一)-Vue指令

    1.v-text v-text主要用来更新文本,等同于JS的text属性 <span v-text="msg"></span> 这两者等价 <span ...

  4. Android Studio导入Android 4.4.4r1的源码

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70339471 一.环境配置 1.ubuntu 14.04.5 x64bit 2.j ...

  5. Apache Tomcat examples directory vulnerabilities(Apache Tomcat样例目录session操纵漏洞)复现

    目录 Session操控漏洞 示例: Session操控漏洞 在Apache tomcat中,有一个默认的example示例目录,该example目录中存着众多的样例,其中/examples/serv ...

  6. 去了字节跳动,才知道年薪40W的测试有这么多?

    最近脉脉职言区有一条讨论火了: 哪家互联网公司薪资最'厉害'? 下面的评论多为字节跳动,还炸出了很多年薪40W的测试工程师   我只想问一句,现在的测试都这么有钱了吗? 前几天还有朋友说,从腾讯跳槽去 ...

  7. React 代码共享最佳实践方式

    任何一个项目发展到一定复杂性的时候,必然会面临逻辑复用的问题.在React中实现逻辑复用通常有以下几种方式:Mixin.高阶组件(HOC).修饰器(decorator).Render Props.Ho ...

  8. 使用C#进行数据库增删改查ADO.NET(二)

    这节接着讲用C#进行数据库CRUD,高级部分.  事务: 事务是执行一批sql语句,如果中途失败,全部回滚,数据不会受影响,中途没有出错则会提交事务,真正对数据进行修改.C#提供了SqlTransac ...

  9. NtQuerySystemInformation获取进程/线程状态

    __kernel_entry NTSTATUS NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS SystemInformationClass, P ...

  10. 从0开始fastjson漏洞分析2

    从0开始fastjson漏洞分析https://www.cnblogs.com/piaomiaohongchen/p/14777856.html 有了前文铺垫,可以说对fastjson内部机制和fas ...