使用 TVM 部署 AIoT 深度學習模型 — 實戰篇
在做完深度學習模型的訓練之後,其實下個令人頭痛的問題是如何部署這些模型到 AIoT 的 Edge 上,其實雲端的部署問題都不大,例如 TensorRT 這一類的部署工具可以將模型部署到雲端或者是帶有 GPU 很厲害的機器上面,但是面對形形色色的 AIoT 硬體,有常見的 GPU 加速,有 FPGA 合成的,有用 CPU 去算的,部署到這些不同的硬體,是需要一個 “Compiler” 來替你的模型根據不同的硬體結構做速度和模型大小的優化,我在這篇文章大約有提到 Compiler 工具在優化的方向,而在進入深入優化的討論之前,先用 TVM 手把手走過一遍硬體部署的流程。
TVM 簡介
TVM 最早來自於華盛頓大學 Paul G. Allen 計算機工程學院 SAMPL 小組的研究項目,使用 Apache 協議開源,所以我們可以自由地使用它做一些研究,部署並且工程優化我們自己的模型。它提供了從前端框架到後端硬體的端到端(End-to-End)編譯軟體架構,為了支援各種硬體後端的計算圖優化(Computational Graph Optimization)和張量計算優化(Tensor Level Optimization),從深度學習框架模型導入高階數據流程圖,轉化成TVM本身的計算圖表示方式(Relay IR),再進行各種編譯優化程序,並產生適合硬體後端計算特性的優化後的低階程式碼,TVM不僅能支援CPU、GPU的深度學習編譯,更能支援FPGA、AI 晶片等的編譯流程,在編譯流程的優化上面需要面臨很多工程與技術上的挑戰。
簡單來說,TVM 就是想面對不同的深度學習框架,編譯到適合各種不同硬體平台上面執行的技術。TVM 支持將 Keras,MxNet,PyTorch,Tensorflow … 等等框架產生的深度學習模型編譯並且自動根據硬體特性優化為多種後端硬體或是最小可部署的模型。
TVM 提供將訓練好的模型優化並輸出到不同設備 Native Code 的能力。換句話說,他提供了端對端 (End-To-End) 針對硬體提供的優化與部署過程,支援多種語言的 Binding,並且可以根據自己硬體的特性(例如 FPGA 合成) 來做 CodeGen。
理論很多,但是東西不跑起來是沒有感覺的,因此這一篇文章一步一步說明在 Ubuntu 20.04 LTS 上面如何安裝並且做簡單的 TVM 測試,下一篇再來說明真實部署一個 ONNX 的模型所需要的步驟。
動手吧 — 安裝 Ubuntu 20.04LTS 與必要的工具
我自己是在 PVE 上面架設的 LCX Container 容器上面安裝 Ubuntu 20.04 LTS,如何安裝在這裡就不重複說明了。Ubuntu 20.04 LTS 安裝完成之後,第一步就是把所有的 Packages 和系統 update 與升級到最新的版本。