部署模型并與 TVM 集成
本篇文章譯自英文文檔?Deploy Models and Integrate TVM?
https://tvm.apache.org/docs/how_to/deploy/index.html
更多 TVM 中文文檔可訪問 →Apache TVM 是一個端到端的深度學(xué)習(xí)編譯框架,適用于 CPU、GPU 和各種機器學(xué)習(xí)加速芯片。 | Apache TVM 中文站
https://tvm.hyper.ai/
本節(jié)介紹如何將 TVM 部署到各種平臺,以及如何將其與項目集成。

構(gòu)建 TVM runtime 庫
不同于傳統(tǒng)的深度學(xué)習(xí)框架,TVM 堆棧分為兩個主要組件:
TVM compiler:負責(zé)模型的編譯和優(yōu)化。
TVM runtime:在目標(biāo)設(shè)備上運行。
集成編譯后的模塊并不需要在目標(biāo)設(shè)備上構(gòu)建整個 TVM,只需在你的電腦上構(gòu)建 TVM 編譯器堆棧,然后用來交叉編譯要部署到目標(biāo)設(shè)備上的模塊。
這里只需利用可集成到各種平臺的輕量級 runtime API 即可。
例如,可在基于 Linux 的嵌入式系統(tǒng)(如樹莓派)上,運行以下命令來構(gòu)建 runtime API:
注意:make runtime 僅構(gòu)建 runtime 庫。
也可以交叉編譯 runtime 庫,但不要和嵌入式設(shè)備的交叉編譯模型混淆。
若要包含其他 runtime(例如 OpenCL),可以修改 config.cmake 來啟用這些選項。獲取 TVM runtime 庫后,就可以鏈接編譯好的庫了。

TVM 可針對不同架構(gòu)(例如 x64_64 主機上的 aarch64)交叉編譯模型(無論是否被 TVM 優(yōu)化)。一旦模型被交叉編譯,runtime 必須與目標(biāo)架構(gòu)兼容,才能運行交叉編譯的模型。
為其他架構(gòu)交叉編譯 TVM runtime
在 上面 的示例中,runtime 庫是在樹莓派上編譯的,與樹莓派等目標(biāo)設(shè)備相比,在擁有高性能芯片和充足資源的主機(如筆記本電腦、工作站)上生成 runtime 庫的速度要快得多。為了交叉編譯 runtime,必須安裝目標(biāo)設(shè)備的工具鏈。安裝正確的工具鏈后,與原生編譯相比,主要區(qū)別在于向 cmake 傳遞了一些額外的命令行參數(shù)來指定要使用的工具鏈。例如,在現(xiàn)代筆記本電腦(使用 8 個線程)上為 aarch64 構(gòu)建 TVM runtime 庫需要大約 20 秒,而在樹莓派 4 上構(gòu)建 runtime 需要約 10 分鐘。
aarch64 的交叉編譯
對于 ARM 裸機,用以下工具鏈(而不是 gcc-aarch64-linux-*)來安裝非常方便:
RISC-V 的交叉編譯
file 命令可用于查詢生成的 runtime 的架構(gòu)。
針對目標(biāo)設(shè)備優(yōu)化和調(diào)優(yōu)模型
在嵌入式設(shè)備上對 TVM 內(nèi)核進行測試、調(diào)優(yōu)和基準(zhǔn)測試,最簡單且推薦的方法是通過 TVM 的 RPC API。下面是相關(guān)教程的鏈接:
交叉編譯和 RPC?https://tvm.hyper.ai/docs/tutorial/rpc
在樹莓派上部署預(yù)訓(xùn)練模型https://tvm.apache.org/docs/how_to/deploy_models/deploy_model_on_rasp.html#tutorial-deploy-model-on-rasp
在目標(biāo)設(shè)備上部署優(yōu)化模型
完成調(diào)優(yōu)和基準(zhǔn)測試后,要在目標(biāo)設(shè)備上以不依賴 RPC 的方式來部署模型。具體操作參考以下教程:
使用 C++ API 部署 TVM 模塊?https://tvm.hyper.ai/docs/how_to/deploy/deploy_c++
部署到 Android?https://tvm.hyper.ai/docs/how_to/deploy/deploy_android
將 TVM 集成到項目中?https://tvm.hyper.ai/docs/how_to/deploy/integrate
HLS 后端示例?https://tvm.hyper.ai/docs/how_to/deploy/hls
Relay Arm? 計算庫集成?https://tvm.hyper.ai/docs/how_to/deploy/relay_arm
Relay TensorRT 集成?https://tvm.hyper.ai/docs/how_to/deploy/relay_tensorrt
Vitis AI 集成?https://tvm.hyper.ai/docs/how_to/deploy/vitis_ai
Relay BNNS 集成?https://tvm.hyper.ai/docs/how_to/deploy/relay_bnns
其他部署方法
前面已經(jīng)有許多針對特定設(shè)備的操作指南,其中包含 Python 代碼的示例(可用 Jupyter Notebook 查看),這些操作指南描述了如何準(zhǔn)備模型,并將其部署到支持的后端。
部署深度學(xué)習(xí)模型?https://tvm.hyper.ai/docs/how_to/deploy/deploy_models