0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

優(yōu)化OpenVINO模型效能:參數(shù)設定影響實測

jf_cVC5iyAO ? 來源:易心Microbit編程 ? 作者:易心Micrbit編程 ? 2022-11-04 10:29 ? 次閱讀

三年前剛接觸OpenVINO的時候,開始感覺機器學習發(fā)展的生態(tài)似乎有許多的轉(zhuǎn)變,隨著執(zhí)行許多范例的過程中,漸漸了解Open Model Zoo的Github支持了許多可以下載的模型,有種感覺是不是模型加載與使用,會變成即插即用的狀態(tài)。

以前要自己看許多論文,花時間搜集各種模型的執(zhí)行方法,今年實驗的模型,過一陣子想再執(zhí)行時常會忘記如何使用,就算記得但碰到模型本身運作環(huán)境升級,或者平臺不再支持某個方法,辛苦弄完的模型跟寫好的程序又要重新再來一次,這樣的感覺在接觸OpenVINO之前,會覺的似乎是做機器學習的無奈與必然。

接觸OpenVINO后,讓人感覺是一個有趣的環(huán)境,過去在教學現(xiàn)場很難與學生介紹機器學習要怎么學跟用,雖然有云端的架構(gòu)可以直接運作準備好的教學環(huán)境,實際現(xiàn)場要使用時,還是會碰到不知道如何安裝跟配置的問題。

雖然一般的安裝文件嘗試盡可能寫清楚了,但其實許多操作系統(tǒng)環(huán)境差異,或開發(fā)工具包兼容性的狀態(tài),常會造成這個月可以執(zhí)行的模型跟架構(gòu),過幾個月又開始不太支持,還好這兩年容器環(huán)境相對更成熟,系統(tǒng)安裝的生態(tài)也開始發(fā)生轉(zhuǎn)變,透過容器化技術(shù)許多套件安裝的流程跟問題,也隨著容器化技術(shù)得到緩解。

本文嘗試從兩個觀點出發(fā),第一個是如何能夠較為方便快速使用OpenVINO,主要的目的是介紹容器化的方式使用OpenVINO,相對過去需要閱讀大量安裝文件,目前已經(jīng)有較為成熟穩(wěn)定的容器化環(huán)境可以直接安裝與啟動OpenVINO。

第二個是了解如何利用OpenVINO跟Open Model Zoo所提供訓練好的模型,在運作OpenVINO的過程,透過不同參數(shù)設定值,觀察系統(tǒng)預測效率的改變,對于機器學習運作環(huán)境,除了程序設計技巧與架構(gòu)整合外,累積模型運作與不同參數(shù)設定狀態(tài)下需要具備的觀念。

相對于操作系統(tǒng)調(diào)校的觀念,在OpenVINO運作時可以觀察系統(tǒng)在模型運作時預測效能的變化,這個部份可做為后續(xù)使用模型時經(jīng)驗的提升,在機器運作時累積更好的模型使用經(jīng)驗,觀察同一臺機器運作OpenVINO時,可以思考與注意的部份。

透過容器化技術(shù)快速部署OpenVINO運作環(huán)境

透過容器啟動OpenVINO,可以快速方便的達成OpenVINO上線狀態(tài),相對省下非常多套件安裝過程的時間,過去常認為要執(zhí)行機器學習推論的環(huán)境會很復雜,或者需要許多步驟的執(zhí)行過程。透過Docker容器的架構(gòu)來執(zhí)行OpenVINO,可以將過去系統(tǒng)在操作系統(tǒng)不同版本間運作環(huán)境產(chǎn)生問題的數(shù)量降低,大量減少系統(tǒng)除錯、兼容性測試與環(huán)境安裝配置的問題與步驟。

本文使用的運作環(huán)境是Ubutnu20.04.2 LTS,OpenVINO的docker容器是openvino/ubuntu20_data_dev:2021.4_tgl,使用docker在Linux運作OpenVINO最大的好處是幾乎沒有兼容性的問題,下載之后就可以直接執(zhí)行,對于要直接使用或?qū)W習OpenVINO,相對過去容易非常非常多,透過下面的指令就可以執(zhí)行OpenVINO的容器環(huán)境。

如果機器上面沒有docker的環(huán)境,要先安裝docker容器環(huán)境,在Linux上面執(zhí)行以下指令,前面的指令會先把原來的docker環(huán)境移除,如果你已經(jīng)安裝過docker環(huán)境,可以跳過這個步驟,直接執(zhí)行下載OpenVINO docker的pull指令:

sudo aptupdate

sudoapt-get remove docker docker-engine docker.io containerd runc

sudo aptinstall curl

curl-fsSL https://get.docker.com -o get-docker.sh

sudo shget-docker.sh

sudousermod -aG docker $USER

## Needto logout or reboot to run docker as non-root user

dockerrun hello-world

上面安裝好docker的容器環(huán)境以后,可以用底下的指令直接下載OpenVINO的docker環(huán)境。

dockerpull openvino/ubuntu20_data_dev:2021.4_tgl

要執(zhí)行docker環(huán)境的時候,如果是使用ubuntu桌面版內(nèi)建的vnc環(huán)境,可以使用底下的指令來啟動OpenVINO docker環(huán)境,這樣之后在docker環(huán)境內(nèi)如果需要使用到窗口環(huán)境,會比較方便做后續(xù)的測試。

66934a18-5b4f-11ed-a3b6-dac502259ad0.png

要進入docker環(huán)境下命令測試OpenVINO時,可以使用底下的指令,就可以順利的在ubuntu桌面環(huán)境下同時使用多個OpenVINO docker環(huán)境終端做測試。

dockerexec -it openvino-ubuntu20_tgl /bin/bash

參數(shù)設定在模型運作時效能的變化

OpenVINO效能量測工具名稱為benchmark_app,可以在機器上量測模型的執(zhí)行效能,OpenVINO 2021.4的benchmark_app提供許多參數(shù)設定,另一個思考方向是自己寫程序加載模型時,實際的效能是如何,或者日后如何能在自己寫的程序達到測試環(huán)境相同的效能,如常用的ssd模型在執(zhí)行object model zoo的范例時,運作過程中可以設定許多參數(shù),例如nireq、nthreads、nstreams等,device參數(shù)可以設定運作的硬件環(huán)境CPU、GPU、同時使用CPU與GPU的MULTI: CPU,GPU等,令人好奇這些參數(shù)之間實際運作的情況,在運作過程中要如何設定,或者朝哪個方向去思考調(diào)整會有相對較好的執(zhí)行結(jié)果。

66bde48a-5b4f-11ed-a3b6-dac502259ad0.png

圖1 – OpenVINO效能評估程序benchmark_app提供的部份參數(shù)

benchmark_app提供許多參數(shù)進行效能量測,相對當執(zhí)行范例程序時,nireq、nthreads這樣的參數(shù)做調(diào)整,會觀察到什么結(jié)果,以下說明一些紀錄與觀察過程,同時可以更了解OpenVINO在docker環(huán)境下執(zhí)行的方式。

在docker環(huán)境中包含OpenVINO2021.4.582的執(zhí)行版本,并且提供許多模型運作范例,在Open Model Zoo中內(nèi)含Object_sample_ssd的范例,內(nèi)含models.lst檔案。表1為models.lst檔案里面支持部份的ssd模型列表,跟過去版本最大差異是多了-at參數(shù)設定,在models.lst中說明各種模型對應-at參數(shù)的設定值。

使用模型的時候可以使用download.py下載模型,如果下載的不是OpenVINO的IR格式(附檔名為.xml與.bin),需要透過convert.py轉(zhuǎn)換成OpenVINO的IR格式。

OpenVINO系統(tǒng)目錄內(nèi)定會安裝在/opt/intel/openvino,內(nèi)含子目錄deployment_tools/open_model_zoo/demos/object_detection_demo/python,此目錄主要為對象偵測的python范例程序,可以執(zhí)行許多機器學習開發(fā)架構(gòu)已經(jīng)訓練好的模型,包含 centernet、ctpn、faceboxes、ssd、yolo、yolov4等機器學習框架所訓練好的對象偵測模型。

66ecbf44-5b4f-11ed-a3b6-dac502259ad0.png

表1 – OpenVINOobject_detection_demo可以執(zhí)行的機器學習模型

參數(shù)與預測效能之間的觀察

兩年前剛學習使用OpenVINO的時候,有很多時候覺得模型會動就好了,但是有些時候希望效能能夠變快一點,嘗試把某些參數(shù)調(diào)大,但是又感覺好像不是這樣,本文透過object_detecion_demo運作觀察,參數(shù)設定過程如何影響模型在同一臺機器上推論效率的變化,接下來的內(nèi)容為觀察到的現(xiàn)象,可以作為日后模型推論在配置時參數(shù)設定的一些參考。

這兩年間比較有趣的變化是同一個模型有FP32、FP16、FP16-INT8的版本可以選擇,因此同一個模型在內(nèi)存空間的使用量、運作效能以及預測的精確度,有許多部份可進一步觀察運作過程中的變化。

本文針對object_detection_demo.py指令的參數(shù),在執(zhí)行person-detection-retail-0013模型中進行效能量測,分別就FP32、FP16、FP16-INT8等模型格式,在CPU、GPU、CPU+GPU的硬件條件下,分別進行不同的nireq以及nthreads參數(shù)設定,觀察FPS(Frame per second)變化情形進行描述與討論。

要注意的是本文所使用的是M.2 Key MSSD硬盤作為結(jié)果輸出裝置,用一般的USB隨身碟作為預測檔案結(jié)果輸出時,會影響檔案輸出的效能,進而影響效能觀察的結(jié)果。

在本文效能量測的結(jié)果呈現(xiàn)前,要注意的是FP16-INT8模型的運作方式,OpenVINO中POT套件轉(zhuǎn)換FP16模型為INT8模型的方式,是經(jīng)由在FP16模型各層間插入INT8格式的FakeQuantize,對于設定不同的POT模型優(yōu)化參數(shù), FakeQuantize將會自動調(diào)整的INT8的模型數(shù)值,或刪除一些不需要的模型計算步驟,在可以滿足精度要求的狀態(tài)下,達成模型運作時真正的轉(zhuǎn)換為INT8低精度模型,雖然層數(shù)相對可能會增加,但是因為INT8所需空間較小且執(zhí)行效能相對快很多,因而能夠獲得真正的模型空間縮小與效能提升。

因此在FP16-INT8模型的運作過程中,透過了FP16與INT8整數(shù)運算于不同層之間的切換的運算過程,如果許多的FP16層級被轉(zhuǎn)換為INT8,有機會得到儲存空間的較小模型及較快速指令周期的推論效能。同時INT8的運算過程于i7第11代CPU中因為支持了AVX512的指令集,以及i7第11代所使用的內(nèi)顯GPU支持INT8運算處理,因此在本文量測的結(jié)果中FP16-INT8的效能將大幅度相對提升s。

object_detection_demo.py程序執(zhí)行的參數(shù)如下:

670a06bc-5b4f-11ed-a3b6-dac502259ad0.png

指令執(zhí)行的參數(shù)常用的范例如下:

6721dc4c-5b4f-11ed-a3b6-dac502259ad0.png

其中${1}、${2}分別代表nireq與nthreads的參數(shù)設定值,${3}表示32、16、16-INT8等設定值,${4}代表使用的是CPU、GPU、MULTI:CPU,GPU等設定值,透過這些設定值的更改,最后將執(zhí)行過程輸出至各個條件的文本文件,范例程序執(zhí)行結(jié)束時,于各文本文件的尾端會得到此次執(zhí)行的FPS數(shù)值結(jié)果,最后以這個FPS數(shù)值作為相關的量測效能結(jié)果進行討論,詳細的參數(shù)設定值說明如表2。

6749c518-5b4f-11ed-a3b6-dac502259ad0.png

表2 –object_detection_demo.py相關的參數(shù)設定說明

本文量測數(shù)值使用之硬件環(huán)境

圖2為本文以東擎NUCBOX-1165G7工業(yè)用計算機,硬件環(huán)境為Intel i7第11代CPU,軟件環(huán)境使用Ubuntu 20.04.2 LTS為操作系統(tǒng),執(zhí)行OpenVINO 2021.4.582作為系統(tǒng)量測的運作環(huán)境,CPU型號為11th Gen Intel(R) Core(TM) i7-1185G7E @ 2.80GHz、cache 12288KB,共有8個Hyper-threading,內(nèi)存為16GByte、硬盤型號為KINGSTON OM8PDP3256B-A01(NVM容量256GByte)。

特別要說明的是Intel第11代Core CPU內(nèi)建的GPU,是第一個可以執(zhí)行INT8的內(nèi)建GPU,利用這個特性在執(zhí)行OpenVINO時可以獲得更好的效能提升。

6772166c-5b4f-11ed-a3b6-dac502259ad0.png

圖2 – 本文量測使用之工業(yè)用計算機,內(nèi)含Intel第11代CPU與Wifi-6無線網(wǎng)絡芯片

CPU執(zhí)行person-detection-retail-0013模型效能變化情形

圖3為CPU使用person-detection-retail-0013FP32模型的執(zhí)行結(jié)果,可以觀察當nireq(nr)為1、nthreads(nt)為1時,每秒鐘可以辨識的畫面張數(shù)為35.1 FPS(每秒鐘能預測35.1張影像),進一步調(diào)整nireq、nthreads參數(shù)的數(shù)值進行預測,會發(fā)現(xiàn)nireq(nr)與nthreads(nt)設定不同數(shù)值時,會影響每秒所能預測的FPS效能。

679a712a-5b4f-11ed-a3b6-dac502259ad0.png

圖3 – CPU執(zhí)行person-detection-retail-0013FP32模型結(jié)果

圖3中可以觀察到一個現(xiàn)象,當nthreads設定的值為3時,會得到相對最高的FPS結(jié)果,圖4為將圖3放大之后,由nthreads(nt)數(shù)值為2到8的設定值,分別在不同的nireq(nr)條件下,nireq(nr)數(shù)值為3到8的執(zhí)行結(jié)果。

67b08500-5b4f-11ed-a3b6-dac502259ad0.png

圖4 – CPU執(zhí)行person-detection-retail-0013.xmlFP32模型,nthreads(nt)數(shù)值為2到8、nireq(nr)為3到8的FPS變化情形

由圖4中可以觀察到當nthreads設定值為3、nireq等于8,CPU執(zhí)行FP32模型FPS此時為85.1 FPS,之后無論nthreads與nireq調(diào)整為其他數(shù)值,執(zhí)行結(jié)果都無法超過此FPS,一般概念上會認為同時輸入的影像稍微多一點比較好,因為同時處理多一點影像,在機器有能力響應的狀態(tài)下,執(zhí)行結(jié)果的效能相對應該會高一些,從這個觀點得到的FPS為nthreads為3與nireq為8時,表示一次輸入8張影像時,同時使用3個CPU的處理程序來處理person-detection-retail-0013模型的運作過程,會有較好的執(zhí)行效能。

