1
本文作者: 雷鋒專(zhuān)欄 | 2017-06-27 17:53 |
雷鋒網(wǎng)按:本文來(lái)源 StarryHeavensAbove,作者 : 唐杉,雷鋒網(wǎng)授權(quán)轉(zhuǎn)載。
人工智能大熱之前,Cloud或Data Center已經(jīng)開(kāi)始使用FPGA做各種加速了。而隨著Deep Learning的爆發(fā),這種需求越來(lái)越強(qiáng)勁。本文主要討論Cloud巨頭Amazon和Microsoft的FPGA策略。
在Microsoft Build 2017大會(huì)上,微軟Azure云計(jì)算平臺(tái)CTO Mark Russinovich做了一個(gè)名為 “Inside Microsoft's FPGA-Based Configurable Cloud”的演講,介紹了Azure平臺(tái)中使用FPGA的情況(大家可以點(diǎn)擊文末的閱讀原文收看視頻);另外,在A(yíng)mazon的“Amazon EC2 F1 Instances”網(wǎng)站,有一個(gè)Webinar視頻,介紹AWS的FPGA服務(wù)。本文將結(jié)合這兩個(gè)講座展開(kāi)討論,以下分別簡(jiǎn)稱(chēng)MS和AWS。
智能云對(duì)數(shù)據(jù)處理的需求
從需求層面來(lái)看,云端智能對(duì)數(shù)據(jù)處理有了更高的要求,體現(xiàn)在巨大的規(guī)模,低時(shí)延和高吞吐率幾個(gè)方面。而從這幾個(gè)角度來(lái)說(shuō),F(xiàn)PGA都有自己獨(dú)特的優(yōu)勢(shì)。
AWS在云端部署FPGA所針對(duì)的應(yīng)用主要包括:Real Time Video Processing,F(xiàn)inancial Analysis, Genomic Research, Big Data Search and Analytics, and Seurity。這里雖然沒(méi)有專(zhuān)門(mén)提到AI和Deep Learning,但這些應(yīng)用實(shí)際上也都和AI技術(shù)有關(guān)。而他們預(yù)期實(shí)現(xiàn)的目標(biāo)如下:
FPGA全稱(chēng)是“可編輯門(mén)陣列”(Field Programmable Gate Array),其基本原理是在芯片內(nèi)集成大量的數(shù)字電路基本門(mén)電路,存儲(chǔ)器以及互連線(xiàn)資源,而用戶(hù)可以通過(guò)對(duì)FPGA進(jìn)行“編程”(燒寫(xiě)配置文件)來(lái)定義這些門(mén)電路的功能以及模塊之間的連線(xiàn)。這種“編程”不是一次性的,你可以把FPGA設(shè)計(jì)成一個(gè)編解碼器,只要更改配置文件,就可以變成一個(gè)CPU,這也是所謂的re-Configurable的概念。當(dāng)然,F(xiàn)PGA在給我們提供了隨意實(shí)現(xiàn)硬件電路的靈活性的同時(shí),也要求設(shè)計(jì)者具有硬件設(shè)計(jì)的知識(shí)和能力。這一點(diǎn)和CPU,GPU的軟件編程方法有很大的差別,或者說(shuō)是有更高的應(yīng)用門(mén)檻。
目前主要的FPGA芯片廠(chǎng)商是Xilinx和Intel(Altera),AWS主要使用Xilinx的FPGA,MS則使用Intel的FPGA。在具體看FPGA的內(nèi)部結(jié)構(gòu)之前,我們還是通過(guò)對(duì)比來(lái)看看它的特點(diǎn)。
其實(shí)最近這種對(duì)比很多,我之前的文章也提到過(guò)。MS把CPU,GPU,F(xiàn)PGA和ASIC放在Flexibility VS Efficiency的角度進(jìn)行對(duì)比,這個(gè)也是我們經(jīng)常使用的方法。再次強(qiáng)調(diào),靈活性(通用性)一定意味著效率的損失,反之亦然。
另外,在MS的圖中可以看出,他們認(rèn)為FPGA主要還是用在Evaluation(或者我們經(jīng)常說(shuō)的Inference)。而有趣的是,他們認(rèn)為ASIC方案在Training和Evaluation中都還是“under investigation”,好像把Google的TPU給忘了。
AWS給出了另外一個(gè)視角的比較,CPU為了實(shí)現(xiàn)最大的靈活和通用,芯片中的很大一部分芯片面積用來(lái)提供控制功能(也包括復(fù)雜的存儲(chǔ)架構(gòu),比如Cache);而在GPU當(dāng)中,用作運(yùn)算的芯片面積比例大大提高,能夠支持大規(guī)模的并行處理;而到了FPGA,已經(jīng)沒(méi)有預(yù)先定義的指令集概念,也沒(méi)有確定的數(shù)據(jù)位寬。這些你都可以根據(jù)應(yīng)用來(lái)自己設(shè)計(jì)。你可以設(shè)計(jì)一個(gè)只支持幾條指令的處理器;也可以只設(shè)計(jì)數(shù)據(jù)通道和簡(jiǎn)單的控制邏輯,根本不用指令。
下圖來(lái)自MS的講座,對(duì)比了CPU和FPGA進(jìn)行數(shù)據(jù)處理的特點(diǎn)。
CPU可以看作是一種時(shí)間計(jì)算模型,指令順序進(jìn)入,每條指令處理一定的數(shù)據(jù)。FPGA可以看作是空間計(jì)算模型,大量數(shù)據(jù)可以并行的進(jìn)行處理。Deep Learning的處理,比如CNN的卷積運(yùn)算,就是非常適合空間計(jì)算模型的例子。這一點(diǎn)我在之前的文章“深度神經(jīng)網(wǎng)絡(luò)的模型·硬件聯(lián)合優(yōu)化”中已有介紹。下面我們具體看看FPGA的內(nèi)部結(jié)構(gòu)。
FPGA中幾個(gè)比較重要的基本模塊包括(按照Xilinx的說(shuō)法):
CLB(Configurable Logic Block):FPGA最基本的組成單元,可以實(shí)現(xiàn)基本的組合邏輯和時(shí)序電路。其中,LUT(Lookup Tables)是實(shí)現(xiàn)組合邏輯的部分,可以實(shí)現(xiàn)n個(gè)輸入的任意組合邏輯運(yùn)算(不同型號(hào)的FPGA有所不同,下圖的例子中為6個(gè)輸入)。而在CLB的輸出位置,還有一個(gè)寄存器,提供時(shí)序電路的功能。
DSP Slice:是比CLB粒度更粗的運(yùn)算單元,直接實(shí)現(xiàn)乘法,累加等功能。它比較類(lèi)似與我們?cè)贒SP處理器中使用的MAC單元,如下圖所示:
此外,一般FPGA中還提供片上Memory模塊(Block RAM,UltraRAM),各種高速接口,IP和很多輔助電路。根據(jù)應(yīng)用需求不同,有的型號(hào)的FPGA本身也是一個(gè)SoC,還集成了處理器核(比如ARM),甚至視頻編解碼等功能。
下表中列出的Xilinx Virtex UltraScale+ FPGA系列的具體參數(shù)。后面要介紹的AWS F1 instance用的就是VU9P。
在這里,我們觀(guān)察CLB Flip-Flops,CLB LUT和DSP Slices的數(shù)量,以及memory的數(shù)量,基本就可以了解該FPGA的規(guī)模,也就是在這個(gè)FPGA上可以實(shí)現(xiàn)多大規(guī)模的數(shù)字電路。
首先,作為加速功能,F(xiàn)PGA需要配合Host CPU來(lái)工作。比如在下圖中,一個(gè)應(yīng)用中有一個(gè)濾波器功能,需要大量的運(yùn)算,比較合適放到FPGA來(lái)處理;而其它部分功能,主要和控制相關(guān),則放在CPU來(lái)運(yùn)行。
由于FPGA應(yīng)用往往都需要支持很大的數(shù)據(jù)吞吐量,這對(duì)于Memory帶寬和I/O互連帶寬要求很高。如果數(shù)據(jù)傳輸?shù)膸捠芟蓿瑒tFPGA提供的巨大的并行計(jì)算能力根本發(fā)揮不了作用。在云端部署FPGA的另一個(gè)重要挑戰(zhàn)是如何把FPGA的運(yùn)算能力融合到云端的大規(guī)模彈性計(jì)算架構(gòu)當(dāng)中。
下面我們就分別看看MS和AWS的FPGA部署情況。值得注意的是,目前MS的Azure中的FPGA主要還是內(nèi)部使用,并沒(méi)有作為一項(xiàng)公有的服務(wù);而AWS則已經(jīng)提供了EC2 F1 實(shí)例(instance)的FPGA服務(wù)了。
我們先看看MS的Catapult V2架構(gòu),如下圖:
在一塊Catapult V2的板卡上,有一顆Altera Stratix FPGA和本地的DRAM,這塊卡上有三個(gè)和外部連接的接口,一個(gè)PCIe,兩個(gè)QSFP。這種架構(gòu)中,F(xiàn)PGA和WCS Server Blade的連接非常靈活,同時(shí)也支持很大的吞吐率。FPGA可以支持對(duì)網(wǎng)絡(luò)應(yīng)用(從NIC到Switch的channel),存儲(chǔ)應(yīng)用(CPU到Switch的channel)以及運(yùn)算應(yīng)用(CPU和FPGA)的加速。而這種架構(gòu)也具有高度的伸縮性,如下圖所示。
連接在一起的FPGA可以構(gòu)成一個(gè)獨(dú)立的運(yùn)算層。多個(gè)FPGA可以組合在一起實(shí)現(xiàn)不同的加速功能,比如Deep neural network,Web search ranking,SQL,SDN offload等等。
MS還提出一個(gè)HW Microservices的概念:“A hardware-only self-contained service that can be distributed and accessed from across the datacenter compute fabric”。使用這個(gè)Microservices有如下優(yōu)勢(shì):
總的來(lái)說(shuō),就是有更多的靈活性,可以更有效的分享和利用FPGA資源。而針對(duì)DNN應(yīng)用,MS也提出了一個(gè)專(zhuān)門(mén)的架構(gòu)。首先,在FPGA上提供DNN Engine,包括了Neural FU(數(shù)據(jù)通道)和Instruction Decoder&control(控制面功能)。而多個(gè)FPGA可以部署為一個(gè)大規(guī)模的HW microservices,實(shí)現(xiàn)分布式處理。
而相應(yīng)的,MS正在研發(fā)一套“編譯”工具,可以把在常見(jiàn)的Deep Learning Framework中訓(xùn)練好的model自動(dòng)部署到一個(gè)或多個(gè)FPGA(也包括GPU,CPU)中。
不過(guò),這些看起來(lái)不錯(cuò)的設(shè)計(jì)和功能我們現(xiàn)在還用不了,只能等MS準(zhǔn)備好公開(kāi)發(fā)布的時(shí)候才能使用。所以,Mark Russinovich最后說(shuō),“We look forward to eventually making this available to you, a major step toward democratizing AI with the power of FPGA”。希望這個(gè)時(shí)間不會(huì)太遠(yuǎn)吧。
相對(duì)而言,AWS的FPGA云服務(wù)離我們更近。它的規(guī)格如下圖所示:
其中f1.16xlarge由8個(gè)FPGA組成,配合64個(gè)vCPUs,接近1T的Memory,規(guī)模相當(dāng)大。其中每個(gè)FPGA連接4個(gè)DDR。FPGA之間則有兩種互連方式,第一種是FPGA Link,這是一種雙向環(huán)狀連接,用于支持Streaming方式串聯(lián)多個(gè)FPGA的應(yīng)用;另一種是FPGA Direct,這是點(diǎn)到點(diǎn)的PCIe鏈路,可以從一個(gè)FPGA連接到任意一個(gè)其它FPGA。另外,為了簡(jiǎn)化FPGA I/O的設(shè)計(jì),AWS還提出FPGA Shell的概念。如下圖所示:
這里Shell的概念我看的不是很清楚,感覺(jué)就是把FPGA的I/O封裝起來(lái)了。FPGA的內(nèi)部邏輯通過(guò)AXI4接口和Shell連接,Shell提供對(duì)外的PCIe和一個(gè)DDR接口;而前面提到的FPGA Link(FPGA間互連)和其它三個(gè)DDR接口好像還是在Core Logic中的。如果我看的不對(duì),還請(qǐng)指正。
AWS F1的開(kāi)發(fā)流程和使用的工具如下圖所示:
這個(gè)流程和我們常見(jiàn)的FPGA開(kāi)發(fā)流程類(lèi)似。不過(guò)還是需要使用FPGA Developer AMI(AWS提供的工具image)和Hardware Developer Kit(HDK),最終需要生成Amazon FPGA Image(AFI)。FPGA設(shè)計(jì)和實(shí)現(xiàn)工具使用的就是Xilinx自家的工具Vivado。
目前,AWS似乎并沒(méi)提供專(zhuān)門(mén)針對(duì)Deep Learning Inferece的工具和硬件架構(gòu)(比如前面MS提到的DNN Engine和相應(yīng)的軟件工具)。因此,對(duì)于做相關(guān)工作的同學(xué)來(lái)說(shuō),還是必須自己設(shè)計(jì)在相應(yīng)的軟硬件系統(tǒng)。
最后,我們看看國(guó)內(nèi)的玩家。目前阿里云和騰訊云也都推出了FPGA服務(wù),不過(guò)都在申請(qǐng)?jiān)囉秒A段。其中,阿里云的F1實(shí)例已經(jīng)有比較清楚的Spec和工具鏈的介紹:
FPGA 計(jì)算型實(shí)例規(guī)格族(f1)
規(guī)格族特點(diǎn):
采用 INTEL ARRIA 10 GX 1150 計(jì)算卡
CPU 和 Memory 配比為 1:7.5
處理器:2.5 GHz 主頻的 Intel Xeon E5-2682 v4 (Broadwell)
高性能本地 SSD 盤(pán)存儲(chǔ)
實(shí)例網(wǎng)絡(luò)性能與計(jì)算規(guī)格對(duì)應(yīng)(規(guī)格越高網(wǎng)絡(luò)性能強(qiáng))
適用場(chǎng)景:
1.適用于深度學(xué)習(xí)推理
2.基因組學(xué)研究、金融分析
3.時(shí)視頻處理及安全等計(jì)算工作負(fù)載
其工具鏈?zhǔn)褂肁ltera FPGA自家的工具,方法和AWS類(lèi)似。而騰訊云公開(kāi)的信息比較少,這里就不再討論了。
總結(jié):
本文簡(jiǎn)單分析了一下Amazon和Microsoft在Cloud中使用FPGA加速的實(shí)現(xiàn)方法。相比Google的TPU(ASIC)針對(duì)Deep Learning的設(shè)計(jì),F(xiàn)PGA雖然在效率上有差距,但在靈活性方面有自己的優(yōu)勢(shì)。不管是在A(yíng)WS和Azure中,F(xiàn)PGA可以更廣泛用于不同的加速任務(wù)當(dāng)中。如果能夠配合更好的開(kāi)發(fā)環(huán)境,形成完整的生態(tài),相信未來(lái)它在云端會(huì)有更大的發(fā)展空間。
雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。