TVM前端研究--Relay

news2024/11/28 12:38:21

文章目录

  • 深度学习IR梳理
      • 1. IR属性
      • 2. DL前端发展
      • 3. DL编译器
      • 4. DL编程语言
  • Relay的主要内容
    • 一、Expression in Relay
        • 1. Dataflow and Control Fragments
        • 2. 变量
        • 3. 函数
          • 3.1 闭包
          • 3.2 多态和类型关系
          • 3.3. Call
        • 4. 算子
        • 5. ADT Constructors
        • 6. Moudle和Global Function
        • 7. 常量和元组
        • 8. Let Binding
        • 9. Graph Bindings
        • 10. If-Then-Else
        • 11. ADT Matching
        • 12. TempExprs
    • 二、Type System in Relay
        • 1. Algebrabic Data Type
        • 2. Pattern Matching in Match Expressions
    • 三、Relay Core Tensor Operators
          • Relay Matching in Relay
    • 四、优化
      • 算子融合
      • 量化
      • 加速器相关优化
      • 编译和执行
          • 1)编译流程
          • 2)部分执行

在这里插入图片描述

TVM前端之前用的NNVM,现在用的Relay,后面会往Relax和Unity方向转。先简单介绍一下Relay: A High-Level Compiler for Deep Learning。Relay的解释比较杂乱,按照论文和官方文档的解释它算是一个编译器框架或着IR(Intermediate Representation)。说是编译器框架有些大,说是IR他不单单可以做算子表示,还可以支持函数、类型等编程逻辑。简单来说,Relay作为TVM的前端表示是一种高阶的IR,不仅对算子和类型做了表示外还支持复杂的编程逻辑,类似于DSL(Domain-specific language),这是不同于其他简单的IR。Relay中定义了许多节点类型和函数类型,支持闭包,方便地对计算图进行描述。在TVM的运行过程中,用户会提供各种不同格式的模型如ONNX,TorchScript或者TFlite等,然后由解析器将这些类型转化为Relay格式,TVM提供的所有图优化操作会在Relay这种IR上进行操作,然后在将Relay转化为TIR来描述硬件相关的信息,Relay是后端无关的IR,不描述硬件信息。

深度学习IR梳理

1. IR属性

深度学习IR有三个挑战:1)表达能力,IR应该可以直接表示带有控制流、一阶函数、数据结构。2)兼容性,IR应该可以直接添加和整合新的优化操作。3)拓展性,他应该可以直接接入到新的设备中。Relay提供如下设计解决如上问题。首先,Relay IR是一个面向Tensor、静态类型的函数式IR,可以表达控制流、数据结构和一阶函数,提高表达能力。其二,将ML框架中的通用操作转化为编译Pass,这样就可以把传统编译器中的研究结果作为优化Pass利用起来,提高兼容性。其三,Relay提供了一种硬件无关的算子表示和领域相关的优化操作,确保了硬件之间的拓展性。

2. DL前端发展

DL早期是通过一些科学计算库如Numpy提供的低阶算子辅助编程的。模型会被表示为计算图,图中节点表示算子,边表示算子之间的数据流向。随着DL的发展,各大公司有了自己的开发框架如Tensorflow,Pyorch和编译器如XLA、Glow和TVM。这些框架可以分为支持静态图(static computation graphs)和支持动态图(dynamic computation graphs)两类。支持静态图的框架可以叫做先定义后运行(define-and-run),支持动态图的框架叫做边定义边运行(define-by-run)。支持静态图的框架对控制流和动态维度的模型支持不太友好,支持动态图的框架如Pytorch是借助python的特性边执行边构建计算图的,具有较高的表达能力,但是每次执行时都会重新构图,重新优化消耗巨大。

3. DL编译器

早期低阶的tensor编译器重点在于编写高性能算子如计算密集型的算子。对于代码的生成,比较新颖的设计就是计算分离架构,由TVM采用和多面体框架,由Tensor Comprehension等编译器采用。早期算子编译器的代码生成局限于标量循环嵌套,只能表示整个程序的一部分,忽视了内存管理、数据结构、闭包、控制流等细节。
现在的深度学习框架采用了编译器来处理性能和拓展性的问题,如XLA,GLow,nGraph和ONNC。这些图编译器通过计算图IRs,只做高阶的优化操作然后降阶到各种硬件或厂商指定的库上。降阶过程TF采用了MLIR,Pytorch引入了TorchScript。MLIR是一个共享的框架用于构建一组IR方言来实现编译器的的功能。Tensorflow通过为MLIR引入TF IR方言实现优化过程。TorchScript是一种类似于python语法的高阶IR,并作为Pytorch JIT编译器的的首层使用。PyTorch可以将程序改写为TorchScript格式,该格式可以由TorchScript VM执行或着通过JIT方式编译到目标平台。对于动态行为,TorchScript有一个分析JIT模式,可以在执行期间识别一个稳定的程序运行轨迹,这些稳定的静态轨迹可以进一步被一些低阶编译器优化。