圖4同時顯示如果我們認為將nireq與nthreads的值設的越大越好可以得到更好的效能,結(jié)果顯示并不會有這樣的狀態(tài)產(chǎn)生,甚至當nthreads(nt)為19時,不管nireq(nr)設定多大的值,會發(fā)現(xiàn)此時約為25.1FPS,這樣的執(zhí)行效能相對nthreads(nt)為3時的85.1 FPS,相當于只能得到最高效能的1/3執(zhí)行效率,可以觀察到很明顯的,單純將nthreads與nireq值調(diào)大,只會效能更差而不會變好。

67cf8bbc-5b4f-11ed-a3b6-dac502259ad0.png

圖5 – CPU執(zhí)行person-detection-retail-0013FP16模型效能的變化情形

圖5為CPU執(zhí)行person-detection-retail-0013FP16模型的結(jié)果,相對CPU執(zhí)行FP32模型效能的情形,觀察圖3與圖5可以發(fā)現(xiàn)最高的FPS都約為86 FPS,圖3與圖5的效能變化非常相似,這個狀態(tài)顯示CPU在FP32與FP16的執(zhí)行具有相同的效能變化趨勢,nthreads為9時同樣會有一個很大的效能下降,原因與執(zhí)行環(huán)境所采用的硬件有關,本文章所使用硬件為i7第11代核心,包含4核心共8個Hyper-threading,發(fā)現(xiàn)nthreads分別在9與17的設定值時,會產(chǎn)生一個相對陡降的FPS結(jié)果。

67f6a71a-5b4f-11ed-a3b6-dac502259ad0.png

圖6 – CPU執(zhí)行person-detection-retail-0013FP16模型效能的變化情形,nthreads(nt)數(shù)值為2到8、nireq(nr)為3到8的FPS變化情形

由圖6中會發(fā)現(xiàn)最高效能的值雖然在nthreads為3的時候,但是相對的此時的nireq為5,與圖4的nireq為8的情況并不同,此種最佳效能點的差異在各個模型選用時,可以再針對不同的nireq的數(shù)值做最后的量測進行尋找最佳參數(shù)點。

觀察CPU執(zhí)行FP32與FP16的模型效能變化狀態(tài)后,圖7中為CPU模式執(zhí)行person-detection-retail-0013FP16-INT8模型的結(jié)果,當nthreads(nt)設定的值為4、nireq(nr)等于20,量測范圍中最高的效能為116.5 FPS,很明顯的相較于FP32條件下最高為86 FPS高出許多。

從圖7中也可以觀察到nireq等于1,每次輸入1個影像,可以發(fā)現(xiàn)nthreads為4時,最高的效能為68.3FPS,無論nthreads設定多大,預測的FPS效能也無法提升,從這個結(jié)果可以觀察到,就算是硬件有很大的效能,nireq控制同時輸入數(shù)據(jù)的數(shù)量,nireq太小相對也會影響整體工作效能。

681f8694-5b4f-11ed-a3b6-dac502259ad0.png

圖7 – CPU執(zhí)行person-detection-retail-0013FP16-INT8模型效能的變化情形

684374fa-5b4f-11ed-a3b6-dac502259ad0.png

圖8 – CPU執(zhí)行person-detection-retail-0013FP16-INT8模型效能的變化情形,nthreads(nt)數(shù)值為2到8、nireq(nr)為2到20的FPS變化情形

圖8為圖7詳細的變化情形,可以觀察到當nthreads(nt)的數(shù)值是4的時候,nireq設定值大于等于3之后,相對每秒可以執(zhí)行推論的影像效能,相對高于其他的nthreads數(shù)值的推論效能,可以很明顯的感覺在CPU執(zhí)行FP16-INT8的條件下,CPU的核心數(shù)量、nthreads設定數(shù)值,與推論效能最高點較為一致,進一步要注意的是,雖然印象上FP16-INT8執(zhí)行效率相對會好很多,可是同樣的在nthreads為9的時候,一樣會有很大的效能陡降現(xiàn)象出現(xiàn),在模型實際上線運作時候,需要先注意到這樣的現(xiàn)象對應于所使用的硬件運作條件(如核心數(shù)量、最大的Hyper-threading數(shù)量)。

GPU執(zhí)行person-detection-retail-0013模型效能變化情形

6b68737e-5b4f-11ed-a3b6-dac502259ad0.png

圖9 – GPU執(zhí)行person-detection-retail-0013FP32模型效能的變化情形

