張新偉,李 康,郁龔健,劉家航,李佩琦,柴志雷,2
1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院 物聯(lián)網(wǎng)技術(shù)應(yīng)用教育部工程研究中心,江蘇 無(wú)錫 214122
2.數(shù)學(xué)工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室,江蘇 無(wú)錫 214125
深度學(xué)習(xí)已經(jīng)在語(yǔ)音識(shí)別、物體檢測(cè)、自然語(yǔ)言處理、自動(dòng)駕駛等各個(gè)領(lǐng)域中展現(xiàn)出了優(yōu)異的性能。但高準(zhǔn)確率的背后還存在計(jì)算代價(jià)大、通用智能水平弱等許多局限性[1]。而具有通用智能處理能力的人腦在執(zhí)行推理、分辨目標(biāo)、控制移動(dòng)時(shí),能量消耗不足25 W[2]。因此,各個(gè)國(guó)家紛紛建立腦研究平臺(tái)[3-5],希望通過(guò)分析生物大腦的工作機(jī)制發(fā)展神經(jīng)形態(tài)計(jì)算,克服現(xiàn)階段深度學(xué)習(xí)的不足[6]。
目前,神經(jīng)形態(tài)計(jì)算系統(tǒng)實(shí)現(xiàn)的方式有軟件模擬和硬件實(shí)現(xiàn)兩種。軟件模擬工具主要有NEURON[7]、NEST[8]、SpiNNaker[9]等。NEURON 和 NEST 軟件仿真工具由于支持的神經(jīng)元和突觸類(lèi)型多,因此具有很高的靈活性,而且還支持MPI,具有很好的可拓展性。但是在仿真速度和功耗方面表現(xiàn)不佳。硬件實(shí)現(xiàn)分為模擬、數(shù)字、模數(shù)混合三種方式[10]。鑒于模擬電路對(duì)環(huán)境特別敏感,目前大部分類(lèi)腦計(jì)算系統(tǒng)都使用數(shù)字方式,如Intel 的 Loihi[11]、IBM 的 TrueNorth[12]等專用芯片。專用芯片在性能、功耗方面具有很大的優(yōu)勢(shì),但是神經(jīng)元和突觸的模型較多,芯片一旦流片完成,將無(wú)法仿真其他神經(jīng)元模型或突觸模型。FPGA作為一種靈活性高、性能強(qiáng)和低功耗的可編程邏輯器件。與開(kāi)發(fā)周期長(zhǎng)、成本高、靈活度低的專用芯片和性能強(qiáng)但功耗高的GPU 相比,在開(kāi)發(fā)SNN 仿真器方面更具有優(yōu)勢(shì)。脈沖神經(jīng)網(wǎng)絡(luò)的計(jì)算密集點(diǎn)主要分布在神經(jīng)元和突觸,突觸主要分為靜態(tài)突觸(固定權(quán)重)和STDP[13]型突觸。一般情況下,對(duì)于突觸是靜態(tài)的,計(jì)算密集點(diǎn)在神經(jīng)元,而如果突觸為STDP 型,由于突觸數(shù)量相對(duì)于神經(jīng)元數(shù)量較多,而且STDP型突觸計(jì)算量大,突觸計(jì)算將成為提高脈沖神經(jīng)網(wǎng)絡(luò)仿真速度的瓶頸[14]。所以目前使用FPGA加速脈沖神經(jīng)網(wǎng)絡(luò)主要關(guān)注點(diǎn)在神經(jīng)元和STDP 型突觸[10]。雖然通過(guò)優(yōu)化公式減少邏輯資源,從而提高神經(jīng)元和突觸的計(jì)算并行度,極大地提高了仿真速度。但是與此同時(shí),由于節(jié)點(diǎn)規(guī)模不可調(diào),仿真規(guī)模將受到限制。因此考慮到以上問(wèn)題,曼徹斯特大學(xué)的SpiNNaker采用軟硬件協(xié)同的方式[9],設(shè)計(jì)了具有百萬(wàn)核心的類(lèi)腦仿真平臺(tái)。SpiNNaker的每個(gè)計(jì)算節(jié)點(diǎn)包含18個(gè)ARM核,節(jié)點(diǎn)間通過(guò)基于FPGA的高速路由進(jìn)行通信,具有很高的計(jì)算速度和規(guī)??缮炜s性。但是當(dāng)選擇運(yùn)行的SNN算法特性與硬件平臺(tái)不匹配時(shí),會(huì)導(dǎo)致其系統(tǒng)還不如通用計(jì)算機(jī)[15]。
NEST 作為比較流行的脈沖神經(jīng)網(wǎng)絡(luò)仿真器,具有支持神經(jīng)元和突觸種類(lèi)多,而且其更加關(guān)注于脈沖神經(jīng)網(wǎng)絡(luò)系統(tǒng)的規(guī)模、動(dòng)力學(xué)以及結(jié)構(gòu)而不是對(duì)單個(gè)神經(jīng)元的仿真。NEST 仿真工具完全開(kāi)源,使加速NEST 仿真速度成為可能。因此,針對(duì)NEST 仿真工具靈活性高、支持大規(guī)模仿真,但是仿真速度慢的特點(diǎn),將NEST 移植到ZYNQ集群。并且Xilinx的ZYNQ 7030是ARM+FPGA的SoC方式,可以很好地支持軟硬件協(xié)同設(shè)計(jì)。
因此本文的主要工作如下:
(1)在ZYNQ集群上基于開(kāi)源NEST類(lèi)腦仿真器實(shí)現(xiàn)了一套類(lèi)腦計(jì)算系統(tǒng)。
(2)針對(duì)STDP 學(xué)習(xí)算法中冪函數(shù)和指數(shù)函進(jìn)行優(yōu)化。并基于FPGA實(shí)現(xiàn)了硬件加速。
(3)為了平衡硬件資源、性能與功耗,采用了多節(jié)點(diǎn)協(xié)同與節(jié)點(diǎn)內(nèi)部硬件加速相結(jié)合的方法。
脈沖神經(jīng)網(wǎng)絡(luò)(SNN)相比于前兩代的神經(jīng)網(wǎng)絡(luò),有著本質(zhì)的區(qū)別[16]。主要表現(xiàn)在它是以脈沖的形式傳遞信息。而且脈沖以時(shí)間相關(guān)聯(lián),是時(shí)間節(jié)點(diǎn)的離散活動(dòng),而不是連續(xù)的值。
如圖1,脈沖是否能夠激發(fā),與神經(jīng)元閾值電壓和神經(jīng)元前突觸強(qiáng)度有關(guān)。神經(jīng)元的微分方程是按照真實(shí)生物神經(jīng)元模型建立。神經(jīng)元的前突觸權(quán)重是否有效,與該突觸前神經(jīng)元是否發(fā)生脈沖有關(guān)。權(quán)重的累加值通過(guò)一定的計(jì)算,超過(guò)神經(jīng)元的閾值電壓,神經(jīng)元將會(huì)發(fā)出一個(gè)脈沖并進(jìn)入不應(yīng)期。
圖1 神經(jīng)元脈沖激發(fā)圖
神經(jīng)元類(lèi)型主要分為三種:LIF[17]、Izhikevich[18]、HH[19]。突觸分為STDP和靜態(tài)突觸兩種。
NEST是一款開(kāi)源的脈沖神經(jīng)網(wǎng)絡(luò)仿真工具,NEST可以模擬任何規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò)。如動(dòng)物的視覺(jué)皮質(zhì)層和皮質(zhì)層的平衡隨機(jī)網(wǎng)絡(luò)。還可以模擬大腦的學(xué)習(xí)機(jī)制以及可塑性突觸模型。NEST本身還支持分布式計(jì)算,節(jié)點(diǎn)內(nèi)使用OpenMP和節(jié)點(diǎn)間使用MPI進(jìn)行信息交互。
NEST仿真器仿真SNN分為兩個(gè)階段:建立連接和網(wǎng)絡(luò)仿真。建立連接是將神經(jīng)元分配到各個(gè)節(jié)點(diǎn)后,記錄每個(gè)神經(jīng)元的連接關(guān)系。網(wǎng)絡(luò)仿真分為神經(jīng)元計(jì)算、突觸計(jì)算、脈沖發(fā)送三個(gè)階段。神經(jīng)元計(jì)算使用時(shí)間驅(qū)動(dòng),即不管神經(jīng)元前突觸是否有脈沖,都會(huì)對(duì)神經(jīng)元進(jìn)行計(jì)算。突觸使用事件驅(qū)動(dòng)的方式,即有脈沖,神經(jīng)元后突觸才會(huì)進(jìn)行突觸更新。
大腦記憶和學(xué)習(xí)機(jī)制的形成被認(rèn)為主要取決于神經(jīng)元之間突觸連接的改變機(jī)制。最近的研究表明,脈沖時(shí)間依賴可塑性(STDP)是突觸改變的重要機(jī)制[20]。基于STDP 的學(xué)習(xí)機(jī)制被廣泛用于無(wú)監(jiān)督學(xué)習(xí)。Diehl 等人[21]使用完全無(wú)監(jiān)督的SNN學(xué)習(xí),在不要大量訓(xùn)練的前提下,其對(duì)圖片的識(shí)別精度可以與深度學(xué)習(xí)相媲美。STDP 雖然有多種運(yùn)算規(guī)則,但都大同小異。設(shè)計(jì)所涉及到的STDP 運(yùn)算規(guī)則采用NEST 官方給出的運(yùn)算方法。這種運(yùn)算規(guī)則是由Abigail Morrison在研究真實(shí)生物皮質(zhì)層具有連通性和稀疏性遞歸網(wǎng)絡(luò)的突觸權(quán)重而提出的改進(jìn)型STDP[13]。STDP的表達(dá)式為:
Δt→∞為突觸后發(fā)射脈沖時(shí)間和突觸前發(fā)射脈沖時(shí)間之差。λ為學(xué)習(xí)率,w0為參照權(quán)重,τ為時(shí)間常數(shù),α為抑制性增量強(qiáng)度相對(duì)于增強(qiáng)性增量強(qiáng)度參數(shù)。
ZYNQ集群是基于ZYNQ 7030的分布式FPGA異構(gòu)平臺(tái)。每個(gè)節(jié)點(diǎn)包含一個(gè)ZYNQ 7030的FPGA異構(gòu)SoC。它包含ARM Cortex-A9處理核心(PS)以及可編程邏輯模塊(PL)。PS提供主框架的運(yùn)行,而PL實(shí)現(xiàn)專用硬件架構(gòu)。計(jì)算節(jié)點(diǎn)之間使用MPI通過(guò)千兆以太網(wǎng)通信。
圖2 是ZYNQ 平臺(tái)的總體架構(gòu)。每個(gè)節(jié)點(diǎn)包含一個(gè)ZYNQ 7030,節(jié)點(diǎn)內(nèi)部分為處理系統(tǒng)(PS)和可編程邏輯(PL)兩個(gè)部分。通過(guò)級(jí)連擴(kuò)展,系統(tǒng)可以擴(kuò)展到更大的規(guī)模以適應(yīng)不同規(guī)模的仿真。
圖2 ZYNQ分布式FPGA異構(gòu)平臺(tái)
為了分析NEST 仿真器不同突觸類(lèi)型的計(jì)算密集點(diǎn),分別選取突觸為靜態(tài)突觸和動(dòng)態(tài)突觸(STDP)兩種典型案例分析。
在突觸為靜態(tài)突觸的物體識(shí)別[22]案例中,分別統(tǒng)計(jì)1 050、2 100、4 200、6 300、10 500、21 000 個(gè)神經(jīng)元在各個(gè)階段時(shí)間消耗情況。由圖3可見(jiàn),突觸為靜態(tài)突觸的案例中,神經(jīng)元的計(jì)算時(shí)間占比較大。
圖3 靜態(tài)突觸各階段運(yùn)行時(shí)間占比
如果突觸是動(dòng)態(tài)突觸(STDP)。以NEST 官方給出的衡量多節(jié)點(diǎn)計(jì)算性能的HPC_BenchMark[23]為例子,分別統(tǒng)計(jì)1 125、2 250、4 500、6 750、11 250、22 500 個(gè)神經(jīng)元的Poisson更新時(shí)間、突觸更新時(shí)間和神經(jīng)元更新時(shí)間占比情況。圖4中可以看出,在突觸為動(dòng)態(tài)突觸(STDP)的脈沖神經(jīng)網(wǎng)絡(luò)中,突觸的計(jì)算階段在總仿真時(shí)間中占比較大。
圖4 NEST仿真器各階段運(yùn)行時(shí)間占比
這是因?yàn)樵诿}沖神經(jīng)網(wǎng)絡(luò)中,突觸的數(shù)量要比神經(jīng)元的數(shù)量多的多,突觸總數(shù)的計(jì)算方法如式(2):
Nneurons為神經(jīng)元數(shù),Csynapes為平均連接神經(jīng)元的突觸數(shù)。STDP 型突觸一般含有指數(shù)運(yùn)算和冪運(yùn)算[13],計(jì)算相對(duì)復(fù)雜,這是突觸計(jì)算成為提高仿真速度的瓶頸的原因。由于神經(jīng)元部分的加速已經(jīng)完成[24],所以本文選擇對(duì)STDP型突觸進(jìn)行加速。
NEST 所使用的STDP 突觸模型[13]含有冪函數(shù)和指數(shù)運(yùn)算,在硬件實(shí)現(xiàn)時(shí),如果不對(duì)冪函數(shù)和指數(shù)函數(shù)進(jìn)行優(yōu)化,將會(huì)損耗很大的邏輯資源,從而使并行度減小。同時(shí),因?yàn)閱喂?jié)點(diǎn)的FPGA 邏輯資源有限,不能實(shí)現(xiàn)突觸的全部并行,所以采用并行+流水的方式滿足一定并行度的同時(shí)兼顧邏輯資源的使用。
3.2.1 冪函數(shù)優(yōu)化
在NEST仿真器中,STDP學(xué)習(xí)算法的初始值為45,通過(guò)實(shí)驗(yàn)得知,在整個(gè)仿真階段,權(quán)重值的取值范圍是[40~51]之間。對(duì)于冪函數(shù)weight0.4,可以使用泰勒公式對(duì)其優(yōu)化。冪函數(shù)的泰勒公式如下:
當(dāng)f(x)為 (1+x)α,有:
由泰勒公式的特性知道,當(dāng)x→0 時(shí),獲得的誤差最小。由于weight >1,并不符合泰勒公式,需要做一定的轉(zhuǎn)換,對(duì)于取值范圍在[40~51]之間的動(dòng)態(tài)權(quán)重,需要在一定范圍內(nèi)動(dòng)態(tài)的改變x的取值范圍。如果權(quán)重的值在[40~40.5]之間,公式weight0.4可以改寫(xiě)成:
此時(shí)的 |x|<1 ,現(xiàn)在,已經(jīng)滿足泰勒公式。將40.250.4約定成常數(shù)C,則原有的公式有:
將其代入泰勒展開(kāi)公式,有:
最后,利用乘法的分配率和結(jié)合律,將公式(9)進(jìn)行化簡(jiǎn),這樣的目的是減少乘法運(yùn)算和加法運(yùn)算。用A、B、C分別代表公式的幾個(gè)常數(shù),最終,公式化簡(jiǎn)成:
在x的取值方面,如計(jì)算[40~40.5]之間的數(shù)時(shí),x對(duì)應(yīng)于,當(dāng)計(jì)算[45~45.5]之間的數(shù)時(shí)x對(duì)應(yīng)于。
圖5 顯示優(yōu)化前和優(yōu)化后神經(jīng)元的膜電位,圖5 可以看出,優(yōu)化前與優(yōu)化后神經(jīng)元膜電位隨著時(shí)間的變化并無(wú)明顯改變,優(yōu)化前與優(yōu)化后神經(jīng)元的膜電位已經(jīng)重合,優(yōu)化后與優(yōu)化前誤差極小。
圖5 優(yōu)化前與優(yōu)化后神經(jīng)元膜電位
將使用泰勒優(yōu)化后所損耗的FPGA 資源與未優(yōu)化情況下FPGA 資源損耗情況進(jìn)行對(duì)比,如表1。其中,Block RAM 減少 100%,DSP 減少 93.9%,F(xiàn)F 減少92.4%,LUT 減少67.9%,時(shí)鐘延遲減少56.1%。Block RAM 減少100%的原因是,常數(shù)A、B、C被HLS 使用FF+LUT 綜合成了ROM 的形式,從而沒(méi)有將數(shù)組存儲(chǔ)在Block RAM上。
表1 使用泰勒展開(kāi)式優(yōu)化后冪函數(shù)資源占用
3.2.2 指數(shù)優(yōu)化
STDP 學(xué)習(xí)算法除了冪函數(shù)運(yùn)算,還包括指數(shù)運(yùn)算。所包含的指數(shù)運(yùn)算如式(11):
tau為常數(shù),對(duì)于tlastspike-tspike,因?yàn)榉抡婢仁?.1(對(duì)于仿真精度為1時(shí)同樣適用),所以tlastspike-tspike的結(jié)果只能是I.(0,1,2,3,4,5,6,7,8,9) ,其中I是整數(shù)。通過(guò)STDP對(duì)脈沖時(shí)間存儲(chǔ)的特性分析,tlastspike-tspike的取值范圍在[-70,0]之間。而且每個(gè)數(shù)的取值之差為0.1,即可能取值數(shù)為700個(gè)。通過(guò)tlastspike-tspike之差的值乘以10,然后轉(zhuǎn)換成整數(shù)的形式進(jìn)行索引取值。表2顯示了原指數(shù)運(yùn)算和查找表計(jì)算指數(shù)運(yùn)算所使用資源的對(duì)比。從表中可以看出,DSP、FF、LUT 分別減少100%、97.3%、83.1%的資源損耗,時(shí)鐘延遲方面,減少84.6%的時(shí)鐘延遲。
表2 使用查找表求解指數(shù)函數(shù)的資源占用
3.2.3 輸入硬件架構(gòu)設(shè)計(jì)
設(shè)計(jì)的FPGA 加速器架構(gòu)為ARM+FPGA 的形式。ARM 運(yùn)行NEST 仿真器的基本結(jié)構(gòu),如網(wǎng)絡(luò)的創(chuàng)建、MPI 通信、脈沖數(shù)據(jù)收集、各進(jìn)程之間的信息分配等。ARM 通過(guò)AXI-LITE 口控制FPGA 端的突觸計(jì)算核,AXI-STREAM 協(xié)議由 4 個(gè) DMA 控制器來(lái)實(shí)現(xiàn),突觸數(shù)據(jù)的傳輸通過(guò)4根HP口來(lái)傳輸數(shù)據(jù)。
對(duì)于計(jì)算時(shí)的數(shù)據(jù),通過(guò)AXI-STREAM 的形式將數(shù)據(jù)傳輸。具體傳輸硬件架構(gòu)如圖6。
AXI-STREAM的最大數(shù)據(jù)位寬為1 024 bit,本設(shè)計(jì)采用的數(shù)據(jù)位寬為256 bit,4 個(gè)輸入口組成1 024 bit。ZYNQ 7030 內(nèi)存帶寬為2.01 GB/s,本文設(shè)計(jì)的加速方案,每秒所需的數(shù)據(jù)帶寬為1.9 GB/s,在數(shù)據(jù)傳輸方面,并沒(méi)有成為整個(gè)設(shè)計(jì)的瓶頸。
3.2.4 加速器整體架構(gòu)設(shè)計(jì)
為了節(jié)約FPGA資源和提高吞吐率,整個(gè)設(shè)計(jì)采用上層流水+底層并行的設(shè)計(jì)方式。單個(gè)突觸的STDP學(xué)習(xí)算法加速方案如圖7。
圖6 運(yùn)行階段數(shù)據(jù)傳輸硬件架構(gòu)
圖7 突觸更新硬件架構(gòu)
單個(gè)突觸的加速方案并沒(méi)有最大化利用FPGA 資源。對(duì)于單個(gè)時(shí)間片上的NEST仿真,如果為全鏈接,則突觸的STDP算法需要計(jì)算的總數(shù)為Spikes×NeuronE,NeuronE代表興奮性神經(jīng)元總個(gè)數(shù)。突觸總數(shù)由外部輸入決定。由于每次更行10個(gè)STDP型突觸,在突觸總數(shù)未知的情況下設(shè)計(jì)的上層流水采用向上取整的方式,如公式(12):
X代表需要計(jì)算的突觸總數(shù),Y代表每次并行計(jì)算的個(gè)數(shù),整體架構(gòu)的流水設(shè)計(jì)如圖8。
圖8 突觸計(jì)算的流水線設(shè)計(jì)
圖8 中分為讀取數(shù)據(jù)模塊、計(jì)算模塊、寫(xiě)回模塊三個(gè)部分,整個(gè)流水線的總時(shí)間由以下公式計(jì)算:
其中,Latencytotal為所需要的總時(shí)鐘,Roun_Div_Upper為T(mén)rip count 次數(shù)。II(Initiation Interval)為初始化間隔,IL(Iteration Latency)為迭代延遲,即R+C+W一次所需要的總時(shí)鐘周期。
如圖9 所示,在集群的硬件架構(gòu)設(shè)計(jì)中,對(duì)于每個(gè)計(jì)算節(jié)點(diǎn),NEST 仿真器將神經(jīng)元和突觸分配到每個(gè)節(jié)點(diǎn)并記錄神經(jīng)元之間的連接關(guān)系。當(dāng)進(jìn)行集群仿真時(shí),每個(gè)節(jié)點(diǎn)計(jì)算每個(gè)節(jié)點(diǎn)的神經(jīng)元和突觸。每個(gè)節(jié)點(diǎn),ARM端負(fù)責(zé)任務(wù)的分配和系統(tǒng)的運(yùn)行,F(xiàn)PGA端負(fù)責(zé)對(duì)突觸的計(jì)算。在進(jìn)行仿真之前,NEST 會(huì)將神經(jīng)元和突觸平均分配到每個(gè)節(jié)點(diǎn),每個(gè)計(jì)算節(jié)點(diǎn)計(jì)算任務(wù)不同且無(wú)主從關(guān)系,當(dāng)一輪更新完成后,節(jié)點(diǎn)之間使用MPI 通過(guò)以太網(wǎng)通信。得益于NEST 仿真工具本身就支持MPI,在將 NEST 移植到 ZYNQ 集群上時(shí),NEST 頂層的工作方式?jīng)]有改變,只是將底層計(jì)算部分移植到了FPGA。所以NEST仿真器本身的支持節(jié)點(diǎn)規(guī)模可調(diào)的優(yōu)點(diǎn)尚在。在仿真之前,可以根據(jù)所要仿真的規(guī)模,選擇相對(duì)應(yīng)的節(jié)點(diǎn)數(shù)量。因?yàn)樯窠?jīng)元和突觸是平均分配到每個(gè)計(jì)算節(jié)點(diǎn),在運(yùn)行大規(guī)模任務(wù)時(shí),只要所需運(yùn)行內(nèi)存未超過(guò)ZYNQ內(nèi)存大小,仿真時(shí)節(jié)點(diǎn)的規(guī)??梢匀我庹{(diào)整。
圖9 支持NEST的FPGA集群硬件架構(gòu)
NEST 2.14.0、Xilinx Vivado 2018.3、Xilinx Vivado HLS 2018.3,實(shí)驗(yàn)平臺(tái)如表3。
表3 兩種平臺(tái)的環(huán)境參數(shù)
因目前暫未有適合的X86+FPGA實(shí)驗(yàn)平臺(tái),這里只選擇X86、ARM、ARM+FPGA 三種平臺(tái),下一步將與更多不同特點(diǎn)的平臺(tái)進(jìn)行比較。
HPC BenchMark 是NEST 官方推出的衡量系統(tǒng)性能的基準(zhǔn)測(cè)試。目前,已經(jīng)在多個(gè)平臺(tái)或環(huán)境下使用[23,25]。網(wǎng)絡(luò)中的神經(jīng)元由興奮性和抑制性神經(jīng)元組成,組成比例為4∶1。突觸使用STDP 型突觸。時(shí)間步長(zhǎng)為0.1 ms,突觸延時(shí)為1.5 ms。模擬250+50 ms 生物大腦的活動(dòng)。測(cè)試集中的神經(jīng)元數(shù)量可調(diào),調(diào)整的幅度為11 250的倍數(shù)。
單節(jié)點(diǎn)ZYNQ 7030上FPGA資源損耗情況如表4。
表4 單節(jié)點(diǎn)FPGA資源損耗
本文實(shí)現(xiàn)基于ZYNQ 7030集群的類(lèi)腦計(jì)算加速器的設(shè)計(jì)。實(shí)驗(yàn)分為三種運(yùn)行環(huán)境,分別是Xeon E5-2620、ARM A9、ARM A9+FPGA。為了體現(xiàn)仿真平臺(tái)的可拓展性,將HPC BenchMark例子神經(jīng)元規(guī)模調(diào)整為1 125、6 750、11 250 三種,分別對(duì)應(yīng)于單節(jié)點(diǎn)、4 節(jié)點(diǎn)和 8 節(jié)點(diǎn)。由于篇幅有限,在性能和能效對(duì)比時(shí),只選取單節(jié)點(diǎn)和8節(jié)點(diǎn)與Xeon E5-2620進(jìn)行比較。
如表5 所示,與其他仿真架構(gòu)相比,單節(jié)點(diǎn)ARM+FPGA 異 構(gòu) 平 臺(tái) 性 能 是 ARM-A9 的 61.79 倍 ,Xeon E5-2620 的4.1 倍。能效比方面,能效是Xeon E5-2620的115倍,是ARM A9的55.5倍。
表5 各節(jié)點(diǎn)性能對(duì)比
8節(jié)點(diǎn)和E5-2620仿真11 250個(gè)神經(jīng)元的數(shù)據(jù)如表6。
表6 FPGA集群和純CPU參數(shù)
圖10 為仿真11 250 個(gè)神經(jīng)元生成的結(jié)果圖對(duì)比,從圖分析,兩者結(jié)果相同。圖10(a)為加速前的脈沖發(fā)射率和脈沖發(fā)射時(shí)間圖,圖10(b)為加速后的圖。
圖10 CPU端結(jié)果與集群結(jié)果對(duì)比
三種平臺(tái)運(yùn)行11 250個(gè)神經(jīng)元,8 100萬(wàn)個(gè)STDP型突觸的能效和運(yùn)行時(shí)間如圖11,突觸部分并行計(jì)算,對(duì)整個(gè)系統(tǒng)的仿真時(shí)間減少作用明顯。而且,相比于未經(jīng)加速的ARM-A9集群,CPU相比于8節(jié)點(diǎn)的ARM-A9提升并不明顯。因?yàn)槊}沖神經(jīng)網(wǎng)絡(luò)的仿真,神經(jīng)元和突觸的參數(shù)較多,造成對(duì)內(nèi)存的頻繁訪問(wèn)??梢?jiàn),單純地提升單節(jié)點(diǎn)的性能并不是較好的解決方案,而是需要以集群的方式,增加訪問(wèn)內(nèi)存的并行度。最終,8節(jié)點(diǎn)FPGA集群仿真時(shí)間為4.925 s,性能是Xeon E5-2620 的14.7倍,是8個(gè)ARM A9的22.68倍,性能功耗比方面,是E5-2620的51.6倍,是8節(jié)點(diǎn)ARM A9的20.6倍。
圖11 三種平臺(tái)對(duì)比
本文設(shè)計(jì)并實(shí)現(xiàn)了突觸的STDP 學(xué)習(xí)算法加速。通過(guò)軟硬件協(xié)同的分布式方式,可以更方便地探索體系結(jié)構(gòu),本文的工作也說(shuō)明了這種方式的優(yōu)點(diǎn)。雖然節(jié)點(diǎn)數(shù)增加縮短了計(jì)算時(shí)間,通信時(shí)間也隨之增加。且隨著節(jié)點(diǎn)數(shù)增加,通信時(shí)間將會(huì)成為集群的瓶頸。先前對(duì)神經(jīng)元部分的加速已經(jīng)開(kāi)源[26],后續(xù)也會(huì)將本文涉及的代碼也開(kāi)源。下一步的工作是擴(kuò)展更大的規(guī)模,研究針對(duì)不同案例,提供不同的節(jié)點(diǎn),以實(shí)現(xiàn)性能和功耗乃至通信的最佳平衡點(diǎn)。同時(shí),節(jié)點(diǎn)數(shù)增加帶來(lái)的數(shù)據(jù)同步等待,MPI通信時(shí)間變長(zhǎng)也是亟需解決的問(wèn)題。