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具有以下兩個特點:
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]

① 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表示輸入和輸出張量。
-
An Overview of TVM and Model Optimization https://tvm.apache.org/docs/tutorials/get_started/introduction.html#sphx-glr-tutorials-get-started-introduction-py ?