牛牛存
码龄7年
关注
提问 私信
  • 博客:60,746
    60,746
    总访问量
  • 31
    原创
  • 671,330
    排名
  • 53
    粉丝
  • 0
    铁粉

个人简介:决定变得勤快的小懒

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2018-05-08
博客简介:

weixin_42164269的博客

查看详细资料
个人成就
  • 获得30次点赞
  • 内容获得2次评论
  • 获得118次收藏
  • 代码片获得123次分享
创作历程
  • 14篇
    2020年
  • 17篇
    2019年
  • 7篇
    2018年
成就勋章
TA的专栏
  • TVM Relay
    25篇
  • tvm
    14篇
  • 深度学习
    7篇
  • windows常用
    2篇
  • linux常用
    3篇
  • 神经网络加速
    1篇
兴趣领域 设置
  • 人工智能
    opencv机器学习深度学习神经网络tensorflowmxnetpytorch分类
  • 嵌入式
    单片机嵌入式硬件
  • 硬件开发
    硬件工程驱动开发fpga开发dsp开发arm开发硬件架构pcb工艺
创作活动更多

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

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

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

TVM运行系统

TVM运行系统TVM支持多种编程语言用于编译器堆栈的开发和部署。在本说明中,我们解释了TVM运行时的关键元素。转存失败重新上传取消我们需要满足很多有趣的要求: 部署:从python / javascript / c ++语言调用已编译的函数。 调试:在python中定义一个函数,然后从已编译函数调用该函数。 链接:编写驱动程序代码以调用设备专用代码(CUDA)...
原创
发布博客 2020.03.06 ·
1415 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

模块序列化简介

模块序列化简介部署TVM运行时模块时,无论是CPU还是GPU,TVM都只需要一个动态共享库。关键是我们统一的模块序列化机制。本文档将介绍TVM模块序列化格式标准和实现细节。模块导出实施例让我们首先为GPU构建一个ResNet-18工作负载作为示例。from tvm import relayfrom tvm.relay import testingfrom tvm....
原创
发布博客 2020.03.06 ·
536 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

混合前端开发人员指南

混合前端开发人员指南如果您是开发人员:1.谁正在尝试编写一些TVM尚不支持的初步模式,也许“混合前端语言参考”对您来说是一个更好的地方。 谁想知道这个模块的实现细节,您就在这里! 功能软件仿真在软件仿真中,最有趣的是装饰器tvm.hybrid.script。这个装饰器可以帮助两件事: 导入运行时变量 根据传递的参数重载函数 如果我错了,请纠正我:...
原创
发布博客 2020.02.13 ·
379 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

调试

调试TVM调试器是用于调试TVM计算图执行的接口。它有助于在TVM运行时提供对图形结构和张量值的访问。调试交换格式1.计算图通过中继以json序列化格式构建的优化图按原样转储。这包含有关图形的全部信息。UX可以直接使用此图,也可以将此图转换为UX可以理解的格式。图表JSON格式说明如下1.nodes节点是json中的占位符或计算节​​点。节点存储为列表。一个节...
原创
发布博客 2020.02.13 ·
478 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

基准性能日志格式

基准性能日志格式此页面详细描述了用于统一基准日志格式的模式v0.1。这种模式将允许与其他框架/运行,实验再现,夜间性能回归数据以及日志记录/可视化工作分离的更容易的交叉引用。日志格式概述为简单起见,我们建议优先考虑字段工作负载,引擎,硬件runtime_ms_mean和runtime_ms_std。对于更细粒度的日志记录,可以另外传播* _config字段。 标头...
原创
发布博客 2020.02.13 ·
208 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

InferBound通

InferBound通InferBound传递在规范化之后和ScheduleOpsbuild_module.py之前运行。InferBound的主要工作是创建边界图,该边界图为程序中的每个IterVar指定一个Range。然后将这些边界传递给ScheduleOps,在其中它们用于设置For循环的范围,请参见MakeLoopNest,并设置分配的缓冲区的大小(BuildRealize),...
原创
发布博客 2020.02.13 ·
1188 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

