99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

jf_cVC5iyAO ? 來(lái)源:易心Microbit編程 ? 作者:易心Micrbit編程 ? 2022-11-04 10:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

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

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

如果機(jī)器上面沒(méi)有docker的環(huán)境,要先安裝docker容器環(huán)境,在Linux上面執(zhí)行以下指令,前面的指令會(huì)先把原來(lái)的docker環(huán)境移除,如果你已經(jīng)安裝過(guò)docker環(huán)境,可以跳過(guò)這個(gè)步驟,直接執(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)境的時(shí)候,如果是使用ubuntu桌面版內(nèi)建的vnc環(huán)境,可以使用底下的指令來(lái)啟動(dòng)OpenVINO docker環(huán)境,這樣之后在docker環(huán)境內(nèi)如果需要使用到窗口環(huán)境,會(huì)比較方便做后續(xù)的測(cè)試。

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

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

dockerexec -it openvino-ubuntu20_tgl /bin/bash

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

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

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

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

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

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

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

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

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

表1 – OpenVINOobject_detection_demo可以執(zhí)行的機(jī)器學(xué)習(xí)模型

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

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

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

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

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

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

因此在FP16-INT8模型的運(yùn)作過(guò)程中,透過(guò)了FP16與INT8整數(shù)運(yùn)算于不同層之間的切換的運(yùn)算過(guò)程,如果許多的FP16層級(jí)被轉(zhuǎn)換為INT8,有機(jī)會(huì)得到儲(chǔ)存空間的較小模型及較快速指令周期的推論效能。同時(shí)INT8的運(yùn)算過(guò)程于i7第11代CPU中因?yàn)橹С至薃VX512的指令集,以及i7第11代所使用的內(nèi)顯GPU支持INT8運(yùn)算處理,因此在本文量測(cè)的結(jié)果中FP16-INT8的效能將大幅度相對(duì)提升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ù)設(shè)定值,${3}表示32、16、16-INT8等設(shè)定值,${4}代表使用的是CPU、GPU、MULTI:CPU,GPU等設(shè)定值,透過(guò)這些設(shè)定值的更改,最后將執(zhí)行過(guò)程輸出至各個(gè)條件的文本文件,范例程序執(zhí)行結(jié)束時(shí),于各文本文件的尾端會(huì)得到此次執(zhí)行的FPS數(shù)值結(jié)果,最后以這個(gè)FPS數(shù)值作為相關(guān)的量測(cè)效能結(jié)果進(jìn)行討論,詳細(xì)的參數(shù)設(shè)定值說(shuō)明如表2。

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

表2 –object_detection_demo.py相關(guān)的參數(shù)設(shè)定說(shuō)明

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

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

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

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

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

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

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

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

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

圖3中可以觀察到一個(gè)現(xiàn)象,當(dāng)nthreads設(shè)定的值為3時(shí),會(huì)得到相對(duì)最高的FPS結(jié)果,圖4為將圖3放大之后,由nthreads(nt)數(shù)值為2到8的設(shè)定值,分別在不同的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中可以觀察到當(dāng)nthreads設(shè)定值為3、nireq等于8,CPU執(zhí)行FP32模型FPS此時(shí)為85.1 FPS,之后無(wú)論nthreads與nireq調(diào)整為其他數(shù)值,執(zhí)行結(jié)果都無(wú)法超過(guò)此FPS,一般概念上會(huì)認(rèn)為同時(shí)輸入的影像稍微多一點(diǎn)比較好,因?yàn)橥瑫r(shí)處理多一點(diǎn)影像,在機(jī)器有能力響應(yīng)的狀態(tài)下,執(zhí)行結(jié)果的效能相對(duì)應(yīng)該會(huì)高一些,從這個(gè)觀點(diǎn)得到的FPS為nthreads為3與nireq為8時(shí),表示一次輸入8張影像時(shí),同時(shí)使用3個(gè)CPU的處理程序來(lái)處理person-detection-retail-0013模型的運(yùn)作過(guò)程,會(huì)有較好的執(zhí)行效能。

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

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

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

