電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>可編程邏輯>TVM學(xué)習(xí)(三)編譯流程

TVM學(xué)習(xí)(三)編譯流程

2021-01-26 | pdf | 443.57KB | 次下載 | 3積分

資料介紹

作者:安平博,Xilinx高級工程師;來源:AI加速微信公眾號

TVM主要的編譯過程如下圖:

Import:將tensorflow,onnx,pytorch等構(gòu)建的深度學(xué)習(xí)模型導(dǎo)入,轉(zhuǎn)化成TVM的中間層表示IR。

Lower:將高層IR表示轉(zhuǎn)化成低階TIR表示。

Codegen:內(nèi)存分配和硬件可執(zhí)行程序生成。

圖導(dǎo)入

通過一個tensorflow的reception網(wǎng)絡(luò)來熟悉編譯過程,其它深度學(xué)習(xí)框架也具有類似過程。從TVM官網(wǎng)可以下載tensorflow的編譯程序

https://tvm.apache.org/docs/tutorials/frontend/from_tensorflow.html#sphx...。主要代碼如下:

模型的輸入是一個后綴為pb的文件,它是神經(jīng)網(wǎng)絡(luò)模型圖的protobuf格式存儲文件。Pb是二進制形式,pbtxt是文本形式。Import_graph_def函數(shù)是導(dǎo)入pb,graph是tensorflow的圖結(jié)構(gòu)。

From_tensorflow是將tensorflow的圖結(jié)構(gòu)轉(zhuǎn)化成TVM的IR。這個函數(shù)在文件relay/frontend/tensorflow.py中。函數(shù)的調(diào)用關(guān)系為:

From_tensorflow -> GraphProto.from_tensorflow -> self._get_relay_func。

在get_relay_func中會遍歷每個tensorflow的節(jié)點,轉(zhuǎn)換成tvm的IR表示。重點關(guān)注_backtrack_construct函數(shù)。

繼續(xù)深入和算子轉(zhuǎn)化有關(guān)的函數(shù)調(diào)用為:_convert_operator -> convert_map。Convert_map中對應(yīng)了可支持tensorflow算子到tvm算子的轉(zhuǎn)換關(guān)系。

完成了tensorflow到TVM算子轉(zhuǎn)化后,我們就得到了一個IRModule。我們可以利用tvm的可視化來打印出轉(zhuǎn)化后的圖:

Main是主函數(shù)入口,在TVM中以函數(shù)形式反應(yīng)了tensorflow的圖結(jié)構(gòu)。函數(shù)的調(diào)用關(guān)系反應(yīng)了圖的依賴關(guān)系。

編譯

Python中主要代碼位于relay/build_module.py文件中,調(diào)用關(guān)系為build -> BuildModule -> build。在build中通過字典獲得了C++中的相應(yīng)函數(shù)。

這里不明白如何通過self.mod[“build”]得到C++中函數(shù)的。_BuildModule()是C++中注冊到環(huán)境中的一個函數(shù)。在src/relay/backend/build_module.cc中,

TVM_REGISTER_GLOBAL是將C++函數(shù)注冊到一個全局map中。當python加載編譯好的動態(tài)庫時,會自動查詢map中靜態(tài)注冊的函數(shù),并添加到python模塊當中。

真正build操作位于RelayBuildModule類中,在其中有一個GetFunction函數(shù),會通過名字查詢要使用的函數(shù),打包成PackedFunc返回,這個函數(shù)可能和self.mod[“build”]有關(guān)。PackedFunc是TVM中提供的python的一個接口,任何函數(shù)都可以封裝成PackedFunc,并給python調(diào)用。更詳細介紹可看:https://hjchen2.github.io/2020/01/10/TVM-PackedFunc%E5%AE%9E%E7%8E%B0%E6...

繼續(xù)深入代碼,Build -> BuildRelay。這是編譯的主要代碼。其過程包括optimize,codgen。

Optimize就是執(zhí)行一些優(yōu)化passes,這些passes包括常數(shù)折疊,算符融合等。之后會調(diào)用graph_codegen->Codegen。Codegen中實現(xiàn)了內(nèi)存分配和硬件代碼生成。

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費下載
  2. 0.00 MB  |  1491次下載  |  免費
  3. 2單片機典型實例介紹
  4. 18.19 MB  |  95次下載  |  1 積分
  5. 3S7-200PLC編程實例詳細資料
  6. 1.17 MB  |  27次下載  |  1 積分
  7. 4筆記本電腦主板的元件識別和講解說明
  8. 4.28 MB  |  18次下載  |  4 積分
  9. 5開關(guān)電源原理及各功能電路詳解
  10. 0.38 MB  |  11次下載  |  免費
  11. 6100W短波放大電路圖
  12. 0.05 MB  |  4次下載  |  3 積分
  13. 7基于單片機和 SG3525的程控開關(guān)電源設(shè)計
  14. 0.23 MB  |  4次下載  |  免費
  15. 8基于AT89C2051/4051單片機編程器的實驗
  16. 0.11 MB  |  4次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費
  7. 4LabView 8.0 專業(yè)版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費
  9. 5555集成電路應(yīng)用800例(新編版)
  10. 0.00 MB  |  33562次下載  |  免費
  11. 6接口電路圖大全
  12. 未知  |  30320次下載  |  免費
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費
  15. 8開關(guān)電源設(shè)計實例指南
  16. 未知  |  21539次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537793次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191183次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183277次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138039次下載  |  免費