Convert Layout Pass

转换布局通行证作者:Animesh Jain1.背景数据布局格式描述了如何在内存中布置数据。例如,卷积运算符的Tensorflow框架默认数据布局为NHWC,即数据为4维,并以行为主格式进行布局,其中N为第一维,C为最后一维。数据布局在模型性能中起主要作用,对空间和时间局部性有重大影响。例如,TVM中的Intel x86后端更喜欢使用布局作为NCHWc,其中C维被平铺为2维,以有效利...
原创
发布博客 2020.02.13 ·
1124 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TVM代码库演练示例

TVM代码库演练示例了解新的代码库可能是一个挑战。对于像TVM这样的代码库,尤其如此,其中不同的组件以非显而易见的方式交互。在本指南中,我们尝试通过一个简单的示例来说明构成编译管道的关键元素。对于每个重要步骤,我们都会显示在代码库中的哪个位置。目的是让新开发人员和感兴趣的用户更快地进入代码库。代码库结构概述在TVM存储库的根目录中,我们具有以下子目录,这些子目录一起构成了大部分代码库...
原创
发布博客 2020.02.13 ·
1370 阅读 ·
0 点赞 ·
0 评论 ·
6 收藏

将VM放入TVM:中继虚拟机

将VM放入TVM:中继虚拟机Relay是一种新的程序表示形式,它可以表示和优化大量的机器学习程序。不幸的是,通过支持一组更具表现力的程序,我们引入了一些新的执行挑战。Relay的解释器可以执行完整的语言,但是有明显的限制,使其不适合生产部署。它被构造为执行AST遍历以执行程序的低效率解释器。这种方法在概念上很简单,但是效率很低,因为AST遍历很大程度上依赖于间接。编译动态代码还面临其他...
原创
发布博客 2020.02.13 ·
1457 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

把你自己的代码生成TVM 

把你自己的代码生成要TVM随着深度学习工作负载所针对的硬件设备的数量不断增加,用户在各种设备上实现高性能所需的知识也在不断增加。为了使数据科学家不必担心开发新模型时的性能,硬件后端提供程序要么为MKLDNN或cuDNN之类的库提供许多常用的深度学习运算符,要么提供诸如TensorRT的框架以使用户以某种方式描述其模型实现高性能。但是,用户尝试在新的库或设备上工作时必须学习新的编程界面。结果,...
原创
发布博客 2020.02.13 ·
2029 阅读 ·
3 点赞 ·
0 评论 ·
5 收藏

将编译器转换添加到Relay

将编译器传递添加到中继编译器通道是扩展Relay功能集和对Relay程序执行优化的主要接口。通过编写编译器通道,可以根据您的目标来修改AST或收集有关AST的信息。确实,Relay的一些最重要的内置功能(例如,autodiff和类型推断)仅是“标准”编译器传递。总体而言,编写通行证有两个关键要素: 创建一个或多个遍历程序的C ++类 在遍历管理器API中包装遍历实现及其元数...
原创
发布博客 2020.02.13 ·
1033 阅读 ·
2 点赞 ·
1 评论 ·
2 收藏

Relay传递基础架构

中继传递基础架构中继具有一系列优化过程,可改进模型的性能指标,例如特定设备的平均推断,内存占用量或功耗。有一套标准优化以及特定于机器学习的优化,包括恒定折叠,消除死代码,更改操作员布局和操作员融合等。这些步骤中的每一个都被构造为抽象上的中继到中继转换语法树(AST),使用遍历期间和/或之前收集的分析结果。但是,随着Relay的快速发展,对管理这些通道的更加系统和有效的方法的需求...
原创
发布博客 2020.02.13 ·
1743 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

向Relay中添加操作符

