TVM编译入门概念 一

最近阅读到陈天奇的一篇文章,链接分享
21年底,他说在三年前也就是2018年左右就完成了基于多层优化的解决方案。
当把全栈解决方案搭建起来并且不断实践之后发现有两种隔阂阻碍整个行业的发展。做一些总结。

  • 本文合适的受众是ai编译器相关的入门级选手或供大家回忆知识点。
  • 我的风格是突出重点字,句。
  • 如果大家有好的建议,请不吝批判和提供建议

ai编译器目前有一些问题存在,打算从这些问题入手,去理解ai编译器相关的基本概念。

  • 竖向隔阂
    • 阻碍手工优化方案和自动编译方案
    • 两种流派:手工算子优化,自动优化
    • 大部分当前框架基本都只为两种方案之一去做设计
    • 打破竖向墙,让手工优化和自动优化做整合,是行业面临大问题
  • 层级隔阂(横向隔离)
    • 多层优化生态问题
    • 每层优化的抽象设计是分开的
    • 优点是抽象内部的优化非常灵活
    • 麻烦是抽象到另一个抽象的转化往往需要通过translator或lowering的批量转换
    • 许多困难都集中在一个抽象到另一个抽象的边界上
    • 而且这些转换往往是单向的,在高阶做优化 (如计算图) 然后传递给张量表达层
    • 但张量表达层以及硬件层级的信息往往难以反馈给更高的表达层
    • 重点:张量优化本身可以反过来指导计算图层级的算子融合和数据排布,但是当前的单向架构,比较难自然地利用这一类的反馈信息
  • 总结
    • 深度学习编译和优化不是分为多个层级的优化就可以完全优化的问题
    • 解决优化问题需要各层级抽象之间的联动
    • 目前可以做的事情
      • 搭建某个层级的抽象或者dialect
      • 并且让这些抽象通过多层优化的方式从高到低的进行逐层变换和转换
    • 目前的困难所在
      • 自底向上反馈迭代的优化
      • 在边界引入更多可模块化的整合变换
      • 仅有多层优化的概念是不够的
    • 由于横向和竖向隔离这两个问题,依然难以做好端到端的整体优化,这些隔阂和问题的存在和基础架构的选择无关,不论是MLIR或者TVM,一旦采用了多层优化的方式,都难以避免这个问题。希望接下来完能快速打通这个流程,真正理解到这个问题。

Tensor IR (TIR)

  • 介绍
    • 旧Relay和新Relax IR 最后都会被转换到TIR
    • TIR源码封装在tvm.tir中
    • TIR的数据结构就是一颗抽象语法树(AST)
    • 语法树可以表示的内容就是 变量的声明,变量的初始化,变量的计算,函数调用,控制流等。
    • 只需要采用观察者模式去遍历这颗AST树就可以实现一对一的硬件码级别的翻译。也就是codegen模块
    • TVM前端都会被封装到IRModule中进行编译,
    • linux下IRModule就是一个.so动态链接库
    • PrimFunc叫做张量函数
    • 内部封装了对应动态库的入口函数
    • 一个IRModule可以有多个PrimFunc
    • Codegen实际上就是对TIR AST树进行遍历然后一对一的将AST Node翻译为TIR Node 对应的数据结构并发回给调用函数VisitExpr_和 VisitStmt

tvm.IR基础设施

  • 介绍
    • tvm.ir 抽象
    • Type和Expr是关键概念
    • Type中包含张量的基础数据类型、自定义的复杂类型的函数类型
    • Expr既包含lowering IR PrimExpr,也包含 RelayExpr
    • 具体的部分可以去看源码中的定义,分别在tvm/include/tvm/ir这个文件下的头文件里
    • 另外说一点,开发者们对代码进行了多次重构,路径结构可能有改变,我下的版本是2023年10月最新版本的tvm

