0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TVM的编译流程是什么

电子设计 来源:电子设计 作者:电子设计 2022-02-08 14:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:安平博,Xilinx高级工程师;来源:AI加速微信公众号

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...。主要代码如下:

pIYBAGAJzXaALCrpAAFWLx2Lb50986.png

模型的输入是一个后缀为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函数。

o4YBAGAJzbSAK8pmAAB-23TNiAc840.png

继续深入和算子转化有关的函数调用为:_convert_operator -> convert_map。Convert_map中对应了可支持tensorflow算子到tvm算子的转换关系。

o4YBAGAJzf2AUd9qAAFas--JyZk610.png

完成了tensorflow到TVM算子转化后,我们就得到了一个IRModule。我们可以利用tvm的可视化来打印出转化后的图:

pIYBAGAJzjyAKM_nAADUALHuUtg377.png

Main是主函数入口,在TVM中以函数形式反应了tensorflow的图结构。函数的调用关系反应了图的依赖关系。

编译

Python中主要代码位于relay/build_module.py文件中,调用关系为build -> BuildModule -> build。在build中通过字典获得了C++中的相应函数。

pIYBAGAJznqAYLYUAABvCn74q78151.png

这里不明白如何通过self.mod[“build”]得到C++中函数的。_BuildModule()是C++中注册到环境中的一个函数。在src/relay/backend/build_module.cc中,

pIYBAGAJzriAKFTzAACbMqgRaW0007.png

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。

o4YBAGAJzvmAY7f2AAE5GDTVjbI659.png

