TVM結構介紹


看了下最新的TVM,已經到了0.8版本,整個TVM軟件stack也發生了比較大的變化,准備追一下進行介紹。整體節奏大概是先做一篇Introduction,之后會翻譯一些tutorial,后邊會結合一些真實的Op進行。

整個TVM的結構現在已經變成了

 

 

 從前到后可以分為這么幾個部分(參考了其他博客的一些內容):

1. 輸入是從TensorFlow、PyTorch、ONNX等框架導入的模型。

2. 轉換為Relay:Relay是TVM自有的高級模型語言,它既支持傳統的數據流表示風格,在使用了let-binding方式以后,也支持了類似於函數式編程作用域的風格;同時,在Relay層TVM會對模型進行高層的圖級優化

3. 下降到TE(Tensor Expression)Relay經過高層優化后,會進行算子融合並將模型被划分為子圖,最終轉換成TE來表示這些子圖;TE是一種專門用於描述張量計算的領域專用語言,它指定了一些調度原語來指定低級的循環優化,如平鋪,向量化、並行化、循環展開等;為了幫助將Relay轉換為TE的過程,TVM提供了TOPI(一種預定義的模板來提供公共tensor op)

4. 自動調優模塊,包括AutoTVM和AutoScheduler 。TE之后會被傳到自動調優模塊進行算子調優;自動調優模塊會針對給定的TE,使用算法生成不同調度配置,並基於給定代價模型和特定硬件后端進行評估;自動調優模塊分為以下兩種:

a)    AutoTVM:基於模板的自動調優模塊,針對用戶指定的模板及相應搜索空間進行搜索和調優;

b)    AutoScheduler:無需模板的自動調優模塊,會針對給定計算自動生成所需模板及搜索空間;

5. 選擇最優的配置。自動調優模塊生成JSON格式的記錄

6. 下降到Tensor Intermediate Representation (TIR),這一層是TVM的低級中間表示,一般提供包括LLVM IR在內的多種結構,多編譯器和多個特定的硬件表示

7.  使用目標編譯器進行編譯:優化后的TIR會被轉換並下發到目標硬件對應的編譯器,如LLVM、NVCC等,進行編譯並生成最終可執行的機器碼;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM