雖然推理加速器最初用于數(shù)據(jù)中心,但它們已經(jīng)迅速發(fā)展到應(yīng)用程序的邊緣推理,如自動駕駛和醫(yī)學(xué)成像。通過這種轉(zhuǎn)變,客戶發(fā)現(xiàn),同樣的加速器,在數(shù)據(jù)中心處理圖像很順利,但移到邊緣推斷方面卻顯得糟糕。其實(shí)原因很簡單:一個(gè)處理數(shù)據(jù)池,而另一個(gè)處理的是數(shù)據(jù)流。
當(dāng)你在batch = 1時(shí)進(jìn)行批處理時(shí),池子里待處理的batch就會很多。在數(shù)據(jù)中心,客戶通常是數(shù)據(jù)的處理池,比如被標(biāo)記的照片。其目標(biāo)是用最少的資源和功耗以及最佳的延遲來處理盡可能多的照片。
另一方面,邊緣推斷應(yīng)用程序需要處理數(shù)據(jù)流。我們通常的相機(jī)每秒拍攝30幀,每幀通常是200萬像素。通常情況下,每幅圖像需要33毫秒,每秒大約30幀。當(dāng)你有一個(gè)圖像從一個(gè)流進(jìn)來,它如何被處理取決于它需要做什么。
例如,使用推理進(jìn)行零售分析的商店可能會計(jì)算給定時(shí)間排隊(duì)的人數(shù)。在這個(gè)例子中,他們真的不需要幾個(gè)小時(shí)甚至幾天的結(jié)果。然而,如果你駕駛一輛使用自動駕駛功能的汽車,你只有毫秒來處理圖像,否則你可能會撞到人。雖然在這兩個(gè)例子中,相機(jī)每3毫秒生成1幀圖像,但使用的推理加速器非常不同。
讓我們看看數(shù)據(jù)流發(fā)生了什么。
首先,您需要清理圖像以去除諸如光線條紋之類的東西,然后應(yīng)用推理。當(dāng)推理完成后,您需要采取一個(gè)行動,根據(jù)你正在處理的活動,所有這些都需要在特定的時(shí)間內(nèi)發(fā)生。如果你不需要幾個(gè)小時(shí)的結(jié)果,你可以對圖像進(jìn)行批處理。在這種情況下,延遲就無關(guān)緊要了。重要的是用最少的成本和能量處理最多的圖像。
最常犯的一個(gè)錯(cuò)誤就是在選擇邊緣推斷解決方案時(shí)沒有考慮延遲和流媒體吞吐量。比方說,你有一臺每秒能處理30幀的推理加速器,另一臺每秒能處理15幀。
大多數(shù)人自然而然地認(rèn)為每秒30幀的解決方案更好——其實(shí)你錯(cuò)了。
每秒30幀的加速器可能會獲得比較可觀的吞吐量,原因是它有三個(gè)引擎,每個(gè)引擎都有不同的延遲。最典型的是英偉達(dá)Xavier推理加速器。Xavier的深度學(xué)習(xí)引擎處理圖像大約需要300毫秒,GPU大約需要90毫秒。如果客戶有兩個(gè)深度學(xué)習(xí)引擎+GPU都在運(yùn)行,他們可能會在數(shù)據(jù)池中獲得顯著的吞吐量。
但是,如果它需要從數(shù)據(jù)流一次處理一個(gè)圖像,它就不能有效地使用深度學(xué)習(xí)引擎,吞吐量會顯著下降。在這種情況下,你需要觀察哪個(gè)執(zhí)行單元的延遲最短,即GPU的延遲為90毫秒。分割成1000毫秒就是每秒的幀數(shù),這意味著這個(gè)吞吐量實(shí)際上只有每秒10幀(而不是宣傳的每秒30幀)。
x Logix購買了一臺Xavier AGX,并將其配置為NX模式(該軟件測量芯片的功率,當(dāng)功率超過15W時(shí),會調(diào)低芯片的時(shí)鐘,以防止芯片過熱)。
然后,我們通過Nvidia Xavier NX軟件流運(yùn)行三個(gè)模型(YOLOv3加上我們客戶的兩個(gè)模型),并在芯片上運(yùn)行,測量每張圖像的延遲。我們還通過自己的InferX X1性能評估器運(yùn)行了相同的模型。
顯然,Nvidia不能為我們自己客戶的機(jī)型發(fā)布基準(zhǔn)測試,但YOLOv3的數(shù)據(jù)是在Xavier AGX上發(fā)布的,而不是在NX上發(fā)布的——而且他們發(fā)布的數(shù)據(jù)是使用GPU和兩個(gè)DL加速器的綜合吞吐量。對于Batch= 1,GPU有可接受的延遲。
不同的領(lǐng)域?qū)?yīng)不同的處理器
關(guān)注自動駕駛和航空航天等應(yīng)用程序的客戶要處理數(shù)據(jù)流,所以可能只關(guān)心流吞吐量。即使它們是空閑的,它們也不能利用運(yùn)行較慢的執(zhí)行單元,因?yàn)樗鼈冃枰谙乱粋€(gè)圖像可用之前處理第一個(gè)圖像。在這些應(yīng)用程序中,要跟上圖像流是至關(guān)重要的,因?yàn)槿绻贿@樣做,就需要存儲越來越多的數(shù)據(jù)。如果應(yīng)用程序是自動駕駛,這將延長延遲時(shí)間,并可能導(dǎo)致嚴(yán)重后果。
總之,如果你正在研究推理加速器,請明白它們是為什么而優(yōu)化的。
今年推出的大多數(shù)推斷加速器都是為ResNet-50進(jìn)行優(yōu)化設(shè)計(jì)的,本人認(rèn)為是一個(gè)糟糕基準(zhǔn)測試,因?yàn)樗褂昧诵D像,比如224×224。
對于像自動駕駛這樣的應(yīng)用程序,一般是需要處理200萬像素的1440×1440級別的圖像。對于這些應(yīng)用程序,YOLOv3是一個(gè)更好的基準(zhǔn)測試。
我們也開始看到與ResNet-50和YOLOv3有著截然不同的新模型。在生物醫(yī)學(xué)工程或醫(yī)學(xué)成像等市場,他們處理不同類型的傳感器,而非行人目標(biāo)的檢測和識別,他們以一種非常不同的方式使用神經(jīng)網(wǎng)絡(luò)。在YOLOv3上運(yùn)行良好的加速器可能在這些模型上運(yùn)行得更好。
簡單介紹一下YOLOv3,它是YOLO (You Only Look Once)系列目標(biāo)檢測算法中的第三版,相比之前的算法,尤其是針對小目標(biāo),精度有顯著提升。下面我們就來看看在算法中究竟有哪些提升。
YOLOv3算法
首先如上圖所示,在訓(xùn)練過程中對于每幅輸入圖像,YOLOv3會預(yù)測三個(gè)不同大小的3D tensor,對應(yīng)著三個(gè)不同的scale。設(shè)計(jì)這三個(gè)scale的目的就是為了能夠檢測出不同大小的物體。在這里我們以13x13的tensor為例做一個(gè)簡單講解。對于這個(gè)scale,原始輸入圖像會被分成分割成13x13的grid cell,每個(gè)grid cell對應(yīng)著3D tensor中的1x1x255這樣一個(gè)長條形voxel。255這個(gè)數(shù)字來源于(3x(4+1+80)),其中的數(shù)字代表bounding box的坐標(biāo),物體識別度(objectness score),以及相對應(yīng)的每個(gè)class的confidence,具體釋義見上圖。
其次,如果訓(xùn)練集中某一個(gè)ground truth對應(yīng)的bounding box中心恰好落在了輸入圖像的某一個(gè)grid cell中(如圖中的紅色grid cell),那么這個(gè)grid cell就負(fù)責(zé)預(yù)測此物體的bounding box,于是這個(gè)grid cell所對應(yīng)的objectness score就被賦予1,其余的grid cell則為0。此外,每個(gè)grid cell還被賦予3個(gè)不同大小的prior box。在學(xué)習(xí)過程中,這個(gè)grid cell會逐漸學(xué)會如何選擇哪個(gè)大小的prior box,以及對這個(gè)prior box進(jìn)行微調(diào)(即offset/coordinate)。但是grid cell是如何知道該選取哪個(gè)prior box呢?在這里作者定義了一個(gè)規(guī)則,即只選取與ground truth bounding box的IOU重合度最高的哪個(gè)prior box。
上面說了有三個(gè)預(yù)設(shè)的不同大小的prior box,但是這三個(gè)大小是怎么計(jì)算得來的呢?作者首先在訓(xùn)練前,提前將COCO數(shù)據(jù)集中的所有bbox使用K-means clustering分成9個(gè)類別,每3個(gè)類別對應(yīng)一個(gè)scale,這樣總共3個(gè)scale。這種關(guān)于box大小的先驗(yàn)信息極大地幫助網(wǎng)絡(luò)準(zhǔn)確的預(yù)測每個(gè)Box的offset/coordinate,因?yàn)閺闹庇^上,大小合適的box將會使網(wǎng)絡(luò)更快速精準(zhǔn)地學(xué)習(xí)。
責(zé)編AJX
-
數(shù)據(jù)中心
+關(guān)注
關(guān)注
16文章
4860瀏覽量
72383 -
AI
+關(guān)注
關(guān)注
87文章
31536瀏覽量
270343 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3292瀏覽量
57918
發(fā)布評論請先 登錄
相關(guān)推薦
評論