Optimize就是执行一些优化passes,这些passes包括常数折叠,算符融合等。之后会调用graph_codegen->Codegen。Codegen中实现了内存分配和硬件代码生成。

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TVM
    TVM
    +关注

    关注

    0

    文章

    19

    浏览量

    3933
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    泰凌微:布局端侧AI,产品支持谷歌LiteRT、TVM开源模型

    。   公司发布的基于TL721X系列芯片的TL-EdgeAI平台,支持谷歌LiteRT、TVM等开源模型,是目前世界上功耗最低的智能物联网连接协议平台。其芯片已在谷歌(Google)的Pixel Bud Pro 2智能耳机方案中被采用。公司将继续深化与谷歌的合作关系。   围绕三
    的头像 发表于 12-15 08:21 6803次阅读

    一文详解SystemC仿真库的编译

    AMD Vivado 设计套件以文件和库的形式提供仿真模型。仿真库包含器件和 IP 的行为和时序模型。编译后的库可供多个设计项目使用。用户必须在设计仿真之前通过名为 compile_simlib 的实用程序编译这些文件,以便为目标仿真器
    的头像 发表于 12-12 15:08 4394次阅读
    一文详解SystemC仿真库的<b class='flag-5'>编译</b>

    高频OTA时代,如何用SIL测试兼顾软件可靠性和迭代速度?

    仿真技术,支持实现多个测试节点并行测试,从而支撑软件敏捷开发流程TVM具备虚拟控制器(vECU)生成、虚拟控制器(vECU)集成、对象模型集成、虚拟总线仿真、虚拟测量
    的头像 发表于 12-10 17:27 1517次阅读
    高频OTA时代,如何用SIL测试兼顾软件可靠性和迭代速度?

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—Qt工程编译、GPU核心使用说明

    本文围绕创龙科技研发的评估板,详细说明 Qt 工程编译与 GPU 核心使用方法。涵盖基于命令行和 Qt Creator 工具的 Qt 工程编译流程,包括交叉编译工具链、Qt Versi
    的头像 发表于 09-29 14:16 422次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—Qt工程<b class='flag-5'>编译</b>、GPU核心使用说明

    大规模硬件仿真系统的编译挑战

    引言随着集成电路设计复杂度的不断提升,硬件仿真系统在现代芯片设计流程中扮演着越来越重要的角色。基于FPGA(现场可编程门阵列)的商用硬件仿真系统因其灵活性、全自动化、高性能和可重构性,成为验证
    的头像 发表于 03-31 16:11 1261次阅读
    大规模硬件仿真系统的<b class='flag-5'>编译</b>挑战

    在 Windows 上编译 KiCad

    “ Ethan 同学为我们分享了在 Windows 编译 KiCad 的准备工作、操作步骤及闭坑指南。以下是核心的操作视频及 PPT,完整的直播视频后续分享给大家! ” 流程概要 准备工作 编译器篇
    的头像 发表于 03-28 11:23 877次阅读
    在 Windows 上<b class='flag-5'>编译</b> KiCad

    FPGA Verilog HDL语法之编译预处理

    Verilog HDL语言和C语言一样也提供了编译预处理的功能。“编译预处理”是Verilog HDL编译系统的一个组成部分。Verilog HDL语言允许在程序中使用几种特殊的命令(它们不是一般
    的头像 发表于 03-27 13:30 1128次阅读
    FPGA Verilog HDL语法之<b class='flag-5'>编译</b>预处理

    KiCad直播活动(三):在 Windows上编译KiCad 手把手教您编译/构建 KiCad 源码

    亲爱的 KiCad 粉们: 本周继续 KiCad 的直播活动,我们将在 3 月27 日周四晚 19:30 为您带来 “在 Windows 上编译 KiCad” 的专题!邀请了 KiCad Lead
    的头像 发表于 03-24 11:14 1425次阅读
    KiCad直播活动(三):在 Windows上<b class='flag-5'>编译</b>KiCad 手把手教您<b class='flag-5'>编译</b>/构建 KiCad 源码

    MolunSmartHome虾哥小智源码编译固件演示

    虾哥小智Ai对话项目固件编译演示
    的头像 发表于 02-24 12:21 9412次阅读
    MolunSmartHome虾哥小智源码<b class='flag-5'>编译</b>固件演示

    Triton编译器与GPU编程的结合应用

    Triton编译器简介 Triton编译器是一种针对并行计算优化的编译器,它能够自动将高级语言代码转换为针对特定硬件优化的低级代码。Triton编译器的核心优势在于其能够识别并行模式,
    的头像 发表于 12-25 09:13 1345次阅读

    Triton编译器如何提升编程效率

    在现代软件开发中,编译器扮演着至关重要的角色。它们不仅将高级语言代码转换为机器可执行的代码,还通过各种优化技术提升程序的性能。Triton 编译器作为一种先进的编译器,通过多种方式提升编程效率,使得
    的头像 发表于 12-25 09:12 1235次阅读

    Triton编译器的优化技巧

    在现代计算环境中,编译器的性能对于软件的运行效率至关重要。Triton 编译器作为一个先进的编译器框架,提供了一系列的优化技术,以确保生成的代码既高效又适应不同的硬件架构。 1. 指令选择
    的头像 发表于 12-25 09:09 1922次阅读

    Triton编译器在机器学习中的应用

    1. Triton编译器概述 Triton编译器是NVIDIA Triton推理服务平台的一部分,它负责将深度学习模型转换为优化的格式,以便在NVIDIA GPU上高效运行。Triton编译器支持
    的头像 发表于 12-24 18:13 1680次阅读

    Triton编译器与其他编译器的比较

    Triton编译器与其他编译器的比较主要体现在以下几个方面: 一、定位与目标 Triton编译器 : 定位:专注于深度学习中最核心、最耗时的张量运算的优化。 目标:提供一个高度抽象、灵活、高效
    的头像 发表于 12-24 17:25 1634次阅读

    Triton编译器功能介绍 Triton编译器使用教程

    Triton 是一个开源的编译器前端,它支持多种编程语言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一个可扩展和可定制的编译器框架,允许开发者添加新的编程语言特性和优化技术
    的头像 发表于 12-24 17:23 2776次阅读