16kwords15 mins.

# 前言 本系列文章将从代码和流程图入手,详细介绍 TVM AI 编译器的编译流程。本文章为第四篇,对应的 TVM 版本为当前最新版本 1.7。 网络上有不少 TVM 工程的教程资源,如果本博客也是其他教程的简单重复的话,则网络的角落里又多了一份纯粹的空间占用者。所以我在想,本文章有什么特点才值得一看呢?我觉得有两个优点: 1、本文从代码出发,不会泛泛而谈,能够从细节了解 TVM;2、自认为结构流程图画的不错,能够从整体上把握 TVM 的脉络。所以,也许值得一看呢。 本篇文章介绍 TVM BuildRelay 函数。文章 《【TVM】通过代码学习编译流程【3】模型编译》 已经介绍了 Relay
3.3kwords3 mins.

# 前言 本篇讲解 Tiling 操作为什么能够优化神经网络推理。 也可以参考 《Ascend C 算子优化实用技巧 04——Tiling 优化》 作为初学者,错误在所难免,还望不吝赐教。 # 什么是 tiling 无法完整的容纳算子的输入与输出,需要每次搬运一部分输入进行计算然后搬出,再搬运下一部分输入进行计算,直到得到完整的最终结果,这个数据切分、分块计算的过程称之为 Tiling,切分数据的算法称为 Tiling 算法或者 Tiling 策略。 # tile 算子和 tiling 的区别 我们先问一问语言大模型两者的区别: # 神经网络推理中的 Tile 算子 在神经网络中,会发现 ti
24kwords22 mins.

# 前言 本系列文章将从代码和流程图入手,详细介绍 TVM AI 编译器的编译流程。本文章为第三篇,对应的 TVM 版本为当前最新版本 1.7。 网络上有不少 TVM 工程的教程资源,如果本博客也是其他教程的简单重复的话,则网络的角落里又多了一份纯粹的空间占用者。所以我在想,本文章有什么特点才值得一看呢?我觉得有两个优点: 1、本文从代码出发,不会泛泛而谈,能够从细节了解 TVM;2、自认为结构流程图画的不错,能够从整体上把握 TVM 的脉络。所以,也许值得一看呢。 本篇文章介绍 TVM 对模型的编译流程。文章 《【TVM】通过代码学习编译流程【2】模型转换》 已经介绍了 onnx 模型转换为
20kwords18 mins.

# 前言 本系列文章将从代码和流程图入手,详细介绍 TVM AI 编译器的编译流程。本文章为第二篇,对应的 TVM 版本为当前最新版本 1.7。 网络上有不少 TVM 工程的教程资源,如果本博客也是其他教程的简单重复的话,则网络的角落里又多了一份纯粹的空间占用者。所以我在想,本文章有什么特点才值得一看呢?我觉得有两个优点: 1、本文从代码出发,不会泛泛而谈,能够从细节了解 TVM;2、自认为结构流程图画的不错,能够从整体上把握 TVM 的脉络。所以,也许值得一看呢。 本篇文章以 onnx 为例,介绍主流模型转换为 TVM 高级中间表示 Relay IR 的过程。 作为初学者,错误在所难免,还望
4.4kwords4 mins.

# 前言 本系列文章将从代码和流程图入手,详细介绍 TVM AI 编译器的编译流程。本文章为第一篇,取名为 “必要知识”,约等于 “大杂烩”。食之无味,弃之可惜。但基于我个人的主观喜好和偏见,这些知识值得在整个代码讲解之前声明。 作为初学者,错误在所难免,还望不吝赐教。 # 工程结构 TVM 主要由 C++ 语言和 Python 语言实现。 a.TVM C++ 后端核心代码 位于 /home/user/tvm/src C++ 后端核心代码的功能是生成 libtvm.so libtvm_runtime.so,分别是模型编译过程中的需要的 libtv
483words1 mins.

# 介绍 四五年前就开始构思一部小说。那时起就不断地撰写纲要,描述关键节点剧情,甚至开始跳着写中间的一些章节。不过总感到不妥,小说的立意太低了,剧情太老套了,可能和 XX 很像,我才不愿意仿写,等等很多原因,我又不得不停下来重新思考整个小说的立意、构思。 小说经过了多次彻头彻尾的改造,重新设计了关键节点,调整了新的纲要。不得不说,尽管写作是一个漫长的过程,但是小说的立意构思阶段不见得工作量更小。 在几个月前,终于调整好构思之后,重新开始写作。现在写的很慢,之前在学校里会抽时间写一点,现在上班了,只能是下班玩够了之后,写一个小时左右。不知不觉,到今天正文已经有 3 万余字了。特意查了一下,《三体
746words1 mins.

# 算法原理 算法原理还没写,预计将来补上。可以在网络上搜索算法原理。 # 代码实现 可以在 github 项目 卷积加速算法实现 中下载代码实现,运行其中的测试函数: /*winograd 算法 F (2*2, 3*3)仅用于 3*3 卷积,stride=1, dilation=1推荐 w<120 h<120 in_c>16 out_c>16现已支持 pad 之后添加 dilation*/TestWinogradF23ConvLayer();/*winograd 算法 nchw F (6*6, 3*3
6kwords5 mins.

# 介绍 本文为实现 SystemC 响应异步事件 解决方案。 应用场景: SystemC 是一个支持系统事务级、行为级建模的开源的 C++ library; 我们将 SystemC 仿真的模拟叫做模拟器。在很多场景下,模拟器要保持 alive,等待异步 async 事件,做出对应的处理。例如设计一个 SystemC 消费者模拟器,而生产者程序不属于 SystemC 仿真范畴,消费者模拟器需要一直保持等待,并在出现数据后进行处理。 世界上没有东西是完美的啊,倒不如说,同时拥有光明和阴影才是完美的,这样的你才是真正的你。 ------ 大家好啊 我是 暮冬 Z 羡慕 以上应用场
9.2kwords8 mins.

# 前置信息 (1)本文讲解使用的例子 以如下的卷积为例,进行昇腾 Im2Col 卷积过程: Input 输入维度为 NHWC :【2,25,25,17】 外圈蓝色代表 pad Kernal 维度为 CCHkWk :【34,17,3,3】 操作为 3*3 卷积 pad=1, Group=1, Stride=1, 2D 卷积 得到输出的维度 为 NHWC : 【22,25,25,18】 从图上可以轻易看出相关信息。 现在想起来,光是遇到你这个家伙,就感觉自己赚到了。 ------ 大家好啊 我是 暮冬 Z 羡慕 (2)矩阵乘运算单元 昇腾
2.8kwords3 mins.

# 前言 本篇博客提供简单的 Python 脚本代码,实现 onnx 模型转换编译,保存为 TVM 的 .so .params .json 文件 。 望长城内外,惟余莽莽;大河上下,顿失滔滔。 --------------- 教员 ------ 大家好啊 我是 暮冬 Z 羡慕 # Python 脚本实现模型编译和保存 脚本中需要修改的就一些路径,很容易看明白,就不再过多介绍了。 import onnx from tvm.contrib.download import download_testdata from PIL import Image import nump