【TVM教程】张量程序抽象

TVM实现hardware backend TVM实现hardware backend 官方的矩阵相加的示例如下: 2个矩阵相加的实现 for (int i = 0; i < n; ++i) { C[i] = A[i] + B[i]; } 怎么优化? 可以并行相加,如下 for (int bx = 0; bx < ceil(n / 64); ++bx) { for (int tx = 0; tx < 64; ++tx) { int i = bx * 64 + tx; if (i < n) { C[i] = A[i] + B[i 阅读详情

TVM 现已更新到 0.21.0 版本,TVM 中文文档已经和新版本对齐。

Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。

在线运行 TVM 学习教程→https://go.hyper.ai/PEh1Q

在深入了解 TensorIR 之前,我们先介绍什么是原始张量函数(primitive tensor function)。原始张量函数指的是代表单个「计算单元」的函数。例如,一个卷积操作可以是一个原始张量函数,一个融合了卷积与 relu 的操作也可以是一个原始张量函数。通常,原始张量函数的抽象包含以下几个要素:多维缓冲区(multi-dimensional buffers)、驱动张量计算的循环嵌套(loop nests)以及计算语句本身。

from tvm.script import tir as T

@T.prim_func
def main(
    A: T.Buffer((128,), "float32"),
    B: T.Buffer((128,), "float32"),
    C: T.Buffer((128,), "float32"),
) -> None:
    for i in range(128):
        with T.block("C"):
            vi = T.axis.spatial(128, i)
            C[vi] = A[vi] + B[vi]

张量程序的关键元素​

上面展示的原始张量函数计算了两个向量的逐元素加法。这个函数:

  • 接收三个多维缓冲区作为参数,并生成一个多维缓冲区作为输出。
  • 包含一个简单的循环嵌套 i 来驱动计算过程。
  • 包含一个计算语句,用于计算两个向量的逐元素加和。

TensorIR 中的额外结构​

需要注意的是,我们无法对程序执行任意的变换,因为某些计算依赖于循环的顺序。幸运的是,我们关注的大多数原始张量函数具有良好的性质,例如循环迭代之间相互独立。例如,前面的程序中包含了块(block)和迭代(iteration)的注解信息:

  • 块注解 with T.block("C") 表示该块是调度中指定的基本计算单元。一个 block 可以只包含一条计算语句,也可以包含带有循环的多条语句,甚至是一些无法透视的内在指令(如 Tensor Core 指令)。
  • 迭代注解 T.axis.spatial 表示变量 vi 映射到 i,并且所有迭代是独立的。

虽然这些信息对于执行特定程序并非关键,但在变换程序时却非常有用。因此,只要我们访问了索引从 0 到 128 的所有元素,就可以放心地并行化或重排与 vi 相关的循环。

Win11下CH340串口识别失败的终极排查指南:从驱动更新到硬件电路检查 本文提供了Windows 11系统下CH340串口芯片识别失败的全面排查指南。从驱动更新、系统设置等软件层面入手,逐步深入到USB线缆、电源测量等硬件连接检查,并重点剖析了硬件设计细节,如电源退耦电容容值对设备描述符请求的关键影响,最终帮助开发者系统性地定位并解决识别难题。 阅读详情

相关推荐

一生一芯 预学习阶段 NEMU代码学习(2)

如果 nemu_state.state == NEMU_ABORT:说明程序处于 "中止" 状态,输出 "ABORT",并且使用 ANSI_FG_RED 红色格式化显示。如果 halt_ret == 0,表示程序正常终止(触发了 "GOOD TRAP"),输出 "HIT GOOD TRAP",并使用 ANSI_FG_GREEN 绿色显示。如果要执行的指令数量 n 小于预定义的常量 MAX_INST_TO_PRINT,则将 g_print_step 置为 true,表示会逐步打印指令执行的过程。

weixin_45041054的博客 826

机器学习编译入门课程学习笔记第二讲 张量程序抽象

1. 本节课内容大纲 2. 元张量函数 3. 张量程序抽象 3.1 为什么需要进行张量程序抽象 3.2 常见的张量变换 3.2.1 循环拆分 3.2.2 循环重排 3.2.3 线程绑定 3.3 张量程序抽象中的其它结构 4. 张量程序变换实践 4.1 安装包 4.2 构造张量程序 4.3 编译与运行 4.4 张量程序变换 5. 总结...

herosunly的博客 3万+

【MDC开发者实战】多传感器融合算法在自动驾驶中的配置与优化

本文详细介绍了华为MDC平台在自动驾驶中多传感器融合算法的配置与优化实践。通过前融合与后融合技术,结合摄像头、激光雷达和毫米波雷达的数据,提升感知精度与可靠性。文章还分享了ARXML配置、标定技巧、算法调优及性能优化等实战经验,帮助开发者高效实现自动驾驶系统的传感器融合。

weixin_29214199的博客 515

【TVM教程】理解 TensorIR 抽象

TVM 现已更新到 0.21.0 版本,TVM 中文文档已经和新版本对齐。 Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。

HyperAI超神经 642

华为OD新系统机试真题-8位LED控制器(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题【8位LED控制器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统4月19号机试真题【8位LED控制器】

qq_45776114的博客 599

nRF52832——大量数据传输时导致蓝牙断开连接,且无法被搜索到的解决方案(广播参数的设置、程序设计方法)

有时蓝牙通信单次发送数据量较大,且连续发送多次的时候,你会发现蓝牙就会出现异常,可能运行30min,40min,或者1h后,蓝牙就不能传输数据了,且无法被搜索到,用主机扫描蓝牙时可能会提示类似这样的DEBUG信息:bta_gattc_mark_bg_conn unable to find the bg connection mask for bd_addr=xx:xx:xx:xx:xx:xx。

数字世界 万物互联 2004

TVM 学习指南(个人版)

最近粗略的看完了天奇大佬的MLC课程(顺便修了一些语法和拼写错误,也算是做了微弱的贡献hh),对TVM的近期发展有了一些新的认识。之前天奇大佬在《新一代深度学习编译技术变革和展望》一文中(链接:https://zhuanlan.zhihu.com/p/446935289)讲解了TVM Unify也即统一多层抽象的概念。这里的统一多层抽象具体包括AutoTensorization用来解决硬件指令声明和张量程序对接,TVM FFI(PackedFunc)机制使得我们可以灵活地引入任意的算子库和运行库函数并且在各

I good vegetable a! 8518

【CANoe】CAPL_ECU上电后首帧报文发出时间检测

【CANoe】CAPL_ECU上电后首帧报文发出时间检测,通过CANoe I/O口检测电压实现

星Yeah 的博客 2509

机器学习编译第2讲:张量程序抽象

02 张量程序抽象 【MLC-机器学习编译中文版】课程主页:https://mlc.ai/summer22-zh/在本章中,我们将讨论对单个单元计算步骤的抽象以及在机器学习编译中对这些抽象的可能的变换。在上一章的概述中,我们介绍到机器学习编译的过程可以被看作。一个典型的机器学习模型的执行包含许多步将输入张量之间转化为最终预测的计算步骤,其中的每一步都被称为。 在上面这张图中,。特别的是,许多不同的抽象能够表示(和实现)同样的元张量函数(正如下图所示)。我们可以选择调用已经预先编译的框架库(如 torch.a

10点43的博客 1214

VS2022编译xlnt库

xlnt是一个用于读写Excel文件的C++库,本文介绍如何用源代码编译静态或动态xlnt库

QQVQQ的博客 7288

YOLOv13教程:手把手教你CSP_MutilScaleEdgeInformationSelect模块 通过DSM 在空间与局部对比域上做自适应选择

绿色线条为添加CSP_MutilScaleEdgeInformationSelect后的训练效果,map50指标提升12.45,准确率提升5.44。

FJN110的博客 816

机器学习编译(三):张量程序案例 TensorIR

当我们读取内存中的一个元素时,它会尝试将附近的元素(更正式的名称为“缓存行”)获取到缓存中。除了 TensorIR,TVM 中还可以用张量表示(Tensor Expression, TE)来做张量的抽象,这里略过,在介绍 TVM 的文章中再详细介绍。前面我们说了 TensorIR 是 TVM 里最接近硬件的 IR,而 IRModule 是 TVM 中可以编译的最小单位。是 TensorIR 中的基本计算单位。使用张量程序抽象,我们可以在较高层的抽象制定一些与特定硬件无关的较通用的 IR 优化(计算优化)。

RJ_theMag的博客 602

抓包网络调试工具 reqable抓包教程

如果CA根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入CA根证书安装界面,详细步骤请阅读。在API调试中,获取流量是第一步也是最基本的操作,这里讲解下如何使用Reqable获取流量,通俗地讲就是抓包。我们可以选择一个图片请求,双击打开详情面板,能够看到该请求的详细信息。如果系统代理未设置,网络图标是黄色,点击网络图标可以自动设置系统代理。此域名的结构树,可以查看该域名下所有请求的目录结构,点击选择可以查看该请求的详情。首先,需要启用Reqable的调试功能,点击最右上角的。打开浏览器,输入地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2558

TVM[2] —— TVM简介和发展

深度学习编译器学习记录~

ict_rtf的博客 4012

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【TVM系列教程一】深度学习编译器及TVM 介绍

0x0. 介绍大家好呀,在过去的半年到一年时间里,我分享了一些算法解读,算法优化,模型转换相关的一些文章。这篇文章是自己开启学习深度学习编译器的第一篇文章,后续也会努力更新这个系列。这篇文...

算法码上来 2231

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TVM简介

TVM软件栈 工作流程 从已有的深度学习框架中获取一个模型并将此模型转换为计算图表示(深度学习框架的前端主要是计算图表示以及自动梯度); 图中 Section 3 使用一些方法优化当前的计算图得到优化后的计算图(操作融合,可以将多个操作合并为一个kernel,以此节省存储中间结果的空间;数据布局转换,改变计算图中张量的存储方式以适应目标硬件设备并提升执行效率); 图中 Section 4 针对...

MLer 4万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【TVM 教程】如何在 CPU 上优化 GEMM

​应用上述简单优化后,仅用 18 行代码,就可以达到使用 MKLnumpy性能的 60%。注意,网页上的输出反映了非专有 Docker 容器上的运行时间,是不可靠的。推荐自己运行本教程,观察 TVM 的性能提升。下载 Python 源代码:opt_gemm.py下载 Jupyter Notebook:opt_gemm.ipynb。

HyperAI超神经 876

TVM Compiler中文教程:TVM如何优化CPU GEMM(矩阵乘法)

文章目录TVM如何优化CPU GEMM(矩阵乘法)准备和基线Opt1:分块Opt2:向量化Opt3:循环排布permuteOpt4:数组打包Opt5:为块写cacheOpt6:并行 TVM如何优化CPU GEMM(矩阵乘法) TVM提供抽象接口,允许用户分别描述算法和算法的实施组织(所谓的调度Schedule)。通常,写高性能调度的算法时,会破坏算法的可读性和模块性。此外,尝试各种看似有用的调度是...

Mars_WH的专栏 5588

【TVM教程】TVM 运行时系统

TVM 现已更新到 0.21.0 版本,TVM 中文文档已经和新版本对齐。 Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 →Apache TVM

HyperAI超神经 1019

【TVM教程】理解 Relax 抽象层

TVM 现已更新到 0.21.0 版本,TVM 中文文档已经和新版本对齐。 Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。

HyperAI超神经 425

【TVM 教程】编写自定义 Pass

Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 →https://tvm.hyper.ai/

HyperAI超神经 925

【TVM教程】面向机器学习模型的图抽象

TVM 0.21.0版本已发布,中文文档同步更新。TVM是一个深度学习编译框架,支持多种硬件平台。文章重点介绍了机器学习编译中的图抽象技术,即将模型表示为有向图(节点为计算操作,边为数据流),以及Relax IR的关键特性:支持符号形状、多层次抽象和可组合变换。这些特性使TVM能够进行跨层次优化,提升模型性能。教程提供了在线学习链接和示例代码,展示如何用Relax IR表示简单神经网络。

HyperAI超神经 284

【TVM教程】TensorIR

TVM 现已更新到 0.21.0 版本,TVM 中文文档已经和新版本对齐。 Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。

HyperAI超神经 251

深入理解TVM中的TensorIR抽象

深入理解TVM中的TensorIR抽象 【免费下载链接】tvm Open deep learning compiler stack for cpu, gpu and specialized accelerators 项目地址: h...

gitblog_00289的博客 406

「TVM教程」理解 Relax 抽象层

TVM 现已更新到 0.21.0 版本,TVM 中文文档已经和新版本对齐。Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。在线运行 TVM 学习教程→Relax 是 Apache TVM Unity 策略中使用的一种图抽象方式,用于对机器学习模型进行端到端的优化。Relax 的主要目标是描述机器学习模型的结构与数据流,包括模型不同部分之间的依赖关系与连接方式,以及如何在硬件上执行该模型。wp:heading。

HyperAI超神经 215

【TVM教程】Relax

TVM 0.21.0版本已发布,中文文档同步更新。TVM是一个深度学习编译框架,支持多种硬件平台。Relax是TVM中的高级抽象层,用于图优化和转换,常与TensorIR结合使用。文档提供了Relax的核心概念、创建方法和优化转换指南,包括图抽象、TVMScript编程、NNModule API等。可通过在线教程学习TVM使用。 (字数:150字)

HyperAI超神经 64
上一篇: 【Triton 教程】triton_language.ceil
下一篇: 预测成功率超80%!康奈尔大学提出创新AI框架,解码高导电性锂离子电解质的化学机制
HyperAI超神经
博客等级 码龄7年 8872粉丝 1753原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值