圖9為GPU執(zhí)行person-detection-retail-0013FP32模型效能的變化情形,相對CPU的運作狀態(tài),以nthreads的形式為橫軸坐標軸時,會觀察到nireq為1的時候,系統(tǒng)的運作效能相對是最低的,nireq大于1以上很明顯FPS效率好很多,有趣的情況是將圖9轉(zhuǎn)換坐標軸,以nireq作為橫軸的狀態(tài)下,可以得到圖10的結(jié)果,此時會發(fā)現(xiàn)有趣的現(xiàn)象,當nireq大于3之后,在nireq持續(xù)增加相當于不斷的將同時輸入的影像數(shù)量提高時,在同樣的nthreads的情況下,GPU執(zhí)行FP32模型的狀態(tài),效能其實會持續(xù)降低。

6b81fd62-5b4f-11ed-a3b6-dac502259ad0.png

圖10 – GPU執(zhí)行person-detection-retail-0013FP32模型效能的變化情形

由圖10的結(jié)果可以得到一個概念,在單純使用GPU狀態(tài)下執(zhí)行FP32模型的時候,同時輸入影像的數(shù)量增大并沒有幫助,GPU執(zhí)行FP32的效能最高為102.7FPS,相對CPU執(zhí)行FP32的效能為86 FPS的狀態(tài)下,單純使用GPU執(zhí)行FP32模型對于單獨CPU執(zhí)行FP32模型約為1.18倍的效能,相對另一個有趣的狀態(tài)是,nthreads設定的數(shù)值超過8之后,似乎在單純GPU執(zhí)行FP32模型的狀態(tài)下似乎對于推論效能不會有太大的影響,似乎此時設定nthreads的值,沒有真正的對應多個CPU核心運作的效能。

6bae2392-5b4f-11ed-a3b6-dac502259ad0.png

圖11- GPU執(zhí)行person-detection-retail-0013FP16模型效能的變化情形

圖11為GPU執(zhí)行person-detection-retail-0013FP16模型效能的變化情形,由圖11的結(jié)果可以得到一個概念,在單純使用GPU狀態(tài)執(zhí)行FP16模型的時候,nireq在小于3的狀態(tài)下,GPU相對的執(zhí)行效能并沒有達到滿載的狀態(tài),相對GPU執(zhí)行FP32模型效能最高為102.7FPS,很明顯GPU 在執(zhí)行FP16模型nireq等于2時就已經(jīng)接近130 FPS。

6bc77086-5b4f-11ed-a3b6-dac502259ad0.png

圖12- GPU執(zhí)行person-detection-retail-0013FP16模型,顯示nireq(nr)為3到20,nthreads(nt)為1到20的效能變化情形

由圖12的結(jié)果可以觀察到,當GPU執(zhí)行nireqperson-detection-retail-0013 FP16模型,最高的效能在nireq為5、nthreads(nt)為17此時為148.2FPS,相對在FP32的GPU與CPU運作條件下已有大幅度性能提升,可以觀察到nireq大于等于5之后效能會微幅的下降,nthreads的設定值大小對于效能的影響并不算太明顯,總結(jié)來說nireq大于3、nthreads設定值不論是多少,效能都會大于140FPS。

6bef57e0-5b4f-11ed-a3b6-dac502259ad0.png

圖13 – GPU執(zhí)行person-detection-retail-0013FP16-INT8模型效能變化

圖13為GPU執(zhí)行person-detection-retail-0013FP16-INT8模型效能變化,與GPU執(zhí)行person-detection-retail-0013 FP16模型比較時,會發(fā)現(xiàn)GPUFP16-INT8之nireq為1與2時,執(zhí)行的FPS與GPU FP16時nireq為1與2的結(jié)果相當,而nireq為3時,執(zhí)行效能與GPU執(zhí)行FP16模型的最高FPS相當,進一步的當nireq持續(xù)增加大于5時,nthreads無論是哪種數(shù)值,均可達到150FPS以上,此結(jié)果顯示GPU執(zhí)行FP16-INT8的效能相對在CPU與其他的GPU模式下,有著非常高的FPS執(zhí)行效率。

6c165f20-5b4f-11ed-a3b6-dac502259ad0.png

圖14 – GPU執(zhí)行person-detection-retail-0013FP16-INT8模型效能變化

由圖14的結(jié)果可以觀察到GPU執(zhí)行person-detection-retail-0013FP16-INT8模型效能,與GPU執(zhí)行nireq person-detection-retail-0013 FP16模型比較時會發(fā)現(xiàn),最高效能為nireq為7、nthreads(nt)為11,此時效能為159.2FPS,明顯高于GPU執(zhí)行FP16模型的148.2FPS的效能。

CPU+GPU執(zhí)行person-detection-retail-0013模型效能變化情形

圖15的結(jié)果可以觀察到CPU+GPU執(zhí)行person-detection-retail-0013FP32模型效能的變化,要注意的是OpenVINO在同時使用CPU與GPU運作時,nthreads最大的數(shù)值在使用本硬件時只能設定到7,超過8之后會顯示只能最大設定到7的訊息,nthreads超過8之后就會顯示會將nthreads 自動設定為7進行預測,因此CPU+GPU同時運作的環(huán)境,nthreads的量測結(jié)果只有1到8的范圍,而nireq維持1到20的設定值。另外,在運作的參數(shù)-d中,采用的設定值是MULTI:GPU,CPU,這樣的條件下會將輸入數(shù)據(jù)優(yōu)先派送GPU,之后再給CPU進行處理。

