自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 【TVM源码学习笔记】3.1.3 工作空间更新

在relay ir低级化之前分配内存,然后统计各种内存大小

2022-08-05 18:58:40 414 1

原创 【TVM源码学习笔记】3.1.2. Codegen低级化relay ir前的内存分配

relay ir低级化之前的内存分配

2022-08-02 14:41:30 723

原创 【TVM源码学习笔记】3.1 代码生成

代码生成接口Codegen的初步分析

2022-07-29 17:47:03 663

原创 【TVM源码学习笔记】3 模型编译

模型编译的流程和初步分析

2022-07-28 09:46:05 729

原创 【TVM源码学习】前言:学习计划

TVM源码学习笔记入口

2022-07-22 18:05:55 883

原创 【TVM源码学习笔记】2 模型导入from_onnx

from_onnx将onnx模型转换为tvm relay ir

2022-07-21 17:43:41 1386

原创 【TVM源码学习笔记】1 从编译运行第一个模型开始

tvm模型编译运行步骤

2022-07-21 15:26:55 654

翻译 pass基础设施

Relay和TVM IR都包含一系列优化pass,用于改善模型的性能指标,如平均推断、内存占用或特定设备的功耗。有一套标准的优化和机器学习特有的优化,包括常量折叠、死代码消除、算子布局更改、算子融合、缓冲区处理和循环转换等。通过使用遍历期间和/或遍历之前收集的分析结果,将每个pass都被构造为ir-to-ir转换。然而,随着TVM的迅速发展,对这些pass进行更系统和更有效管理的需求变得越来越明显。另外,一个管理跨TVM栈不同层(如Relay和tir)的pass的通用框架,为开发人员快速原型化和将实现的pa

2022-07-05 16:20:42 903

翻译 TabaleGen介绍

本文翻译自TableGen Overview — LLVM 15.0.0git documentationTableGen的目的是帮助开发和维护领域特定信息的记录。因为可能有大量这样的记录,所以专门设计它来允许编写灵活的描述,并提取出这些记录的共同特性。这减少了描述中的重复数量,减少了出错的机会,并使结构领域特定信息变得更容易。TableGen前端解析文件,实例化声明,并将结果传递给特定领域的后端进行处理。有关TableGen的深入描述,请参阅TableGen Programmer’s Reference

2022-07-04 16:08:50 513

翻译 Device/Target交互

本文翻译自Device/Target Interactions — tvm 0.9.dev0 documentation本文档是为有兴趣了解TVM框架如何与特定设备API交互的开发人员编写的,或者希望实现对新API或新硬件的支持的开发人员编写的。任何新的运行时环境都必须实现三个主要方面。DeviceAPI类为特定设备提供了一个句柄,以及用于与之交互的API。它定义了一个通用接口,用于查询设备参数(例如可用内存、线程数量等)和执行简单操作(例如从主机复制内存,或在设备的缓冲区之间复制内存)。Target类包含

2022-07-03 10:21:25 223

翻译 模块序列化介绍

部署TVM运行时模块时,无论是CPU还是GPU, TVM只需要一个动态共享库即可。关键是我们统一的模块序列化机制。本文档将介绍TVM模块序列化格式标准及实现细节。让我们先为构建一个ResNet-18 GPU 工作负载作为例子。 序列化入口API是tvm.module.Module的export_library。在这个函数中,我们将执行以下步骤:1. 收集所有DSO模块(LLVM模块和C模块)2. 一旦我们有了DSO模块,我们将调用保存函数将它们保存到文件中。3. 接下来,我们将检查是否导入了模块,

2022-06-30 20:55:52 204

翻译 TableGen程序员参考

本文翻译自TableGen Programmer’s Reference — LLVM 15.0.0git documentationTableGen使用输入文件中的信息生成复杂的输出文件,输入源文件比输出文件更容易编码,也更容易维护和修改。输入文件中供TableGen处理的信息以声明式风格编码,信息包括类和记录。内部化的记录被传递到各种后端,后端从记录的子集中提取信息,并生成一个或多个输出文件。这些输出文件通常是C++的.inc文件,但也可以是后端开发人员需要的任何其他类型的文件。本文档将详细介绍LLVM