圖5為CPU執(zhí)行person-detection-retail-0013FP16模型的結(jié)果,相對(duì)CPU執(zhí)行FP32模型效能的情形,觀察圖3與圖5可以發(fā)現(xiàn)最高的FPS都約為86 FPS,圖3與圖5的效能變化非常相似,這個(gè)狀態(tài)顯示CPU在FP32與FP16的執(zhí)行具有相同的效能變化趨勢(shì),nthreads為9時(shí)同樣會(huì)有一個(gè)很大的效能下降,原因與執(zhí)行環(huán)境所采用的硬件有關(guān),本文章所使用硬件為i7第11代核心,包含4核心共8個(gè)Hyper-threading,發(fā)現(xiàn)nthreads分別在9與17的設(shè)定值時(shí),會(huì)產(chǎn)生一個(gè)相對(duì)陡降的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中會(huì)發(fā)現(xiàn)最高效能的值雖然在nthreads為3的時(shí)候,但是相對(duì)的此時(shí)的nireq為5,與圖4的nireq為8的情況并不同,此種最佳效能點(diǎn)的差異在各個(gè)模型選用時(shí),可以再針對(duì)不同的nireq的數(shù)值做最后的量測(cè)進(jìn)行尋找最佳參數(shù)點(diǎn)。

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

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

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詳細(xì)的變化情形,可以觀察到當(dāng)nthreads(nt)的數(shù)值是4的時(shí)候,nireq設(shè)定值大于等于3之后,相對(duì)每秒可以執(zhí)行推論的影像效能,相對(duì)高于其他的nthreads數(shù)值的推論效能,可以很明顯的感覺(jué)在CPU執(zhí)行FP16-INT8的條件下,CPU的核心數(shù)量、nthreads設(shè)定數(shù)值,與推論效能最高點(diǎn)較為一致,進(jìn)一步要注意的是,雖然印象上FP16-INT8執(zhí)行效率相對(duì)會(huì)好很多,可是同樣的在nthreads為9的時(shí)候,一樣會(huì)有很大的效能陡降現(xiàn)象出現(xiàn),在模型實(shí)際上線(xiàn)運(yùn)作時(shí)候,需要先注意到這樣的現(xiàn)象對(duì)應(yīng)于所使用的硬件運(yù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模型效能的變化情形,相對(duì)CPU的運(yùn)作狀態(tài),以nthreads的形式為橫軸坐標(biāo)軸時(shí),會(huì)觀察到nireq為1的時(shí)候,系統(tǒng)的運(yùn)作效能相對(duì)是最低的,nireq大于1以上很明顯FPS效率好很多,有趣的情況是將圖9轉(zhuǎn)換坐標(biāo)軸,以nireq作為橫軸的狀態(tài)下,可以得到圖10的結(jié)果,此時(shí)會(huì)發(fā)現(xiàn)有趣的現(xiàn)象,當(dāng)nireq大于3之后,在nireq持續(xù)增加相當(dāng)于不斷的將同時(shí)輸入的影像數(shù)量提高時(shí),在同樣的nthreads的情況下,GPU執(zhí)行FP32模型的狀態(tài),效能其實(shí)會(huì)持續(xù)降低。

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

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

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

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

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

圖11為GPU執(zhí)行person-detection-retail-0013FP16模型效能的變化情形,由圖11的結(jié)果可以得到一個(gè)概念,在單純使用GPU狀態(tài)執(zhí)行FP16模型的時(shí)候,nireq在小于3的狀態(tài)下,GPU相對(duì)的執(zhí)行效能并沒(méi)有達(dá)到滿(mǎn)載的狀態(tài),相對(duì)GPU執(zhí)行FP32模型效能最高為102.7FPS,很明顯GPU 在執(zhí)行FP16模型nireq等于2時(shí)就已經(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é)果可以觀察到,當(dāng)GPU執(zhí)行nireqperson-detection-retail-0013 FP16模型,最高的效能在nireq為5、nthreads(nt)為17此時(shí)為148.2FPS,相對(duì)在FP32的GPU與CPU運(yùn)作條件下已有大幅度性能提升,可以觀察到nireq大于等于5之后效能會(huì)微幅的下降,nthreads的設(shè)定值大小對(duì)于效能的影響并不算太明顯,總結(jié)來(lái)說(shuō)nireq大于3、nthreads設(shè)定值不論是多少,效能都會(huì)大于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模型比較時(shí),會(huì)發(fā)現(xiàn)GPUFP16-INT8之nireq為1與2時(shí),執(zhí)行的FPS與GPU FP16時(shí)nireq為1與2的結(jié)果相當(dāng),而nireq為3時(shí),執(zhí)行效能與GPU執(zhí)行FP16模型的最高FPS相當(dāng),進(jìn)一步的當(dāng)nireq持續(xù)增加大于5時(shí),nthreads無(wú)論是哪種數(shù)值,均可達(dá)到150FPS以上,此結(jié)果顯示GPU執(zhí)行FP16-INT8的效能相對(duì)在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模型比較時(shí)會(huì)發(fā)現(xiàn),最高效能為nireq為7、nthreads(nt)為11,此時(shí)效能為159.2FPS,明顯高于GPU執(zhí)行FP16模型的148.2FPS的效能。

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

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

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模型比較時(shí),將圖15放大為圖16,會(huì)發(fā)現(xiàn)最高的效能為nireq為14、nthreads(nt)為3,此時(shí)效能為106.4FPS,綜合圖15與圖16并且比較單純 CPU執(zhí)行FP32的模型時(shí),當(dāng)nireq大于3時(shí),nthreads持續(xù)增加效能同樣無(wú)法繼續(xù)提升。

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

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

圖16的結(jié)果會(huì)發(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)。

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

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

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

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

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

最后來(lái)看圖19中,顯示GPU+CPU執(zhí)行FP16-INT8的模型狀態(tài),會(huì)發(fā)現(xiàn)在nireq小于5的情形下,最高的預(yù)測(cè)效能都無(wú)法大于160FPS,可以明顯的看到,當(dāng)nthreads為1、nireq大于5的條件下,觀察FPS效能會(huì)發(fā)現(xiàn)nireq為14、nthreads為1的狀態(tài)下,可跑出176.9FPS的最高效能,此效能值相對(duì)也是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模型效能變化

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

結(jié)論

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

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

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

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

后記

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

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

審核編輯:湯梓紅

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

    關(guān)注

    66

    文章

    8499

    瀏覽量

    134394
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    515

    瀏覽量

    12877

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C#集成OpenVINO?:簡(jiǎn)化AI模型部署

    什么是OpenVINO 工具套件? OpenVINO 工具套件是一個(gè)用于優(yōu)化和部署人工智能(AI)模型,提升AI推理性能的開(kāi)源工具集合,不僅支持以卷積神經(jīng)網(wǎng)
    的頭像 發(fā)表于 02-17 10:03 ?1914次閱讀
    C#集成<b class='flag-5'>OpenVINO</b>?:簡(jiǎn)化AI<b class='flag-5'>模型</b>部署

    運(yùn)行時(shí)OpenVINO?找不到模型優(yōu)化器,為什么?

    在運(yùn)行時(shí)OpenVINO?找不到模型優(yōu)化器,運(yùn)行模型下載程序命令并收到錯(cuò)誤消息: omz_downloader:找不到命令
    發(fā)表于 03-05 08:16

    為什么無(wú)法在運(yùn)行時(shí)C++推理中讀取OpenVINO?模型

    使用模型優(yōu)化器 2021.1 版OpenVINO?轉(zhuǎn)換模型 使用 Runtime 2022.3 版本在 C++ 推理實(shí)現(xiàn) ( core.read_model()) 中讀取
    發(fā)表于 03-05 06:17

    使用模型優(yōu)化器命令將ONNX模型轉(zhuǎn)換為OpenVINO? IR格式時(shí)出現(xiàn)“ReplacementID”錯(cuò)誤怎么解決?

    使用模型優(yōu)化器命令將 ONNX 模型轉(zhuǎn)換為 OpenVINO? IR 格式: --input_model \"{onnx_path} --input_shape [1,512, 89
    發(fā)表于 03-05 09:41

    如何使用OpenVINO?運(yùn)行對(duì)象檢測(cè)模型?

    無(wú)法確定如何使用OpenVINO?運(yùn)行對(duì)象檢測(cè)模型
    發(fā)表于 03-06 07:20

    OpenVINO中的量化模型OpenVINO ESR模型結(jié)果不一致是怎么回事?

    將 REAL-ESRSTREAM 模型轉(zhuǎn)換成 OpenVINO IR (2021.4) 并執(zhí)行該模型。 能夠運(yùn)行 IR,但結(jié)果與 REAL-ESR 就此不同的是。
    發(fā)表于 03-06 08:11

    構(gòu)建開(kāi)源OpenVINO?工具套件后,模型優(yōu)化器位于何處呢?

    構(gòu)建開(kāi)源OpenVINO?工具套件后,模型優(yōu)化器位于何處?
    發(fā)表于 03-06 08:18

    請(qǐng)問(wèn)使用2022.2時(shí)是否可以讀取模型OpenVINO?層?

    使用 2020.3 時(shí),使用 net.layers 和 layers.blob 讀取模型OpenVINO?層。 OpenVINO?自 2021.2 OpenVINO?起,使用 202
    發(fā)表于 03-06 06:37

    OpenVINO? Toolkit中如何保持模型稀疏性?

    OpenVINO? Toolkit 中支持的優(yōu)化方法,保持模型稀疏性。
    發(fā)表于 03-06 06:47

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

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

    OpenVINO模型優(yōu)化實(shí)測(cè):PC/NB當(dāng)AI辨識(shí)引擎沒(méi)問(wèn)題!

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

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

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

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

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

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

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

    C#中使用OpenVINO?:輕松集成AI模型!

    與分析三大領(lǐng)域中,如何快速將AI模型集成到應(yīng)用程序中,實(shí)現(xiàn)AI賦能和應(yīng)用增值?最容易的方式是:在C#中,使用OpenVINO?工具套件集成AI模型。 一,什么是OpenVINO? 工具
    的頭像 發(fā)表于 02-07 14:05 ?805次閱讀
    C#中使用<b class='flag-5'>OpenVINO</b>?:輕松集成AI<b class='flag-5'>模型</b>!