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