在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    瀏覽量

    3689
收藏 人收藏

    評論

    相關推薦

    Triton編譯器的優化技巧

    在現代計算環境中,編譯器的性能對于軟件的運行效率至關重要。Triton 編譯器作為一個先進的編譯器框架,提供了一系列的優化技術,以確保生成的代碼既高效又適應不同的硬件架構。 1. 指令選擇
    的頭像 發表于 12-25 09:09 ?341次閱讀

    Triton編譯器與其他編譯器的比較

    Triton編譯器與其他編譯器的比較主要體現在以下幾個方面: 一、定位與目標 Triton編譯器 : 定位:專注于深度學習中最核心、最耗時的張量運算的優化。 目標:提供一個高度抽象、靈活、高效
    的頭像 發表于 12-24 17:25 ?485次閱讀

    Triton編譯器功能介紹 Triton編譯器使用教程

    Triton 是一個開源的編譯器前端,它支持多種編程語言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一個可擴展和可定制的編譯器框架,允許開發者添加新的編程語言特性和優化技術
    的頭像 發表于 12-24 17:23 ?650次閱讀

    soc開發流程常見問題及解決方案

    SOC(System on a Chip,系統級芯片)開發流程中常見問題及解決方案主要包括以下幾個方面: 一、環境問題 常見問題 : 開發環境配置復雜,新手難以快速上手。 依賴項缺失或版本不兼容
    的頭像 發表于 11-10 09:26 ?752次閱讀

    瑞芯微RK3568開發板Linux編譯報錯404怎么辦?觸覺智能教你輕松解決

    本文介紹瑞芯微RK3568主板/開發板SDK編譯流程編譯報錯404的解決方法,使用觸覺智能EVB3568鴻蒙開發板演示,具有豐富的視頻輸入輸出接口(HDMI/eDP/MIPI/LVDS) 與多種高速接口(千兆網口/PCIe/S
    的頭像 發表于 11-05 11:02 ?446次閱讀
    瑞芯微RK3568開發板Linux<b class='flag-5'>編譯</b>報錯404怎么辦?觸覺智能教你輕松解決

    java反編譯能拿到源碼嗎

    Java反編譯是一種將編譯后的Java字節碼(.class文件)轉換回Java源代碼的過程。雖然反編譯可以幫助理解代碼的邏輯和結構,但它并不總是能完美地還原原始源代碼。反編譯工具通常會
    的頭像 發表于 09-02 11:03 ?1195次閱讀

    java反編譯的代碼可以修改么

    Java反編譯是一種將編譯后的Java字節碼(.class文件)轉換回源代碼的過程。反編譯后的代碼可以進行修改,但是需要注意,反編譯代碼的質量和可讀性可能會受到原始
    的頭像 發表于 09-02 11:00 ?822次閱讀

    linux開發板如何編譯curl

    在Linux開發板上編譯 curl 庫通常涉及到幾個步驟,包括準備開發環境、下載源代碼、配置編譯選項以及執行編譯和安裝過程。以下是一個基本的指南,幫助你在Linux開發板上編譯 cur
    的頭像 發表于 08-30 15:33 ?790次閱讀

    SemiDrive X9 AI 開發環境搭建

    SemiDrivex9AI開發環境搭建分開發機端,開發板端。主要的工具是SDNN,它是一個基于開源編譯器框架TVM的端到端的AI編譯器框架,Semidrive對TVM
    的頭像 發表于 08-03 08:27 ?459次閱讀
    SemiDrive X9 AI 開發環境搭建

    AI編譯器技術剖析

    隨著人工智能技術的飛速發展,AI編譯器作為一種新興的編譯技術逐漸進入人們的視野。AI編譯器不僅具備傳統編譯器的功能,如將高級語言編寫的源代碼轉換為機器可執行的代碼,還融入了人工智能技術
    的頭像 發表于 07-17 18:28 ?1778次閱讀

    使用TVM量化部署模型報錯NameError: name \'GenerateESPConstants\' is not defined如何解決?

    各位好,我在使用TVM部署模型時,遇到一下錯誤,請問如何解決?我進esp.py文件看,有如下兩個函數是找不到定義的: GenerateESPConstants(), ExtractConstantsFromPartitionedFunction(),
    發表于 06-28 10:50

    多文件工程的編譯

    多文件工程的編譯
    的頭像 發表于 06-26 13:35 ?332次閱讀
    多文件工程的<b class='flag-5'>編譯</b>

    鴻蒙ArkUI-X框架開發:【編譯

    使用build.sh編譯腳本進行編譯,編譯腳本常用選項
    的頭像 發表于 05-25 16:42 ?1897次閱讀
    鴻蒙ArkUI-X框架開發:【<b class='flag-5'>編譯</b>】

    HighTec Tricore編譯速度優化策略探討

    HighTec在編譯時默認是根據工程源文件文件架構首先生成makefile文件,然后執行“make makefile”指令來編譯工程。
    的頭像 發表于 04-10 12:44 ?2378次閱讀
    HighTec Tricore<b class='flag-5'>編譯</b>速度優化策略探討

    OpenHarmony 移植:build lite 編譯構建過程

    配置完畢產品解決方案、芯片開發板解決方案,就可以執行 hb build 進行編譯。但是產品解決方案代碼是如何被調用編譯的? 芯片開發板解決方案代碼是如何被調用編譯的?內核代碼如何被調用編譯
    的頭像 發表于 02-19 16:19 ?1012次閱讀
    主站蜘蛛池模板: 国产成人在线播放视频 | 99热官网 | 国产理论视频在线观看 | 日本黄色免费网址 | 色多多视频在线观看 | 宅男lu66国产在线播放 | 久99频这里只精品23热 视频 | 亚洲插| 九月婷婷综合婷婷 | 久久66haose精品| zzji国产精品视频 | 91久久国产青草亚洲 | 911国产自产精选 | 九九热在线精品视频 | 国产精品久久久久久久久免费观看 | 久久亚洲国产精品五月天 | 久久午夜综合久久 | 久久天天躁夜夜躁狠狠 | 女色窝人体色77777 | 三级国产 | 免费在线看片网站 | 午夜精品国产 | 天天看天天爽天天摸天天添 | 2021久久天天躁狠狠躁夜夜 | 五月天福利视频 | 免费一日本一级裸片在线观看 | 男女做性无遮挡免费视频 | 色综合天天射 | 天天操夜夜骑 | 超h 高h 污肉男男 | 激情久久久久久久久久久 | 成人涩涩网站 | 特级毛片网站 | 欧美一级免费片 | 性欧美一级| 亚洲欧美圣爱天天综合 | 日本成人福利视频 | 在线午夜视频 | 日本不卡视频在线播放 | 伊人久久亚洲综合天堂 | 国产精品推荐天天看天天爽 |