Tvm一些基本技术
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一些基本技术的更多相关文章
- python自动化测试(2)-自动化基本技术原理
python自动化测试(2) 自动化基本技术原理 1 概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...
- tvm install
一.系统需求:1.可以访问互联网2.关闭防火墙和selinux 二.安装步骤(进入软件包所在目录):1.rpm -ivh daemontools-0.76-1.el6.x86_64.rpm2.yum ...
- 深入了解当前ETL中用到的一些基本技术
数据集成是把不同来源.格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享,是企业商务智能.数据仓库系统的重要组成部分.ETL是企业数据集成的概念出发,简要分析了当前ETL中用到的 ...
- 深入了解当前ETL的一些基本技术
数据集成是把不同来源.格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全 面的数据共享,是企业商务智能.数据仓库系统的重要组成部分.ETL是企业数据集成的概念出发,简要分析了当前ETL中用到 ...
- WiFi广告强推的基本技术原理和一些相关问题
WiFi推原理(转) 本文地址:http://jb.tongxinmao.com/Article/Detail/id/412 WiFi广告强推的基本技术原理和一些相关问题 WiFi广告推送原理就是利用 ...
- 关于 TVM
偶然间对 arm 中 mali 显示核心感兴趣,找到的 TVM.将了解到的信息做个备忘. TVM 是 Tensor Virtual Machine 的所写? 官网上,TVM 定义自己为一种 Inter ...
- RISC设计原则及基本技术
CISC的特点: 指令系统庞大,指令功能复杂,指令寻址方式多,指令格式多 绝大多数指令须要多个机器周期完毕 各种指令都能够訪问存储器 採用微程序控制 有专用寄存器,少量 难以用优化编译技术生成高效的目 ...
- TVM:
Hello TVM 发表于 2019-06-29 TVM 是什么?A compiler stack,graph level / operator level optimization,目的是(不同框 ...
- TVM图优化(以Op Fusion为例)
首先给出一个TVM 相关的介绍,这个是Tianqi Chen演讲在OSDI18上用的PPThttps://files.cnblogs.com/files/jourluohua/Tianqi-Chen- ...
随机推荐
- [ Laravel 5.6 文档 ] 进阶系列 —— 任务调度
简介 Cron 是 UNIX.SOLARIS.LINUX 下的一个十分有用的工具,通过 Cron 脚本能使计划任务定期地在系统后台自动运行.这种计划任务在 UNIX.SOLARIS.LINUX下术语为 ...
- Linux提权之利用 /etc/passwd 文件
当我们获得了某个Linux服务器的低权限之后,我们想要对该低权限账号进行提权,以执行更多的操作. 接下来我们的提权是利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去. 首先 ...
- Linux-鸟菜-1-Linux简介
Linux-鸟菜-1-Linux简介 鸟哥这一章是介绍了Linux的由来以及建议怎么学Linux.很多也是建议性的东西,概念性的东西(当然我不是排斥概念).把最后鸟哥的汇总粘过来吧. 建议大家去看下这 ...
- 建立AD域,修改密码后不重启生效命令
net user administrator /passwordreq:yes
- Windows下 MySQL慢查询配置修改
在剖析服务器性能的过程中,慢查询是一个很好的工具. 我们可以通过设置slow_query_log来开启慢查询日志,long_query_time属性来设置慢查询定义阈值,设置slow_query_lo ...
- 熟悉 Bash 快捷键来提高效率
Bash是GNU计划的一部分,是多数Linux发行版提供的默认Shell. Linux的精髓就在于命令行的高效,而学习命令行的第一步便是学习如何快速地输入命令. 其实包括Bash在内的多数Linux ...
- CF1487 Cat Cycle
一个规律题目要多做多积累 , 脑子不太灵活 CF1487 Cat Cycle 题目大意: 两只猫A,B, A猫从n -> n-1 -> n-2 ... -> 1 -> 2 .. ...
- 如何通过在线CRM提升企业竞争力?
随着信息技术的快速发展,在线CRM系统也得到了更加广泛的应用,已经在企业中逐渐开始普及.CRM系统对于优化企业流程有着十分重要的意义,它能够让企业的经营管理更加敏捷,并且可以快速地响应企业的业务流程. ...
- jQuery两种方法添加数据表格到HTML
jQ创建表格的两种方法 1.模板字符串法 $(function () { //模板字符串的方式添加到页面 $('#btn').click(function ...
- 使用alpine为基础镜像Q&A
作为go应用存在二进制文件却不能执行 明明镜像中有对应的二进制文件,但是执行时却提示 not found 或 no such file 或 standard_init_linux.go:211: ex ...