目录 注册操作符创建一个调用节点引用一个Python API梯度运算符在Python中添加梯度在C ++中添加求导总结为了从Relay IR中使用TVM操作符,需要在Relay中注册操作符,以确保将其集成到Relay的类型系统中。注册操作符需要三个步骤: 使用C ++中的宏RELAY_REGISTER_OP注册操作符的Arity和类型信息...
原创
发布博客 2020.02.11 ·
876 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Relay中间表示介绍

目录介绍用Relay构建一个计算图介绍这篇文章介绍Relay——第二代NNVM。我们期望的读者有两类背景,有编程语言开发经历和对计算图表示熟悉的深度学习框架开发人员。我们在这里简要总结设计目标,并将在本文的后半部分涉及这些要点。 支持传统的数据流样式的编程和转换。 支持功能样式的作用域,绑定并使其成为功能齐全的可区分语言。 能够允许用户混合两种编...
翻译
发布博客 2020.01.22 ·
1939 阅读 ·
1 点赞 ·
0 评论 ·
7 收藏

tvm.relay学习(十一)——relay let绑定

Let绑定是不可变的局部变量绑定,允许用户将表达式绑定到名称。Let绑定包含一个局部变量,一个可选的类型注释,一个值和一个可以引用绑定标识符的主体表达式。 如果省略了绑定变量上的类型注释,则Relay会尝试推断该变量允许的最通用类型。Let表达式中的绑定变量仅在其主体范围内,除非该变量定义了函数表达式。 当Let表达式创建函数时,该变量的值也在范围内,以允许递归定义的函数。Let绑定的...
原创
发布博客 2019.12.06 ·
1196 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

tvm.relay学习(十)——relay元组

1.元组构造:元组节点构建异构数据的有限(即静态已知大小)序列。 这些元组与Python紧密匹配,并且其固定长度可以有效地映射其成员。fn(%a : Tensor[(10, 10), float32], %b : float32, %c : Tensor[(100, 100), float32]) { let %tup = (%a, %b); // type: (Tens...
原创
发布博客 2019.12.06 ·
572 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

tvm.relay学习(九)——relay常量

此节点表示一个恒定的张量值。 常数表示为NDArray,从而允许Relay利用TVM运算符进行常数评估。由于标量是形状为()的张量,因此该节点也可以表示标量常量。 因此,在文本格式中,数字和布尔文字是用于编码具有零秩形状的张量类型的常量的语法糖。...
原创
发布博客 2019.12.06 ·
401 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

tvm.relay学习(八)——relay模块和全局函数

Relay保留称为“模块”(在其他功能编程语言中通常称为“环境”)的全局数据结构,以跟踪全局函数的定义。 特别是,模块保持全局变量到它们表示的函数表达式的全局可访问映射。 该模块的实用性是它允许全局函数递归引用自己或任何其他全局函数(例如,在相互递归中)。注意Relay的模块类似于数据结构,用于跟踪基于计算图的IR中的子图。Relay中的全局函数的行为与“函数”中定义的函数表达式相同,但具有文...
原创
发布博客 2019.12.06 ·
1114 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

tvm.relay学习(七)——Relay调用

Relay中具有函数类型的表达式是“可调用的”,这意味着它们可以通过函数调用来调用。 这些由计算结果为闭包的任何表达式(即函数表达式或全局函数)和Relay运算符组成。调用的语法遵循类似C的语言所使用的语法,如以下示例所示:let %c = 1;let %f = fn(%x : Tensor[(), float32], %y : Tensor[(), float32]) { %x + ...
原创
发布博客 2019.12.06 ·
743 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

tvm.relay学习(六)——ADT(代数数据类型)构造

在本节中,我们将简单地注意到ADT(代数数据类型)构造函数被赋予函数类型,并且应在函数或操作符之类的调用节点内使用。通过提供其构造的ADT(代数数据类型)的名称(全局类型变量)和该构造函数的预期参数的类型,可以定义ADT(代数数据类型)构造函数。如果ADT(代数数据类型)定义包括类型变量,则这些类型变量可能会出现在构造函数中。构造函数不能包含任何其他类型的变量。让我们假设这D是一个ADT(...
原创
发布博客 2019.12.06 ·
812 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多