模型大小不斷增長給現有架構帶來了挑戰
深度學習對計算能力的需求正以驚人的速度增長,其近年來的發展速度已從每年翻一番縮短到每三個月翻一番。深度神經網絡(DNN)模型容量的不斷提升,表明從自然語言處理到圖像處理的各個領域都得到了改進——深度神經網絡是諸如自動駕駛和機器人等實時應用的關鍵技術。例如,Facebook的研究表明,準確率與模型大小的比率呈線性增長,通過在更大的數據集進行訓練,準確率甚至可以得到進一步提高。
目前在許多前沿領域,模型大小的增長速度遠快于摩爾定律,用于一些應用的萬億參數模型正在考慮之中。雖然很少有生產系統會達到同樣的極端情況,但在這些示例中,參數數量對性能的影響將在實際應用中產生連鎖反應。模型大小的增長給實施者帶來了挑戰。如果不能完全依靠芯片擴展路線圖,就需要其他解決方案來滿足對模型容量增加部分的需求,而且成本要與部署規模相適應。這種增長要求采用定制化的架構,以最大限度地發揮每個可用晶體管的性能。
圖1:模型大小的增長速度(來源:Linley Group)
Parameters (log scale):參數(對數刻度)
Image-processing models:圖像處理模型
Language-processing models:語言處理模型
隨著參數數量快速增長,深度學習架構也在快速演進。當深度神經網絡繼續廣泛使用傳統卷積、全連接層和池化層的組合時,市場上也出現了其它結構,諸如自然語言處理(NLP)中的自注意力網絡。它們仍然需要高速矩陣和面向張量的算法,但是存儲訪問模式的變化可能會給圖形處理器(GPU)和當前現有的加速器帶來麻煩。
結構上的變化意味著諸如每秒萬億次操作(TOps)等常用指標的相關性在降低。通常情況下,處理引擎無法達到其峰值TOps分數,因為如果不改變模型的處理方式,存儲和數據傳輸基礎設施就無法提供足夠的吞吐量。例如,批處理輸入樣本是一種常見的方法,因為它通常可以提高許多架構上可用的并行性。但是,批處理增加了響應的延遲,這在實時推理應用中通常是不可接受的。
數值靈活性是實現高吞吐量的一種途徑
提高推理性能的一種途徑是使計算的數值分辨率去適應各個獨立層的需求,這也代表了與架構的快速演進相適應。一般來說,與訓練所需的精度相比,許多深度學習模型在推理過程中可以接受明顯的精度損失和增加的量化誤差,而訓練通常使用標準或雙精度浮點算法進行。這些格式能夠在非常寬的動態范圍內支持高精度數值。這一特性在訓練中很重要,因為訓練中常見的反向傳播算法需要在每次傳遞時對許多權重進行細微更改,以確保收斂。
通常來說,浮點運算需要大量的硬件支持才能實現高分辨率數據類型的低延遲處理,它們最初被開發用來支持高性能計算機上的科學應用,完全支持它所需的開銷并不是一個主要問題。
許多推理部署都將模型轉換為使用定點運算操作,這大大降低了精度。在這些情況下,對準確性的影響通常是最小的。事實上,有些層可以轉換為使用極其有限的數值范圍,甚至二進制或三進制數值也都是可行的選擇。
然而,整數運算并不總是一種有效的解決方案。有些濾波器和數據層就需要高動態范圍。為了滿足這一要求,整數硬件可能需要以24位或32位字長來處理數據,這將比8位或16位的整數數據類型消耗更多的資源,這些數據類型很容易在典型的單指令多數據(SIMD)加速器中得到支持。
一種折衷方案是使用窄浮點格式,例如適合16位字長的格式。這種選擇可以實現更大的并行性,但它并沒有克服大多數浮點數據類型固有的性能障礙。問題在于,在每次計算后,浮點格式的兩部分都需要進行調整,因為尾數的最高有效位沒有顯式存儲。因此,指數的大小需要通過一系列的邏輯移位操作來調整,以確保隱含的前導“1”始終存在。這種規范化操作的好處是任何單個數值都只有一種表示形式,這對于用戶應用程序中的軟件兼容性很重要。然而,對于許多信號處理和人工智能推理常規運算來說,這是不必要的。
這些操作的大部分硬件開銷都可以通過在每次計算后無需標準化尾數和調整指數來避免。這是塊浮點算法所采用的方法,這種數據格式已被用于標準定點數字信號處理(DSP),以提高其在移動設備的音頻處理算法、數字用戶線路(DSL)調制解調器和雷達系統上的性能。
圖2:塊浮點計算示例
manTIssa:尾數
block exponent:塊指數
使用塊浮點算法,無需將尾數左對齊。用于一系列計算的數據元素可以共享相同的指數,這一變化簡化了執行通道的設計。對占據相似動態范圍的數值進行四舍五入造成的精度損失可被降到最小。在設計時就要為每個計算塊選擇合適的范圍。在計算塊完成后,退出函數就可以對數值進行四舍五入和標準化處理,以便在需要時將它們用作常規的浮點值。
支持塊浮點格式是機器學習處理器(MLP)的功能之一。Achronix的Speedster®7t FPGA器件和Speedcore™ eFPGA架構提供了這種高度靈活的算術邏輯單元。機器學習處理器針對人工智能應用所需的點積和類似矩陣運算進行了優化。相比傳統浮點,這些機器學習處理器對塊浮點的支持提供了實質性的改進。16位塊浮點運算的吞吐量是傳統的半精度浮點運算的8倍,使其與8位整數運算的速度一樣快,與僅以整數形式的運算相比,有功功耗僅增加了15%。
另一種可能很重要的數據類型是TensorFloat 32(TF32)格式,與標準精度格式相比,該格式的精度有所降低,但保持了較高的動態范圍。TF32也缺乏塊指數處理的優化吞吐量,但對于一些應用是有用的,在這些應用中,使用TensorFlow和類似環境所創建的模型的易于移植性是很重要的。Speedster7t FPGA中機器學習處理器所具有的高度靈活性使得使用24位浮點模式來處理TF32算法成為可能。此外,機器學習處理器的高度可配置性意味著可以支持一個全新的、塊浮點版本的TF32,其中四個樣本共享同一個指數。機器學習處理器支持的塊浮點TF32,其密度是傳統TF32的兩倍。
圖3:機器學習處理器(MLP)的結構
Wireless:無線
AI/ML:人工智能/機器學習
Input Values:輸入值
Input Layer:輸入層
Hidden Layer 1:隱藏層1
Hidden Layer 2:隱藏層2
Output Layer:輸出層
處理靈活性優化了算法支持
雖然機器學習處理器能夠支持多種數據類型,這對于推理應用而言是至關重要的,但只有成為FPGA架構的一部分,它的強大功能才能釋放出來。可輕松定義不同互連結構的能力使FPGA從大多數架構中脫穎而出。在FPGA中同時定義互連和算術邏輯的能力簡化了構建一種平衡架構的過程。設計人員不僅能夠為自定義數據類型構建直接支持,還可以去定義最合適的互連結構,來將數據傳入和傳出處理引擎。可重編程的特性進一步提供了應對人工智能快速演進的能力。通過修改FPGA的邏輯可以輕松支持自定義層中數據流的變化。
FPGA的一個主要優勢是可以輕松地在優化的嵌入式計算引擎和由查找表單元實現的可編程邏輯之間切換功能。一些功能可以很好地映射到嵌入式計算引擎上,例如Speedster7t MLP。又如,較高精度的算法最好分配給機器學習處理器(MLP),因為增加的位寬會導致功能單元的大小呈指數增長,這些功能單元是用來實現諸如高速乘法之類的功能。
較低精度的整數運算通常可以有效地分配給FPGA架構中常見的查找表(LUT)。設計人員可以選擇使用簡單的位串行乘法器電路來實現高延遲、高并行性的邏輯陣列。或者,他們可以通過構建進位保存和超前進位的加法器等結構來為每個功能分配更多的邏輯,這些結構通常用來實現低延遲的乘法器。通過Speedster7t FPGA器件中獨特的LUT配置增強了對高速算法的支持,其中LUT提供了一種實現Booth編碼的高效機制,這是一種節省面積的乘法方法。
結果是,對于一個給定的位寬,實現整數乘法器所需的LUT數量可以減半。隨著機器學習中的隱私和安全性等問題變得越來越重要,應對措施可能是在模型中部署同態加密形式。這些協議通常涉及非常適合于LUT實現的模式和位域操作,有助于鞏固FPGA作為人工智能未來驗證技術的地位。
數據傳輸是吞吐量的關鍵
為了在機器學習環境中充分利用數值自定義,周圍的架構也同樣重要。在越來越不規范的圖形表示中,能隨時在需要的地方和時間傳輸數據是可編程硬件的一個關鍵優勢。但是,并非所有的FPGA架構都是一樣的。
傳統FPGA架構的一個問題是,它們是從早期應用演變而來的;但在早期應用中,其主要功能是實現接口和控制電路邏輯。隨著時間的推移,由于這些器件為蜂窩移動通信基站制造商提供了一種從愈發昂貴的ASIC中轉移出來的方法,FPGA架構結合了DSP模塊來處理濾波和信道估計功能。原則上,這些DSP模塊都可以處理人工智能功能。但是,這些模塊最初設計主要是用于處理一維有限沖激響應(1D FIR)濾波器,這些濾波器使用一個相對簡單的通道通過處理單元傳輸數據,一系列固定系數在該通道中被應用于連續的樣本流。
傳統的處理器架構對卷積層的支持相對簡單,而對其他的則更為復雜。例如,全連接層需要將一層中每個神經元的輸出應用到下一層的所有神經元上。其結果是,算術邏輯單元之間的數據流比傳統DSP應用中的要復雜得多,并且在吞吐量較高的情況下,會給互連帶來更大的壓力。
盡管諸如DSP內核之類的處理引擎可以在每個周期中生成一個結果,但FPGA內部的布線限制可能導致無法足夠快速地將數據傳遞給它。通常,對于專為許多傳統FPGA設計的、通信系統中常見的1D FIR濾波器來說,擁塞不是問題。每個濾波階段所產生的結果都可以輕松地傳遞到下一個階段。但是,張量操作所需的更高的互連以及機器學習應用較低的數據局部性,使得互連對于任何實現而言都更加重要。
圖4:濾波器和人工智能數據流
Memory Cascade Out:存儲級聯輸出
Operand Cascade in:操作數級聯
Register File:寄存器文件
Fracturable:可分割
Adder/Accumulator:加法器/累加器
Memory Cascade in:存儲級聯
機器學習中的數據局部性問題需要注意多層級的互連設計。由于在最有效的模型中參數數量龐大,片外數據存儲通常是必需的。關鍵要求是可以在需要時以低延遲傳輸數據的機制,并使用靠近處理引擎的高效便箋式存儲器,以最有效地利用預取以及其他使用可預測訪問模式的策略,來確保數據在合適的時間可用。
在Speedster7t架構中,有以下三項用于數據傳輸的創新:
·優化的存儲層次結構
·高效的本地布線技術
·一個用于片內和片外數據傳輸的高速二維片上網絡(2D NoC)
傳統的FPGA通常具有分布在整個邏輯架構上的片上RAM塊,這些RAM塊被放置在距離處理引擎有一定距離的地方。對于典型的FPGA設計來說,這種選擇是一種有效的架構,但在人工智能環境中,它帶來了額外的和不必要的布線開銷。在Speedster7t架構中,每個機器學習處理器(MLP)都與一個72kb的雙端口塊RAM(BRAM72k)和一個較小的2kb的雙端口邏輯RAM(LRAM2k)相關聯,其中LRAM2k可以作為一個緊密耦合的寄存器文件。
可以通過FPGA布線資源分別訪問機器學習處理器(MLP)及其相關聯的存儲器。但是,如果一個存儲器正在驅動關聯的MLP,則它可以使用直接連接,從而卸載FPGA布線資源并提供高帶寬連接。
在人工智能應用中,BRAM可以作為一個存儲器,用于存儲那些預計不會在每個周期中發生變化的值,諸如神經元權重和激活值。LRAM更適合存儲只有短期數據局部性的臨時值,諸如輸入樣本的短通道以及用于張量收縮和池化活動的累積值。
該架構考慮到需要能夠將大型復雜的層劃分為可并行操作的段,并為每個段提供臨時數據值。BRAM和LRAM都具有級聯連接功能,可輕松支持機器學習加速器中常用的脈動陣列的構建。
圖5:具有存儲和級聯連接功能的MLP
MLP可以從邏輯陣列、共享數據的級聯路徑以及關聯的BRAM72k和LRAM2k逐周期驅動。這種安排能夠構建復雜的調度機制和數據處理通道,使MLP持續得到數據支持,同時支持神經元之間盡可能廣泛的連接模式。為MLP持續提供數據是提高有效TOps算力的關鍵。
MLP的輸出具有同樣的靈活性,能夠創建脈動陣列和更復雜的布線拓撲,從而為深度學習模型中可能需要的每種類型的層提供優化的架構。
MulTIplier / mulTIplicand fracTIons after converting inputs to have the same exponent:將輸入轉換為具有相同指數后的乘數/被乘數分數
Multiplier block exponent:乘數塊指數
Multiplicand block exponent:被乘數塊指數
Integer Multiply / Add Tree:整數乘法/加法樹:
Convert to Floating Point:轉換為浮點
Floating Point Accumulation:浮點累加
Round to desired precision:四舍五入到所需精度
Speedster7t架構中的2D NoC提供了從邏輯陣列的可編程邏輯到位于I/O環中的高速接口子系統的高帶寬連接,用于連接到片外資源。它們包括用于高速存儲訪問的GDDR6和諸如PCIe Gen5和400G以太網等片內互連協議。這種結構支持構建高度并行化的架構,以及基于中央FPGA的高度數據優化的加速器。
通過將高密度數據包路由到分布在整個邏輯陣列上的數百個接入點,2D NoC使得大幅增加FPGA上的可用帶寬成為可能。傳統的FPGA必須使用數千個單獨編程的布線路徑來實現相同的吞吐量,而這樣做會大量吃掉本地的互連資源。通過網絡接入點將千兆數據傳輸到本地區域,2D NoC緩解了布線問題,同時支持輕松而快速地將數據傳入和傳出MLP和基于LUT的定制化處理器。
相關的資源節省是相當可觀的——一個采用傳統FPGA軟邏輯實現的2D NoC具有64個NoC接入點(NAP),每個接入點提供一個運行頻率為400MHz的128位接口,將消耗390kLUT。相比之下,Speedster 7t1500器件中的硬2D NoC具有80個NAP,不消耗任何FPGA軟邏輯,并且提供了更高的帶寬。
使用2D NoC還有其他的一些優勢。由于相鄰區域之間互連擁塞程度較低,因此邏輯設計更易于布局。因為無需從相鄰區域分配資源來實現高帶寬路徑的控制邏輯,因此設計也更加有規律。另一個好處是極大地簡化了局部性重新配置——NAP支持單個區域成為有效的獨立單元,這些單元可以根據應用的需要進行交換導入和導出。這種可重配置的方法反過來又支持需要在特定時間使用的不同模型,或者支持片上微調或定期對模型進行再訓練這樣的架構。
結論
隨著模型增大和結構上變得更加復雜,FPGA正成為一種越來越具吸引力的基礎器件來構建高效、低延遲AI推理解決方案,而這要歸功于其對多種數值數據類型和數據導向功能的支持。但是,僅僅將傳統的FPGA應用于機器學習中是遠遠不夠的。機器學習以數據為中心的特性需要一種平衡的架構,以確保性能不受人為限制。考慮到機器學習的特點,以及不僅是現在,而且在其未來的開發需求,Achronix Speedster7t FPGA為AI推理提供了理想的基礎器件。