作者:Jack OmniXRI, 2023/5/3
說到小型電腦主機,大家大概第一個就會想到樹莓派吧?如信用卡般尺寸加上完整的週邊及充足的開源開發資源,讓開發者們愛不釋手。幾年前人工智慧(AI)開始興起時,大家也是馬上拿來應用於小型語音及視覺應用。不過沒多久大家就發現要運行深度學習模型所需的算力遠遠高出樹莓派CPU (Arm Cortex-A53/72 x4 Core@1.2~1.8GHz) 所能提供的。於是又有了像Intel神經計算棒(Neural Compute Stick)這類AI加速計算的外掛裝置出現,但其算力還是只能應付小尺寸(640x480像素以下)影像或要求檢測速度不高(每秒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),所以使用者需自行配置,如Fig.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
- 內置散熱風扇,另有提供外掛固定架鐵片及螺絲。
Fig.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],如Fig.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」,按下【執行】就可以開始燒錄,這個步驟大約要一個多小時,所以可以先去泡杯咖啡休息一下。待進度條跑完後,按下【離開】即完成開機碟製作。
Fig.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]。
Fig.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 (實例分割)時會產生錯誤。為使程式可以順利進行,又不用一直守在電腦旁(因為有些步驟要十分鐘以上才能完成),建議可先點擊Fig. 4圖上3的步驟,將游標停在這個格子,再點選單「Run」下的「Run all above selected cell」,即可令程式從頭運行至此就先停止,接著再手動單步執行後續物件偵測部份,略過實例分割部份,就不會產生錯誤。相信這個問題後續只要增加記憶體容量即可改善。
Fig. 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秒,完整結果如Fig. 5所示。
Fig. 5 Intel Core i7-9750H與i7-1260P運行benchmark在不同硬體及參數下效能比較表。(OmniXRI整理製作, 2023/5/3)
從Fig. 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時更為明顯。其推論精度結果可參考Fig. 6。
Fig. 6 i7-1260P在FP32和INT8下推論論精度比較。(OmniXRI整理製作, 2023/5/3)
另外Fig. 5的「AUTO」的裝置參數是OpenVINO 2022.1版後才開始支援,主要是為了解決iGPU第一次啟動建置模型耗時過長的問題,會自動辨識裝置運行速度,先使用較快的裝置先載入,接著再使用效能較高的裝置進行推論,以求得較快的推論效能。當使用i7-9750H時,AUTO會先使用CPU再使用GPU,但i7-1260P則全程使用iGPU,表示iGPU造成的延遲已有明顯改善。而「MULTI:CPU,GPU」則會同時使用CPU和iGPU進行推論,而中間的分工則由系統自行配置,不過從Fig. 5的數據來看,當不知系統那種裝置效能較高時,使用AUTO或MULTI可能還有點作用,但已確定CPU或iGPU效能後,直接選用反而可以得到更好的表現。目前只測試了YOLOv8,不確定這種結論是否可擴展到所有模型,這部份就有待大家自行測試了。
為了更清楚比較所有硬體(含武卓博士文章結果),Fig.7以推論效能進行排序,扣除高階伺服器CPU(Xeon 6348),最高效能是i7-1260P iGPU (Iris Xe 96 EU)在INT8時,可達165 FPS,較使用CPU在FP32的41 FPS,快了四倍左右,算是有很大的優化,不僅推論速度提升,模型容量也縮小了快四倍,對於邊緣裝置記憶體不多的情況下有很大助益。
Fig. 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/
本文同步發表在【MakerPRO】。
沒有留言:
張貼留言