资料介绍
作者:安平博,Xilinx高级工程师;来源:AI加速微信公众号
TVM主要的编译过程如下图:
Import:将tensorflow,onnx,pytorch等构建的深度学习模型导入,转化成TVM的中间层表示IR。
Lower:将高层IR表示转化成低阶TIR表示。
Codegen:内存分配和硬件可执行程序生成。
图导入
通过一个tensorflow的reception网络来熟悉编译过程,其它深度学习框架也具有类似过程。从TVM官网可以下载tensorflow的编译程序
https://tvm.apache.org/docs/tutorials/frontend/from_tensorflow.html#sphx...。主要代码如下:
模型的输入是一个后缀为pb的文件,它是神经网络模型图的protobuf格式存储文件。Pb是二进制形式,pbtxt是文本形式。Import_graph_def函数是导入pb,graph是tensorflow的图结构。
From_tensorflow是将tensorflow的图结构转化成TVM的IR。这个函数在文件relay/frontend/tensorflow.py中。函数的调用关系为:
From_tensorflow -> GraphProto.from_tensorflow -> self._get_relay_func。
在get_relay_func中会遍历每个tensorflow的节点,转换成tvm的IR表示。重点关注_backtrack_construct函数。
继续深入和算子转化有关的函数调用为:_convert_operator -> convert_map。Convert_map中对应了可支持tensorflow算子到tvm算子的转换关系。
完成了tensorflow到TVM算子转化后,我们就得到了一个IRModule。我们可以利用tvm的可视化来打印出转化后的图:
Main是主函数入口,在TVM中以函数形式反应了tensorflow的图结构。函数的调用关系反应了图的依赖关系。
编译
Python中主要代码位于relay/build_module.py文件中,调用关系为build -> BuildModule -> build。在build中通过字典获得了C++中的相应函数。
这里不明白如何通过self.mod[“build”]得到C++中函数的。_BuildModule()是C++中注册到环境中的一个函数。在src/relay/backend/build_module.cc中,
TVM_REGISTER_GLOBAL是将C++函数注册到一个全局map中。当python加载编译好的动态库时,会自动查询map中静态注册的函数,并添加到python模块当中。
真正build操作位于RelayBuildModule类中,在其中有一个GetFunction函数,会通过名字查询要使用的函数,打包成PackedFunc返回,这个函数可能和self.mod[“build”]有关。PackedFunc是TVM中提供的python的一个接口,任何函数都可以封装成PackedFunc,并给python调用。更详细介绍可看:https://hjchen2.github.io/2020/01/10/TVM-PackedFunc%E5%AE%9E%E7%8E%B0%E6...
继续深入代码,Build -> BuildRelay。这是编译的主要代码。其过程包括optimize,codgen。
Optimize就是执行一些优化passes,这些passes包括常数折叠,算符融合等。之后会调用graph_codegen->Codegen。Codegen中实现了内存分配和硬件代码生成。
- 面向机器学习的高可用、高并发数据库:OpenMLDB 0次下载
- ARM代码编译与链接调试的工作流程梳理 1次下载
- 使用TVM在android中进行Mobilenet SSD部署 0次下载
- 【从零开始学深度学习编译器】番外二,在Jetson Nano上玩TVM 0次下载
- 3568编译环境搭建
- 基于C++编译器的节点融合优化方法 19次下载
- 基于成对学习和图像聚类的肺癌亚型识别 4次下载
- GCC编译流程分析资料下载 16次下载
- TVM学习(二):算符融合 10次下载
- 如何学习c语言?C语言学习笔记资料免费下载 65次下载
- 如何将C源代码从MPLAB C18编译器移植到MPLAB XC8C编译器的详细概述 30次下载
- TMS320C6000最优编译器 4次下载
- FPGA的学习流程 22次下载
- ICC AVR V7C编译软件 139次下载
- WCDMA基本呼叫流程 0次下载
- TVM编译器的整体架构和基本方法 622次阅读
- 【XR806开发板试用】实战OpenHarmony固件编译 343次阅读
- 深入浅出编译优化选项(下) 732次阅读
- 如何从GCC源码学编译原理 1255次阅读
- 编译器中的图论算法是什么 532次阅读
- 交叉编译器安装教程 2475次阅读
- TVM学习之从relay到TOPI 1048次阅读
- OHOS3.1版本的简明编译流程 1239次阅读
- 深度解析鸿蒙系统的编译流程 1w次阅读
- 标准的机器学习流程如何玩出新花样 2532次阅读
- 讲述增量编译方法,提高Vivado编译效率 9327次阅读
- verilog编译指令_verilog编译器指示语句(数字IC) 1.3w次阅读
- 将TVM用于移动端常见的ARM GPU,提高移动设备对深度学习的支持能力 1w次阅读
- 编译器是如何工作的_编译器的工作过程详解 1.5w次阅读
- 谁能缩短大容量FPGA的编译时间?增量式编译QIC! 4441次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1491次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 95次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 11次下载 | 免费
- 6100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 7基于单片机和 SG3525的程控开关电源设计
- 0.23 MB | 4次下载 | 免费
- 8基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537793次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多