4. DL编程语言

目前,针对机器学习的编程语言越来越多如JAX,Swift for Tensorflow和Lantern。Lantern是最接近Relay的编程语言,是一个深度学习DSL,可以作为代码生成器将代码降阶为C++或者CUDA代码。但是Lantern还不支持硬件加速器,也不专注于完整的程序优化。这些编程语言都是面向用户的DL编程环境的,并通过编译器IR生成代码。

Relay的主要内容

Relay是一个函数式的可微的编程语言,作为机器学习系统的IR使用。Relay支持代数数据类型、闭包、控制流和递归,相较于基于计算图的IR可以直接表示复杂的模型。Relay还包括一种使用类型关系的依赖类型,以便处理对参数形状有复杂要求的运算符的形状分析。

在这里插入图片描述

一、Expression in Relay</

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSL/TLS 密码套件漏洞分析以及修复方法

1. 前言 在当今数字化时代&#xff0c;网络安全至关重要。SSL/TLS 协议作为保障网络通信安全的重要手段&#xff0c;广泛应用于各类网络应用中。然而&#xff0c;如同任何技术一样&#xff0c;SSL/TLS 也并非绝对安全&#xff0c;存在着一些可能被攻击者利用的漏洞。本文将深入…

stm32入门教程--DMA 超详细!!!

目录 简介 工作模式 1、数据转运DMA 2、ADC扫描模式DMA 简介 工作模式 1、数据转运DMA 这个例子的任务是将SRAM的数组DataA&#xff0c;转运到另一个数组DataB中&#xff0c;这个基本结构里的各个参数应该如何配置呢&#xff1f; 首先是外设站点和存储器站点的起始地址、…

大数据新视界 -- 大数据大厂之大数据重塑影视娱乐产业的未来(4 - 3)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

TIFS-2024 细粒度表示和重组在换衣行人重识别中的应用

总体结论 本文提出了一种新的细粒度表示与重构&#xff08;FIRe2&#xff09;框架&#xff0c;用于解决布变人重识别问题。通过细粒度特征挖掘和属性重构&#xff0c;FIRe2在不依赖任何辅助信息的情况下&#xff0c;实现了最先进的性能。该方法在多个基准数据集上取得了显著的…

基于JSP的篮球系列网上商城系统【附源码】

基于JSP的篮球系列网上商城系统 效果如下&#xff1a; 系统首页界面 商品信息界面 购物车界面 购物车界面 管理员登录界面 管理员功能界面 用户注册界面 我的收藏界面 研究背景 21世纪&#xff0c;我国早在上世纪就已普及互联网信息&#xff0c;互联网对人们生活中带来了无限…

重学SpringBoot3-怎样优雅停机

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机&#xff1f;2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制3.1 Tomcat 优雅停机3.2 Reac…

MySQL 数据库备份与恢复全攻略

MySQL 数据库备份与恢复全攻略 引言 在现代应用中&#xff0c;数据库是核心组件之一。无论是个人项目还是企业级应用&#xff0c;数据的安全性和完整性都至关重要。为了防止数据丢失、损坏或意外删除&#xff0c;定期备份数据库是必不可少的。本文将详细介绍 MySQL 数据库的备…

Cesium基础-(Entity)-(Billboard)

里边包含Vue、React框架代码 2、Billboard 广告牌 Cesium中的Billboard是一种用于在3D场景中添加图像标签的简单方式。Billboard提供了一种方法来显示定向的2D图像,这些图像通常用于表示简单的标记、符号或图标。以下是对Billboard的详细解读: 1. Billboard的定义和特性 B…

DEVOPS: 容器与虚拟化与云原生

概述 传统虚拟机&#xff0c;利用 hypervisor&#xff0c;模拟出独立的硬件和系统&#xff0c;在此之上创建应用虚拟机是一个主机模拟出多个主机虚拟机需要先拥有独立的系统docker 是把应用及配套环境独立打包成一个单位docker 是在主机系统中建立多个应用及配套环境docker 是…

