微軟在數(shù)據(jù)中心里大規(guī)模部署和應用FPGA的最初實踐,來自于他的“Catapult項目”。這個項目的主要成就,是搭建了一個基于FPGA的數(shù)據(jù)中心硬件加速平臺,包括各種必要的軟硬件基礎設施。通過三個階段的發(fā)展,Catapult已經(jīng)成功的幫助微軟在其遍布全球的云數(shù)據(jù)中心里部署了成千上萬的FPGA加速資源。
從2015年末開始,微軟就在其購買的幾乎每臺新服務器上部署Catapult FPGA板卡。這些服務器被用于微軟的必應搜索、Azure云服務以及其他應用。這也使得微軟成為了世界上最大的FPGA客戶之一。
Catapult FPGA加速卡及服務器
更重要的是,Catapult項目通過深入的學術研究和工程實踐,為微軟積累了豐富的FPGA開發(fā)、部署、運維的相關經(jīng)驗和人才。在人工智能快速發(fā)展的今天,使用Catapult平臺進行AI應用的FPGA加速,就成了合理自然的下一步。這便是微軟“腦波項目(Project Brainwave)”的源起。
FPGA如何解決實時AI的兩大痛點
與現(xiàn)有的其他FPGA云平臺相比,Catapult平臺的最主要特點就是構建了一個遍布全球的FPGA資源池,并能對資源池中的FPGA硬件資源進行靈活的分配和使用。相比其他方案,這種對FPGA的池化有著巨大的優(yōu)勢。
首先,F(xiàn)PGA池化打破了CPU和FPGA的界限。在傳統(tǒng)的FPGA使用模型中,F(xiàn)PGA往往作為硬件加速單元,用于卸載和加速原本在CPU上實現(xiàn)的軟件功能,因此與CPU緊耦合,嚴重依賴于CPU的管理,同時與CPU涇渭分明。
在Catapult平臺里,F(xiàn)PGA一躍成為“一等公民”,不再完全受限于CPU的管理。如下圖右所示,在Catapult加速卡中,F(xiàn)PGA直接與數(shù)據(jù)中心網(wǎng)絡的TOR交換機相連,而不需要通過CPU和網(wǎng)卡的轉(zhuǎn)發(fā),這使得同一數(shù)據(jù)中心、甚至不同數(shù)據(jù)中心里的FPGA可以直接通過高速網(wǎng)絡互連和通信,從而構成FPGA資源池。管理軟件可以直接對FPGA資源進行劃分,而無需通過與資源池中每個FPGA互連的CPU完成,從而實現(xiàn)了FPGA與CPU的有效解耦。
與CPU平行的FPGA資源池
第二,F(xiàn)PGA池化打破了單一FPGA的資源界限。從邏輯層面上看,Catapult的數(shù)據(jù)中心池化FPGA架構相當于在傳統(tǒng)的基于CPU的計算層之上,增加了一層平行的FPGA計算資源,并可以獨立的實現(xiàn)多種服務與應用的計算加速,如上圖左所示。在微軟當前的數(shù)據(jù)中心里,池化FPGA的數(shù)量級以十萬記,而這些FPGA的通信延時只有大約十微秒左右。
對于人工智能應用,特別是基于深度學習的應用來說,很多應用場景對實時性有著嚴格的要求,例如搜索、語音識別等等。同時對于微軟來說,它有著很多富文本的AI應用場景,例如網(wǎng)絡搜索、語音到文本的轉(zhuǎn)換、翻譯與問答等。與傳統(tǒng)CNN相比,這些富文本應用和模型對內(nèi)存帶寬有著更加嚴苛的需求。
如果結合“低延時”和“高帶寬”這兩點需求,傳統(tǒng)的深度學習模型和硬件的通常解決方法是對神經(jīng)網(wǎng)絡進行剪枝和壓縮,從而減少模型的大小,直到滿足NPU芯片有限的硬件資源為止。然而,這種方法最主要的問題就是會對模型的精度和質(zhì)量造成不可避免的損失,而且這些損失往往是不可修復的。
與之相比,Catapult平臺里的FPGA資源可以看成是“無限”的,因此可以將一個大的DNN模型分解成若干小部分,每個小部分可以完整映射到單個FPGA上實現(xiàn),然后各部分再通過高速數(shù)據(jù)中心網(wǎng)絡互連。這樣不僅保證了低延時與高帶寬的性能要求,也保持了模型的完整性,不會造成精度和質(zhì)量損失。
腦波項目:系統(tǒng)架構
腦波項目的主要目標,是利用Catapult的大規(guī)模FPGA基礎設施,為沒有硬件設計經(jīng)驗的用戶提供深度神經(jīng)網(wǎng)絡的自動部署和硬件加速,同時滿足系統(tǒng)和模型的實時性和低成本的要求。
為了實現(xiàn)這個目標,腦波項目提出了一個完整的軟硬件解決方案,主要包含以下三點:
對已訓練的DNN模型根據(jù)資源和需求進行自動區(qū)域劃分的工具鏈;
對劃分好的子模型進行FPGA和CPU映射的系統(tǒng)架構;
在FPGA上實現(xiàn)并優(yōu)化的NPU軟核和指令集。
下圖展示了使用腦波項目進行DNN加速的完整流程。對于一個訓練好的DNN模型,工具會首先將其表示為計算流圖的形式,稱為這個模型的“中間表示”(Intermediate Representation - IR)。
腦波項目DNN加速的完整流程
其中,圖的節(jié)點表示張量運算,如矩陣乘法等,而連接節(jié)點的邊表示不同運算之間的數(shù)據(jù)流,如下圖所示。
IR表示完成后,工具會繼續(xù)將整張大圖分解成若干小圖,使得每個小圖都可以完整映射到單個FPGA上實現(xiàn)。對于模型中可能存在的不適合在FPGA上實現(xiàn)的運算和操作,則可以映射到與FPGA相連的CPU上實現(xiàn)。這樣就實現(xiàn)了基于Catapult架構的DNN異構加速系統(tǒng)。
在FPGA上進行具體的邏輯實現(xiàn)時,為了解決前文提到的“低延時”與“高帶寬”兩個關鍵性需求,腦波項目采用了兩種主要的技術措施。
首先,完全棄用了板級DDR內(nèi)存,全部數(shù)據(jù)存儲都通過片上高速RAM完成。相比其他方案,不管使用ASIC還是FPGA,這一點對于單一芯片的方案都是不可能實現(xiàn)的。
在腦波項目所使用的英特爾Stratix 10 FPGA上,有著11721個512x40b的SRAM模塊,相當于30MB的片上內(nèi)存容量,以及在600MHz運行頻率下35Tbps的等效帶寬。這30MB片上內(nèi)存對于DNN應用是完全不夠的,但正是基于Catapult的超大規(guī)模FPGA的低延時互聯(lián),才使得在單一FPGA上十分有限的片上RAM能夠組成看似“無限”的資源池,并極大的突破了困擾DNN加速應用已久的內(nèi)存帶寬限制。
第二,腦波項目采用了自定義的窄精度數(shù)據(jù)位寬。這個其實也是DNN加速領域的常見方法。項目提出了8~9位的浮點數(shù)表達方式,稱為ms-fp8和ms-fp9。與相同精度的定點數(shù)表達方式相比,這種表達需要的邏輯資源數(shù)量大致相同,但能夠表達更廣的動態(tài)范圍和更高的精度。
與傳統(tǒng)的32位浮點數(shù)相比,使用8~9位浮點表示的精度損失很小,如下圖所示。值得注意的是,通過對模型的重新訓練,就可以補償這種方法帶來的精度損失。
腦波項目的核心單元,是一款在FPGA上實現(xiàn)的軟核NPU,及其對應的NPU指令集。這個軟核NPU實質(zhì)上是在高性能與高靈活性之間的一種折中。從宏觀上看,DNN的硬件實現(xiàn)可以使用諸如CPU、GPU、FPGA或者ASIC等多種方式實現(xiàn)。在前文中講過,CPU有著最高的靈活性,但性能不盡如人意;ASIC方案與之相反。而FPGA能夠在性能和靈活性之間達到良好的平衡。
從微觀上看,F(xiàn)PGA方案本身對于DNN的實現(xiàn),既可以使用編寫底層RTL的方式,對特定的網(wǎng)絡結構進行針對性的優(yōu)化;也可以采用高層次綜合(HLS)的方法,通過高層語言對網(wǎng)絡結構進行快速描述。
但是,前者需要豐富的FPGA硬件設計與開發(fā)經(jīng)驗,并伴隨著很長的開發(fā)周期;而后者由于開發(fā)工具等限制,最終得到的硬件系統(tǒng)在性能上往往很難滿足設計要求。
因此,微軟采用了軟核NPU與特定指令集的方式。這種方法一方面兼顧了性能,使硬件工程師可以對NPU的架構和實現(xiàn)方式進行進一步優(yōu)化,另一方面兼顧了靈活性,使軟件工程師可以通過指令集對DNN算法進行快速描述。
腦波NPU的架構圖如下所示,NPU的核心是一個進行矩陣向量乘的算術單元MVU。它針對FPGA的底層硬件結構進行了深度優(yōu)化,并采用了上文提到的“片上內(nèi)存”和“低精度”的方法進一步提高系統(tǒng)性能。
NPU的最主要特點之一是采用了“超級SIMD”的指令集架構,這與GPU的SIMD指令集類似,但是NPU的一條指令可以生成超過一百萬個運算,等效于在英特爾Stratix 10 FPGA上實現(xiàn)每個時鐘周期13萬次運算。
腦波項目:性能提升
腦波NPU在不同F(xiàn)PGA上的峰值性能如下圖所示,當使用ms-fp8精度時,腦波NPU在Stratix 10 FPGA上可以得到90 TFLOPS的峰值性能,這一數(shù)據(jù)也可以和現(xiàn)有的高端NPU芯片方案相媲美。
腦波項目還對微軟的必應搜索中的Turing Prototype(TP1)和DeepScan兩個DNN模型進行了加速試驗。由于必應搜索的嚴格實時性要求,如果使用CPU實現(xiàn)這兩種DNN模型,勢必要對參數(shù)和運輸量進行大規(guī)模削減,從而嚴重影響結果精度。相比之下,腦波方案可以實現(xiàn)超過十倍的模型規(guī)模,同時得到超過十倍的延時縮減。
在Stratix 10 FPGA的測試版產(chǎn)品上,當運行在300MHz的頻率時可以得到的等效算力和峰值算力分別為39.5 TFLOPS和48 TFLOPS。預計在量產(chǎn)版的Stratix 10上,穩(wěn)定運行頻率將達到550MHz,從而再帶來83%的性能提升,以期達到將近90 TFLOPS。同時,Stratix 10 FPGA的滿載功耗約為125W,這意味著腦波項目可以達到720 GOPs/watt的峰值吞吐量。
結語
腦波項目充分利用了微軟遍布全球數(shù)據(jù)中心的FPGA基礎架構,使用FPGA解決了AI應用中“低延時”和“高帶寬”兩大痛點,并成功構建了基于軟核NPU和自定義指令集的實時AI系統(tǒng)。
腦波項目的成功實踐,再一次為業(yè)界使用FPGA作為AI加速器提供了嶄新的思路和借鑒。老石相信,在人工智能時代,F(xiàn)PGA必將在更多應用領域得到更加廣泛的使用。
評論