DMS嵌入式加速器和神經網絡(一)
繼續(xù)Seeing Machines對DMS商業(yè)化落地所遇到的挑戰(zhàn)的總結。
嵌入式NPU
在傳統(tǒng)CPU上執(zhí)行NN的尷尬適配,加上較小的晶體管設計節(jié)點的制造成本呈指數級上升(在可預見的未來,在對成本敏感的汽車領域,摩爾定律似乎已總結),導致了過去幾年中NPU加速器設計的寒武紀大爆發(fā)。
這些新的NPU協(xié)處理器有晶體管分組和內存安排,試圖優(yōu)化執(zhí)行任何類別的NN,芯片設計者認為這將受到算法開發(fā)人員的歡迎。不同的設計因產品所尋求的定位而不同。一些NPU作為獨立的協(xié)處理芯片出售,另一些是可授權的內核。有些采用新的芯片技術,如使用納米級電阻的內存計算。
現在的嵌入式NPU設計在數學運算符的數量和種類、這些運算符的精度、網絡執(zhí)行時數據塊的排列、獲取、緩存和傳播方式,以及在不需要DDR內存訪問或大量數據傳輸的情況下可在NPU內核內進行本地處理的最大網絡規(guī)模方面存在差異。一些設計還結合了多個處理pipeline,以增加并行性和吞吐量(當然,這是以額外的芯片面積為代價的)。
嵌入式NPU的設計目的是在低成本、小尺寸、低功耗的“邊緣”設備上執(zhí)行NN。與云數據中心或工作站的設計相比,低成本、尺寸和功率的限制對NPU的能力有很大的限制,因此,嵌入式NPU必須根據具體應用的需要做出妥協(xié)。
產品能夠在本地設備中部署NPU的優(yōu)勢和吸引力給SoC公司帶來了壓力,使其提供帶有NPU加速選項的設備。然而,這正是這些公司的困難所在。問題是,SoC的設計周期從概念到發(fā)布通常是2-3年,而NN的最新技術每幾個月就會發(fā)生變化。
芯片設計者面臨的風險是,他們可以非常容易地鎖定一個不能充分預見最新技術發(fā)展的處理架構。因此,當芯片發(fā)布時(要記住,芯片還需要為市場服務多年),NPU的設計在開發(fā)人員希望部署的加速NN方面可能幾乎毫無用處。在這里,我們在前幾節(jié)描述的關于內存帶寬和ISP限制的問題同樣適用;處理pipeline要么遇到效率瓶頸,要么根本無法執(zhí)行開發(fā)者所需的網絡。兩種結果都不好。
在今天的市場上,有兩種明顯的NN加速方法。(i)設計和構建自己的定制NPU的公司,或者(ii)那些重新標記和重新利用不同類型的處理加速器IP的公司,以更符合NN的處理需要。后者主要是通過重構工具鏈來實現的,使它們能夠吸收NN模型。例如,DSP、GPU或矢量處理器經常被包裝在“AI”的營銷方案中,并被定位為成熟的NPU。
不過我們必須提醒自己,加速器(一般來說)是SoC公司區(qū)分其產品的主要方式之一。因此,當然可以理解為什么半導體公司采用這些“包裝”策略。然而,對于終端客戶和算法開發(fā)人員來說,要想看穿營銷的迷霧,可能非常困難。這是一個充滿陷阱的領域,有很多誤導性的統(tǒng)計數字和沒提及的內容,直到被開發(fā)人員發(fā)現時已經太晚了,此時,不幸的客戶發(fā)現自己身處經典的“圍墻花園”,在這里,他們的財務支出、培訓和代碼承諾已經決定使用選定的SoC進行開發(fā),這意味著更換設備太昂貴且風險太大。
當像Seeing Machines這樣的開發(fā)者需要跟上最先進的技術并開發(fā)新的網絡時,需要NPU(或任何加速器)無法支持的運營商或網絡連接架構時,其結果是開發(fā)者無法將一流的算法實現到生產中,或者由于處理效率低下而必須在性能上做出妥協(xié),這需要在pipeline的其他地方加以考慮。
為了說明這一點,下圖顯示了一些SoC對我們開發(fā)的視線追蹤任務(觀察駕駛員或前座乘客的一只或兩只眼睛,并確定這個人最有可能盯著哪里)執(zhí)行相同的加速功能。值得注意的是,視線追蹤任務包含了一個具有非正統(tǒng)架構的NN。作為參考,圖中還包括在A53 CPU(代碼完全優(yōu)化)上執(zhí)行的相同任務,以及在FOVIO芯片上運行的Occula NPU。
各種SoC中視線追蹤的加速實現
執(zhí)行延遲顯示了加速器硬件的不同設計是如何對處理效率結果產生巨大影響的。請注意,在這個表格中,我們顯示了以毫秒為單位的延遲,作為最關鍵的衡量標準,而不是TOPS。我們有意顯示了不同的NN加速器的TOPS數字的變化,以強調假設可以單獨使用這個數字進行任何有意義的和實際的資源規(guī)劃的危險。前面也提高過“吞吐量(或TOPS)可以買到,但延遲必須去爭取”。
例如,60Hz的處理速率要求在16.6ms內完成所有的計算任務;同樣,30Hz要求在33.2ms內完成。為了把視線追蹤任務放到一個更廣泛的角度,下圖顯示了在60Hz和30Hz處理期限以虛線疊加的情況下,我們的pipeline中視線追蹤的總體時間分配情況。
視線追蹤與未分配的計算帶寬的例子
在這個圖中,每個黃條表示在視線追蹤之后可用于調度pipeline中所有其他任務的剩余時隙。這說明盡可能快地(和有效地)完成任務的目標才是永遠重要的。這都是為了確保黃條越大越好,以最大限度地保留足夠的資源來執(zhí)行DMS功能堆棧的其余部分,在設備選擇時,可能還包含尚未開發(fā)的客戶特定功能。
比較表明,有一些加速器和芯片架構與我們的pipeline的這一特定部分非常不匹配,其中兩個明顯不能使用,第三個不比CPU好。還要注意的是,A53+NEON內核在運行這個特定的處理任務時是相當有效的,這主要是因為視線追蹤工作負載在Seeing Machines為ARM處理器進行了徹底的優(yōu)化(這在很大程度上得益于ARM指令集中的NEON SIMD擴展)。
在任何單機DMS嵌入式系統(tǒng)設計中,分配給整個DMS引擎的處理預算可能只有一個A53 CPU核,要求完整的算法堆棧總是在33ms以下執(zhí)行(考慮的不是平均而是最壞情況下的執(zhí)行路徑)。因此,為這項任務分配9.5ms的時間可能不會很好地利用可用帶寬(9.5ms/33.3ms=29%的CPU利用率)。因此,對加速器的需求很明顯,盡可能地從CPU上卸載處理任務。
上圖中的數據,以及前面介紹的關于RGB-IR處理的內存帶寬的數據,顯示了不同的SoC對于特定任務的相對性能,目的是強調芯片營銷并不反映現實。事實是,不同的芯片設計以非常不同的方式處理NN處理需求,有很大的潛在結果范圍。在某些情況下,芯片設計者或算法開發(fā)者可能會很幸運,創(chuàng)造出一個良好的匹配,但在嵌入式世界中,這樣的偶然結果是非常罕見的。
總之,嵌入式性能在很大程度上是關于軟件和硬件之間的匹配,或匹配程度。對于嵌入式NPU來說,NPU的設計如何與特定的NN技術相匹配才是至關重要的。
協(xié)同設計的方法在這一點上,我們很自然地會問,一個NN是否可以被重新開發(fā)以更好地匹配特定的加速器設計?在某種程度上,答案是肯定的,NN可以被機器學習專家重新設計以更好地適應特定的加速器設計。然而,這條道路絕非易事,也不便宜,而且結果也很難提前預測。
一個更好的方法是軟硬件協(xié)同設計。在這個過程中,NPU和NN同步開發(fā),兩個設計團隊緊密合作,構建一個由硬件和軟件組成的單一優(yōu)化“系統(tǒng)”。請注意,這是與前面討論的通用NPU方法相相反的。
這種方法的一個問題是,NPU的設計需要頻繁迭代,以跟上NN的發(fā)展。Seeing Machines為它的FOVIO芯片選擇了FPGA技術,以便能夠快速探索DMS解決方案的成本與性能空間,我們知道所涉及的市場時間框架,也知道我們需要深入優(yōu)化嵌入,以便使單機DMS解決方案具有競爭力。
FPGA技術允許采用“算法優(yōu)先”的設計方法來應對嵌入的挑戰(zhàn),并在某種程度上使我們的AI開發(fā)人員能夠將最強大的NN技術整合進來,并使這些網絡仍能非常有效地運行。
特定應用的NPU
“特定應用(application specific)”指的是旨在為有限和特定目的服務的芯片設計,因此能夠避免因試圖支持其他未知應用而導致的設計臃腫。采取協(xié)同設計的方法自然會導致解決方案只做他們需要做的事情,因此傾向于與他們的目標應用領域匹配得很好。
相比之下,“通用”的NPU將被設計為服務于廣泛的(通常是不同的)網絡架構和運營商。當芯片制造商決定他們的通用NPU的需求時,他們最終采用的特征和功能是由研究領域的技術水平和他們的終端客戶在該時間點上使用的流行網絡所引導的。當涉及到NN時,沒有任何“標準”本身可以使他們的需求捕獲成為一個簡單的過程,但在研究和創(chuàng)新方面肯定有一些長期運行的線索,它們針對某些應用領域,如資源有限的嵌入式系統(tǒng)。最近的兩個例子是谷歌的MobileNetV3 和Meta(前Facebook)的RegNet。
當定義一個通用的NPU架構時,面臨的挑戰(zhàn)是建立一個小而高效的芯片設計,能夠預測NN的未來,盡管在工業(yè)界和學術界的研究和開發(fā)領域仍然是一個快速發(fā)展的領域,具有高度的不確定性。鑒于NN創(chuàng)新周期處于早期階段,芯片供應商被迫廣撒網,以確保在2-3年后,當他們出樣時,應用領域沒有發(fā)生地震式的變化。這當然會導致相當大的容量和能力,而這些容量和能力必然是次優(yōu)的和低效的。
另一方面,特定應用的NPU可以以一種非常狹窄和有針對性的方式來定義。圍繞包括什么和排除什么的關鍵決定是由算法設計驅動的。這通常意味著對數學運算符集進行刪減,使之盡可能地與專有算法相匹配。我們仍然需要一些空間和靈活性,以適應未來的變化,但在采取共同設計方法時,這是一個完全可行的權衡,這也是我們在Seeing Machines多年來一直在做的。一個簡單的例子是,特定應用的NPU的運行參數可以在不增加芯片面積的情況下實現運行時可編程。