2022-06-30 18:37:27 699

翻译 将VM放入TVM:Relay虚拟机

Relay是一种新的程序表示方法,它实现了大量机器学习程序的表示和优化。不幸的是,在引入支持更有表现力的程序集的同时,我们也引入了一些新的执行上的挑战。Relay的解释器可以执行完整的语言,但是有明显的限制,这使得它不适合生产部署。它被构造成通过遍历AST来执行程序的低效解释器。这种方法在概念上很简单,但效率很低,因为AST遍历严重依赖于间接性。在编译动态代码方面还有更多的挑战,比如动态调度和内存分配、完全动态张量形状和控制流。解释器为这些提供了简单的解决方案,但没有一个是足够引人注目或优化的。第二种执行机

2022-06-28 10:12:31 266

翻译 TVM调试器

TVM调试器是一个调试TVM计算图执行的接口。它有助于在TVM运行时提供对图结构和张量值的访问。图经过relay优化后,以json序列化格式存储。json文件中包含了图的全部信息。UX可以直接使用这个图,也可以将这个图转换成UX可以理解的格式。下面将解释Graph JSON格式1. nodes:在json中,节点代表占位符或计算节点。节点存储为一个列表。节点包含以下信息:(1)flatten_data:是否需要在执行前将数据扁平化(2)func_name:融合后的函数名,对应于Relay编译过程生成的库中的

2022-06-27 11:16:12 558 1

翻译 TVM运行时系统

本文翻译自TVM Runtime System — tvm 0.9.dev0 documentationTVM的编译器栈开发和部署支持多种编程语言。在本文中,我们将解释TVM运行时的关键元素。我们需要满足一些有趣的需求:我们希望能够用任何语言定义函数,并在另一种语言中调用该函数。我们还希望最小化运行时核心,以便部署到嵌入式设备上。PackedFunc是我们找到的解决上述挑战的一个简单而优雅的解决方案。一个单独的PackedFunc对象表示一个调用者和被调用者可能使用不同语言的函数调用。下面的代码块提供了一个

2022-06-26 16:45:22 416

翻译 设计和架构

本文档适用于想要了解TVM架构和/或积极参与项目开发的开发人员。本页面组织如下:本指南提供了体系结构的一些补充视图。首先,我们回顾一个单一的端到端编译流,并讨论关键数据结构和转换。这个基于运行时的视图主要关注运行编译器时每个组件的交互。然后我们将回顾代码库的逻辑模块及其关系。这一部分提供了一个静态的总体设计视图。在本指南中,我们将学习编译器中的一个编译流程示例。下图显示了该流程。在高层次上,它包含几个步骤:设计和理解复杂系统的最佳方法之一是识别关键数据结构,和操作(转换)这些数据结构的API。一旦确定了关键

2022-06-07 09:51:53 270

翻译 在TVM中添加自己的代码生成器

本文翻译自Bring Your Own Codegen To TVM — tvm 0.9.dev0 documentation随着深度学习工作负载所针对的硬件设备数量不断增加,用户在各种设备上实现高性能所需的知识也不断增加。为了让数据科学家在开发新模型时不必担心性能问题,硬件后端提供商要么提供有许多常用的深度学习算子的库(譬如MKLDNN或cuDNN),要么提供框架(譬如TensorRT),让用户以某种方式描述自己的模型,以实现高性能。然而,用户在尝试使用新的库或设备时,必须学习新的编程接口。因此,对统一编

2022-06-05 23:31:52 754

翻译 在Relay中添加一个编译pass

本文翻译自Adding a Compiler Pass to Relay — tvm 0.9.dev0 documentation编译器pass是扩展Relay特性集和对Relay程序进行优化的主要接口。通过编写编译器pass,您可以修改AST或收集有关AST的信息,这取决于您的目标。事实上,Relay的一些最重要的内部特性(例如自动微分和类型推断)只不过是“标准的”编译器pass。从较高的层次上讲,编写pass有两个关键组件:首先,我们将概述编写编译器pass的关键机制。然后,我们将分析一个Relay常量