6c436650-5b4f-11ed-a3b6-dac502259ad0.png

圖15 – CPU+GPU執(zhí)行person-detection-retail-0013FP32模型效能變化

圖15的結(jié)果可以觀察到CPU+GPU執(zhí)行person-detection-retail-0013FP32模型效能的變化,與單純使用GPU執(zhí)行nireq person-detection-retail-0013 FP32模型比較時,將圖15放大為圖16,會發(fā)現(xiàn)最高的效能為nireq為14、nthreads(nt)為3,此時效能為106.4FPS,綜合圖15與圖16并且比較單純 CPU執(zhí)行FP32的模型時,當nireq大于3時,nthreads持續(xù)增加效能同樣無法繼續(xù)提升。

6c6853de-5b4f-11ed-a3b6-dac502259ad0.png

圖16 – CPU+GPU執(zhí)行person-detection-retail-0013FP32模型,nireq由5到20,nthreads由1到8的效能變化

圖16的結(jié)果會發(fā)現(xiàn)CPU+GPU執(zhí)行FP32模型最高的106.4FPS,與CPU執(zhí)行FP32的最高85.1FPS相比多了約20FPS,另一方面如果與單純GPU執(zhí)行FP32模型最高95.3FPS相比,大約多10FPS。因此可以得到CPU+GPU的執(zhí)行person-detection-retail-0013 FP32的模型的狀態(tài)下,為FP32模型下最高的執(zhí)行效能(106.4FPS)。

因此如果要求預測精度為FP32,能夠預期最好的FPS會在106附近。(nthreads設定為3、nireq設定為14、運作裝置為MULTI:GPU,CPU)。

6dff986a-5b4f-11ed-a3b6-dac502259ad0.png

圖17 – CPU+GPU執(zhí)行person-detection-retail-0013FP16模型效能變化

相對圖CPU+GPU執(zhí)行FP32的結(jié)果,圖17與18為CPU+GPU執(zhí)行person-detection-retail-0013F16模型效能的變化。圖18中顯示nthreads為1的狀態(tài)下,nireq為11與19時分別為149與149.5FPS,這兩個數(shù)值都非常高,但是由圖18會發(fā)現(xiàn)與單純GPU執(zhí)行FP16的模型(圖12)有著幾乎相同的最高執(zhí)行FPS,同時nthreads持續(xù)變大時FPS呈現(xiàn)持續(xù)下降,這種結(jié)果呈現(xiàn)CPU+GPU執(zhí)行FP16模型的情況下,GPU與CPU+GPU執(zhí)行的最高效能似乎非常接近。

6e1cf860-5b4f-11ed-a3b6-dac502259ad0.png

圖18 – CPU+GPU執(zhí)行person-detection-retail-0013FP16模型,nireq由4到20,nthreads由1到8的效能變化

進一步的回頭觀察CPU執(zhí)行FP16模型最高為86.3 FPS,由此也可以發(fā)現(xiàn)單純執(zhí)行GPU或GPU+CPU執(zhí)行FP16的效能,約提高1.73倍的效率,每秒鐘多63FPS。我們可以從上述的觀察中發(fā)現(xiàn),GPU的運作環(huán)境下,其實nthreads為1的效能就是最好的狀態(tài),至于nireq要設定多少,如果在不能夠有太多延遲畫面時間輸入的狀態(tài)下,建議一次輸入6張數(shù)據(jù)以上會有不錯的整體預測輸出效能,推論速度可以到140 FPS以上。

最后來看圖19中,顯示GPU+CPU執(zhí)行FP16-INT8的模型狀態(tài),會發(fā)現(xiàn)在nireq小于5的情形下,最高的預測效能都無法大于160FPS,可以明顯的看到,當nthreads為1、nireq大于5的條件下,觀察FPS效能會發(fā)現(xiàn)nireq為14、nthreads為1的狀態(tài)下,可跑出176.9FPS的最高效能,此效能值相對也是CPU、GPU、CPU+GPU執(zhí)行FP16-INT8狀態(tài)下最高的結(jié)果。

6e395b22-5b4f-11ed-a3b6-dac502259ad0.png

圖19 – CPU+GPU執(zhí)行person-detection-retail-0013FP16-INT8模型效能變化

進一步討論CPU+GPU執(zhí)行FP16-INT8的結(jié)果,會發(fā)現(xiàn)其實隨著nthreads的增大,在nthreads由2到8之間,其實對nireq為1到5以下似乎沒有變快的效果,另外在nireq為6到20的情況下,在nthreads大于1之后,明顯的預測的效能不升反將,推想這種情形發(fā)生的原因在于nireq其實也是需要CPU的執(zhí)行資源,當把nthreads增大的時候,CPU的資源被瓜分至進行預測處理的后續(xù)工作的部份,然而實際上從數(shù)據(jù)執(zhí)行結(jié)果的現(xiàn)象觀察,似乎只要nthreads設定為1,讓其他的CPU專心的進行數(shù)據(jù)讀取的動作把數(shù)據(jù)喂給GPU,然后CPU只需要用1個核心,專心的把GPU預測完的結(jié)果進行后續(xù)的處理,這樣的協(xié)同狀態(tài)下的工作組合,就可以達到很高的效率了。

