TVM官方文档翻译
文章平均质量分 86
TVM官方帮助文档翻译
zxros10
这个作者很懒,什么都没留下…
展开
-
pass基础设施
Relay和TVM IR都包含一系列优化pass,用于改善模型的性能指标,如平均推断、内存占用或特定设备的功耗。有一套标准的优化和机器学习特有的优化,包括常量折叠、死代码消除、算子布局更改、算子融合、缓冲区处理和循环转换等。通过使用遍历期间和/或遍历之前收集的分析结果,将每个pass都被构造为ir-to-ir转换。然而,随着TVM的迅速发展,对这些pass进行更系统和更有效管理的需求变得越来越明显。另外,一个管理跨TVM栈不同层(如Relay和tir)的pass的通用框架,为开发人员快速原型化和将实现的pa翻译 2022-07-05 16:20:42 · 950 阅读 · 0 评论 -
Device/Target交互
本文翻译自Device/Target Interactions — tvm 0.9.dev0 documentation本文档是为有兴趣了解TVM框架如何与特定设备API交互的开发人员编写的,或者希望实现对新API或新硬件的支持的开发人员编写的。任何新的运行时环境都必须实现三个主要方面。DeviceAPI类为特定设备提供了一个句柄,以及用于与之交互的API。它定义了一个通用接口,用于查询设备参数(例如可用内存、线程数量等)和执行简单操作(例如从主机复制内存,或在设备的缓冲区之间复制内存)。Target类包含翻译 2022-07-03 10:21:25 · 253 阅读 · 0 评论 -
模块序列化介绍
部署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 · 276 阅读 · 0 评论 -
将VM放入TVM:Relay虚拟机
Relay是一种新的程序表示方法,它实现了大量机器学习程序的表示和优化。不幸的是,在引入支持更有表现力的程序集的同时,我们也引入了一些新的执行上的挑战。Relay的解释器可以执行完整的语言,但是有明显的限制,这使得它不适合生产部署。它被构造成通过遍历AST来执行程序的低效解释器。这种方法在概念上很简单,但效率很低,因为AST遍历严重依赖于间接性。在编译动态代码方面还有更多的挑战,比如动态调度和内存分配、完全动态张量形状和控制流。解释器为这些提供了简单的解决方案,但没有一个是足够引人注目或优化的。第二种执行机翻译 2022-06-28 10:12:31 · 305 阅读 · 0 评论 -
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 · 610 阅读 · 1 评论 -
TVM运行时系统
本文翻译自TVM Runtime System — tvm 0.9.dev0 documentationTVM的编译器栈开发和部署支持多种编程语言。在本文中,我们将解释TVM运行时的关键元素。我们需要满足一些有趣的需求:我们希望能够用任何语言定义函数,并在另一种语言中调用该函数。我们还希望最小化运行时核心,以便部署到嵌入式设备上。PackedFunc是我们找到的解决上述挑战的一个简单而优雅的解决方案。一个单独的PackedFunc对象表示一个调用者和被调用者可能使用不同语言的函数调用。下面的代码块提供了一个翻译 2022-06-26 16:45:22 · 501 阅读 · 0 评论 -
设计和架构
本文档适用于想要了解TVM架构和/或积极参与项目开发的开发人员。本页面组织如下:本指南提供了体系结构的一些补充视图。首先,我们回顾一个单一的端到端编译流,并讨论关键数据结构和转换。这个基于运行时的视图主要关注运行编译器时每个组件的交互。然后我们将回顾代码库的逻辑模块及其关系。这一部分提供了一个静态的总体设计视图。在本指南中,我们将学习编译器中的一个编译流程示例。下图显示了该流程。在高层次上,它包含几个步骤:设计和理解复杂系统的最佳方法之一是识别关键数据结构,和操作(转换)这些数据结构的API。一旦确定了关键翻译 2022-06-07 09:51:53 · 342 阅读 · 0 评论 -
在TVM中添加自己的代码生成器
本文翻译自Bring Your Own Codegen To TVM — tvm 0.9.dev0 documentation随着深度学习工作负载所针对的硬件设备数量不断增加,用户在各种设备上实现高性能所需的知识也不断增加。为了让数据科学家在开发新模型时不必担心性能问题,硬件后端提供商要么提供有许多常用的深度学习算子的库(譬如MKLDNN或cuDNN),要么提供框架(譬如TensorRT),让用户以某种方式描述自己的模型,以实现高性能。然而,用户在尝试使用新的库或设备时,必须学习新的编程接口。因此,对统一编翻译 2022-06-05 23:31:52 · 885 阅读 · 0 评论 -
在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 · 550 阅读 · 0 评论 -
调试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 · 796 阅读 · 0 评论 -
TVM官方文档翻译入口
TVM官方文档翻译原创 2022-06-01 16:47:02 · 466 阅读 · 0 评论 -
【TVM帮助文档学习】通过示例分析TVM代码流程
了解TVM代码颇具挑战性,它的各组件之间的交互非常隐晦。 在本指南中,我们将通过一个简单的示例来说明模型编译过程中的关键组成。 对于每一个重要的步骤,我们都展示了它在代码库中的实现位置,以便新开发人员和感兴趣的用户更快地深入代码库。代码结构概述在TVM代码仓库根目录下有如下子目录,它们组成了TVM代码库:src- 算子编译和部署运行时C++代码 src/relay-Relay(一种用于深度学习框架的函数式IR)的实现 python- src中C++函数和对象的Python封装前端....翻译 2022-04-24 07:28:15 · 1255 阅读 · 0 评论 -
【TVM帮助文档学习】使用张量表达式处理算子
本文翻译自Working with Operators Using Tensor Expression — tvm 0.9.dev0 documentation翻译 2022-05-11 11:10:35 · 697 阅读 · 0 评论 -
【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 · 269 阅读 · 0 评论 -
【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 · 457 阅读 · 0 评论 -
使用调度模板和AutoTVM优化算子
本文翻译自Optimizing Operators with Schedule Templates and AutoTVM — tvm 0.9.dev0 documentation在本教程中,我们将展示如何使用TVM张量表达式(TE)语言来编写调度模板,AutoTVM可以搜索这些模板来找到最佳的调度。这个过程被称为自动调优,它有助于优化张量计算的过程的自动化。本教程建立在上一篇关于如何使用TE编写矩阵乘法的教程的基础上。自动调优有两个步骤。第一步是定义搜索空间。 第二步是运行搜索算法来探索翻译 2022-05-11 18:48:45 · 464 阅读 · 0 评论 -
【TVM帮助文档学习】Relay的类型系统
本文翻译自Relay’s Type System — tvm 0.9.dev0 documentation在介绍Relay表达式细节时,我们简单的涉及了Relay的类型,但是还没有详细描述整个类型系统。Relay是一种静态类型和类型推断语言,它在允许程序完全类型化的同时,只需要少量的显式的类型说明。静态类型在执行编译器优化时非常有用,因为它们可以传递程序所处理的数据的属性,例如运行时形状、数据布局和存储,而无需运行程序。Relay的代数数据类型允许轻松、灵活地组合类型,以便构建可以归纳推理和用于编写递翻译 2022-04-06 19:46:15 · 633 阅读 · 0 评论 -
【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 · 1456 阅读 · 1 评论 -
使用Auto-scheduling优化算子
本文翻译自Optimizing Operators with Auto-scheduling — tvm 0.9.dev0 documentation在本教程中,我们将展示TVM的自动调度功能如何在不编写自定义模板的情况下找到最佳调度。基于模板的AutoTVM通过手写模板来定义搜索空间,而自动调度器不需要任何模板。用户只需要编写计算声明,不需要任何调度命令或模板。自动调度器可以自动生成一个较大的搜索空间,并在这个空间中找到一个好的调度。我们在本教程中使用矩阵乘法作为例子。注意:本教程的代码不翻译 2022-05-12 16:32:02 · 285 阅读 · 0 评论 -
【TVM帮助文档学习】TVM语言参考
Relay 是一种函数式的、可微的编程语言。它是一种面对机器学习领域的具有良好表达能力的IR(intermediate representation 中间表达)。Relay支持代数数据类型,闭包,控制流和递归,这使得它可以直接表示比基于计算图IR的(模型)更复杂的模型。Relay还包括一种使用type relation的依赖类型形式,用来处理对参数shape有复杂要求的算子的shape分析。 Relay具有良好的可扩展的,便于机器学习研究人员和开发者开发新的大规模程序转换和优化。下面将分别描述了Relay翻译 2022-04-01 13:55:53 · 324 阅读 · 0 评论 -
【TVM帮助文档学习】Relay的模式匹配
在TVM中,我们在很多地方会识别Relay程序的纯数据流子图,并尝试以某种方式对它们进行转换,包括融合、量化、外部代码生成等passes, 以及针对特定设备的优化,比如VTA使用的bitpacking和和layer slicing等。如今,许多这样的pass需要大量枯燥的样板代码来实现,同时还需要用户从访问者和AST匹配的角度来考虑。这里面很多转换可以很容易地用图重写来描述。为了构建一个重写器或其他高级机制,我们首先需要一种模式语言来描述我们可以匹配的内容。这种语言不仅对构建重写器有用,而且还为现有翻译 2022-04-10 15:10:44 · 969 阅读 · 2 评论 -
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 · 612 阅读 · 0 评论 -
深度学习模型编译快速入门教程
本文翻译自Quick Start Tutorial for Compiling Deep Learning Models — tvm 0.9.dev0 documentation翻译 2022-05-31 16:19:09 · 710 阅读 · 0 评论 -
【TVM帮助文档学习】Relay表达式
Relay IR是一种纯粹的、面向表达式的语言。下面的小节描述了Relay中的不同表达式,并详细说明了它们的语义。数据流和控制片段为了比较Relay和传统的基于计算图形的IR,可以从数据流和控制片段的角度看Relay表达式。在编写和表示转换时,如果Relay的某个片段仅仅只包含影响数据流的表达式,那么这个片段可以看作是一个传统的计算图。数据流片段涵盖了不涉及控制流的Relay表达式集。也就是说,程序的任何只包含以下结构的部分,对应于一个纯计算图:变量 Tuple构造和投影 Let Bind翻译 2022-04-01 13:51:21 · 1011 阅读 · 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 · 979 阅读 · 0 评论 -
【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 · 733 阅读 · 1 评论 -
【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 · 729 阅读 · 0 评论 -
交叉编译和RPC
本文翻译自Cross Compilation and RPC — tvm 0.9.dev0 documentation本教程介绍在TVM中交叉编译和使用RPC进行远程设备执行。使用交叉编译和RPC,您可以在本地机器上编译程序,然后在远程设备上运行它。当远程设备资源有限时,它是有用的,如树莓派和移动平台。在本教程中,我们将使用树莓派的CPU示例和萤火虫- rk3399的OpenCL示例。在设备上编译TVM运行时第一步是在远程设备上构建TVM运行时。注意:本节和下一节中的所有指令都应该在翻译 2022-05-31 13:52:42 · 358 阅读 · 0 评论 -
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 · 910 阅读 · 0 评论