這次改版包含了哪些面向呢? #
從官方釋出的說明文件中可得知這次主要改版的面向包含以下六個:
- 提供更多樣便捷的安裝方式
- 支援更多類型硬體及異構推論
- 增加更多預訓練模型及公開模型庫
- 更簡潔有力的API程式開發
- 模型優化參數簡化及自動化
- 部署時更智能管理硬體裝置
針對這些改變有沒有更詳細的解說呢? #
以下會根據不同面相做說明,
提供更多樣便捷的安裝方式:
OpenVINO 原本就有支援多種作業系統及多種安裝方式,在安裝時會將相關工具、相依套件一起安裝,雖然這樣很方便開發,但會佔用太多安裝空間。改版後除了保留原先多樣性的安裝彈性外,同時加入 PyPl 來源的安裝方式,讓使用 Python 開發環境的朋友能更容易安裝 OpenVINO,並將運行所需基礎元件 ( OpenVINO Runtime ) 和開發工具分開安裝,以便節省時間及空間。
支援更多類型硬體及異構推論:
OpenVINO 推出時最大亮點為其可透過推論引擎外掛 ( Inference Engine Plugin ) 不用重寫程式即可支援自家的各種硬體來進行推論,包括 Intel Core/Atom/Xeon CPU(AVX512/AVX2/SSE加速運算指令集)、iGPU(Intel HD Graphics, Iris 內顯繪圖晶片)、FPGA(原 Altera,現為 Intel Arria 10 GX)等,這幾年又陸續增加更多的 Plugin,如 HDDL(即多個 VPU)、Heterogeneous 異構運算(即同時可使用多種硬體協同運算)。
這次改版更是加入對 Intel 最新的獨立顯卡 GPU 的支援,包括 Xe, Xe Pro 系列,大大提升推論速度。對於 Intel 11 及 12 代 CPU 而言,更加入對 AVX512-VNNI, AVX512_BF16 指令集的支援,同時亦有支援 CPU 內建的 GPU Iris Xe,使得 CPU 的運算變得更有效率。
增加更多預訓練模型及公開模型庫:
OpenVINO 為了讓大家更容易上手,從推出時就有提供很多範例程式、Intel預訓練模型、公開預訓練模型、以及開源模型動物園 ( Open Model Zoo ) ,2021 改版時將上述內容從 Resource 分項中重新整合到 Model Zoo 分項中,並增加以 Jupyter Notebooks 型式的 Tutorials 分項範例程式,讓大家能更了解每個程式段的用法及快速體驗運行推論結果,同時增加了許多循環神經網路 ( Recurrent neural network, RNN ) 相關模型,如 LSTM 、語音辨識、自然語言處理 ( Natural Language Processing, NLP ) 等。
這次改版則將原有的 Open Model Zoo Demos 移除 (需分開安裝),並新增了許多模型,如人臉特徵、英文手寫辨識、英文文字辨識、人員偵測、物件偵測、機器翻譯、背景摳圖、文字預測、影像語義分割、語音辨識等。其中包括 Intel 預訓練模型 16 項及公開預訓練模型 15 項。另外 Jupyter Notebook Tutorials 亦新增 9 個範例,包含人體動作辨識、訓後量化 ( Post-Training Quantization )、手寫辨識、語音變文字、自然語言問答等。
更簡潔有力的API程式開發:此次 2022.1 版在推論流程上有重大改革,將原先的繁雜的推論引擎改為單一運行庫 ( OpenVINO Runtime, OV ),並大幅簡化 API 的呼叫方式,如下圖上方所示。
舊版的 OpenVINO 推論程序為初始化核心 InferenceEngine::Core 及相關配套程式庫,依需求配置所需的輸出入項目,接著載入模型,建立推論結果要求,待準備好輸入 ( GetBlob ) 後就可以開始進行推論,最後再將結果轉回可應用於後端程式的格式,即可完成一次推論,如下圖左側下方。
此次 2022.1 版的推論流程則改成初始化只需配置單一 ov::Core 即可,不用再配置其它。接著使用 ov::CompiledModel 來處理載入模型及對應推論硬體,這裡預設可使用 AUTO 參數來進行推論硬體自動化偵測及配置,接著同樣地建立推論結果要求,設置輸入內容。這裡改用 ov::Tensor 來取代原來的 Blob 用法,此種做法會更接近主流模型框架的描述方式。
模型優化參數簡化及自動化:
在 OpenVINO 中模型優化器 ( Model Optimizer, MO ) 一直是很重要的亮點,它可以幫大家把各種框架(如 TensorFlow, PyTorch, ONNX …)產生的模型轉換到中介表示 ( IR ) 檔,便於進行模型的優化。
此次改版對於執行模型優化器的參數作了一些優化,舊版須加入輸入模型的外形,而新版就不需要了,因為運行時會自動解讀模型取得相關外形參數。
對於更智能管理硬體裝置有什麼例子嗎? #
此次改版在智能管理上還有幾個小亮點,讓推論效能還能再略微提升,
1. Auto Device Plugin
舊版使用 Inference Engine API 時,必須由使用者自己決定要使用的推論硬體、配置對應參數,尤其在多裝置同時運行時就更難設定。改版後則使用 OpenVINO Runtime API,會自動搜索系統中所有算力(如 CPU, GPU, iGPU, VPU 等)及其規格,並根據模型的精度、結構及用戶指定性能要求等訊息,選取並配置適合算力單元進行部署。可支援的硬體及模型精度如下圖所示。
2. PERFORMANCE_HINT搭配前項內容,還可加上性能提示 ov::hint::performance_mode 來配置自動選擇裝置,使其達到最佳性能。目前主要提供吞吐量 ( THROUGHPUT ) 和延遲 ( LATENCY ) 兩種選項。
另外 ov::hint::model_priority 亦提供手動控制 Auto-Device 的執行優先權,如下範例所示。不過高優先級模型會加載到高優先級裝置。而較低優先級的模型不會被加載到被較高優先級的模型占用的裝置上。
3.First Inference Latency
如果是舊版 OpenVINO 的使用者,那一定遇過同樣的模型推論在 iGPU 和 MYRIAD ( VPU ) 運行時,第一次推論會延遲1~2分鐘,尤其使用 iGPU 時延時更為明顯,而使用 CPU 則很快就能運行起來。這個問題在此次改版後有明顯的改善,如下圖所示,假設我們要使用 Intel GPU 進行推論,則在模型編譯和載入到 GPU 前,先使用 CPU 來推論,待 GPU 準備好了就切換過去,使用者完全無感。如此第一次推論延時就變得很短,同時保有第二次之後 GPU 推論速度的提升。
4.Dynamic Shapes (CPU plugin only)
在深度學習模型中靜態模型在推論時可透過調用塑形函式 reshape() 調整輸入資料的張量形狀,但這樣的計算是非常耗時的。如果遇到像自然語言處理(如 BERT)、風格轉移這類輸入張量維度是會動態變化的模型,調用 reshape() 就會變成計算的瓶頸。
此次改版開始支援動態塑形,除了可以解決計算耗時問題,同時也解決以往難以處理地時序型循環神經網路模型推論問題。
5.Preprocessing API
通常深度學習的模型都會指定輸入資料的維度、數值格式、尺寸大小,若輸入資料不符合指定格式時就要進行預處理( Preprocessing ),舊版 OpenVINO 多半是搭配配套安裝的 OpenCV 來協助完成,雖然透過 OpenCV 可以完成預處理工作但效能不高,因此改版後 OpenVINO 提供了能使用 GPU/VPU 等更高效能的硬體來執行預處理及推論後處理的函式 ov::preprocess::PrePostPocessor。
》資料來源:OpenVINO 2022大改版 讓Edge AI玩出新花樣