簡介 有在涉略 AI 邊緣運算的各位們對於 OpenVINO 應該都有基礎的了解:不同框架(如 TensorFlow、PyTorch 等)訓練完成的模型檔在經由 OpenVINO 轉換後可以在不同邊緣運算裝置執行推論加速。 若筆者告訴各位,現在不用經過模型轉換可以直接在 TensorFlow 中推論時完成 OpenVINO 加速呢? 是的你沒看錯!Intel 在 2021 下半年推出的 OpenVINO™ integration with TensorFlow(以下簡稱OVTF)能夠實現在 TensorFlow 中介接 OpenVINO 執行推論加速。本篇將帶大家實際操作看看在不用改 code 就能夠把 TensorFlow 推論進行加速的方法! OpenVINO x TensorFlow 幸福來得太突然 對於 TensorFlow 開發者來說,只要在程式碼裡增加兩行就可以增加推論速度!什麼程式碼這麼神奇!?眼見為憑,這兩行指令如下: import openvino_tensorflow openvino_tensorflow.set_backend('') 上面第一行嚴格來說不算指令,只是匯入了 OpenVINO 整合 TensorFlow 套件。而第二行呼叫了 openvino_tensorflow 設定後端運算硬體的指令,其中帶入的參數可以設定為 CPU(Intel 處理器)、GPU(Intel 處理器中的整合式顯示卡)、MYRIAD(AI 加速晶片 VPU)等。如此一來就已完成 TensorFlow 推論加速了。 而其特別之處從架構圖看來可以得知在原始 TenorFlow 與 OpenVINO toolkit 之間多增加了 Operator Capability Manager (OCM)、Graph Partitioner、TensorFlow Importer 與 Backend Manager,讓前述二者可以渾然天成的結合在一起。簡單來說在執行推論時會對神經網路各個運算進行判讀,是否能夠透過 OpenVINO 進行加速,並讓其對應到 OpenVINO 的相應的運算子,最後分配到指定的後端硬體進行運算,反之若是不行加速的運算則讓其返回在 TensorFlow 中處理。 各別功能作用細節可從 github repo 與說明文件進行深入探究。若不了解這些技術細節也不要緊,參考模型支援文件可以得知各個 TensorFlow 模型(包含 TF-Slim Classification、Object Detecion、TF-Hub 等眾多來源)的支援程度,或是跟著我們接下來的步驟進行體驗一番! OpenVINO™ integration with TensorFlow 架構圖 安裝 OpenVINO™ integration with TensorFlow 此篇文章撰稿時 OVTF 的最新版本為 V1.10,釋出時間是為 2021年12月8日,OpeVINO 核心版本是 2021.4.2 長期支援版本,搭配的 TensorFlow 版本為 2.7.0。在 TensorFlow2 版本猶如飆車般的成長今年,還確實有跟上主要版本,算是相當有誠意。 筆者的開發環境是 Ubnutu 20.04(搭配硬體為 Intel Core i7-1185GRE),在終端機中執行以下指令,過程約花費兩分鐘內即可完成。 pip3 install -U pip pip3 install tensorflow==2.7.0 pip3 install -U openvino-tensorflow 若讀者的開發環境是在 Windows 或 MAC OS,也可以參照互動式安裝指令表來取得執行安裝所需執行的指令。完成安裝後可透過以下指令確認安裝正確: python3 -c "import tensorflow as tf; print('TensorFlow version: ',tf.__version__);\ import openvino_tensorflow; print(openvino_tensorflow.__version__)" 會看到輸出結果如下則表示已安裝完成: TensorFlow version: 2.7.0 OpenVINO integration with TensorFlow version: b'1.1.0' OpenVINO version used for this build: b'2021.4.2' TensorFlow version used for this build: v2.7.0 CXX11_ABI flag used for this build: 0 可以看到 TensorFlow 版本 2.7.0,OpenVINO 版本 2021.4.2 等資訊,往後有版本更新也可以此作為追蹤。若是輸出訊息中有出現: Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory 等錯誤訊息也毋須理會,這只是在檢測系統有無 GPU 硬體的過程,當偵測不到 GPU 則會出現此訊息。 OVTF 範例試玩 在 OVTF github 專案中有附上立即可用的範例程式碼方便我們直接體驗與測試,在終端機下執行下面指令取得專案並且完成設置: git clone https://github.com/openvinotoolkit/openvino_tensorflow.git cd openvino_tensorflow git submodule init git submodule update --recursive cd examples pip3 install -r requirements.txt 完成之後指令後即可在 openvino_tensorflow/examples 目錄下執行影像分類 Classification 或是物件偵測 Object Detection 範例。首先我們先執行影像分類範例: $ python3 classification_sample.py --no_show --backend CPU ...(中間省略)... OVTF Summary -> 149 out of 910 nodes in the graph (16%) are now running with OpenVINO™ backend Inference time in ms: 18.61 military uniform 0.6277221 bow tie 0.34492084 bearskin 0.006691128 theater curtain 0.0056200475 flagpole 0.0028387788 上方命令執行範例程式 classification_sample.py 將會抓取 Grace Hopper 照片,並使用 Inception V3(ImageNet) 模型進行推論,該模型也是取自於TF-Hub,使用推論引擎透過 --backend 參數指定為 CPU,–no_show 代表不顯示推論結果。可以看到輸出訊息中此模型有 16% 的節點可透過 OpenVINO 進行加速,推論時間花費 18.61ms,推論結果 62.7% 為軍服。 我們也可以在參數中加上 --disable_ovtf 來停用 OpenVINO 加速,也可以修改 --backend 參數為 GPU 或 GPU_FP16 來換成 Intel GPU 加速推論,藉此來比較加速前後差異(完整參數資訊可以透過 --help 查詢)。 筆者使用固定 Inception V3 模型與相同輸入照片,切換不同後端推論硬體,其差異如下表。在沒有啟用 OVTF 需要費時 26ms 進行推論,若採用 GPU 並以 FP16 精度進行推論則可以節省一半以上時間縮短至 12.54ms,若單純以 CPU 加速也能有縮短 30% 以上的時間! 此外筆者將模型置換為 Inception、Mobilenet、Resnet V2 152 等四種不同模型,並比較停用 OVTF與 CPU 加速之間的差異,確實發現在 OVTF 啟用後能提升 30%~40% 不等的堆論速度,其中 Mobilenet V3 Large 有 29% 的節點可以透過 OVTF 加速,因此效果最為顯著。 Object Detection with OVTF 接著我們也試玩一下物件偵測範例,在此範例中使用的模型為 Yolo V4,可以偵測 MS COCO 資料集中 80 種物件。在執行之前我們需要把 Yolo V4 由 Darknet 轉換成 TensorFlow 的格式。 $ cd ~/openvino_tensorflow/examples $ chmod +x convert_yolov4.sh $ ./convert_yolov4.sh 筆者接上一個標準 UVC 介面的 WEBCAM,加上 input=0 參數讓範例程式抓取 Webcam 即時影像,並選擇停用 OVTF 與 GPU 後端來比較兩者差異。 #disable OVTF python3 object_detection_sample.py --input=0 --disable_ovtf #backend=GPU python3 object_detection_sample.py --input=0 --backend GPU 實際運行可以看到在沒啟用 OVTF 時每個 frame 花費超過 400ms,而在啟用後可以縮短到 94ms,差異超過四倍! Webcam Object Detection /w TF Inference @FPS:2 Webcam Object Detection /w OVTF GPU Inference @FPS:10 Running Example on Colab 若是手邊沒有合適的開發環境可以來測試也沒關係,OVTF 專案中也提供了兩個 notebook 檔案可以直接在 Colab 上運行測試,分別為影像分類與物件偵測範例。我們直接執行物件偵測範例中所有程式碼區段來檢視成果,可以看到在於有啟用 OVTF(後端硬體為 CPU)的推論時間為 946ms,相較於無啟用 OVTF 花費了 1258ms 減少了 25% 的推論時間! Colab 物件偵測範例啟用 OVTF 與關閉 OVTF 之間差異 小結 這次 Intel 所推出的 OpenVINO™ integration with TensorFlow 專案雖然說不上是個殺手級工具,但也紮紮實實搔到了 AI 開發者的癢處!過往訓練完成 AI 模型後要進行推論驗證,仍需要花費不少心力去轉換與測試,而 OVTF 則大幅削去了開發階段與佈署階段所隔著的鴻溝,直接在開發者熟悉的環境中就能估算實際佈署的效能概況。 筆者也是相當期待後續 OVTF 是否還能衍生出什麼方便好用的功能,又或者是針對其他深度學習框架也能有類似的整合,就讓我們繼續看下去! 詳細內容 不須轉換!OpenVINO整合TensorFlow框架實現推論加速! - 引領創新的科技實作社群媒體Intel在2021下半年推出的OpenVINO™ integration with TensorFlow能夠...makerpro.cc