91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內(nèi)不再提示

TVM的編譯流程是什么

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-02-08 14:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:安平博,Xilinx高級(jí)工程師;來(lái)源:AI加速微信公眾號(hào)

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)入

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

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

pIYBAGAJzXaALCrpAAFWLx2Lb50986.png

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

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

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

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

o4YBAGAJzbSAK8pmAAB-23TNiAc840.png

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

o4YBAGAJzf2AUd9qAAFas--JyZk610.png

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

pIYBAGAJzjyAKM_nAADUALHuUtg377.png

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

編譯

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

pIYBAGAJznqAYLYUAABvCn74q78151.png

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

pIYBAGAJzriAKFTzAACbMqgRaW0007.png

TVM_REGISTER_GLOBAL是將C++函數(shù)注冊(cè)到一個(gè)全局map中。當(dāng)python加載編譯好的動(dòng)態(tài)庫(kù)時(shí),會(huì)自動(dòng)查詢(xún)map中靜態(tài)注冊(cè)的函數(shù),并添加到python模塊當(dāng)中。

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

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

o4YBAGAJzvmAY7f2AAE5GDTVjbI659.png

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

審核編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • TVM
    TVM
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    3957
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    簡(jiǎn)單高效的鴻蒙編譯提速技巧

    在鴻蒙應(yīng)用開(kāi)發(fā)中編譯構(gòu)建是開(kāi)發(fā)者最頻繁的操作,每一次編譯提速都能顯著提升項(xiàng)目整體開(kāi)發(fā)效率。本次分享幾個(gè)簡(jiǎn)單卻高效的鴻蒙編譯提速技巧,從編譯配置、構(gòu)建方式等維度進(jìn)行優(yōu)化,讓你的開(kāi)發(fā)
    的頭像 發(fā)表于 03-04 16:09 ?47次閱讀
    簡(jiǎn)單高效的鴻蒙<b class='flag-5'>編譯</b>提速技巧

    踩坑實(shí)錄:RK3588單獨(dú)編譯boot.img無(wú)法啟動(dòng)?這個(gè)GPU配置才是關(guān)鍵!

    做 RK3588 嵌入式開(kāi)發(fā)的同學(xué),大概率都遇到過(guò) “編譯成功卻啟動(dòng)失敗” 的糟心場(chǎng)景 —— 明明按官方流程單獨(dú)編譯了 boot.img,燒錄后設(shè)備卻卡在開(kāi)機(jī) logo,或者直接進(jìn)入不了系統(tǒng),查日志、換
    的頭像 發(fā)表于 02-10 16:54 ?2078次閱讀
    踩坑實(shí)錄:RK3588單獨(dú)<b class='flag-5'>編譯</b>boot.img無(wú)法啟動(dòng)?這個(gè)GPU配置才是關(guān)鍵!

    初次編譯rk3568(rk3576)Linux 6.1內(nèi)核踩坑記錄:從報(bào)錯(cuò)終止到成功解決的完整流程

    很多剛接觸瑞芯微 rk 系列芯片開(kāi)發(fā)的小伙伴,在初次編譯基于 Linux 6.1 內(nèi)核的系統(tǒng)時(shí),很容易因?yàn)榄h(huán)境依賴(lài)問(wèn)題卡殼。最近我在編譯 rk3576(rk3568 流程類(lèi)似)Linux 6.1 內(nèi)核時(shí)就遇到了典型報(bào)錯(cuò),從定位問(wèn)
    的頭像 發(fā)表于 02-06 16:47 ?2582次閱讀
    初次<b class='flag-5'>編譯</b>rk3568(rk3576)Linux 6.1內(nèi)核踩坑記錄:從報(bào)錯(cuò)終止到成功解決的完整<b class='flag-5'>流程</b>

    技術(shù)分享 | RK3506如何交叉編譯frp wireguard

    RK3506擁有著不錯(cuò)的性?xún)r(jià)比以及與之相匹配的性能優(yōu)勢(shì),非常適合用來(lái)做邊緣計(jì)算網(wǎng)關(guān)、小型數(shù)據(jù)收集端點(diǎn)等。今天給大家?guī)?lái)兩款內(nèi)網(wǎng)穿透工具的交叉編譯移植,方便在RK3506上搭建相關(guān)應(yīng)用。在編譯兩個(gè)工具
    的頭像 發(fā)表于 12-25 17:29 ?591次閱讀
    技術(shù)分享 | RK3506如何交叉<b class='flag-5'>編譯</b>frp wireguard

    RK3588?平臺(tái)?MPP?編譯?+ VPU?格式測(cè)試

    ? ? ? ? ? ? 大家在做瑞芯微 ?RK3588? 開(kāi)發(fā)時(shí),是不是經(jīng)常困惑「怎么驗(yàn)證? VPU? 到底支持哪些編解碼格式?」「 MPP? 媒體庫(kù)該怎么編譯?」今天手把手帶你走一遍流程
    的頭像 發(fā)表于 12-25 11:33 ?1902次閱讀
    RK3588?平臺(tái)?MPP?<b class='flag-5'>編譯</b>?+ VPU?格式測(cè)試

    泰凌微:布局端側(cè)AI,產(chǎn)品支持谷歌LiteRT、TVM開(kāi)源模型

    。 ? 公司發(fā)布的基于TL721X系列芯片的TL-EdgeAI平臺(tái),支持谷歌LiteRT、TVM等開(kāi)源模型,是目前世界上功耗最低的智能物聯(lián)網(wǎng)連接協(xié)議平臺(tái)。其芯片已在谷歌(Google)的Pixel Bud Pro 2智能耳機(jī)方案中被采用。公司將繼續(xù)深化與谷歌的合作關(guān)系。 ? 圍繞三
    的頭像 發(fā)表于 12-15 08:21 ?1w次閱讀

    一文詳解SystemC仿真庫(kù)的編譯

    AMD Vivado 設(shè)計(jì)套件以文件和庫(kù)的形式提供仿真模型。仿真庫(kù)包含器件和 IP 的行為和時(shí)序模型。編譯后的庫(kù)可供多個(gè)設(shè)計(jì)項(xiàng)目使用。用戶(hù)必須在設(shè)計(jì)仿真之前通過(guò)名為 compile_simlib 的實(shí)用程序編譯這些文件,以便為目標(biāo)仿真器
    的頭像 發(fā)表于 12-12 15:08 ?4830次閱讀
    一文詳解SystemC仿真庫(kù)的<b class='flag-5'>編譯</b>

    高頻OTA時(shí)代,如何用SIL測(cè)試兼顧軟件可靠性和迭代速度?

    仿真技術(shù),支持實(shí)現(xiàn)多個(gè)測(cè)試節(jié)點(diǎn)并行測(cè)試,從而支撐軟件敏捷開(kāi)發(fā)流程。TVM具備虛擬控制器(vECU)生成、虛擬控制器(vECU)集成、對(duì)象模型集成、虛擬總線仿真、虛擬測(cè)量
    的頭像 發(fā)表于 12-10 17:27 ?1847次閱讀
    高頻OTA時(shí)代,如何用SIL測(cè)試兼顧軟件可靠性和迭代速度?

    開(kāi)源鴻蒙技術(shù)大會(huì)2025丨編譯器與編程語(yǔ)言分論壇:語(yǔ)言驅(qū)動(dòng)系統(tǒng)創(chuàng)新,編譯賦能生態(tài)繁榮

    在萬(wàn)物智聯(lián)的時(shí)代背景下,操作系統(tǒng)底層能力的構(gòu)建離不開(kāi)編程語(yǔ)言與編譯器的關(guān)鍵支撐。作為開(kāi)源鴻蒙生態(tài)的核心技術(shù),語(yǔ)言設(shè)計(jì)與編譯器、虛擬機(jī)實(shí)現(xiàn)的進(jìn)步直接關(guān)系到開(kāi)發(fā)效率、運(yùn)行性能與系統(tǒng)安全。本次分論壇聚焦
    的頭像 發(fā)表于 11-20 17:24 ?925次閱讀
    開(kāi)源鴻蒙技術(shù)大會(huì)2025丨<b class='flag-5'>編譯</b>器與編程語(yǔ)言分論壇:語(yǔ)言驅(qū)動(dòng)系統(tǒng)創(chuàng)新,<b class='flag-5'>編譯</b>賦能生態(tài)繁榮

    CANoe與Simulink聯(lián)合仿真編譯失敗

    問(wèn)題描述:在使用VS作為編譯器的情況下,Matlab編譯后失敗,如下圖:解決方案:原因:安裝VS時(shí),Windows的SDK版本未安裝或者安裝選項(xiàng)沒(méi)有選擇正確。1.打開(kāi)VS,可以看到VS中的錯(cuò)誤提示:2.打開(kāi)此項(xiàng)目的屬性設(shè)置:3.選擇正確的SDK版本4.選擇修改5.重新安裝
    的頭像 發(fā)表于 11-14 12:13 ?1868次閱讀
    CANoe與Simulink聯(lián)合仿真<b class='flag-5'>編譯</b>失敗

    創(chuàng)龍 瑞芯微 RK3588 國(guó)產(chǎn)2.4GHz八核 工業(yè)開(kāi)發(fā)板—Qt工程編譯、GPU核心使用說(shuō)明

    本文圍繞創(chuàng)龍科技研發(fā)的評(píng)估板,詳細(xì)說(shuō)明 Qt 工程編譯與 GPU 核心使用方法。涵蓋基于命令行和 Qt Creator 工具的 Qt 工程編譯流程,包括交叉編譯工具鏈、Qt Versi
    的頭像 發(fā)表于 09-29 14:16 ?724次閱讀
    創(chuàng)龍 瑞芯微 RK3588 國(guó)產(chǎn)2.4GHz八核 工業(yè)開(kāi)發(fā)板—Qt工程<b class='flag-5'>編譯</b>、GPU核心使用說(shuō)明

    大規(guī)模硬件仿真系統(tǒng)的編譯挑戰(zhàn)

    引言隨著集成電路設(shè)計(jì)復(fù)雜度的不斷提升,硬件仿真系統(tǒng)在現(xiàn)代芯片設(shè)計(jì)流程中扮演著越來(lái)越重要的角色?;贔PGA(現(xiàn)場(chǎng)可編程門(mén)陣列)的商用硬件仿真系統(tǒng)因其靈活性、全自動(dòng)化、高性能和可重構(gòu)性,成為驗(yàn)證
    的頭像 發(fā)表于 03-31 16:11 ?1444次閱讀
    大規(guī)模硬件仿真系統(tǒng)的<b class='flag-5'>編譯</b>挑戰(zhàn)

    在 Windows 上編譯 KiCad

    “?Ethan 同學(xué)為我們分享了在 Windows 編譯 KiCad 的準(zhǔn)備工作、操作步驟及閉坑指南。以下是核心的操作視頻及 PPT,完整的直播視頻后續(xù)分享給大家!?” 流程概要 準(zhǔn)備工作 編譯器篇
    的頭像 發(fā)表于 03-28 11:23 ?1052次閱讀
    在 Windows 上<b class='flag-5'>編譯</b> KiCad

    FPGA Verilog HDL語(yǔ)法之編譯預(yù)處理

    Verilog HDL語(yǔ)言和C語(yǔ)言一樣也提供了編譯預(yù)處理的功能?!?b class='flag-5'>編譯預(yù)處理”是Verilog HDL編譯系統(tǒng)的一個(gè)組成部分。Verilog HDL語(yǔ)言允許在程序中使用幾種特殊的命令(它們不是一般
    的頭像 發(fā)表于 03-27 13:30 ?1438次閱讀
    FPGA Verilog HDL語(yǔ)法之<b class='flag-5'>編譯</b>預(yù)處理

    KiCad直播活動(dòng)(三):在 Windows上編譯KiCad 手把手教您編譯/構(gòu)建 KiCad 源碼

    親愛(ài)的 KiCad 粉們: 本周繼續(xù) KiCad 的直播活動(dòng),我們將在 3 月27 日周四晚 19:30 為您帶來(lái) “在 Windows 上編譯 KiCad” 的專(zhuān)題!邀請(qǐng)了 KiCad Lead
    的頭像 發(fā)表于 03-24 11:14 ?1681次閱讀
    KiCad直播活動(dòng)(三):在 Windows上<b class='flag-5'>編譯</b>KiCad 手把手教您<b class='flag-5'>編譯</b>/構(gòu)建 KiCad 源碼