作者:Jack Hsu
說到小型電腦主機,大家大概第一個就會想到樹莓派吧?如信用卡般尺寸加上完整的週邊及充足的開源開發資源,讓開發者們愛不釋手。幾年前人工智慧(AI)開始興起時,大家也是馬上拿來應用於小型語音及視覺應用。不過沒多久大家就發現要執行深度學習模型所需的算力,遠遠高出樹莓派CPU (Arm Cortex-A53/72 x4 Core@1.2~1.8GHz) 所能提供的。
於是又有了像Intel神經計算棒(Neural Compute Stick)這類AI加速計算的外掛裝置出現,但其算力還是只能應付小尺寸(640×480像素以下)影像或要求檢測速度不高(每秒1~3張)的場景。對於實際場域高效電腦視覺應用(如物件偵測、影像分割等),一般就得配置一台大型桌機加上Nvidia GPU顯卡才能達成AI推論需求。
好在隨著半導體技術的突飛猛進,兼具高效計算及迷你尺寸的主機已不再是遙不可及。其中Intel和許多廠商合作推出的NUC (Next Unit of Computing) 系列產品[1]從入門款(Celeron N4505 CPU + UHD 16EU GPU)到高階款(Core i7 13Gen CPU + Iris 96EU GPU)一應俱全,讓開發者在性能及價格選用上有了更大的彈性空間。
為了更進一步了解這類迷你主機在AI推論效能的表現,此次選用了東擎(ASRock Industrial) NUC BOX-1260P作為主要實測硬體(以下簡稱測試機),AI推論部份則選用OpenVINO 2022.3版作為基礎工具。而測試項目則使用OpenVINO Notebooks中最新的物件偵測「Convert and Optimize YOLOv8 with OpenVINO」範例作為實測效能的分析。以下就開始展開逐一說明。
1. ASRock NUC BOX-1260P基本介紹
首先根據東擎官網文件說明[2]可知這款機器為準系統,預設不帶DDR4記憶體、硬碟及作業系統,也沒有附螢幕、鍵盤、滑鼠及網路攝影機(Webcam),所以使用者需自行配置,如圖1所示。此次測試機已事先配置256GB SSD及16GB DDR4,主機其它硬體規格如下所示。
NUC BOX-1260P
- CPU:Intel® 12th Gen (Alder Lake-P) Core™ Processors i7-1260P(12 Cores, 16 Threads, base 2.5GHz, Max. 4.7GHz, with Iris Xe GPU 0.3GHz ~ 1.4GHz 96EU),處理器基本功率28W,Turbo模式可達64W,最低功率20W。
- 記憶體:二組260-pin SO-DIMM插槽,最多可支援64GB DDR4 3200 MHz。
- 連接端口:一組USB4/Thunderbolt™4, 四組USB 3.2 Gen2, 一組M.2 Key M, 1組M.2 Key E (已內置WiFi-6E模組), 一組SATA3 (可安裝2.5吋硬碟), 兩組Intel 2.5 Gigabit LAN。
- 顯示:可支援最多四組顯示器,1組HDMI 2.0b, 3組DP 1.4a(其中2組透過Type C USB)
- 音訊:3.5mm 耳機插孔
- 信賴平台模組:TPM 2.0 onboard IC
- 變壓器:19V/90W
- 外觀尺寸:110.0 x 117.5 x 47.85mm
- 內置散熱風扇,另有提供外掛固定架鐵片及螺絲。
圖1:ASRock NUC BOX-1260P開箱照。(OmniXRI整理製作, 2023/5/3)
2. 開箱即用的OpenVINO AI套件包
一般常見的AI應用的開發及部署流程中,前半段著重在模型的選用及訓練,需要大型GPU來幫忙。而後半段則將重點放在模型優化及壓縮上,部署時僅需使用較低規格的電腦主機即可運行。Intel於2018年5月正式推出了OpenVINO toolkit (Open Visual Inference and Neural network Optimization,以下簡稱OpenVINO),主要提供了多種AI框架(如TensorFlow, PyTorch, Caffe, ONNX等)開發的模型轉換、產生中介表示格式(Intermediate Representation, IR, 即模型結構*.XML檔及模型權重*.BIN檔)、模型減量優化及支援自家各種硬體(CPU, iGPU, VPU, FPGA)的推論。此外更支援數十種AI應用及數百種預訓練模型,方便使用者進行開發及測試。經過18次改版後,如今已來到2022.3版,不僅在電腦視覺AI應用上有不錯的表現,自然語言處理、大型語言模型、甚至AI生成模型也都開始支援。[3]
此次測試機提供了一個快速體驗OpenVINO AI應用的操作步驟[4],如圖2所示,首先要準備一個容量64GB的USB隨身碟(或64GB記憶卡加讀卡機)。注意!在準備燒錄開機檔前要確定USB隨身碟(或記憶卡)中內容已備份到其它地方,以免燒錄後會全部被清空。接著下載ASRock官方提供的BSP壓縮檔(12IntelBSP.zip)[5]到自己的電腦上,這個步驟會隨網路速度可能要一到數小時,建議請儘量找個網速較快的地方進行下載,以免等太久。下載完成並解壓縮後會得到下列兩個檔案。其中*.wic即為使用Linux / Yocto打包好OpenVINO執行環境的檔案。
- core-image-sato-sdk-intel-corei7-64-20230403072627.wic (約42GB)
- core-image-sato-sdk-intel-corei7-64-20230403072627.wic.bmap (約9KB)
再來下載製作可開機USB磁碟機的工具程式rufus-4.0.exe[6]。接著將USB隨身碟插入,開啟燒錄程式Rufus,選擇對應的裝置(隨身碟磁碟代號),按下【選擇】開啟欲燒錄的檔案,此時要將左下角檔案類型切換成「所有檔案*.」才看得到.wic檔案,再選擇「core-image-sato-sdk-intel-corei7-64-20230403072627.wic」,按下【執行】就可以開始燒錄,這個步驟大約要一個多小時,所以可以先去泡杯咖啡休息一下。待進度條跑完後,按下【離開】即完成開機碟製作。
圖2 :下載及製作ASRock NUC BOX-1260P快速體驗OpenVINO開機碟。(OmniXRI整理製作, 2023/5/3)
完成燒錄後,先把USB隨身碟(或記憶卡加讀卡機)插到測試機任一個USB埠中,再開啟測試機電源,稍等幾秒會出現開機模式選單,使用預設「boot linux-intel-iot-its-tr-5.15-kernel」即可,若不選擇,稍等一下也會自動進入xterm圖形化介面。進入後點選螢幕下方【1】鍵左邊的【xterm】按鍵即可開啟命令列操作模式介面。
此時就可開始享受預安裝好的OpenVINO範例,相關範例會安排在下列二個路徑下,如需更多範例說明,可參考Intel OpenVINO官網說明。
- /usr/share/openvino/open-model-zoo/demos [7]
- /usr/share/openvino/samples [8]
由於環境變數都已設好,所以不用進到上述兩個路徑下就能直接運行相關範例。以要運行 /usr/share/openvino/open-model-zoo/demos/object_detection_demo/python/object_detection_demo.py 為例,只要在根路徑(/)下達 object_detection_demo 加後綴命令(如-h)即可運行。更多關於這個範例的命令下法可參考[9],這裡就不多作說明。
另外這裡補充說明一下,使用USB隨身碟開機並不會把系統及任何檔案寫入內建的硬碟中,只是方便大家體驗使用。當然這種方式很方便把OpenVINO部署到特定硬體上,如果想產生這種由YOCTO打包的*.wic檔案,可以參考[10]。
圖3: 快速啟動xterm並執行OpenVINO範例程式。(OmniXRI整理製作, 2023/5/3)
3. 安裝OpenVINO Notebooks範例到Windows
由於上一節的作法並未包含最新的物件偵測「Convert and Optimize YOLOv8 with OpenVINO」範例[11],所以我們必須要重新手動安裝OpenVINO到測試機上。不過可惜的是原來Yocto打包的格式並不方便再加入其它程式,所以只好捨棄原來的隨身碟開機方式,改成直接重新在硬碟上安裝Windows,再安裝。
接著要安裝OpenVINO及Notebooks範例到測試機上,可參考Github[12] Installation Guide – Windows說明。首先要安裝程式開發環境:
- Python 3.8, https://www.python.org/ftp/python/3.8.8/python-3.8.8-amd64.exe
- Git, https://github.com/git-for-windows/git/releases/download/v2.35.1.windows.2/Git-2.35.1.2-64-bit.exe
- 安裝C++ Redistributable (For Python 3.8),下載https://aka.ms/vs/16/release/vc_redist.x64.exe,安裝完成後要重新開機。
接著要進入cmd操作介面,依序執行下列指令完成最新版OpenVINO及Notebooks的安裝並以jupyter lab啟動。
# 切換到欲建立python虛擬環境的路徑,例如 g:\
cd g:\
# 建立python虛擬環境,完成後會建立 g:\openvino_env 的路徑來存放之後所有相關安裝
python -m venv openvino_env
# 啟動python虛擬環境,cmd命令列會出現 (openvino_env)g:\
openvino_env\Scripts\activate
# 下載OpenVINO Notebooks並展開
git clone --depth=1 https://github.com/openvinotoolkit/openvino_notebooks.git
# 進入OpenVINO Notebooks路徑
cd openvino_notebooks
# 安裝所有必要套件包,包括最新版OpenVINO
python -m pip install --upgrade pip wheel setuptools
# 下面的安裝步驟會隨網路連線速度可能需要一到數小時請耐心等候
pip install -r requirements.txt
# 啟動Notebooks所有範例程式
jupyter lab notebooks
啟動Jupyter lab後會自動開啟Windows瀏覽器(依系統預設,第一次使用應該會自動指定Microsoft Edge),即可開始編修、執行openvino notebooks範例。此時cmd的視窗會跑出一堆文字,不用理會,切記不要關閉這個cmd視窗。待不想執行時,關閉瀏覽器,切到cmd視窗,按Ctrl+C結束本機端伺服器功能,回到cmd指令模式,或者直接關閉視窗亦可。
下次想執行Notebooks範例時,只須執行下列指令就可:
# 切換到python虛擬環境安裝的路徑,例如 g:\
cd g:\
# 啟動python虛擬環境,cmd命令列會出現 (openvino_env)g:\
openvino_env\Scripts\activate
# 進入OpenVINO Notebooks路徑
cd openvino_notebooks
# 啟動Notebooks所有範例程式
jupyter lab notebooks
4. 物件偵測YOLOv8測試結果
本次實驗的範例程式為「230-yolov8-optimization.ipynb」,這個範例包含了 YOLOv8 物件偵測及實例分割。如Fig. 4所示,啟動 jupyter lab 後,首先進入 \230-yolov8-optimization 路徑,接著雙擊 230-yolov8-optimization.ipynb 載入程式。通常執行前會點選選單「Edit」下的「Clear All Output」清除所有輸出結果,並點選選單「Kernel」下的「Restart Kernel…」來清除所有記憶體內容。
一般如果沒有特殊狀況,可直接點擊「雙箭頭」快捷鍵或選單「Run」下的「Run All Cells」全部執行,但由於記憶體不足,所以執行到第35步 Validate Quantized model – inference Instance segmentation (實例分割)時會產生錯誤。為使程式可以順利進行,又不用一直守在電腦旁(因為有些步驟要十分鐘以上才能完成),建議可先點擊圖4中的步驟3,將游標停在這個格子,再點選單「Run」下的「Run all above selected cell」,即可令程式從頭運行至此就先停止,接著再手動單步執行後續物件偵測部份,略過實例分割部份,就不會產生錯誤。相信這個問題後續只要增加記憶體容量即可改善。
圖4: YOLOv8 Optimization範例程式啟動流程。(OmniXRI整理製作, 2023/5/3)
關於這個範例程式「230-yolov8-optimization.ipynb」主要包括以下步驟:
- 準備 PyTorch YOLOv8 模型。
- 下載並準備數據集。
- 驗證原始模型。
- 將 PyTorch 模型轉換為 OpenVINO IR,包含FP32及INT8兩種。
- 驗證轉換後的模型。
- 準備並運行 NNCF 訓練後優化流水線。
- 比較 FP32 和量化模型的準確性。
- 比較 FP32 和量化模型的性能。
程式內容在先前Intel傳教士武卓博士的文章[13]已有完整介紹,這裡就不再重覆,僅就不同硬體運行效率做進一步比較。在[13]中提及可以跑出1000FPS以上的效能,但仔細看後發覺該文章是使用最高級的伺服器等級CPU跑出的結果,為了讓大家更清楚了解測試機的能力,這裡使用二種CPU(Intel Core i7-1260P, i7-9750H)、四種推論裝置(CPU, iGPU, AUTO, MULTI)和二種權重數值(FP32, INT8)模型進行比較,主要是使用OpenVINO benchmark效能測試程式進行分析,FP32測試時間取60秒,而INT8則取15秒,完整結果如圖5所示。
圖5:Intel Core i7-9750H與i7-1260P運行benchmark在不同硬體及參數下效能比較表。(OmniXRI整理製作, 2023/5/3)
從圖5實驗數據可看出,i7-9750H的CPU效能優於iGPU (UHD Graphics 630 24EU),而i7-1260P的iGPU(Iris Xe 96 EU)效能則明顯優於CPU。而當使用INT8時,不管那一種CPU、iGPU或混合運行,其計算速度在推論精度接近下,則可較FP32提高20%~140%。尤其在i7-1260P時更為明顯。其推論精度結果可參考圖6。
圖6:i7-1260P在FP32和INT8下推論論精度比較。(OmniXRI整理製作, 2023/5/3)
另外圖5的「AUTO」的裝置參數是OpenVINO 2022.1版後才開始支援,主要是為了解決iGPU第一次啟動建置模型耗時過長的問題,會自動辨識裝置運行速度,先使用較快的裝置先載入,接著再使用效能較高的裝置進行推論,以求得較快的推論效能。
當使用i7-9750H時,AUTO會先使用CPU再使用GPU,但i7-1260P則全程使用iGPU,表示iGPU造成的延遲已有明顯改善。而「MULTI:CPU,GPU」則會同時使用CPU和iGPU進行推論,中間的分工則由系統自行配置。不過從圖5的數據來看,當不知系統那種裝置效能較高時,使用AUTO或MULTI可能還有點作用,但已確定CPU或iGPU效能後,直接選用反而可以得到更好的表現。目前只測試了YOLOv8,不確定這種結論是否可擴展到所有模型,這部份就有待大家自行測試了。
為了更清楚比較所有硬體(含武卓博士文章結果),圖7以推論效能進行排序,扣除高階伺服器CPU(Xeon 6348),最高效能是i7-1260P iGPU (Iris Xe 96 EU)在INT8時,可達165 FPS,較使用CPU在FP32的41 FPS,快了四倍左右,算是有很大的優化,不僅推論速度提升,模型容量也縮小了快四倍,對於邊緣裝置記憶體不多的情況下有很大助益。
圖7:所有硬體及參數推論效能排序比較。(OmniXRI整理製作, 2023/5/3)
小結
本次開箱實測的東擎NUC BOX-1260P,體積小、性能高,在CPU及GPU高負載下長時間運作也不算太熱,加上Intel OpenVINO的加持下,YOLOv8物件偵測推論效能在精度不掉的情況下竟可以提升約四倍,尤其iGPU的表現相較前幾代更是令人驚豔。不過經過仔細觀察後,發現CPU和iGPU仍未使出全力,或許還有機會透過更進一步的參數調整,將機器推論的效能再度提高,這就留待大家一起來感受了。
參考文獻
[1] Intel, NUC小巧電腦、元件與筆記型電腦
https://www.intel.com.tw/content/www/tw/zh/products/details/nuc.html
[2] 東擎(ASRock Industrial), 工業電腦系統 – Fanned Embedded BOX PC – NUC BOX-1260P
https://www.asrockind.com/en-gb/NUC BOX-1260P
[3] 許哲豪,OpenVINO 2022大改版讓Edge AI玩出新花樣
https://omnixri.blogspot.com/2022/08/openvino-2022edge-ai.html
4] 東擎(ASRock Industrial), How to use
https://download.asrock.com/IPC/Others/How to use AI developer kit.pdf
[5] 東擎(ASRock Industrial), Download BSP Now
https://download.asrock.com/IPC/Others/12IntelBSP.zip
[6] Rufus, 輕鬆製作可開機的USB磁碟機
https://rufus.ie/zh_TW
[7] Intel, OpenVINO Toolkit – Open Model Zoo Demos
https://docs.openvino.ai/latest/omz_demos.html
[8] Intel, OpenVINO Toolkit – OpenVINO Samples
https://docs.openvino.ai/latest/openvino_docs_OV_UG_Samples_Overview.html
[9] Intel, OpenVINO Toolkit – Object Detection Python Demo
https://docs.openvino.ai/latest/omz_demos_object_detection_demo_python.html
[10] Intel, OpenVINO Toolkit – Create a Yocto Image with Intel Distribution of OpenVINO™ toolkit
https://docs.openvino.ai/latest/openvino_docs_install_guides_installing_openvino_yocto.html
[11] Intel OpenVINO Toolkit, Notbooks – Convert and Optimize YOLOv8 with OpenVINO
https://docs.openvino.ai/latest/notebooks/230-yolov8-optimization-with-output.html
[12] Github – openvinotoolkit / openvino_notebooks
https://github.com/openvinotoolkit/openvino_notebooks
[13] 武卓,如何用OpenVINO讓YOLOv8獲得1000+FPS性能?
https://makerpro.cc/2023/03/drive-yolov8-performance-to-1000-plus-fps-by-openvino/
作者:Jack Hsu
說到小型電腦主機,大家大概第一個就會想到樹莓派吧?如信用卡般尺寸加上完整的週邊及充足的開源開發資源,讓開發者們愛不釋手。幾年前人工智慧(AI)開始興起時,大家也是馬上拿來應用於小型語音及視覺應用。不過沒多久大家就發現要執行深度學習模型所需的算力,遠遠高出樹莓派CPU (Arm Cortex-A53/72 x4 Core@1.2~1.8GHz) 所能提供的。
於是又有了像Intel神經計算棒(Neural Compute Stick)這類AI加速計算的外掛裝置出現,但其算力還是只能應付小尺寸(640×480像素以下)影像或要求檢測速度不高(每秒1~3張)的場景。對於實際場域高效電腦視覺應用(如物件偵測、影像分割等),一般就得配置一台大型桌機加上Nvidia GPU顯卡才能達成AI推論需求。
好在隨著半導體技術的突飛猛進,兼具高效計算及迷你尺寸的主機已不再是遙不可及。其中Intel和許多廠商合作推出的NUC (Next Unit of Computing) 系列產品[1]從入門款(Celeron N4505 CPU + UHD 16EU GPU)到高階款(Core i7 13Gen CPU + Iris 96EU GPU)一應俱全,讓開發者在性能及價格選用上有了更大的彈性空間。
為了更進一步了解這類迷你主機在AI推論效能的表現,此次選用了東擎(ASRock Industrial) NUC BOX-1260P作為主要實測硬體(以下簡稱測試機),AI推論部份則選用OpenVINO 2022.3版作為基礎工具。而測試項目則使用OpenVINO Notebooks中最新的物件偵測「Convert and Optimize YOLOv8 with OpenVINO」範例作為實測效能的分析。以下就開始展開逐一說明。
1. ASRock NUC BOX-1260P基本介紹
首先根據東擎官網文件說明[2]可知這款機器為準系統,預設不帶DDR4記憶體、硬碟及作業系統,也沒有附螢幕、鍵盤、滑鼠及網路攝影機(Webcam),所以使用者需自行配置,如圖1所示。此次測試機已事先配置256GB SSD及16GB DDR4,主機其它硬體規格如下所示。
NUC BOX-1260P
圖1:ASRock NUC BOX-1260P開箱照。(OmniXRI整理製作, 2023/5/3)
2. 開箱即用的OpenVINO AI套件包
一般常見的AI應用的開發及部署流程中,前半段著重在模型的選用及訓練,需要大型GPU來幫忙。而後半段則將重點放在模型優化及壓縮上,部署時僅需使用較低規格的電腦主機即可運行。Intel於2018年5月正式推出了OpenVINO toolkit (Open Visual Inference and Neural network Optimization,以下簡稱OpenVINO),主要提供了多種AI框架(如TensorFlow, PyTorch, Caffe, ONNX等)開發的模型轉換、產生中介表示格式(Intermediate Representation, IR, 即模型結構*.XML檔及模型權重*.BIN檔)、模型減量優化及支援自家各種硬體(CPU, iGPU, VPU, FPGA)的推論。此外更支援數十種AI應用及數百種預訓練模型,方便使用者進行開發及測試。經過18次改版後,如今已來到2022.3版,不僅在電腦視覺AI應用上有不錯的表現,自然語言處理、大型語言模型、甚至AI生成模型也都開始支援。[3]
此次測試機提供了一個快速體驗OpenVINO AI應用的操作步驟[4],如圖2所示,首先要準備一個容量64GB的USB隨身碟(或64GB記憶卡加讀卡機)。注意!在準備燒錄開機檔前要確定USB隨身碟(或記憶卡)中內容已備份到其它地方,以免燒錄後會全部被清空。接著下載ASRock官方提供的BSP壓縮檔(12IntelBSP.zip)[5]到自己的電腦上,這個步驟會隨網路速度可能要一到數小時,建議請儘量找個網速較快的地方進行下載,以免等太久。下載完成並解壓縮後會得到下列兩個檔案。其中*.wic即為使用Linux / Yocto打包好OpenVINO執行環境的檔案。
再來下載製作可開機USB磁碟機的工具程式rufus-4.0.exe[6]。接著將USB隨身碟插入,開啟燒錄程式Rufus,選擇對應的裝置(隨身碟磁碟代號),按下【選擇】開啟欲燒錄的檔案,此時要將左下角檔案類型切換成「所有檔案*.」才看得到.wic檔案,再選擇「core-image-sato-sdk-intel-corei7-64-20230403072627.wic」,按下【執行】就可以開始燒錄,這個步驟大約要一個多小時,所以可以先去泡杯咖啡休息一下。待進度條跑完後,按下【離開】即完成開機碟製作。
圖2 :下載及製作ASRock NUC BOX-1260P快速體驗OpenVINO開機碟。(OmniXRI整理製作, 2023/5/3)
完成燒錄後,先把USB隨身碟(或記憶卡加讀卡機)插到測試機任一個USB埠中,再開啟測試機電源,稍等幾秒會出現開機模式選單,使用預設「boot linux-intel-iot-its-tr-5.15-kernel」即可,若不選擇,稍等一下也會自動進入xterm圖形化介面。進入後點選螢幕下方【1】鍵左邊的【xterm】按鍵即可開啟命令列操作模式介面。
此時就可開始享受預安裝好的OpenVINO範例,相關範例會安排在下列二個路徑下,如需更多範例說明,可參考Intel OpenVINO官網說明。
由於環境變數都已設好,所以不用進到上述兩個路徑下就能直接運行相關範例。以要運行 /usr/share/openvino/open-model-zoo/demos/object_detection_demo/python/object_detection_demo.py 為例,只要在根路徑(/)下達 object_detection_demo 加後綴命令(如-h)即可運行。更多關於這個範例的命令下法可參考[9],這裡就不多作說明。
另外這裡補充說明一下,使用USB隨身碟開機並不會把系統及任何檔案寫入內建的硬碟中,只是方便大家體驗使用。當然這種方式很方便把OpenVINO部署到特定硬體上,如果想產生這種由YOCTO打包的*.wic檔案,可以參考[10]。
圖3: 快速啟動xterm並執行OpenVINO範例程式。(OmniXRI整理製作, 2023/5/3)
3. 安裝OpenVINO Notebooks範例到Windows
由於上一節的作法並未包含最新的物件偵測「Convert and Optimize YOLOv8 with OpenVINO」範例[11],所以我們必須要重新手動安裝OpenVINO到測試機上。不過可惜的是原來Yocto打包的格式並不方便再加入其它程式,所以只好捨棄原來的隨身碟開機方式,改成直接重新在硬碟上安裝Windows,再安裝。
接著要安裝OpenVINO及Notebooks範例到測試機上,可參考Github[12] Installation Guide – Windows說明。首先要安裝程式開發環境:
接著要進入cmd操作介面,依序執行下列指令完成最新版OpenVINO及Notebooks的安裝並以jupyter lab啟動。
cd g:\
# 建立python虛擬環境,完成後會建立 g:\openvino_env 的路徑來存放之後所有相關安裝
python -m venv openvino_env
# 啟動python虛擬環境,cmd命令列會出現 (openvino_env)g:\
openvino_env\Scripts\activate
# 下載OpenVINO Notebooks並展開
git clone --depth=1 https://github.com/openvinotoolkit/openvino_notebooks.git
# 進入OpenVINO Notebooks路徑
cd openvino_notebooks
# 安裝所有必要套件包,包括最新版OpenVINO
python -m pip install --upgrade pip wheel setuptools
# 下面的安裝步驟會隨網路連線速度可能需要一到數小時請耐心等候
pip install -r requirements.txt
# 啟動Notebooks所有範例程式
jupyter lab notebooks
啟動Jupyter lab後會自動開啟Windows瀏覽器(依系統預設,第一次使用應該會自動指定Microsoft Edge),即可開始編修、執行openvino notebooks範例。此時cmd的視窗會跑出一堆文字,不用理會,切記不要關閉這個cmd視窗。待不想執行時,關閉瀏覽器,切到cmd視窗,按Ctrl+C結束本機端伺服器功能,回到cmd指令模式,或者直接關閉視窗亦可。
下次想執行Notebooks範例時,只須執行下列指令就可:
cd g:\
# 啟動python虛擬環境,cmd命令列會出現 (openvino_env)g:\
openvino_env\Scripts\activate
# 進入OpenVINO Notebooks路徑
cd openvino_notebooks
# 啟動Notebooks所有範例程式
jupyter lab notebooks
4. 物件偵測YOLOv8測試結果
本次實驗的範例程式為「230-yolov8-optimization.ipynb」,這個範例包含了 YOLOv8 物件偵測及實例分割。如Fig. 4所示,啟動 jupyter lab 後,首先進入 \230-yolov8-optimization 路徑,接著雙擊 230-yolov8-optimization.ipynb 載入程式。通常執行前會點選選單「Edit」下的「Clear All Output」清除所有輸出結果,並點選選單「Kernel」下的「Restart Kernel…」來清除所有記憶體內容。
一般如果沒有特殊狀況,可直接點擊「雙箭頭」快捷鍵或選單「Run」下的「Run All Cells」全部執行,但由於記憶體不足,所以執行到第35步 Validate Quantized model – inference Instance segmentation (實例分割)時會產生錯誤。為使程式可以順利進行,又不用一直守在電腦旁(因為有些步驟要十分鐘以上才能完成),建議可先點擊圖4中的步驟3,將游標停在這個格子,再點選單「Run」下的「Run all above selected cell」,即可令程式從頭運行至此就先停止,接著再手動單步執行後續物件偵測部份,略過實例分割部份,就不會產生錯誤。相信這個問題後續只要增加記憶體容量即可改善。
圖4: YOLOv8 Optimization範例程式啟動流程。(OmniXRI整理製作, 2023/5/3)
關於這個範例程式「230-yolov8-optimization.ipynb」主要包括以下步驟:
程式內容在先前Intel傳教士武卓博士的文章[13]已有完整介紹,這裡就不再重覆,僅就不同硬體運行效率做進一步比較。在[13]中提及可以跑出1000FPS以上的效能,但仔細看後發覺該文章是使用最高級的伺服器等級CPU跑出的結果,為了讓大家更清楚了解測試機的能力,這裡使用二種CPU(Intel Core i7-1260P, i7-9750H)、四種推論裝置(CPU, iGPU, AUTO, MULTI)和二種權重數值(FP32, INT8)模型進行比較,主要是使用OpenVINO benchmark效能測試程式進行分析,FP32測試時間取60秒,而INT8則取15秒,完整結果如圖5所示。
圖5:Intel Core i7-9750H與i7-1260P運行benchmark在不同硬體及參數下效能比較表。(OmniXRI整理製作, 2023/5/3)
從圖5實驗數據可看出,i7-9750H的CPU效能優於iGPU (UHD Graphics 630 24EU),而i7-1260P的iGPU(Iris Xe 96 EU)效能則明顯優於CPU。而當使用INT8時,不管那一種CPU、iGPU或混合運行,其計算速度在推論精度接近下,則可較FP32提高20%~140%。尤其在i7-1260P時更為明顯。其推論精度結果可參考圖6。
圖6:i7-1260P在FP32和INT8下推論論精度比較。(OmniXRI整理製作, 2023/5/3)
另外圖5的「AUTO」的裝置參數是OpenVINO 2022.1版後才開始支援,主要是為了解決iGPU第一次啟動建置模型耗時過長的問題,會自動辨識裝置運行速度,先使用較快的裝置先載入,接著再使用效能較高的裝置進行推論,以求得較快的推論效能。
當使用i7-9750H時,AUTO會先使用CPU再使用GPU,但i7-1260P則全程使用iGPU,表示iGPU造成的延遲已有明顯改善。而「MULTI:CPU,GPU」則會同時使用CPU和iGPU進行推論,中間的分工則由系統自行配置。不過從圖5的數據來看,當不知系統那種裝置效能較高時,使用AUTO或MULTI可能還有點作用,但已確定CPU或iGPU效能後,直接選用反而可以得到更好的表現。目前只測試了YOLOv8,不確定這種結論是否可擴展到所有模型,這部份就有待大家自行測試了。
為了更清楚比較所有硬體(含武卓博士文章結果),圖7以推論效能進行排序,扣除高階伺服器CPU(Xeon 6348),最高效能是i7-1260P iGPU (Iris Xe 96 EU)在INT8時,可達165 FPS,較使用CPU在FP32的41 FPS,快了四倍左右,算是有很大的優化,不僅推論速度提升,模型容量也縮小了快四倍,對於邊緣裝置記憶體不多的情況下有很大助益。
圖7:所有硬體及參數推論效能排序比較。(OmniXRI整理製作, 2023/5/3)
小結
本次開箱實測的東擎NUC BOX-1260P,體積小、性能高,在CPU及GPU高負載下長時間運作也不算太熱,加上Intel OpenVINO的加持下,YOLOv8物件偵測推論效能在精度不掉的情況下竟可以提升約四倍,尤其iGPU的表現相較前幾代更是令人驚豔。不過經過仔細觀察後,發現CPU和iGPU仍未使出全力,或許還有機會透過更進一步的參數調整,將機器推論的效能再度提高,這就留待大家一起來感受了。
參考文獻
[1] Intel, NUC小巧電腦、元件與筆記型電腦
https://www.intel.com.tw/content/www/tw/zh/products/details/nuc.html
[2] 東擎(ASRock Industrial), 工業電腦系統 – Fanned Embedded BOX PC – NUC BOX-1260P
https://www.asrockind.com/en-gb/NUC BOX-1260P
[3] 許哲豪,OpenVINO 2022大改版讓Edge AI玩出新花樣
https://omnixri.blogspot.com/2022/08/openvino-2022edge-ai.html
4] 東擎(ASRock Industrial), How to use
https://download.asrock.com/IPC/Others/How to use AI developer kit.pdf
[5] 東擎(ASRock Industrial), Download BSP Now
https://download.asrock.com/IPC/Others/12IntelBSP.zip
[6] Rufus, 輕鬆製作可開機的USB磁碟機
https://rufus.ie/zh_TW
[7] Intel, OpenVINO Toolkit – Open Model Zoo Demos
https://docs.openvino.ai/latest/omz_demos.html
[8] Intel, OpenVINO Toolkit – OpenVINO Samples
https://docs.openvino.ai/latest/openvino_docs_OV_UG_Samples_Overview.html
[9] Intel, OpenVINO Toolkit – Object Detection Python Demo
https://docs.openvino.ai/latest/omz_demos_object_detection_demo_python.html
[10] Intel, OpenVINO Toolkit – Create a Yocto Image with Intel Distribution of OpenVINO™ toolkit
https://docs.openvino.ai/latest/openvino_docs_install_guides_installing_openvino_yocto.html
[11] Intel OpenVINO Toolkit, Notbooks – Convert and Optimize YOLOv8 with OpenVINO
https://docs.openvino.ai/latest/notebooks/230-yolov8-optimization-with-output.html
[12] Github – openvinotoolkit / openvino_notebooks
https://github.com/openvinotoolkit/openvino_notebooks
[13] 武卓,如何用OpenVINO讓YOLOv8獲得1000+FPS性能?
https://makerpro.cc/2023/03/drive-yolov8-performance-to-1000-plus-fps-by-openvino/