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. 关于js中的回调函数callback,通俗易懂

    前言 其实我一直很困惑关于js 中的callback,困惑的原因是,学习中这块看的资料少,但是平时又经常见,偶尔复制一下前人代码,功能实现了也就不再去追其原由,这么着,这个callback的概念就越来 ...

  2. hdu3234 带权并查集(XOR)

    题意:       给你n个未知的正整数,有三总操作       I P V            P的值是V       I P Q V          P XOR Q = V       Q K ...

  3. 病毒木马查杀实战第024篇:MBR病毒之编程解析引导区

    前言 通过之前的学习,相信大家已经对磁盘的引导区有了充分的认识.但是我们之前的学习都是利用现成的工具来对引导区进行解析的,而对于一名反病毒工程师而言,不单单需要有扎实的逆向分析功底,同时也需要有很强的 ...

  4. POJ 2762 单连通图

    题意:      给你一个有向图,问你这个图是不是单连通图,单连通就是任意两点之间至少存在一条可达路径. 思路:      先强连通所点,重新建图,此时的图不存在环,然后我们在看看是否存在一条路径可以 ...

  5. XCTF-unfinish

    unfinish 之前做过这个题,这是之前写的WP:链接

  6. [CSP-J2019 江西] 道路拆除 题解

    发现大家都是将路径拆成三条链来做,这里提供一种暴力的乱搞方法. 思路 看到这一道题的第一想法就是跑最短路.可是仔细想想就发现,由于重合的路径只算一遍,所以导致两条最短路不一定是最优解. 接着,看到数据 ...

  7. DWVA--File Inclusion

    文件包含漏洞 先来了解一下什么是文件包含 因为程序开放人员通常会把可重复使用的函数写到单个文件中,在需要使用到这些函数时候,就可以 直接调用这个文件,这种对文件的调用过程就被称为文件包含. 文件包含漏 ...

  8. 推荐一些学习MySQL的资源

    前言: 在日常工作与学习中,无论是开发.运维.还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一.在互联网公司,开源数据库用得比较多的当属MySQL了,相信各位小伙伴关注我的原因也 ...

  9. Python自动扫描出微信不是好友名单

    前言 最近找几个老友准备聊天发现几个已经被删除好友名单,做为潜水党多年的我已经不知道成为多少人的黑名单,但是好友列表却依然有不是好友的名单,面对庞大的好友数量想要清除谈何容易.虽然可以发消息给所有人, ...

  10. BugkuCTF——wp(旧版)

    title: BugkuCTF--wp(旧版) date: 2020-4-25 tags: CTF,比赛 categories: CTF 比赛 Web篇 0x001-web2 解题思路: 1.直接按F ...