結(jié)論

將目前觀察到的結(jié)果做一個總結(jié),你的機器上面如果只有CPU,當然的狀態(tài)只能執(zhí)行CPU運作FP32、FP16、FP16-INT8模型,F(xiàn)P16與FP32的模型在CPU模式下有同樣的效能,主要是系統(tǒng)會先將FP16轉(zhuǎn)換成FP32之后執(zhí)行,要注意的是nthreads的值不能設定超過核心的Hyper-threading的最大總數(shù)量,否則會有效能陡降的情形。

本文目前測試的模型顯示nthreads的數(shù)量設定在CPU的核心數(shù)量減1,這個時候的CPU預測效能會是最好的狀態(tài),當然部份的時候也可以試試看nthreads的數(shù)值設定與CPU的核心數(shù)量一樣,因為nthreads的數(shù)值超過CPU核心數(shù)目之后,F(xiàn)PS就只會變慢而不會變快了。

如果你的機器上面有Intel GPU的顯示芯片,目前許多桌上型機器內(nèi)建Intel GPU顯示芯片,過去只能用來作為顯示適配器使用,其實這時可以將這樣的機器作為機器學習預測使用,在本文中所測試的狀態(tài),單純使用GPU實際上有著非常好的運作效能,如果需要維持預測精準度又不希望占用CPU的運算效能,可以單純使用GPU執(zhí)行FP32模型,相對已經(jīng)可以快過單純使用CPU執(zhí)行FP32預測的效能。

最后如果你可以提供機器全部的效能進行機器學習的預測,在這樣的狀態(tài)CPU+GPU同時協(xié)作,如果你使用的機器學習模型在FP16-INT8的狀態(tài)下可以維持預測的精確度,則使用CPU+GPU的狀態(tài)下,運作FP16-INT8將大幅度提升預測的FPS效率,相對CPU FP32格式的模型,CPU+GPU執(zhí)行FP16-INT8相當于在同一臺機器上獲得2倍的預測效能。

后記

初學者透過MakerPRO系列文章可以學習OpenVINO操作,本文描述了參數(shù)調(diào)整的概念如何的影響OpenVINO模型上線時注意的事項,希望能夠讓系統(tǒng)上線運作模型時,有一定比較清楚要注意的觀念。

本文并沒有提及如何將模型換成FP16-INT8,以及使用benchmark_app比較FP32、FP16、FP16-INT8的結(jié)果,benchmark_app內(nèi)定可以使用隨機值作為輸入,并單純的測試硬件計算效能對應模型推論的FPS結(jié)果。最后,對于多攝影機、多模型同時運作在OpenVINO的狀態(tài),之后有機會再分享了。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8418

    瀏覽量

    132646
  • Docker
    +關注

    關注

    0

    文章

    458

    瀏覽量

    11857

原文標題:優(yōu)化OpenVINO模型效能:參數(shù)設定影響實測

