
作者 | Tony King-Smith
譯者 | 彎月,編輯 | 郭芮
來源 | CSDN(ID:CSDNnews)
導語:在過去的10-20年間,硬體技術取得了驚人的進步,但在高性能資料中心和高度受限的移動環境中卻仍然不能“奢求”廉價的性能。很多人認為,硬體的下一個進步是将神經網絡加速器添加到CPU + GPU叢集中。然而,這可能會扼殺SoC的性能......
自從CPU問世以來,AI是計算方式的一次根本性轉變,越來越多的人開始接受這個觀點。由于大多數算法都是先寫成CPU上執行的順序代碼,然後再利用GPU加速來處理神經網絡工作負載,是以很多人認為,硬體的下一個進步是将神經網絡加速器添加到CPU + GPU叢集中。
然而,這可能會扼殺SoC的性能,可能無法提供預期的性能或效率。但在本文中,我将介紹一些其他的解決方法。
SoC的興起
智能手機的崛起在技術領域——尤其是計算硬體取得了巨大進步。片上系統(Systems on Chip,即SoC)隻需幾瓦的功耗就能提供桌面級系統的性能,然而,由于低功耗和熱力學上限方面對高性能的嚴格要求,我們不得不思考如何設計高性能Soc,利用僅有幾瓦特的功率提供媲美桌面級晶片的高性能。
随着移動SoC的發展,片上功能的複雜性也不斷發展。最初在2G手機早期,我們隻有16位的MCU,而到今時今日移動Soc逐漸發展成為了有史以來最複雜的計算平台之一。它包含了一個晶片上可能加載的所有功能:軟體執行(CPU +緩存)、圖形加速(GPU)、通信(Wi-Fi、3G / 4G數據機、藍牙)、視訊壓縮和解壓縮、相機管線(ISP),還要連接配接一系列低速外圍裝置——包括顯示控制器、觸摸屏、傳感器接口、電源管理、散熱管理等。如今的移動SOC處理器一般都是6個甚至更多的CPU組成的64位CPU叢集,再加上數百或數千個ALU核心組成的GPU,提供的計算能力甚至超過了3-4年前的台式計算機。
鑒于我們現在已經掌握了這種先進的SoC設計技術,當然應該一如既往地堅持我們正在開展的工作,并加入神經網絡加速器,不是嗎?對于操作數在每秒100G左右的任務來說,這個主意不錯。然而,對于要求操作數在每秒50-100T甚至更多處理能力的車用多傳感器系統來說,這是一項艱巨的任務。提高時脈速度和性能說起來容易做起來難,因為我們已經在拼命壓榨性能了。神經網絡加速器需要數十GB/s或更多帶寬,而這些帶寬隻能占用CPU和GPU的中央存儲器資源,是以這項任務會更為艱難。
片上帶寬非常複雜
如果每個處理器無法在執行每項任務時獲得所需的資料,那麼即便SoC的性能再高也沒有任何意義。這就是為什麼如今的移動SoC上都加載了先進的片上存儲器緩存以及複雜的高帶寬片上網絡(Networks-On-Chip,即NOC),目的都是為了将各種處理器和加速器連接配接到存儲器、外圍裝置等。
然而,如今的SoC中許多功能塊都連接配接到了NOC上(通常是NOC網絡)。是以,每次資料移動,都必須決定誰有優先權。最終這發展成為了一項非常複雜的任務,而且難度随着時脈速度的提高而加劇。由于優先級決策而丢失的每個時鐘周期都會導緻帶寬丢失,而功能塊等待通路NOC,實際上就相當于丢失了時鐘周期。
随着先進矽工藝的發展,我們主要的受益是能夠在晶片上放置更多的存儲器——通常是SRAM(靜态RAM)。存儲器越接近需要存儲的功能塊,它的通路速度就越快,讀取或寫入資料所需的功耗就越小。SRAM非常易于使用,因為你可以随機讀取或寫入任何資料單元,而且速度非常快。這就是許多應用都使用SRAM的原因,比如片上高速緩沖存儲器、FIFO、緩沖器,以及緊密耦合的本地存儲器。
但是,由于片上的存儲器越來越多,是以在這些SRAM塊之間移動資料的情況也越來與頻繁。于是,SoC上的NOC的巨大需求出現了。我們放在晶片上的存儲器越多,對整個晶片架構的需求就越苛刻。
所有高性能SoC設計人員所面臨的最大挑戰之一就是,如何在衆多工作負載和各種操作條件下,管理和優先處理異常複雜的資料流。
外部存儲器的需求也很高
SoC中的CPU、GPU或其他加速器和功能塊的設計人員都需要想法設法盡量将資料留在晶片上。實際上,在功能塊内儲存的資料越多,需要請求NOC傳輸的資料就越少。但是,片上的存儲器很昂貴——CPU核心的最大緩存很少超過1MB。
如果來自傳感器的資料以GB為機關,而應用程式所需的存儲器也是GB級别,那麼距離SoC與外部存儲器通信也就不遠了。
通常,外部存儲器都采用DRAM(動态RAM),其容量密度是SRAM的5-6倍。然而,為了享受大容量密度帶來的好處,你必須嘗試請求整塊資料,而不能僅僅請求單個位元組。這一點與片上SRAM完全不同,後者無論随機通路何處都能提供高性能。這種以結構化的方式通路外部DRAM的需求引發了全新的複雜度:如何組織資料請求,才能最大地壓榨存儲器的最高資料速率。如果不考慮這一點,那麼一不小心就會損失50%甚至更多的存儲器帶寬。
這個數字非常驚人。假設有一個單核64位CPU,其時鐘為2GHz。每個周期取一條指令、讀取或寫入一條資料,那麼就大緻需要16GB/s的資料速率。即使我們假設75%的資料通路都能命中片上的L1和L2緩存,那麼每個CPU需要的帶寬也會高達4GB/s。如果是8個CPU組成的叢集,假設叢集的使用率為50%,則為16GB/s。而這隻是CPU叢集需要的帶寬!
由于中央處理器是大多數SoC的核心,是以必須為CPU和GPU叢集提供充裕的存儲器帶寬。否則它們的速度很容易被拖慢,即便理論上的最高處理能力再高,大部分也會被白白浪費。是以,除非CPU的大部分時間都在通路緩存中的資料,否則外部存儲器的帶寬很快就會成為大問題。
GPU消耗的帶寬CPU遠超CPU,因為它們是并行處理器,每個時鐘周期都可以執行更多工作,因為它們是并行工作的可程式設計ALU陣列。
HBM2存儲棧是高性能解決方案,但受其過高的功耗限制,無法應用到車輛和其他嵌入式平台。
最新的存儲技術(比如HBM2)可以提供高達256GB/s的驚人帶寬。但這些高功率技術是專門為資料中心而設計的,不适合嵌入式車輛或移動應用。我們需要使用更現實的低功耗存儲器技術——一般是LPDDR(低功耗動态RAM),它能提供的帶寬隻是前者的零頭。
如今嵌入式或移動裝置中最常用的記憶體是LPDDR4,其每個引腳可提供4.2Gbps的速率。且不論其他方面(例如GPU、數據機或視訊)的使用,僅僅為CPU叢集提供資料傳輸就可以輕松消耗掉這個帶寬。
下一代LPDDR5即将推出,其每個引腳能夠提供8Gbps的速率。但這将以消耗更多功率和産生更多熱量為代價。是以,距離LPDDR5在車輛系統中廣泛使用,我們還需要耐心地再等幾年。
使用緩存還是使用外部資料?
我們需要考慮的另一個領域是,通用移動平台與嵌入式車輛應用程式之間的工作負載差異。通用移動平台有能力處理數百萬種應用程式,而嵌入式車輛應用程式的工作非常有限。這意味着我們可以針對車輛應用更好地優化工作負載的情況。
對于要求苛刻的移動應用程式(比如遊戲)來說,大部分資料都儲存在本地。我們可以利用各種緩存方案優化片上本地儲存的資料量,進而最大限度地減少外部存儲器上的流量。然而,對于自動駕駛車輛等實時系統來說,它們需要以MB/s級别或更高的速率不斷從傳感器接收新資料。由于這些資料來自應用程式外部,是以必須通過外部存儲器子系統,至少一次。實際上,資料可能會多次傳入和傳出外部存儲器,因為應用程式需要讀取并修改資料,然後再寫出來。如果利用資料執行低級功能(例如資料過濾或神經網絡功能),則這種現象尤為突出。
如果由主CPU預處理這些資料,那麼即使是簡單的循環也會迅速加重外部存儲器子系統帶寬的負擔。如果接下來讓GPU處理這些資料,則還需要讀取CPU寫出的資料,經過處理後輸出結果。這些帶寬消耗都需要考慮在内。
管理現代嵌入式SoC資料的任務已經成為SoC設計人員面臨的最大挑戰之一。是以,如果我們還想着添加另一個高性能、資料密集型加速器(比如神經網絡加速器),那麼就必須面對這種挑戰。
為什麼神經網絡處理的要求如此苛刻?
神經網絡處理是一種超大規模的并行處理任務。以前建立任何重大的神經網絡加速器都是不切實際的,因為矽技術無法完成內建所需的大量計算任務。直到最近,這個問題才有所緩解。
然而,該領域的許多人都已經認識到,神經網絡計算實際上是資料驅動的問題,而不是計算驅動的問題。所有神經網絡加速器的性能都取決于在網絡預測過程中,資料如何在數千個計算引擎之間移動。由于神經網絡加速器是資料密集型,是以如何通過最佳方式利用片上和片外的存儲器将是一個至關重要的架構問題。但有一件事是肯定的:在實時處理多個高清傳感器輸入時,系統的持續資料傳輸量将是巨大的。
此外,随着我們對算法的不斷深入了解,神經網絡也變得越來越寬、越來越深。AI從業者的擔憂在于,高清攝像頭的大量使用導緻神經網絡需要以30fps或更高的速度處理多達八個或更多的尺寸為3x1920x1024的攝像頭輸入。每個攝像頭的流量幾乎是200MB/s,那麼總共是将近1.6GB/s——這還僅僅是輸入資料!
自動駕駛車輛必須通過360°視圖全權掌握周圍的環境。為此必須使用多個高分辨率的傳感器,而每個傳感器都會給處理平台帶來進一步的壓力。
執行多次卷積的前幾層很可能需要多次寫入差不多大小的輸出,後面的操作才能處理規模較小的輸入資料。即便我們擁有10GB/s的帶寬,恐怕也不容樂觀。
這就是為什麼我們認為,為了滿足多個攝像頭(或LIDAR、Radar 或其他精密傳感器融合系統)所需的超大帶寬,必須慎重考慮整個系統架構的環境中的神經網絡計算平台。管理執行每個功能所需的系統帶寬,并保證每個功能處理塊盡可能高效地運作是關鍵。
這是一個資料的問題,而不是速度的問題
我們公司裡負責建立aiDrive軟體棧的研究工程師在針對他們開發的許多神經網絡工作負載展開了廣泛分析後,得出了這樣一個結論:計算能力并非完全取決于能夠同時執行多少個MAC。事實上,這完全取決于資料的移動:每個中間結果怎樣通過加速器從一個計算移動到下一個計算。這說明,權重和中間結果的存儲位置與相關的執行單元越近,處理效率就越高。是以,在執行期間減少中間緩存或中央共享存儲對于提高性能至關重要。
這就是我們建立aiWare的原因:在硬體引擎中實作基于實際工作負載的資料流技術,這比傳統的方法更有效。我們希望建立一個能夠持續提供高效神經網絡計算的引擎,同時管理加速器内部以及神經網絡加速器和硬體平台其他部分(尤其是基于CPU的SoC)之間的資料帶寬。
最近很多神經網絡加速器的實作人員都發現,他們的設計依賴于使用了多少本地存儲。對于aiWare來說,本地SRAM塊占用了大約全部存儲的80%-85%。存儲的使用以及資料的傳輸才是最重要的因素。
這是實時推理的問題,與訓練無關
在過去幾年中,人們設計了很多神經網絡加速器,幾乎每周都有新産品湧現!但是,這些加速器大多數針對的都是在資料中心應用程式上運作的訓練過程。一些小型引擎也可以用于移動應用程式,但它們僅适用于語音識别和圖像分類等低帶寬任務。很多設計人員從事的工作涉及車輛以及其他有功耗限制的高可靠性嵌入式應用程式的實時推理引擎,他們都面臨着不同的問題,雖然市場上有很多神經網絡加速器,但它們的性能最終都取決于如何解決設計人員的問題。
對于自動駕駛車輛等嵌入式應用程式中的連續性操作來說,關鍵在于連續幾個小時一幀又一幀地不斷傳輸資料。這類系統沒有時間定期清理緩沖區、收集垃圾或以其他方式暫停維護。而這些都是資料中心主機或者非實時的移動應用程式習以為常的東西。
對于車輛嵌入式推理系統來說,其所使用的存儲器政策必須經得起任何條件的考驗,而且必須能夠連續工作。
那麼,為什麼不能加快速度呢?
SoC的速度年年都在加快,而且我們還在不斷縮小流程節點。如果我們能夠加快現有晶片的速度,那麼問題不就解決了嗎?
如下限制表明這種方法并不可行:
1. 距離:盡管距離可能會随着每次流程節點的技術進步而縮短,但它們與更高層內建之間的通信所需的距離更長。發送信号所需的距離越長,所需的能量就越多。實體尺寸越小,每個信号的能量就越少,除非你放大它——而這會增加功耗。是以,即使矽工藝的實體尺寸繼續縮小,我們也無法簡單地通過添加更多邏輯來加快晶片速度。
2. 成本:每個更先進的矽節點都需要花費上一代技術的4倍才能制作晶片的掩模。雖然每個半導體的成本降低了,但由于制造技術的複雜性,最終的成本降低也沒有以前那般顯著。是以,先進的工藝節點花費在設計和最終裝置上的成本要高得多。
3. 噪聲:随着工藝節點變小,電壓下降,每個比特移動的電子更少。然而,這導緻每個信号更容易受到噪聲的影響。如果晶片需要在每個時鐘周期傳輸數十億條導線,那麼情況就會非常糟糕,此外車輛中的電噪聲會加劇這種情況。随着我們繼續縮小晶片,這些系統還能保持健壯嗎?
4.摩爾定律:著名的摩爾定律表明邏輯密度每18個月就會翻一番,多年以來這項定律一直得到了應驗。然而,如今就不适用了:每代晶片的邏輯密度隻能增加1.2-1.4倍。但是,存儲器依然遵循該規律。是以,對于未來的工藝節點,設計中存儲器越是占主導地位,其擴充性就越好。
5.存儲器:外部存儲器帶寬的擴充速度無法跟上片上存儲器的擴充速度。這是因為資料從晶片上傳入和傳出需要很高的速度——HBM2每個引腳高達2Gbps。這需要很大的功率,而且如果資料傳輸集中在一個小區域也會導緻很大的散熱問題。加倍外部存儲器帶寬可不是一件易事,特别是如果有苛刻的功率限制和熱力學上限(比如嵌入式車輛應用程式)時。
中央處理器就是中央
許多行業利益相關者認為,未來的自動駕駛汽車将依賴強大的中央處理單元。事實上,越來越多的汽車電子工程師正在考慮為未來的車輛打造“車輪上的資料中心”,就像智能手機是“掌上電腦”一樣。這樣做有一定的意義:基于中央處理的方法具有一定靈活性,意味着我們不需要在建構處理器硬體平台時照顧到方方面面。例如,我們可以利用現代資料中心的方法,添加和替換計算伺服器并虛拟化所有資源,進而實作可更新性。
車輪上的資料中心可能不是車輛生産制造商最終使用者的最佳解決方案。車輛硬體平台必須小巧、高效、高性能。
然而,難點在于資料中心并不是為實時系統設計的。有時,它會自動停止并重新配置;重新開機某些處理器,同時将計算負載轉移給其他處理器;如果發生瓶頸就會不斷改變工作負載。此外,為了實作這種靈活性,它還需要消耗大量功率,這就是為什麼現代資料中心面臨的最大問題就是電力問題。這聽起來像是理想的車輛解決方案嗎?
這種方法可以用于未來車輛中的許多非關鍵功能。然而,對于實時的、生命攸關的功能,例如L4 / L5車輛的基本控制系統,我們必須權衡所有情況下類似資料中心方法的靈活性與可靠性和穩健性,同時還需要考慮功耗、散熱以及電噪聲的限制。
這意味着我們必須在中央處理器周圍建立越來越智能的子系統,通過這些子系統以更分散的方式管理帶寬、處理和功率限制。例如,将一些神經網絡處理轉移到每個傳感器,就可以減少中央神經網絡加速器的資源消耗,友善管理,這樣就可以利用中央神經網絡加速器專門處理關鍵性的任務,例如軌迹規劃或高層對象跟蹤等。
行業利益相關者将投入大量資源,為集中式和分布式解決方案尋找最佳選擇。事實上,在未來幾年中,車輛生産制造商和一級供應商在實作自己的自動駕駛系統時選擇的硬體平台和解決方案可能會成為市場差異化的主要因素。
減輕中央處理器的負擔
在了解視覺優先系統時,我們意識到距離汽車行業在最佳硬體架構上達成一緻還需要等待很多年。然而,為了将基于AI的軟體解決方案所需的處理能力集中到一個小盒子中,神經網絡加速器必須具備一定的靈活性,并随着新解決方案的開發,适用于所有類型的硬體架構。這包括從中央處理資源到分布式邊緣處理方法。
一個關鍵因素是如何管理系統帶寬。每個攝像頭都會生成高帶寬的資料流。用于前端感覺和分類的神經網絡計算需要非常快且百分百可靠。我們的 aiWare存儲器架構旨在為系統設計人員提供一套方法,可以将預處理的攝像頭(或其他HD傳感器)資料直接傳輸到aiWare的外部存儲器。如此一來就可以減輕所有與傳感器資料的收集和預處理相關的帶寬壓力,因為這些處理都脫離了主處理器SoC。接下來,aiWare子系統會将隻需少量帶寬的結果傳送到中央處理器,以供後續功能(例如軌迹規劃和控制等)使用。
這種方法可以實作更好的可擴充性,因為想法設法擴充複雜的處理器和管理巨大帶寬與存儲流量的難度非常大,與之相比,設計基于低級硬體且融合到前端系統的可擴充專用傳感器的難度則小得多。
這也意味着中央處理器的靈活性可以發揮最大作用:靈活、複雜的啟發式、可處理形形色色的應用程式。例如,AI處理管道的後續階段大多數時候都依賴于傳統計算機視覺和其他算法的綜合,這些算法在通用平台上運作的效果更好。
是以,在中央處理器内提供适度的神經網絡加速,通過高性能的外部神經網絡處理來增強功能,就可以在盡可能低功耗的條件下實作性能可擴充的理想組合方案。此外,還可以利用更分散的方法,實作安全永遠有保障的備援方案。
總結
一想到未來世界我們将擁有自動駕駛汽車,就讓人覺得激動不已。然而,為了獲得世界各地人們的青睐,我們必須極力控制功耗,并在苛刻的操作環境成本預算中,提供前所未有的性能。一味地按照以往的工作方式并不能實作這些偉大的目标。
盡管在過去的10-20年間,硬體技術取得了驚人的進步,但在高性能資料中心和高度受限的移動環境中,我們不能幻想廉價的性能。尤其是汽車行業的條件尤為苛刻:極端的操作條件,高度受限的功耗和散熱資源,嚴格的成本限制,漫長的開發時間,乃至更長的産品壽命。
硬體創新不僅可以通過使用最先進的技術來內建更多功能并加快速度,還可以幫助我們解決這些難題。我們可以另辟蹊徑利用現有成熟技術下的硬體架構,發揮創新的最大優勢,推進汽車行業以及其他嵌入式硬體平台的發展。通過結合這兩種創新,我們将有望滿足未來那個激動人心的新市場需求。
原文:
https://medium.com/aimotive/offload-now-or-your-cpu-dies-ae1d9c5aec3c
本文為 CSDN 翻譯,轉載請注明來源出處。