深度学习编译器系列视频摘要

2023-10-27

0. 前言

  • 在B站黄雍涛博士发了几个深度学习编译器的视频,感觉说得挺好,所以记录一下。

深度学习编译器(一)综述

  • 视频链接:

  • 深度学习编译器的作用:加速推理。

  • 深度学习编译器总架构

    • 一般分为前端与后端。
    • 前端:把各种各样的模型转换为编译器认识的形式(如TVM的Relay,一般都是DAG的形式),再进行各类图优化、算子融合等(都属于经典的《编译原理》的一部分)。
    • 后端:内核库(说白了就是加速矩阵乘法)以及代码生成(如LLVM/CUDA)

image-20210519235317577

  • 前端和高层IR
    • IR,Intermediate representation,就是中间表达
    • 从图论、数学的角度来考虑深度学习加速问题。
    • 图的表示方法
      • DAG:有向无环图
      • Let-binidng:直接指向重要节点的输出。更多信息可参考这里
    • 图计算的优化举例:Conv+BN+Relu
      • src/relay/transforms/fuse_ops.cc
      • 具体算法是“支配树算法”
  • 后端和低层IR
    • 从计算机低层的角度来考虑加速问题,如硬件设备、指令集、内核库。
    • 各大厂有各自实现的内核库,如 intel 的 mkl+dnnl/openvino,nvidia的 cuda+cudnn/tensorrt
  • 代码生成器:LLVM
    • 看结构与TVM非常类似(第一代前端就是叫NNVM,致敬LLVM)
    • 如果在CPU上进行模型优化,肯定会用到llvm

image-20210520024726876

  • 低层运算IR
    • 有两种形式:Halide和Polyhedral
    • TVM使用的就是Halide,有自动调节(Autotuner)功能,即有split/vectorize/parallelize等加速方法。
    • Polyhedral(多面体模型),感觉就是更好地利用缓存?

image-20210520024920653

深度学习编译器(二)Auto TVM

A High Level View of TVM

  • TVM 与 NCNN/MNN 等的区别
    • NCNN/MNN等:手写汇编
    • TVM:AutoTVM
  • AutoTVM
    • 在用户定义的 Search Space 中具体执行 TE 的优化,tuning整个过程,通过 Cost Model 找到消耗最少的模型,生成json文件。
    • 两个疑问
      • Search Space 是什么?优化了什么?

image-20210523000808321

  • Search Space 介绍(自动调度优化了什么)
    • 举了一个矩阵乘法的例子
    • 左边是普通方式计算,上面是代码,下面是计算流程
    • 中间是使用了 loop tiling 进行优化,本事就是分治。
      • 具体分多大根据硬件不同需要尝试。
      • TVM 就是
    • 右边可以看到,在分块后,每块利用高效算子(充分利用缓存等资源)计算

image-20210523001842715

  • AutoTVM 流程
    • 构建 Runner 和 Builder,运行tune以及构建Task
    • 创建搜索任务,模版中可选参数和搜索任务绑定。
    • 使用tune进行本地测试,记录测试结果。
    • 调用测试结果,将最优结果填入模版,生成调度,实际计算。

深度学习编译器(三) Auto Schedule

  • AutoSchedule 就是 Ansor 的实现。

  • 视频连接

  • AutoTVM与AutoSchedule的区别

    • AutoTVM是基于模版(template)的,而AutoSchedule没有模版(template-free)
  • Schedule常用原语:split/reorder/fuse/compute-at/tile/parallel/vectorize/unroll/bind/compute-inline

    • AutoTVM最常用的是split、tile,其他很少
    • AutoTVM会经常用到其他类型
  • 什么是 template?

    • 我个人感觉是,操作(原语)都已经确定了(可能不止一套),但各个原语的参数没有确定。
  • Template 的优缺点

    • Ansor 论文(即AutoSchedule)

    • 缺点:

      • 模版代码量很大(TVM中超过15k)。如果要新的硬件平台、新的算子,就需要新的模版。
      • 都是局部优化,而不是全局优化。换句话说,都是针对单个算子的优化。
    • Template-free的优点

      • 不需要不停添加template
      • 准全局优化(如conv+bn+relu的fuse),又如(mattrans+matmul+softmax)
      • 扩展了搜索空间
      • 搜索的速度更快(auto-tune的时间)
      • 推理速度更快(效果更好)
  • 并行化外循环,矢量化、展开内循环

  • AutoSchedule的流程如下图所示

    • 推荐看这个视频
    • Task Scheduler(任务调度器):为优化模型中的多个子图,并分配时间资源
      • 为什么是“准全局优化”?因为优化的是子图。
    • Program Sampler(程序采样器):构造打的搜索空间,并从中采样不同的程序
      • 先生成一个草图(可以看成是一个模版,但不是固定的模版)
    • Performance Tuner(性能微调器):微调采样到程序的性能
      • 进化算法、XGB就在这里,预估程序运行时间