2022-06-02 16:41:14 491

翻译 调试TVM

本文翻译自Debuggging TVM — tvm 0.9.dev0 documentationTVM提供了详细日志记录功能,允许提交跟踪级调试消息,而不会影响生成的TVM二进制文件大小或TVM运行时间。你可以在你的代码中像下面这样使用VLOG:在本例中,传递给VLOG()的2表示详细级别。级别越高,打印的日志越多。通常TVM级别从0到2不等,3只用于极低级的核心运行时属性。VLOG系统在启动时被配置为打印0到N之间的VLOG语句。N可以是全局的,也可以是单个文件定义的。vlog默认不打印,不影响二进

2022-06-02 10:06:20 710

原创 TVM官方文档翻译入口

TVM官方文档翻译

2022-06-01 16:47:02 402

翻译 TOPI介绍

本文翻译自Introduction to TOPI — tvm 0.9.dev0 documentation这是TVM算子库(TOPI)的入门教程。TOPI提供numpy风格的通用操作和调度,具有比TVM更高的抽象。在本教程中,我们将看到TOPI如何使我们不用在TVM中编写样板代码。 基础示例让我们重温按行加和运算(等价于B = numpy.sum(A, axis=1))求二维TVM张量A的行和,我们需要指定符号运算和调度为了检查可读的IR代码,我们可以输出: 然而,对于这样一个

2022-06-01 13:38:46 830

翻译 深度学习模型编译快速入门教程

本文翻译自Quick Start Tutorial for Compiling Deep Learning Models — tvm 0.9.dev0 documentation

2022-05-31 16:19:09 655

翻译 交叉编译和RPC

本文翻译自Cross Compilation and RPC — tvm 0.9.dev0 documentation本教程介绍在TVM中交叉编译和使用RPC进行远程设备执行。使用交叉编译和RPC,您可以在本地机器上编译程序,然后在远程设备上运行它。当远程设备资源有限时,它是有用的,如树莓派和移动平台。在本教程中,我们将使用树莓派的CPU示例和萤火虫- rk3399的OpenCL示例。在设备上编译TVM运行时第一步是在远程设备上构建TVM运行时。注意:本节和下一节中的所有指令都应该在

2022-05-31 13:52:42 335

翻译 TensorIR快速入门

本文翻译自Blitz Course to TensorIR — tvm 0.9.dev0 documentationTensorIR是一种用于深度学习程序的特定领域的语言,服务于两个广泛的目的:在各种硬件后端上转换和优化程序的实现。对自动向量化程序优化的抽象。import tvmfrom tvm.ir.module import IRModulefrom tvm.script import tir as Timport numpy as npIRModuleIRModule是

2022-05-13 10:28:13 537

翻译 使用Auto-scheduling优化算子

本文翻译自Optimizing Operators with Auto-scheduling — tvm 0.9.dev0 documentation在本教程中,我们将展示TVM的自动调度功能如何在不编写自定义模板的情况下找到最佳调度。基于模板的AutoTVM通过手写模板来定义搜索空间,而自动调度器不需要任何模板。用户只需要编写计算声明,不需要任何调度命令或模板。自动调度器可以自动生成一个较大的搜索空间,并在这个空间中找到一个好的调度。我们在本教程中使用矩阵乘法作为例子。注意:本教程的代码不

2022-05-12 16:32:02 264

翻译 使用调度模板和AutoTVM优化算子

本文翻译自Optimizing Operators with Schedule Templates and AutoTVM — tvm 0.9.dev0 documentation在本教程中,我们将展示如何使用TVM张量表达式(TE)语言来编写调度模板,AutoTVM可以搜索这些模板来找到最佳的调度。这个过程被称为自动调优,它有助于优化张量计算的过程的自动化。本教程建立在上一篇关于如何使用TE编写矩阵乘法的教程的基础上。自动调优有两个步骤。第一步是定义搜索空间。 第二步是运行搜索算法来探索

