TVM學(xué)習(xí)筆記(一)初步了解

TVM官網(wǎng):http://tvm.apache.org/

文檔:https://tvm.apache.org/docs/index.html

源碼:https://github.com/apache/tvm/ 加速鏡像:https://hub.fastgit.org/apache/tvm/

TVM是一個開源的機器學(xué)習(xí)編譯框架,用于在CPU、GPU、FPGA等設(shè)備上進行加速優(yōu)化,使其在機器學(xué)習(xí)模型在后端設(shè)備上更加高效的運行。


TVM系統(tǒng)概述

TVM具有以下兩個特點:

1、將深度學(xué)習(xí)模型編譯為最小可部署模型(minimum deployable modules)
2、自動生成和優(yōu)化模型,使得模型在更多后端設(shè)備具有更好的性能。

其項目愿景是構(gòu)建一個可用的(accessible)、可擴展的(extensible)和自動化(automated)的開源框架,為任何硬件平臺優(yōu)化機器學(xué)習(xí)模型。以此縮小以生產(chǎn)力為導(dǎo)向的深度學(xué)習(xí)框架和以性能和效率為導(dǎo)向的硬件后端之間的差距。

TVM及模型優(yōu)化概述[1]

TVM流程

① Import the model from a framework likeTensorflow,Pytorch, or Onnx.

TVM可以從其他框架導(dǎo)入機器學(xué)習(xí)模型,但不同框架的模型支持程度不一致,如果模型導(dǎo)入時遇到問題,可將模型轉(zhuǎn)換為ONNX模型。

② Translate to Relay, TVM's high-level model language

“Relay”是一種函數(shù)式語言和神經(jīng)網(wǎng)絡(luò)的中間表示。其支持如下:1、Traditional data flow-style representations;2、Functional-style scoping, let-binding which makes it a fully featured differentiable language;3、Ability to allow the user to mix the two programming styles 。Relay使用了圖級優(yōu)化過程來優(yōu)化模型

③ Lower toTensor Expression(TE) representation

“l(fā)owing”是指高級(high-level)表示轉(zhuǎn)化為低級(low-level)表示。經(jīng)過高級優(yōu)化,Relay 通過FuseOps 將模型劃分為許多小子圖(small subgraphs),并將這些子圖轉(zhuǎn)換為TE表示。Tensor Expression(TE) 是一種特定領(lǐng)域的語言,用于描述張量計算。TE同樣提供許多調(diào)度原語用于指定低級循環(huán)優(yōu)化,如:分塊、向量化、平行化、展開和融合等。為了幫助將Relay表示轉(zhuǎn)換為TE表示,TVM中包括了Tensor Operator Inventory (TOPI),其中預(yù)定義一些常用的張量算子模板(如:conv2d,transpose)。

④ Search for the best schedule using the auto-tuning module AutoTVM or AutoScheduler.

“schedule”具體指使用TE表示的算子或子圖的低級循環(huán)優(yōu)化。自動調(diào)優(yōu)模塊搜索最佳優(yōu)化并將其與未經(jīng)優(yōu)化的模型(cost model)進行性能測算。在TVM里有 AutoTVM 和 AutoScheduler 兩個自動調(diào)優(yōu)模塊。

⑤ Choose the optimal configurations for model compilation.

經(jīng)過模型調(diào)優(yōu),自動調(diào)優(yōu)模型得到調(diào)優(yōu)記錄并以JSON形式保存,在這一步中,將會對每個子圖選擇最佳調(diào)優(yōu)結(jié)果。

⑥ Lower to Tensor Intermediate Representation (TIR), TVM's low-level intermediate representation.

經(jīng)過上一步獲取的最佳調(diào)優(yōu)結(jié)果,每一個TE子圖繼續(xù)劃分為TIR,并繼續(xù)更低級的優(yōu)化過程。對于TIR的優(yōu)化降低到硬件平臺的目標編譯器,這是生成可部署到生產(chǎn)環(huán)境中的代碼的最后階段。TVM支持的編譯器后端:LLVM、NVCC 等。

⑦ Compile down to machine code.

在整個過程的最后階段,TVM可以將模型編譯為可鏈接的模塊,并利用TVM運行時提供的C接口動態(tài)的加載模型。TVM亦可將運行時與模型捆綁打包為單 個部署包完成部署。

從TVM的整體來看,Relay使用一些算子描述計算過程,在算子中則用TE表示輸入和輸出張量。


  1. An Overview of TVM and Model Optimization https://tvm.apache.org/docs/tutorials/get_started/introduction.html#sphx-glr-tutorials-get-started-introduction-py ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容