Relay IR介绍

  • 清楚一个概念,onnx模型文件可以直接转换到Relay IR这一层
    • onnx模型文件可以通过https://netron.app/这个网站可视化展开哦
    • 代码角度看,Relay的基类Expr 就是 tvm.ir基础设施中的RelayIR
    • 在tvm/relay/expr.h中可以看到 relay命名空间中Expr指的就是 RelayExpr
      在这里插入图片描述
    • VarNode 是Relay里面的变量
    • VarNode 也会继承自 ExprNode这个类
    • VarNode当中 有vid,type_annotatiton两个成员变量
    • 如Relay IR看到的以@和以%开头的变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/153071.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

巴菲特再度出手,清仓7家公司股票

KlipC报道:最新数据显示,伯克希尔第三季度总共清仓了7家公司的股份,其中包括动视暴雪、通用汽车、化工巨头塞拉尼斯、亿滋国际、强生、宝洁和联合包裹。 KlipC的合伙人Andi D表示:“此前最新的监管文件显示,伯克希尔哈…

Servlet---从创建项目到部署项目的整个流程

文章目录 创建项目引入Servlet依赖创建目录结构编写代码打包程序部署程序验证程序 创建项目 引入Servlet依赖 为什么需要引入依赖资源呢? Servlet不是标准库自带的,需要从外部引入进来才能使用。如何引入? 利用maven,maven的一个…

泛娱乐社交掀起2万亿市场热潮,Flat Ads独家流量助出海获客

作为产品/服务的提供方,中国企业在几乎所有海外市场,都算是强有力的参与者,在社交泛娱乐领域表现尤为突出。但不同于游戏、电商、工具等其他品类,我们几乎很难对社交泛娱乐下一个精准的的定义。因为随着技术进步、行业发展&#x…

机器视觉双目测宽仪 高温钢板实时无滞后检测

高温钢板在生产中的宽度尺寸检测有很多种方法,本来来介绍一下双目测宽仪,它同样能做到实时检测、超差提示、数据分析、信息存储等功能。 双目测宽仪采用两个工业相机从不同的角度对被测物同时进行测量,两个工业相机就像人的双眼,可…

Python接口自动化(什么是接口、接口优势、类型)

简介 经常听别人说接口测试,接口测试自动化,但是你对接口,有多少了解和认识,知道什么是接口吗?它是用来做什么的,测试时候要注意什么?坦白的说,笔者之前也不是很清楚。接下来先看一下…

appium自动化测试完整项目

前言 Appium是一个开源的自动化测试框架,支持跨平台,支持多种编程语言,可用于原生,混合和移动web应用程序,使用webdriver驱动ios,android应用程序、那么为了学习app自动化测试首要任务肯定就是搭建测试开发…

中小企业数字化的“下半场”,与华为的生态伙伴“引力场”

作者 | 曾响铃 文 | 响铃说 中小企业数字化始终是业界关注的重点,也催生了庞大的产业数字化价值空间等待挖掘,在如何推进这件事上,各方都在持续发力。 这其中,针对中小企业迫切需求,来自华为的动作正变得越来越紧凑…

echarts点击事件、柱状图设置区间颜色

实现echarts柱状图标记区域&#xff0c;并在单击柱状条时触发点击事件切换标记区域 //html <div id"main" style"width: 600px;height:400px;"></div>//js let _chart null; letselectInfo {};//选择的柱状条信息&#xff0c;可用于信息的获…

linux下安装python3.8(有坑)

1安装包下载 ###直接官网下载linux版本&#xff0c;找到对应的包 https://www.python.org/downloads/source/2安装包解压 tar -zxvf Python-3.8.0.tgz 3编译安装 1&#xff09;设置安装目录&#xff0c;比如在此创建在 /usr/local/python3 &#xff1a; mkdir -p /usr/loca…

解决计算机丢失msvcr71.dll问题,总结5种解决方法分享

由于各种原因&#xff0c;计算机在使用的过程中可能会出现一些问题&#xff0c;其中之一就是丢失msvcr71.dll文件。这个问题可能会导致计算机无法正常运行某些程序或功能&#xff0c;给我们的生活和工作带来困扰。那么&#xff0c;当我们遇到这个问题时&#xff0c;应该如何解决…