2022-05-11 18:48:45 418

翻译 【TVM帮助文档学习】使用张量表达式处理算子

本文翻译自Working with Operators Using Tensor Expression — tvm 0.9.dev0 documentation

2022-05-11 11:10:35 614

翻译 【TVM帮助文档学习】使用Python接口编译和优化模型(AutoTVM)

本文翻译自:Compiling and Optimizing a Model with the Python Interface (AutoTVM) — tvm 0.9.dev0 documentation在Compiling and Optimizing a Model with TVMC — tvm 0.9.dev0 documentation中,我们介绍了如何使用TVM的命令行界面来编译、运行和调优预训练的视觉模型ResNet-50 v2。TVM不仅仅是一个命令行工具,它还是一个优化框架,带有许.

2022-05-07 10:55:03 686

翻译 【TVM帮助文档学习】开始使用TVMC Python: TVM的高级API

本文翻译自Getting Starting using TVMC Python: a high-level API for TVM — tvm 0.9.dev0 documentation首先我们需要准备好示例使用resnet模型。如果你还没有的话,可以按以下步骤下载:mkdir myscriptscd myscriptswget https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet.

2022-05-06 15:41:59 693 1

翻译 【TVM帮助文档学习】使用TVMC编译和优化模型

本文翻译自Compiling and Optimizing a Model with TVMC — tvm 0.9.dev0 documentation在本节中,我们将使用TVM命令行驱动程序TVMC。TVMC是一个工具,它通过命令行接口公开TVM特性,如模型的自动调优、编译、分析和执行。在完成这部分工作后,我们将利用TVMC完成以下工作:为TVM运行时编译一个训练好的ResNet-50 v2模型。 在编译后的模型中运行一个真实的图像,并解释输出和模型性能。 使用TVM在CPU上调优模型。.

2022-04-29 20:34:37 1368 1

翻译 【TVM帮助文档学习】TVM及模型优化综述

下图说明了使用TVM优化编译器框架转换机器学习模型的步骤。1.从Tensorflow、PyTorch或Onnx等框架导入模型。导入层是TVM可以从其他框架(如Tensorflow、PyTorch或ONNX)中吸收模型的地方。TVM为每个前端提供的支持水平随着我们不断改进开源项目而提高。当导入模型到TVM有问题时,可以尝试将它先转换到ONNX。2.转换为Relay。Relay是TVM的高级模型语言。导入TVM的模型用Relay表示。Relay是一种用于神经网络的函数式语言和中间表示。它支持:...

2022-04-25 13:29:17 901

翻译 【TVM帮助文档学习】通过示例分析TVM代码流程

了解TVM代码颇具挑战性,它的各组件之间的交互非常隐晦。 在本指南中,我们将通过一个简单的示例来说明模型编译过程中的关键组成。 对于每一个重要的步骤,我们都展示了它在代码库中的实现位置,以便新开发人员和感兴趣的用户更快地深入代码库。代码结构概述在TVM代码仓库根目录下有如下子目录,它们组成了TVM代码库:src- 算子编译和部署运行时C++代码 src/relay-Relay(一种用于深度学习框架的函数式IR)的实现 python- src中C++函数和对象的Python封装前端....

2022-04-24 07:28:15 1152

原创 softmax学习笔记

在深度学习中,使用 Softmax 作为激活函数,对 0 到 1 之间的向量中每个值的输出和尺度进行归一化。Softmax 用于分类任务。在网络的最后一层,会生成一个 N 维向量,分类任务中的每个类对应一个向量。Softmax是给每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。计算公式:其中 z(i)为第i个节点的输出值,C为输出节点的个数,即分类的类别个数。通过Softmax函数就可以将多分类的输出值转换为范围在[0, 1]和为1的概率分布。softmax将前一级的输出

2022-04-11 17:11:19 744 1

翻译 【TVM帮助文档学习】混合前端语言参考

