zxros10
码龄7年
关注
提问 私信
  • 博客:49,745
    社区:86
    49,831
    总访问量
  • 20
    原创
  • 383,328
    排名
  • 32
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:湖北省
  • 加入CSDN时间: 2017-12-08
博客简介:

zx_ros的博客

查看详细资料
个人成就
  • 获得32次点赞
  • 内容获得15次评论
  • 获得88次收藏
  • 代码片获得379次分享
创作历程
  • 50篇
    2022年
成就勋章
TA的专栏
  • TVM源码分析
    15篇
  • LLVM 
  • LLVM TableGen
    2篇
  • TVM官方文档翻译
    29篇
  • TVM学习
  • 算子学习
    3篇
兴趣领域 设置
  • 人工智能
    opencv计算机视觉机器学习深度学习神经网络tensorflow图像处理
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

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

在relay ir低级化之前分配内存,然后统计各种内存大小
原创
发布博客 2022.08.05 ·
467 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

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

relay ir低级化之前的内存分配
原创
发布博客 2022.08.02 ·
805 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

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

代码生成接口Codegen的初步分析
原创
发布博客 2022.07.29 ·
763 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

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

模型编译的流程和初步分析
原创
发布博客 2022.07.28 ·
836 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

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

TVM源码学习笔记入口
原创
发布博客 2022.07.22 ·
949 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

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

from_onnx将onnx模型转换为tvm relay ir
原创
发布博客 2022.07.21 ·
1484 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

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

tvm模型编译运行步骤
原创
发布博客 2022.07.21 ·
716 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

pass基础设施

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

TabaleGen介绍

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

Device/Target交互

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

TableGen程序员参考

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

将VM放入TVM:Relay虚拟机

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

TVM运行时系统

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

设计和架构

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

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

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

在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 ·
559 阅读 ·
1 点赞 ·
0 评论 ·
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 ·
809 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TVM官方文档翻译入口

TVM官方文档翻译
原创
发布博客 2022.06.01 ·
470 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏
加载更多