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

最近从事AI编译器的工作,手头开发维护的编译器是公司自研的,不是开源的那种。种种原因,感觉学习起来非常头疼。现在主流的AI编译器,像TVM,在网上有大量技术博客,所以希望通过学习TVM,让自己能在这个领域尽快成长起来。

在网上看了很多TVM的技术博客,也只了解了个皮毛,连TVM都能干些啥都不知道。于是开始耐心的阅读官方文档。英文文档看起来还是很费劲的,于是干脆将看过的文档翻译保留,以便以后查阅。这里都是看过翻译的文档TVM官方文档翻译入口

然后就是动手扒代码。首先得搞个TVM环境,能跑下模型不是。环境搭建:

【TVM源码学习笔记】0 TVM安装

然后按照官方文档Introduction — tvm 0.9.dev0 documentation介绍的模型优化流程 

图1.模型优化流程

分析每一步的代码实现。

首先是按照Quick Start Tutorial for Compiling Deep Learning Models — tvm 0.9.dev0 documentation

编写脚本跑模型:

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

这里我选择了TVM自带的mnist onnx模型。 脚本先是使用relay.frontend.from_onnx导入onnx模型。onnx模型的导入源码分析:

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

onnx模型导入就是图1中的步骤2,将onnx模型转换为Relay IR。这里面需要将onnx算子转换为tvm relay ir:

【TVM源码学习笔记】2.1 onnx算子转换

 转换流程从代码架构上可以分两部分,一部分是python前端,一部分在C++里面。实际的转换,即relay ir的生成其实是在C++代码。C++部分relay ir实现:

【TVM源码学习笔记】2.2. C++侧的relay ir op

TVM在ctypes的基础上提供了一种机制可以方便的在python端调用C++代码,了解下有助于快速的找到python接口对应的C++代码,方便代码阅读:

【TVM源码学习笔记】附录1 TVM python调用C++的机制

 一旦开始进入TVM的C++代码,就绕不开C++里面的Object类,它是TVM描述模型的基石,有必要深入的理解整个Object类及其继承体系。详细分析参见【TVM源码学习笔记】附录2 TVM的Object家族

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值