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