本文翻译自Hybrid Frontend Language Reference — tvm 0.9.dev0 documentation概述这种混合前端允许用户编写一些尚未得到TVM官方支持的习惯用法的初步版本特征软件仿真同时支持软件仿真和编译。在定义一个函数时,你需要使用tvm.te.hybrid.script装饰器来指示它是一个混合函数: @tvm.te.hybrid.scriptdef outer_product(a, b): c = output_tensor..

2022-04-11 14:23:24 227

翻译 【TVM帮助文档学习】Relay的模式匹配

在TVM中,我们在很多地方会识别Relay程序的纯数据流子图,并尝试以某种方式对它们进行转换,包括融合、量化、外部代码生成等passes, 以及针对特定设备的优化,比如VTA使用的bitpacking和和layer slicing等。如今,许多这样的pass需要大量枯燥的样板代码来实现,同时还需要用户从访问者和AST匹配的角度来考虑。这里面很多转换可以很容易地用图重写来描述。为了构建一个重写器或其他高级机制,我们首先需要一种模式语言来描述我们可以匹配的内容。这种语言不仅对构建重写器有用,而且还为现有

2022-04-10 15:10:44 875 2

翻译 【TVM帮助文档学习】Relay的代数数据类型

本文翻译自Algebraic Data Types in Relay — tvm 0.9.dev0 documentation代数数据类型(ADT)是函数式编程语言的主要特征,尤其是那些派生自ML的语言,因为它们表示数据结构的方式在编写递归计算时很容易推理。因为递归是Relay中控制流的主要机制之一,所以为了最优地表达循环和其他必须使用递归实现的控制流结构,引入ADT是非常重要。ADT定义和匹配注意:目前文本格式不支持ADT。这里的语法是基于其他语言中的ADT推测的。ADT可以理解为类C语言中枚举和

2022-04-08 19:12:48 407

翻译 【TVM帮助文档学习】Relay的类型系统

本文翻译自Relay’s Type System — tvm 0.9.dev0 documentation在介绍Relay表达式细节时,我们简单的涉及了Relay的类型,但是还没有详细描述整个类型系统。Relay是一种静态类型和类型推断语言,它在允许程序完全类型化的同时,只需要少量的显式的类型说明。静态类型在执行编译器优化时非常有用,因为它们可以传递程序所处理的数据的属性,例如运行时形状、数据布局和存储,而无需运行程序。Relay的代数数据类型允许轻松、灵活地组合类型,以便构建可以归纳推理和用于编写递

2022-04-06 19:46:15 565

原创 激活函数学习

记录下激活函数讲解比较完备详细的博客常用激活函数(激励函数)理解与总结深度学习—激活函数详解(Sigmoid、tanh、ReLU、ReLU6及变体P-R-Leaky、ELU、SELU、Swish、Mish、Maxout、hard-sigmoid、hard-swishGLU...

2022-04-01 16:18:45 68

翻译 【TVM帮助文档学习】TVM语言参考

Relay 是一种函数式的、可微的编程语言。它是一种面对机器学习领域的具有良好表达能力的IR(intermediate representation 中间表达)。Relay支持代数数据类型,闭包,控制流和递归,这使得它可以直接表示比基于计算图IR的(模型)更复杂的模型。Relay还包括一种使用type relation的依赖类型形式,用来处理对参数shape有复杂要求的算子的shape分析。 Relay具有良好的可扩展的,便于机器学习研究人员和开发者开发新的大规模程序转换和优化。下面将分别描述了Relay

2022-04-01 13:55:53 293

翻译 【TVM帮助文档学习】Relay表达式

Relay IR是一种纯粹的、面向表达式的语言。下面的小节描述了Relay中的不同表达式,并详细说明了它们的语义。数据流和控制片段为了比较Relay和传统的基于计算图形的IR,可以从数据流和控制片段的角度看Relay表达式。在编写和表示转换时,如果Relay的某个片段仅仅只包含影响数据流的表达式,那么这个片段可以看作是一个传统的计算图。数据流片段涵盖了不涉及控制流的Relay表达式集。也就是说,程序的任何只包含以下结构的部分,对应于一个纯计算图:变量 Tuple构造和投影 Let Bind

2022-04-01 13:51:21 916 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除