image-20210528214212306

  • 使用过程与AutoTVM没啥区别,具体参考官方样例
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习编译器系列视频摘要 的相关文章

  • TVM优化原理学习

    没有看论文 xff0c 看了b站陈天奇的视频 xff0c 还有一些博客的分析 xff0c 学习了优化原理 后续需要深入理解再看论文 TVM对于神经网络的优化主要有两部分 xff0c 计算图优化和算子优化 xff0c 下面分开说明 计算图优化
  • ubuntu20.04配置TVM环境

    官方安装教程 xff1a https tvm hyper ai docs install from source 安装环境配置信息 xff1a system xff1a ubuntu20 span class token punctuati
  • TVM运行时系统

    本文翻译自TVM Runtime System tvm 0 9 dev0 documentation TVM的编译器栈开发和部署支持多种编程语言 在本文中 xff0c 我们将解释TVM运行时的关键元素 我们需要满足一些有趣的需求 部署 从p
  • TVM在Windows10下编译安装

    本教程记录了Windows端安装tvm的过程 xff0c 欢迎交流 教程参考 TVM Windows下全功能编译方法 xff1a 从入门到劝退 https blog csdn net znsoft article details 11503
  • TVM Windows conda 安装

    TVM Windows 安装 简介 本篇博客主要目的是帮助大家在windows平台上安装好tvm xff0c 并且可以顺利使用 因为有项目需要使用tvm xff0c 同时自己需要用windows做一些测试 xff0c 因此想要在window
  • 冯思远:Apache TVM 与机器学习编译发展

    下午好 欢迎大家今天来参加 2023 Meet TVM 作为 Apache TVM PMC 由我来给大家做关于 TVM 的发展以及 TVM 未来 Unity 框架的分享 Apache TVM Evolution 首先为什么会有 MLC Ma
  • TVM 0.9 在 ubuntu(任意版本)上的安装(简单且保姆级!)

    近一年来尝试过TVM在ubuntu16 04 ubuntu18 04 ubuntu20 04 以及windows上的安装 也看了官方教程和网上各种博客 踩坑无数 现在总结在Ubuntu上踩坑几率最小的安装流程如下 建议学习TVM一开始就在u
  • TVM 从入门到精通

    本文首发自 公众号 HyperAI超神经 内容一览 TVM 共有三种安装方法 从源码安装 使用 Docker 镜像安装和 NNPACK Contrib 安装 本文讲解如何通过 Docker 镜像 和 NNPACK Contrib 安装 关键
  • 编译 Keras 模型

    本篇文章译自英文文档 Compile Keras Models 作者是 Yuwei Hu 更多 TVM 中文文档可访问 TVM 中文站 本文介绍如何用 Relay 部署 Keras 模型 首先安装 Keras 和 TensorFlow 可通
  • TVM中python访问c++函数机制

    data TVM tvm python tvm ffi registry py data TVM tvm python tvm ffi registry py data TVM tvm python tvm ffi ctypes packe
  • TVM User Tutorial -- Blitz Course to TensorIR

    Author Siyuan Feng TensorIR 是一种特定领域语言 用于深度学习项目 有两个广泛的用途 在各种硬件后端上实现转换和优化程序 自动张力化程序优化的抽象 import tvm from tvm ir module imp
  • 【开发环境】Windows下搭建TVM编译器

    关于搭建TVM编译器的官方文档 Install from Source tvm 0 14 dev0 documentation apache org 1 安装Anaconda 首先我们需要安装Anaconda 因为其中包含着我们所需要的各类
  • 【TVM 学习资料】使用 Python 接口(AutoTVM)编译和优化模型

    本篇文章译自英文文档 Compiling and Optimizing a Model with the Python Interface AutoTVM 作者是 Chris Hoge 更多 TVM 中文文档可访问 TVM 中文站 TVMC
  • TVM 结构学习总结

    最近对深度学习编译器TVM学习了一下 了解各部分的功能 根据自己的理解进行总结 如有不正确请指正 话不多说上脑图 TVM为解决各种深度学习训练框架的模型部署到各种硬件而诞生 下图是TVM经典技术栈图 编译器层次抽象 编译器前端 接收C C
  • 【TVM 学习资料】用 Schedule 模板和 AutoTVM 优化算子

    本篇文章译自英文文档 Optimizing Operators with Schedule Templates and AutoTVM 作者是 Lianmin Zheng Chris Hoge 更多 TVM 中文文档 访问 TVM 中文站
  • TVM编译安装

    本文是在已大致了解tvm功能和架构的基础上 根据官方文档 在x86 64 Ubuntu 18 04 GPU Pytorch1 8 0上安装TVM的流程 参考文档 TVM安装官方文档 llvm下载链接 1 下载源代码 从tvm官网下载源代码
  • TVM编译pytorch模型

    编译PyTorch模型 加载预训练的PyTorch模型 加载测试图像 将图形导入到Relay 构建Relay 在TVM上执行可移植图形 查找同义词集名称 本文是介绍如何使用Relay部署PyTorch模型的入门教程 首先 应该安装PyTor
  • windows11安装wsl2(linux)+VScode+ miniconda+TVM+python环境部署

    在wsl上运行 TVM demo 环境配置 预备加速工具 vpn 清华镜像 第一次安装 失败 1 Windows11 D盘安装wls linux 2 安装vscode并连接到WSL2 3 wsl 安装miniconda 4 wls安装TVM
  • 深度学习编译中间件TVM之编译&安装

    参考文档 mxnet官方install手册 TVM 0 4 0官方安装指导手册 LLVM下载地址 Debian Ubuntu Linux下安装LLVM Clang编译器 开发环境介绍 操作系统版本 Ubuntu16 04 LTS 64 bi
  • 【tvm官网教程01】设计和架构-1

    tvm官网教程01 设计和架构 1 目的 1 编译流 1 1 关键数据结构 1 2 Transformations 1 2 1 变换的分类 1 2 2 relay transform 1 2 2 1 子函数 1 2 2 2 overall问