ROS 学习应用篇(七)ROS中的坐标变换管理之tf初探

坐标变化是机器人中很重要的内容&#xff0c;但是要是概括下来无非就是旋转和平移矩阵。 小海龟跟随实验 做的是两个小海龟之间的跟随&#xff0c;其实就相当于视觉设备和本体设备见有一定的位置差在ros平台下tf坐标变化的实验 首先安装海龟tf变换包 新开终端输入 sudo apt…

某个订单项目记录,涉及MQ消息处理、分布式问题、幂等性等问题解决设计

文章目录 消息队列&#xff08;Message Queue&#xff09;什么场景下&#xff0c;使用消息队列&#xff1f;消息队列 概述 RabbitMQ 消息队列RabbitMQ 概念名词 概念RabbitMQ 流程 RabbitMQ 安装RabbitMQ 页面介绍Exchange 交换机类型Spring Boot 整合RabbitMQAmqpAdmin 与 Rab…

git 构建报错

钉钉插件]当前任务未配置机器人&#xff0c;已跳过 org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 4: Tool type “maven” does not have an install of “maven-3.8.8” configured - did you mean “Maven-3.8.8”? …

iOS项目集成RN(0)

iOS原有项目集成RN 环境安装RN环境搭建Node & Watchman 安装 创建新应用iOS项目集成RN如果没有iOS项目&#xff0c;新建一个 swift&#xff0c; storyboard项目&#xff0c; 名字&#xff1a;RNTest新建一个 RNDemo目录&#xff0c;一个iOS子目录&#xff0c; 把iOS相关的拷…

系列七、栈 堆

一、概述 栈也叫栈内存&#xff0c;主管Java程序的运行&#xff0c;是在线程创建时创建&#xff0c;线程销毁时销毁&#xff0c;它的生命周期是跟随线程的生命周期&#xff0c;线程结束&#xff0c;栈内存也就释放&#xff0c;对于栈来说不存在垃圾回收&#xff0c;只要线程一结…

Vue|props配置

props是Vue中用于传递数据的属性。通过在子组件的选项中定义props属性&#xff0c;可以指定子组件可以接收的数据以及其他配置选项。父组件可以通过在子组件上使用特定的属性来传递数据。 目录 目录 App.vue 什么是App.vue 组件引用 props配置 组件复用 案例1&#xff1a…

【Unity】文件信息的存储和解析(C#代码)

目录 文件存储 两种文件信息解析方法 文件加密处理 文件解密处理 全部代码 文件存储 一些游戏案例开发过程中的一些数据转换成Json格式&#xff0c;然后存到指定的位置 //3.将对象转化为JsonList<Hokag> hokagList new List<Hokag>(){new Hokag(){Name"…

来听B站音乐UP主从容老师讲解GuitarPro和Earmaster

许久没发文了&#xff0c;最近在B站刷到了一位音乐UP主从容Free&#xff0c;他把自己对GuitarPro和Earmaster这2款软件的使用感受进行了详细分享&#xff0c;还没看过的朋友可以戳下面的链接跳转到小破站看完整的&#xff1a; 我不允许还有人不知道这个学吉他的神器&#xff0…

【EI会议征稿】第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024)

第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024) 2024 9th International Symposium on Advances in Electrical, Electronics and Computer Engineering 第九届电气、电子和计算机工程研究国际学术研讨会(ISAEECE 2024&#xff09;将于2024年3月1-5日在南…

接口测试自动化测试的总结与思考,超详细的~

服务端接口测试介绍 什么是服务端? 一般所说的服务端是指为用户在 APP 或 PC 使用的互联网功能提供数据服务的背后的一切。以天猫精灵智能音箱系列的产品链路为例&#xff0c;服务端便是网关&#xff08;包括网关在内&#xff09;之后的链路。 什么是接口? 官方点说&#…