ansible开局配置-openEuler

ansible干啥用的就不多介绍了&#xff0c;这篇文章主要在说ansible的安装、开局配置、免密登录。 ansible安装 查看系统版本 cat /etc/openEuler-latest输出内容如下&#xff1a; openeulerversionopenEuler-24.03-LTS compiletime2024-05-27-21-31-28 gccversion12.3.1-30.…

img 标签的 object-fit 属性

设置图片固定尺寸后&#xff0c;可以通过 object-fit 属性调整图片展示的形式 object-fit: contain; 图片的长宽比不变&#xff0c;相应调整大小。 object-fit: cover; 当图片的长宽比与容器的长宽比不一致时&#xff0c;会被裁切。 object-fit: fill; 图片不再锁定长宽…

基于边缘计算的智能门禁系统架构设计分析

案例 阅读以下关于 Web 系统架构设计的叙述&#xff0c;回答问题1至问题3。 【说明】 某公司拟开发一套基于边缘计算的智能门禁系统&#xff0c;用于如园区、新零售、工业现场等存在来访被访业务的场景。来访者在来访前&#xff0c;可以通过线上提前预约的方式将自己的个人信息…

数学建模清风——论文写作方法教程笔记

PS&#xff1a;本文不讲LateX的使用&#xff01;讲述论文的写作方法 首页&#xff1a;论文标题摘要关键词 一、问题重述 二、问题分析 三、模型假设 四、符号说明 五、模型的建立与求解 六、模型的分析与检验 七、模型的评价、改进与推广 八、参考文献 附录 首页&#xff…

Laravel5 抓取第三方网站图片,存储到本地

背景 近期发现&#xff0c;网站上的部分图片无法显示&#xff0c; 分析发现&#xff0c;是因为引用的第三方网站图片&#xff08;第三方服务器证书已过期&#xff09; 想着以后显示的方便 直接抓取第三方服务器图片&#xff0c;转存到本地服务器 思路 1. 查询数据表&#xff0…

自适应神经网络架构:原理解析与代码示例

个人主页&#xff1a;chian-ocean 文章专栏 自适应神经网络结构&#xff1a;深入探讨与代码实现 1. 引言 随着深度学习的不断发展&#xff0c;传统神经网络模型在处理复杂任务时的局限性逐渐显现。固定的网络结构和参数对于动态变化的环境和多样化的数据往往难以适应&#…

《Python游戏编程入门》注-第4章1

《Python游戏编程入门》的第4章是“用户输入&#xff1a;Bomb Cathcer游戏”&#xff0c;通过轮询键盘和鼠标设备状态实现Bomb Cathcer游戏。 1 Bomb Cathcer游戏介绍 “4.1 认识Bomb Cathcer游戏”内容介绍了Bomb Cathcer游戏的玩法&#xff0c;即通过鼠标来控制红色“挡板”…

【Java基础】2、Java基础语法

f2/fnf2&#xff1a;选中点中的文件名 ​​​​​​​ 1.注释 为什么要有注释&#xff1f; 给别人和以后的自己可以看懂的解释 注释含义 注释是在程序指定位置的说明性信息&#xff1b;简单理解&#xff0c;就是对代码的一种解释 注释分类 单行注释 //注释信息 多行注释…

Spring Boot 应用开发概述

目录 Spring Boot 应用开发概述 Spring Boot 的核心特性 Spring Boot 的开发模式 Spring Boot 在企业应用开发中的优势 结论 Spring Boot 应用开发概述 Spring Boot 是由 Pivotal 团队开发的一个框架&#xff0c;基于 Spring 框架&#xff0c;旨在简化和加速基于 Spring …

微信小程序 - 动画(Animation)执行过程 / 实现过程 / 实现方式

前言 因官方文档描述不清晰,本文主要介绍微信小程序动画 实现过程 / 实现方式。 实现过程 推荐你对照 官方文档 来看本文章,这样更有利于理解。 简单来说,整个动画实现过程就三步: 创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的 export 方法…

docker的安装配置与基本简单命令

目录 1.docker简介 2.docker安装 2.1使用root用户登陆 更新yum源 2.2安装依赖 2.3设置yum源 更新yum源索引 2.4安装docker 2.5启动并且设置开机自启动 2.6验证安装是否成功 2.7配置docker加速器 2.8重启docker服务 3.docker简单使用 3.1下载镜像 3.2列出…