随机推荐

  • 【大前端】NestedScrollView/ScrollView 加载完自动滑动至底部导致内容上滑问题解决

    正常情况下 由于NestedScrollView ScrollView 嵌套RecyclerView 可能会导致Recyclerview占据焦点导致整个NestedScrollView ScrollView内容上滑 此问题的解决方案如下 1
  • 在MFC中使用OpenCV2.3.1

    最近要做数字图像处理的项目 大家都说VS MFC OpenCV很好用 于是我就试着弄了下 首先我到OpenCV ChinaOpenCV中文版主页找了一些很不错的教程开始做了 我用的是Visual Studio 2005 OpenCV的版本是
  • 憨批的语义分割重制版11——Keras 搭建自己的HRNetV2语义分割平台

    憨批的语义分割重制版11 Keras 搭建自己的HRNetV2语义分割平台 学习前言 什么是HRNetV2模型 代码下载 HRNetV2实现思路 一 预测部分 1 主干网络介绍 a Section 1 b Section 2 c Secti
  • SpringBoot返回Json数据

    Spring Boot 返回 Json 数据 XML 文件的解析常见的解析工具有 DOM4j JDOM 等 为了标准化 XML 文件解析 Java 中提出了 JAXP 规范 使用的解析模型有 DOM 将标记语言文档一次性加载进入内存中 在内
  • 第九课: 工作空间-Work Space介绍

    2 7 工作空间 Work Space介绍 工作空间是WorkBench3 3集成开发环境对项目工程进行集中管理的空间 用户创建的BootRom工程 VxWorks工程 Downloadable工程和静态库工程等都存在于Work Space
  • 微信小程序使用crypto.js加密解密

    微信小程序中使用crypto js crypto js是用来进行AES加密的 注意AES在使用时有7个配置项 前后端加解密记着统一参数 测试时注意配置项的选择是否一致 测试工具 AES加密测试工具 下载crypto js npm i cry
  • 闭环系统的零极点图判定稳定性_《自动控制原理》课后习题答案.doc

    第五章 线性系统的频域分析与校正 习题与解答 5 1 试求题5 75图 a b 网络的频率特性 a b 图5 75 R C网络 解 a 依图 b 依图 5 2 某系统结构图如题5 76图所示 试根据频率特性的物理意义 求下列输入信号作用时
  • 点陶极速版《隐私政策》

    点陶极速版 隐私政策 生效日期 2021年3月10日 提示条款 大石桥市多禾网络科技有限公司 以下可统称为 我们 或 多禾 高度重视个人信息的保护 在您使用 点陶极速版 app提供的服务时 以下可称为 点陶极速版 服务 我们将按照本隐私政策
  • c++知识系列:new、operator new、placement new

    总结 operator new 三种形式 http www cplusplus com reference new operator 20new throwing 1 void operator new std size t size th
  • angular11 报错 ERROR Error: If ngModel is used within a form tag, either the name attribute must be s

    angular 报错 ERROR Error If ngModel is used within a form tag either the name attribute must be set or the form control mu
  • hyperledger中cryptogen工具使用

    cryptogen 主要功能 1 生成秘钥和证书文件 2 查看配置模板的信息 cryptogen 命令详解 output 指定存放生成秘钥和证书文件的路径 默认为当前目录下的crypto config目录 config 指定所采用的配置模板
  • 基于注意力机制的 CNN-BiGRU 短期电力负荷预测方法

    提出了一种基于 Attention 机制的CNN BiGRU 卷积神经网络 双向GRU 注意力机制 短期电力负荷预测方法 该方法将历史负荷数据作为输入 搭建由一维卷 积层和池化层等组成的 CNN 架构 提取反映负荷复杂动态变化的高维特征 将
  • 优秀的程序员——勇于尝试新技术并能快速掌握

    一个人有了好奇心求知欲就完了吗 那不能 这可不够 除了好奇去探索外 你还得有把探索所得 转化成自己经验的能力 这种能力的外在表现就是勇于尝试新技术 而且还得快速掌握 再举另一个同事的例子 这个同事在工作中遇到了一个问题 就是存储海量数据的问
  • ruoyi权限验证

    目录 首先在ruoyi的菜单管理中添加权限测试的按钮 设置权限字符 在角色管理中勾选新增加的权限按钮 在ruoyi前端代码中自行添加按钮组件 ajax发送请求给后端接口 后端接口 效果 首先在ruoyi的菜单管理中添加权限测试的按钮 设置权
  • 谷粒商城--nginx--高级篇笔记四

    谷粒商城 nginx 高级篇笔记四 1 nginx搭建域名访问 反向代理 1 1 动静分离 1 2 正向代理与反向代理 正向代理隐藏客户端 反向代理隐藏服务端 1 3 nginx与windows搭建域名访问环境 为什么能够通过修改host文
  • HTML5 Canvas 碰撞检测的简单实现

    本示例中演示的是模拟声纳探测的动画 在黑色的背景中画了两个黑色的障碍物 通过鼠标点击发出的声波可以将其检测出来 声波碰撞到障碍物之后 障碍物将向外发出声波 代码如下 HTML代码
  • 什么是抽象类?

    第四章 抽象类 入门级 大牛忽略 4 1 抽象类概述 以下内容可能有点烦 但是通俗易懂 简直舒服 我们创建一个动物类 并且在这个类中创建动物对象 但是当你提到动物类 你并不知道我说的是什么动物 只有看到了具体的动物 你才知道这是什么动物 所
  • python error

    1 IndentationError expected an indented block 缩进问题 gt gt gt for i in 1 2 3 4 t s i File
  • 带妹玩转Vulnhub【一】

    前言 题目是不想在刷了 想学一学渗透测试的知识 由于是开头之作 所以会写的比较的详细 尽量让大家少走弯路 带妹是不可能带妹的 这辈子都不可能带妹的 开始 下载 我们首先需要下载LazySysAdmin的虚拟镜像 这里 但是打开之后是ovf
  • 深度学习编译器系列视频摘要

    文章目录 0 前言 深度学习编译器 一 综述 深度学习编译器 二 Auto TVM 深度学习编译器 三 Auto Schedule 0 前言 在B站黄雍涛博士发了几个深度学习编译器的视频 感觉说得挺好 所以记录一下 深度学习编译器 一 综述