1.1 概述
OpenVINO 2022.1是自O(shè)penVINO工具套件2018年首次發(fā)布以來(lái)最大的更新之一,參見《OpenVINO 迎來(lái)迄今為止最重大更新,2022.1新特性搶先看!》。在眾多新特性中,AUTO插件和自動(dòng)批處理(Automatic-Batching)是最重要的新特性之一,它幫助開發(fā)者無(wú)需復(fù)雜的編程即可提高推理計(jì)算的性能和效率。
1.1.1 什么是AUTO插件?
AUTO插件1 ,全稱叫自動(dòng)設(shè)備選擇(Automatic device selection),它是一個(gè)構(gòu)建在CPU/GPU插件之上的虛擬插件,如圖1-1所示。在OpenVINO 文檔中,“設(shè)備(device)”是指用于推理計(jì)算的 Intel 處理器,它可以是受支持的CPU、GPU、VPU(視覺處理單元)或 GNA(高斯神經(jīng)加速器協(xié)處理器)或這些設(shè)備的組合3 。
圖1-1 OpenVINO Runtime支持的設(shè)備插件3
AUTO插件好處有:
■ 首先檢測(cè)運(yùn)行時(shí)平臺(tái)上所有可用的計(jì)算設(shè)備,然后選擇最佳的一個(gè)計(jì)算設(shè)備進(jìn)行推理計(jì)算,并根據(jù)深度學(xué)習(xí)模型和所選設(shè)備的特性以最佳配置使用它。
■使 GPU 實(shí)現(xiàn)更快的首次推理延遲:GPU 插件需要在開始推理之前在運(yùn)行時(shí)進(jìn)行在線模型編譯——可能需要 10 秒左右才能完成,具體取決于平臺(tái)性能和模型的復(fù)雜性。當(dāng)選擇獨(dú)立或集成GPU時(shí),“AUTO”插件開始會(huì)首先利用CPU進(jìn)行推理,以隱藏此GPU模型編譯時(shí)間。
■使用簡(jiǎn)單,開發(fā)者只需將compile_model()方法的device_name參數(shù)指定為“AUTO”即可,如圖1-2所示。
圖1-2 指定AUTO插件
1.1.2 什么是自動(dòng)批處理?
自動(dòng)批處理(Automatic Batching)2 ,又叫自動(dòng)批處理執(zhí)行(Automatic Batching Execution),是OpenVINO Runtime支持的設(shè)備之一,如圖1-1所示。
一般來(lái)說(shuō),批尺寸(batch size) 越大的推理計(jì)算,推理效率和吞吐量就越好。自動(dòng)批處理執(zhí)行將用戶程序發(fā)出的多個(gè)異步推理請(qǐng)求組合起來(lái),將它們視為多批次推理請(qǐng)求,并將批推理結(jié)果拆解后,返回給各推理請(qǐng)求。
自動(dòng)批處理無(wú)需開發(fā)者手動(dòng)指定。當(dāng)compile_model()方法的config參數(shù)設(shè)置為{“PERFORMANCE_HINT”: ”THROUGHPUT”}時(shí),OpenVINO Runtime會(huì)自動(dòng)啟動(dòng)自動(dòng)批處理執(zhí)行,如圖1-3所示,讓開發(fā)人員以最少的編碼工作即可享受計(jì)算設(shè)備利用率和吞吐量的提高。
圖1-3 自動(dòng)啟動(dòng)自動(dòng)批處理執(zhí)行
1.2 動(dòng)手學(xué)AUTO插件的特性
讀書是學(xué)習(xí),實(shí)踐也是學(xué)習(xí),而且是更有效的學(xué)習(xí)。本文提供了完整的實(shí)驗(yàn)代碼,供讀者一邊動(dòng)手實(shí)踐,一邊學(xué)習(xí)總結(jié)。
Github地址: https://github.com/yas-sim/openvino-auto-feature-visualization
1.2.1 搭建實(shí)驗(yàn)環(huán)境
第一步,克隆代碼倉(cāng)到本地。
git clone https://github.com/yas-sim/openvino-auto-feature-visualization.git
第二步,在openvino-auto-feature-visualization路徑執(zhí)行:
python -m pip install --upgrade pip
pip install -r requirements.txt
第三步,下載模型并完成轉(zhuǎn)換
omz_downloader --list models.txt
omz_converter --list models.txt
到此,實(shí)驗(yàn)環(huán)境搭建完畢。實(shí)驗(yàn)程序的所有配置和設(shè)置參數(shù)都硬編碼在源代碼中,您需要手動(dòng)修改源代碼以更改測(cè)試配置,如圖1-4所示。
圖1-4 手動(dòng)修改源代碼中的配置
1.2.2 AUTO插件自動(dòng)切換計(jì)算設(shè)備
GPU插件需要在 GPU 上開始推理之前將IR模型編譯為 OpenCL 模型。這個(gè)模型編譯過(guò)程可能需要很長(zhǎng)時(shí)間,例如 10 秒,會(huì)延遲應(yīng)用程序開始推理,使得應(yīng)用程序啟動(dòng)時(shí)的用戶體驗(yàn)不好。
為了隱藏這種 GPU 模型編譯延遲,AUTO插件將在 GPU 模型編譯進(jìn)行時(shí)使用CPU執(zhí)行推理任務(wù);當(dāng)GPU模型編譯完成后,AUTO插件會(huì)自動(dòng)將推理計(jì)算設(shè)備從CPU切換到GPU,如圖1-5所示。
圖1-5 AUTO插件自動(dòng)切換計(jì)算設(shè)備
1.2.3 動(dòng)手觀察自動(dòng)切換計(jì)算設(shè)備的行為
AUTO插件會(huì)依據(jù)設(shè)備優(yōu)先級(jí)1 : dGPU > iGPU > VPU > CPU, 來(lái)選擇最佳計(jì)算設(shè)備。當(dāng)自動(dòng)插件選擇 GPU 作為最佳設(shè)備時(shí),會(huì)發(fā)生推理設(shè)備切換,以隱藏首次推理延遲。
請(qǐng)注意,設(shè)備切換前后的推理延遲不同;此外,推理延遲故障可能發(fā)生在設(shè)備切換的那一刻,如圖1-6所示。
請(qǐng)如圖1-6所示,設(shè)置auto-test-latency-graph.py配置參數(shù)為:
cfg['PERFORMANCE_HINT'] = ['THROUGHPUT', 'LATENCY'][0]
并運(yùn)行命令:
python auto-test-latency-graph.py
同時(shí)打開Windows任務(wù)管理器,觀察CPU和iGPU的利用率。
圖1-6 config={“PERFORMANE_HINT”:”THROUGPUT”}的執(zhí)行行為
1.2.4 PERFORMANCE_HINT設(shè)置
如1.1.2節(jié)所述,AUTO插件的執(zhí)行行為取決于compile_model()方法的config參數(shù)的PERFORMANCE_HINT設(shè)置,如表1-1所示:
表1-1 PERFORMANCE_HINT設(shè)置
設(shè)置auto-test-latency-graph.py配置參數(shù)為:
cfg['PERFORMANCE_HINT'] = ['THROUGHPUT', 'LATENCY'][1]
并運(yùn)行命令:
python auto-test-latency-graph.py
同時(shí)打開Windows任務(wù)管理器,觀察CPU和iGPU的利用率,運(yùn)行結(jié)果如圖1-7所示。
圖1-7 config={“PERFORMANE_HINT”:”LATENCY”}的執(zhí)行行為
通過(guò)實(shí)驗(yàn),我們可以發(fā)現(xiàn),根據(jù)不同的config參數(shù)設(shè)置,使得AUTO插件可以工作在不同的模式下:
■ 在Latency模式,不會(huì)自動(dòng)啟動(dòng)Auto Batching,執(zhí)行設(shè)備切換后,GPU上的推理延遲很小,且不會(huì)抖動(dòng)。
■在THROUGHPUT模式,自動(dòng)啟動(dòng)Auto Batching,執(zhí)行設(shè)備切換后,GPU上的推理延遲較大,而且會(huì)抖動(dòng)。
接下來(lái),本文將討論Auto Batching對(duì)推理計(jì)算行為的影響。
1.3 動(dòng)手學(xué)Auto Batching的特性
如1.1.2節(jié)所述,自動(dòng)批處理執(zhí)行將用戶程序發(fā)出的多個(gè)異步推理請(qǐng)求組合起來(lái),將它們視為多批次推理請(qǐng)求,并將批推理結(jié)果拆解后,返回給各推理請(qǐng)求,如圖1-8所示。
圖1-8 Auto Batching的執(zhí)行過(guò)程
Auto Batching在收集到指定數(shù)量的異步推理請(qǐng)求或計(jì)時(shí)器超時(shí)(默認(rèn)超時(shí)=1,000 毫秒)時(shí)啟動(dòng)批推理計(jì)算(batch-inference),如圖1-9所示。
圖1-9 啟動(dòng)批推理計(jì)算
1.3.1 Auto Batching被禁止時(shí)
Auto Batching被禁止時(shí),所有推理請(qǐng)求都是單獨(dú)被處理的。
請(qǐng)配置并運(yùn)行auto-test.py。
Device: AUTO
Config: {'PERFORMANCE_HINT': 'LATENCY'}
niter: 20 , interval: 30 ms
OPTIMAL_NUMBER_OF_INFER_REQUESTS 1
Number of infer requests: 1
運(yùn)行結(jié)果如圖1-10所示,可見每一個(gè)推理請(qǐng)求是被單獨(dú)處理的。
圖1-10 Auto Batching被禁止時(shí)的運(yùn)行結(jié)果
1.3.2 Auto Batching被使能時(shí)
Auto Batching被使能時(shí),異步推理請(qǐng)求將作為多批次推理請(qǐng)求進(jìn)行綁定和處理。推理完成后,結(jié)果將分發(fā)給各個(gè)異步推理請(qǐng)求并返回。需要注意的是:批推理計(jì)算不保證異步推理請(qǐng)求的推理順序。
請(qǐng)配置并運(yùn)行auto-test.py。
Device: GPU
Config: {'CACHE_DIR': './cache', 'PERFORMANCE_HINT': 'THROUGHPUT', 'ALLOW_AUTO_BATCHING': 'YES'}
niter: 200 , interval: 30 ms
OPTIMAL_NUMBER_OF_INFER_REQUESTS 64
Number of infer requests: 16
運(yùn)行結(jié)果如圖1-11所示,可見每16個(gè)推理請(qǐng)求被組合成一個(gè)批次進(jìn)行批推理計(jì)算,推理計(jì)算順序不被保證。
圖1-11 Auto Batching被使能時(shí)的運(yùn)行結(jié)果
1.3.3 Auto Batching會(huì)導(dǎo)致推理延遲變長(zhǎng)
由于較長(zhǎng)的默認(rèn)超時(shí)設(shè)置(默認(rèn)timeout = 1,000ms),在低推理請(qǐng)求頻率情況下可能會(huì)引入較長(zhǎng)的推理延遲。
由于Auto Batching將等待指定數(shù)量的推理請(qǐng)求進(jìn)入或超時(shí)計(jì)時(shí)器超時(shí),在低推理頻率的情況下,它無(wú)法在指定的超時(shí)時(shí)間內(nèi)收集足夠的推理請(qǐng)求來(lái)啟動(dòng)批推理計(jì)算,因此,提交的推理請(qǐng)求將被推遲,直到計(jì)時(shí)器超時(shí),這將引入大于timeout設(shè)置的推理延遲。
為解決上述問(wèn)題,用戶可以通過(guò) AUTO_BATCH_TIMEOUT 配置參數(shù)指定超時(shí)時(shí)間,以盡量減少此影響。
請(qǐng)使用AutoBatching的默認(rèn)timeout,運(yùn)行auto-test.py。
Device: GPU
Config: {'CACHE_DIR': './cache', 'PERFORMANCE_HINT': 'THROUGHPUT'}
niter: 20, interval: 300 ms
OPTIMAL_NUMBER_OF_INFER_REQUESTS 64
Number of infer requests: 64
運(yùn)行結(jié)果如圖1-12所示,由于每次都無(wú)法在timeout時(shí)間內(nèi)收集到指定數(shù)量的推理請(qǐng)求,由此導(dǎo)致推理請(qǐng)求的延遲很高。
圖1-12 timeout=1000ms運(yùn)行結(jié)果
請(qǐng)配置AutoBatching的timeout=100ms,然后運(yùn)行auto-test.py。
Device: GPU
Config: {'CACHE_DIR': './cache', 'PERFORMANCE_HINT': 'THROUGHPUT', 'AUTO_BATCH_TIMEOUT': '100'}
niter: 20 , interval: 300 ms
OPTIMAL_NUMBER_OF_INFER_REQUESTS 64
Number of infer requests: 16
圖1-13 timeout=100ms運(yùn)行結(jié)果
運(yùn)行結(jié)果如圖1-13所示, timeout=100ms時(shí)間內(nèi),僅能收集到一個(gè)推理請(qǐng)求。
1.3.4 Auto Batching最佳實(shí)踐
綜上所述,Auto Batching的最佳編程實(shí)踐:
■ 要記住,默認(rèn)情況下Auto Batching不會(huì)啟用。
■只有在以下情況時(shí),Auto Batching才啟用:
{'PERFORMANCE_HINT': 'THROUGHPUT', 'ALLOW_AUTO_BATCHING': 'YES'}
■如果您的應(yīng)用程序能夠以高頻率連續(xù)提交推理請(qǐng)求,請(qǐng)使用自動(dòng)批處理。
■警告:如果您的應(yīng)用間歇性地提交推理請(qǐng)求,則最后一個(gè)推理請(qǐng)求可能會(huì)出現(xiàn)意外的長(zhǎng)延遲。
■如果推理節(jié)奏或頻率較低,即推理頻率遠(yuǎn)低于AUTO_BATCH_TIMEOUT(默認(rèn)為 1,000 毫秒),請(qǐng)勿開啟自動(dòng)批處理。
■您可以使用AUTO_BATCH_TIMEOUT 參數(shù)更改自動(dòng)批處理的超時(shí)設(shè)置,以最大限度地減少不需要的長(zhǎng)延遲,參數(shù)值的單位是“ms”。
■如果您知道工作負(fù)載的最佳批處理大小,請(qǐng)使用PERFORMANCE_HINT_NUM_REQUESTS 指定適當(dāng)?shù)呐幚頂?shù)量,即 {'PERFORMANCE_HINT_NUM_REQUESTS':'4'}。同時(shí),以GPU為例,AUTO插件會(huì)在后臺(tái)根據(jù)可以使用的內(nèi)存,模型精度等計(jì)算出最佳批處理大小。
1.4 總結(jié)
本節(jié)給出AUTO 插件和Auto Batching的快速小結(jié),如表1-2所示。
表1-2 AUTO插件和自動(dòng)批處理執(zhí)行快速小結(jié)表
本文GitHub源代碼鏈接:https://github.com/yas-sim/openvino-auto-feature-visualization
審核編輯 :李倩
-
Auto
+關(guān)注
關(guān)注
0文章
43瀏覽量
15549 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5561瀏覽量
122820
原文標(biāo)題:OpenVINO? 2022.1中AUTO插件和自動(dòng)批處理的最佳實(shí)踐 | 開發(fā)者實(shí)戰(zhàn)
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
天馬榮獲新財(cái)富雜志“2024 ESG最佳實(shí)踐獎(jiǎng)”
松下MPS媒體制作平臺(tái) 第十一篇:深入探索自動(dòng)跟蹤插件(第二部分)

松下MPS媒體制作平臺(tái)之自動(dòng)跟蹤插件(第一部分)

兆芯最佳實(shí)踐應(yīng)用場(chǎng)景解決方案發(fā)布
立訊精密入選2024可持續(xù)發(fā)展最佳實(shí)踐案例
MES系統(tǒng)的最佳實(shí)踐案例
邊緣計(jì)算架構(gòu)設(shè)計(jì)最佳實(shí)踐
云計(jì)算平臺(tái)的最佳實(shí)踐
TMCS110x 布局挑戰(zhàn)和最佳實(shí)踐

衰減 AMC3301 系列輻射發(fā)射 EMI 的最佳實(shí)踐

毫米波雷達(dá)器件的放置和角度最佳實(shí)踐應(yīng)用

電機(jī)驅(qū)動(dòng)器電路板布局的最佳實(shí)踐

MSP430 FRAM技術(shù)–使用方法和最佳實(shí)踐

評(píng)論