文章出處:【微信號:易心Microbit編程,微信公眾號:易心Microbit編程】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和邊界。本文將介紹如何使用 OpenVINO C++ API 部署 FastSAM 模型,以實現(xiàn)快速高效的語義分割。在前文中我們發(fā)表了《基于 OpenVINO Python API 部署
    的頭像 發(fā)表于 11-17 09:53 ?924次閱讀
    如何使用<b class='flag-5'>OpenVINO</b> C++ API部署FastSAM<b class='flag-5'>模型</b>

    ORCAD 電感參數(shù)設定問題

    我在使用ORCAD仿真時使用的電感模型參數(shù)設定里面有C1,R1,R2,我不太清楚應該怎么設定這些參數(shù),如果使用理想電感
    發(fā)表于 03-29 11:40

    【大聯(lián)大世平Intel?神經(jīng)計算棒NCS2試用體驗】模型優(yōu)化器的配置流程

    模型優(yōu)化器的使用在前一篇的測試中介紹了使用模型優(yōu)化器進行測試的步驟,但是要使用模型優(yōu)化器對訓練出
    發(fā)表于 08-12 16:49

    GPU上OpenVINO基準測試的推斷模型的默認參數(shù)與CPU上的參數(shù)不同是為什么?

    在 CPU 和 GPU 上推斷出具有 OpenVINO? 基準的相同模型: benchmark_app.exe -m model.xml -d CPU benchmark_app.exe -m
    發(fā)表于 08-15 06:43

    如何將PyTorch模型OpenVINO trade結(jié)合使用?

    無法確定如何轉(zhuǎn)換 PyTorch 掩碼 R-CNN 模型以配合OpenVINO?使用。
    發(fā)表于 08-15 07:04

    如何在執(zhí)行converter.py腳本時指定模型優(yōu)化器的路徑?

    執(zhí)行 converter.py,使用命令將 aclnet 模型轉(zhuǎn)換為 IR: python3 converter.py --name aclnet 收到錯誤:無法找到模型優(yōu)化器。 使用 --mo 或從
    發(fā)表于 08-15 07:59

    為什么無法使用POT優(yōu)化Tensorflow (TF)或MXNet模型?

    無法使用 POT 優(yōu)化 Tensorflow (TF) 或 MXNet 模型,以便在 英特爾凌動? 平臺上使用 OpenVINO? 工具套件進行推理。 運行 pot -h。 接收錯誤消息: 非法指令例外
    發(fā)表于 08-15 08:05

    OpenVINO模型優(yōu)化實測:PC/NB當AI辨識引擎沒問題!

    這次我們將會自制一個CNN分類器,并透過OpenVINO模型轉(zhuǎn)換程序轉(zhuǎn)換成IR模型,并進行模型效能與正確率分析。依據(jù)Intel官方網(wǎng)站的說
    的頭像 發(fā)表于 12-09 16:13 ?2400次閱讀

    在C++中使用OpenVINO工具包部署YOLOv5模型

    下載并轉(zhuǎn)換YOLOv5預訓練模型的詳細步驟,請參考:《基于OpenVINO?2022.2和蝰蛇峽谷優(yōu)化并部署YOLOv5模型》,本文所使用的Open
    的頭像 發(fā)表于 02-15 16:53 ?4668次閱讀

    自訓練Pytorch模型使用OpenVINO?優(yōu)化并部署在AI愛克斯開發(fā)板

    本文章將依次介紹如何將 Pytorch 自訓練模型經(jīng)過一系列變換變成 OpenVINO IR 模型形式,而后使用 OpenVINO Python API 對 IR
    的頭像 發(fā)表于 05-26 10:23 ?942次閱讀
    自訓練Pytorch<b class='flag-5'>模型</b>使用<b class='flag-5'>OpenVINO</b>?<b class='flag-5'>優(yōu)化</b>并部署在AI愛克斯開發(fā)板

    如何將Pytorch自訓練模型變成OpenVINO IR模型形式

    本文章將依次介紹如何將Pytorch自訓練模型經(jīng)過一系列變換變成OpenVINO IR模型形式,而后使用OpenVINO Python API 對IR
    的頭像 發(fā)表于 06-07 09:31 ?2010次閱讀
    如何將Pytorch自訓練<b class='flag-5'>模型</b>變成<b class='flag-5'>OpenVINO</b> IR<b class='flag-5'>模型</b>形式

    沒有“中間商賺差價”, OpenVINO? 直接支持 PyTorch 模型對象

    隨著 OpenVINO 2023.0 版本的發(fā)布,OpenVINO 工具庫中預置了全新的 PyTorch 前端,為開發(fā)者們提供了一條全新的 PyTorch 模型支持路徑,帶來更友好的用戶
    的頭像 發(fā)表于 06-27 16:39 ?765次閱讀
    沒有“中間商賺差價”, <b class='flag-5'>OpenVINO</b>? 直接支持 PyTorch <b class='flag-5'>模型</b>對象

    使用OpenVINO優(yōu)化并部署訓練好的YOLOv7模型

    在《英特爾銳炫 顯卡+ oneAPI 和 OpenVINO 實現(xiàn)英特爾 視頻 AI 計算盒訓推一體-上篇》一文中,我們詳細介紹基于英特爾 獨立顯卡搭建 YOLOv7 模型的訓練環(huán)境,并完成了 YOLOv7 模型訓練,獲得了最佳精
    的頭像 發(fā)表于 08-25 11:08 ?1526次閱讀
    使用<b class='flag-5'>OpenVINO</b><b class='flag-5'>優(yōu)化</b>并部署訓練好的YOLOv7<b class='flag-5'>模型</b>

    基于OpenVINO C# API部署RT-DETR模型

    RT-DETR 是在 DETR 模型基礎上進行改進的,一種基于 DETR 架構(gòu)的實時端到端檢測器,它通過使用一系列新的技術(shù)和算法,實現(xiàn)了更高效的訓練和推理,在前文我們發(fā)表了《基于 OpenVINO
    的頭像 發(fā)表于 11-10 16:59 ?759次閱讀
    基于<b class='flag-5'>OpenVINO</b> C# API部署RT-DETR<b class='flag-5'>模型</b>

    NNCF壓縮與量化YOLOv8模型OpenVINO部署測試

    OpenVINO2023版本衍生出了一個新支持工具包NNCF(Neural Network Compression Framework – 神經(jīng)網(wǎng)絡壓縮框架),通過對OpenVINO IR格式模型的壓縮與量化更好的提升
    的頭像 發(fā)表于 11-20 10:46 ?1609次閱讀
    NNCF壓縮與量化YOLOv8<b class='flag-5'>模型</b>與<b class='flag-5'>OpenVINO</b>部署測試