使用OpenVINO做AI模型優化與部署

Jiun Da Lin
6 min readJun 23, 2021

--

簡介

OpenVINO 使用流程圖

OpenVINO 其實支援的套件種類十分多,不僅僅能夠使用 Python Pytorch 環境做開發,同時也能使用 Tensorflow、Caffe、Mxnet 等等的開發環境將模型優化(Optimize)後轉為 IR 檔,並做後續的推論(Inference),而 Inference engine 也不僅支援 Python,連 C++、OpenCV 的環境下也都能夠使用優化完的 IR 檔做推論。

在推論引擎當中也支援了許多硬體,基本上只要是 Intel 的 CPU 都一定能變快,除此之外也有支援一些其他的硬體加速環境包括 (GPU、VPU、FPGA),這邊硬體都必須要是 Intel 的才能進行加速,另外 GPU 指的也是 Intel 內顯並非是 Nvidia 的獨顯,可以查看處理器名稱後方有沒有 F 來判斷有無內顯,(如 i7–9750F 代表沒有內顯),而 VPU 是 Intel 所開發的人工智慧運算神經加速棒。

而 OpenVINO 也有開發了一套比較人性化的使用者介面(WorchBench),若是你不習慣使用 Command line 做操作的話也可以透過 Docker 架設 [WorchBench](https://docs.openvinotoolkit.org/latest/workbench_docs_Workbench_DG_Install_Workbench.html) 以 GUI 的環境做模型優化,這篇文章就不做那部分的介紹,單純以 Python + Pytorch 的開發環境以 Command line 與 Optimize Code 做示範,並在推論階段部署在一個 Python 的環境當中。

若想更清楚的理解 OpenVINO 他們發展現況與簡介也可以參考[官方 YouTube 頻道](https://www.youtube.com/watch?v=e6R13V8nbak)

流程

整體流程為以下項目:
1. Pytorch訓練完的(.pth)檔轉為(.onnx)
2. 安裝 OpenVINO
3. 將剛才建立的(.onnx)轉為IR model,會生成(.xml)、(.bin)
4. 使用優化後的模型做推論

轉為ONNX方法

這邊開發平台為 Pytorch,訓練結束後儲存的模型(.pth)檔需要先轉為(.onnx)才能在 OpenVINO 環境當中使用作為待優化模型

參考- https://zhuanlan.zhihu.com/p/116065374

安裝 OpenVINO

安裝 OpenVINO 這邊就不做贅述,是依照官網的教學:
https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html

轉換為 IR 執行模型優化(Optimize)

  1. 使用系統管理員身分開啟 Anaconda Prompt
  2. 安裝完 OpenVINO 後進入以下資料夾路徑
    cd C:\Program Files (x86)\IntelSWTools\openvino_2020.3.355\deployment_tools\model_optimizer
  3. 建立一個要存放 model 的資料夾並將待優化的 onnx 檔放進去(這邊我建立了一個名稱為 model 的資料夾)
  4. 執行 model optimize
    python mo_onnx.py — input_model model\FeatEmbder-3.onnx — output_dir model\
  5. 執行成功可以看到下面 Success 訊息:

並且資料夾多出下面這三個檔案,其中我們會用到的是(.bin)以及(.xml),前者是用來儲存模型參數(weights)數字,後者則是用來儲存模型架構:

更改精度

  1. 若是要更改模型精度如 FP16、FP32 及其他設定可以參考官方文件,若是設定為 FP16 做資料型態的量化的話剛才生成出來的(.bin)檔大小會小一半。
  2. 而預設的是 FP32,雖然生成出來的(.bin)檔大小不變,因為 Pytorch 原先生成的精度就是 FP32,但是在後續推論時速度還是會快很多,主要原因是模型優化 (Optimize) 階段就已經將模型一些 Layer fusion 在一起,像是 Batch-Norm、Scale-Shift,這些都能夠轉換為矩陣後與前後 CNN Layer 的矩陣運算 fusion 在一起。

官方文件參數設定說明:
https://docs.openvinotoolkit.org/latest/openvino_docs_MO_DG_prepare_model_convert_model_Converting_Model_General.html

Inference engine 執行推論

在每次 Inference 之前必須先進入以下路徑設定環境變數

  • Ubuntu:
    指令為 source /opt/intel/openvino_2020.3.355/bin/setupvars.sh
  • Windows:
    執行 C:\Program Files (x86)\Intel\openvino_2021\bin\setupvars.bat

推論程式碼的部分參考下方連結

實驗結果

這邊實驗優化一個 EfficientNet-b0 的模型

--

--