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