李 康,張魯飛,張新偉,郁龔健,劉家航,吳 東,柴志雷,
(1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫 214122; 2.數(shù)學(xué)工程與先進計算國家重點實驗室,江蘇 無錫 214215)
隨著新一代信息技術(shù)的快速發(fā)展,計算能力和數(shù)據(jù)處理速度得到大幅提升,人工智能已經(jīng)進入大規(guī)模實用階段,但深度學(xué)習(xí)還存在解釋性差、通用智能水平弱等局限性[1],限制了人工智能的發(fā)展。而摩爾定律放緩、登納德縮放定律失效,使得能效問題日益成為計算機系統(tǒng)發(fā)展的重要制約因素。而人腦是由多達(dá)1011個神經(jīng)元和1015個突觸組成的復(fù)雜網(wǎng)絡(luò)系統(tǒng),雖然其功耗只有20 W,但學(xué)習(xí)和認(rèn)知能力卻超強[2]。因此,世界各國紛紛啟動腦科學(xué)計劃[3-5],國內(nèi)清華大學(xué)、北京大學(xué)、復(fù)旦大學(xué)等高校已相繼成立研究平臺開展類腦研究[6-7],希望通過解析大腦機理,發(fā)展類腦計算,克服深度學(xué)習(xí)的不足。類腦計算的基礎(chǔ)是脈沖神經(jīng)網(wǎng)絡(luò)(Spiking Neural Network,SNN),SNN被譽為第三代人工神經(jīng)網(wǎng)絡(luò)[8],具有時空可模擬性、突觸可塑性和支持脈沖編碼等特點,相比第二代神經(jīng)網(wǎng)絡(luò)(如反向傳播網(wǎng)絡(luò)),在具備生物合理性的同時可達(dá)到更高的能效比。
目前,研究人員已提出多種支持脈沖神經(jīng)網(wǎng)絡(luò)的仿真器用于研究大腦機理和探索類腦計算系統(tǒng),如NEST[9]、BRAIN2[10]和NEURON[11]等,這些仿真器均運行于通用處理器平臺,雖然具有靈活性強、精度高等特點,但同時存在功耗高、仿真速度慢的缺點[12]。因此,尋找合適的脈沖神經(jīng)網(wǎng)絡(luò)硬件平臺為神經(jīng)科學(xué)家提供大規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò)仿真和大腦皮層仿真服務(wù)成為亟待解決的問題[13]。現(xiàn)有主流解決方案采用專用集成電路(Application Specific Integrated Circuit,ASIC)、圖像處理器(Graphics Processing Unit,GPU)、現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)作為脈沖神經(jīng)網(wǎng)絡(luò)仿真器的硬件平臺[14]。其中,FPGA是一種強靈活性、高性能和低功耗的可編程邏輯器件。與研發(fā)周期較長、靈活性較差的ASIC及能耗高的GPU相比,FPGA更適合作為脈沖神經(jīng)網(wǎng)絡(luò)仿真器的硬件平臺,其目前已得到廣泛應(yīng)用。文獻[15]利用Maxeller Java的高層次綜合(High-Level Synthesis,HLS)工具,采用時分復(fù)用、神經(jīng)元模塊并行計算的硬件架構(gòu),提出一種能夠支持6塊FPGA板卡的脈沖神經(jīng)網(wǎng)絡(luò)仿真器NeuroFlow。文獻[16]利用開放運算語言(Open Computing Language,OpenCL)工具,設(shè)計基于FPGA且支持單精度浮點神經(jīng)元計算模型的脈沖神經(jīng)網(wǎng)絡(luò)加速器。但上述兩種脈沖神經(jīng)網(wǎng)絡(luò)仿真器并不兼容主流的脈沖神經(jīng)網(wǎng)路仿真器接口,開發(fā)難度較大。
在眾多脈沖神經(jīng)網(wǎng)絡(luò)仿真器中,NEST仿真器應(yīng)用最廣泛,其更加關(guān)注神經(jīng)網(wǎng)絡(luò)系統(tǒng)的動力學(xué)、規(guī)模及結(jié)構(gòu)而不僅是單個神經(jīng)元模型的精確形態(tài),還可用于模擬不同規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò),如哺乳動物的皮質(zhì)層微電路模型等[17]。文獻[18]提出基于OpenCL且提供GPU加速服務(wù)的NEST仿真器,但其能耗較高。因此,本文設(shè)計一種支持FPGA集群的NEST仿真器,重點分析了NEST仿真器、漏電流整合放電(Leaky Integrate and Fire,LIF)神經(jīng)元模型和皮質(zhì)層視覺仿真模型[19]。
在NEST脈沖神經(jīng)網(wǎng)絡(luò)仿真器中,實現(xiàn)了50多種神經(jīng)元模型和10多種突觸模型。突觸模型包含靜態(tài)突觸和STDP突觸等,神經(jīng)元模型包含HH(Hodgkin-Huxley)、Izhikevich、LIF等[20],其計算復(fù)雜度和生物仿真精度依次降低。由于LIF神經(jīng)元模型應(yīng)用廣泛且易于硬件實現(xiàn)[21],因此本文選取NEST仿真器中的LIF神經(jīng)元模型作為FPGA硬件架構(gòu)的實現(xiàn)。
LIF神經(jīng)元是一種電流指數(shù)衰減驅(qū)動型神經(jīng)元,其基本原理是將產(chǎn)生脈沖的突觸權(quán)重累加到突觸后電流并進行指數(shù)衰減,衰減后的突觸電流與膜電位相加得到新的神經(jīng)元膜電位,如果神經(jīng)元膜電位大于膜電位閾值便會產(chǎn)生脈沖。NEST仿真器中的LIF神經(jīng)元模型在原LIF神經(jīng)元的基礎(chǔ)上進行離散化,并增加了外部電流參數(shù)和初始化電流參數(shù)。LIF神經(jīng)元模型的計算方法如式(1)、式(2)所示:
Vm(t)=Vm(t-1)×P22+Si_syn_ex(t-1)×
P21ex+Si_syn_in(t-1)×P21in+
(Sie(t-1)+Si0(t-1))×P20
(1)
Vm(t)=Vreset且發(fā)送脈沖,Vm(t)≥Vth
(2)
在式(1)中,t為當(dāng)前時刻,t-1為上一個時刻,Vm為膜電位,Si_syn_ex、Si_syn_in分別為興奮型電流和抑制型電流,Sie、Si0分別為外部輸入電流和初始化電流,P22為膜電位衰減因子,P21ex、P21in分別為興奮型電流衰減因子和抑制型電流衰減因子,P20為初始化電流和外部電流的衰減因子,所有衰減因子在神經(jīng)元初始化過程中均已計算完畢。在式(2)中,Vth為閾值電壓,Vreset為復(fù)位電壓。
NEST仿真器中的計算模式包含時間驅(qū)動型和事件驅(qū)動型,其神經(jīng)元計算模式采用時間驅(qū)動型,即每一個仿真時間步長都會進行神經(jīng)元計算,突觸計算模式采用事件驅(qū)動型,即只有產(chǎn)生脈沖才會進行權(quán)重更新。除此之外,NEST仿真器中還存在最小延遲機制(如圖1所示),其基本原理是在每個最小延遲內(nèi),神經(jīng)元的更新并不會對其他神經(jīng)元產(chǎn)生任何影響,只有在所有神經(jīng)元更新結(jié)束后才會通過突觸將累計的脈沖發(fā)送到目標(biāo)神經(jīng)元。
圖1 NEST仿真器的最小延遲機制Fig.1 The minimum delay mechanism of NEST simulator
在圖1中,dmin為最小延遲,若脈沖神經(jīng)網(wǎng)絡(luò)仿真精度為0.1 ms,則dmin為0.5 ms,LIF神經(jīng)元更新的最小步長也為0.1 ms。在神經(jīng)元發(fā)出脈沖后,將脈沖信息存儲到數(shù)據(jù)緩存。采用最小延遲機制,即增加NEST仿真器中單個神經(jīng)元的Cache生命周期,可減少大規(guī)模系統(tǒng)的通信損耗。另外,NEST神經(jīng)元更新模塊中還存在不應(yīng)期機制,其基本原理是當(dāng)神經(jīng)元發(fā)射脈沖后便會處在不應(yīng)期階段,不應(yīng)期階段的神經(jīng)元不會更新而只進行不應(yīng)期計數(shù)遞減,直至跳出不應(yīng)期。NEST仿真器中神經(jīng)元模型更新算法具體如下:
算法1神經(jīng)元模型更新算法
輸入仿真時間和神經(jīng)元數(shù)量
輸出脈沖信息和神經(jīng)元輸出
1.for (t=0; t 2.for (nneuron=0; nneuron 3.for (lag=from; lag 4.if (ref==0) 5.neuron_compute(); 6.else 7.--ref;} 下文對NEST仿真器中的脈沖發(fā)射率、內(nèi)存需求和計算量進行分析,假設(shè)Nneuron為神經(jīng)元數(shù)量、Nsynapse為突觸數(shù)量、Tsimulation為整個模型的仿真時間。脈沖發(fā)射率為1 s內(nèi)單個神經(jīng)元發(fā)射的脈沖數(shù),計算公式如式(3)所示: (3) 其中,Nspike為所有仿真時間內(nèi)脈沖的發(fā)射數(shù)量。 NEST仿真器中脈沖神經(jīng)網(wǎng)絡(luò)內(nèi)存的計算公式如式(4)所示: Smemory=Nneuron×Mneuron+Nsynapse×Msynapse (4) 其中,Mneuron和Msynapse分別為每個神經(jīng)元和每個突觸的內(nèi)存占用,在NEST中每個LIF神經(jīng)元至少占用128 Byte內(nèi)存,每個靜態(tài)突觸共占用8 Byte內(nèi)存。 NEST仿真器中脈沖神經(jīng)網(wǎng)絡(luò)浮點計算量的計算公式如式(5)所示: OPcompute=(OPneuron+OPsynapse)×Tsimulation×Nstep (5) 其中,OPneuron為神經(jīng)元計算的浮點操作數(shù),OPsynapse為突觸計算的浮點操作數(shù),Nstep為單位仿真時間內(nèi)的仿真步長,OPweight為突觸權(quán)重累加操作數(shù)。NEST仿真器中每個LIF神經(jīng)元和靜態(tài)突觸計算分別需要14 FLOPS和1 FLOPS。 基于NEST仿真器的皮質(zhì)層視覺仿真模型處理過程具體如下: 1)圖像預(yù)處理。對任意分辨率的圖像,將圖像進行歸一化,按原圖長寬比縮放至80×80,因為按原圖長寬比縮放,所以存在未填充像素部分,而該部分的填充值為0.5。 2)脈沖神經(jīng)網(wǎng)絡(luò)仿真。圖像尺寸決定脈沖神經(jīng)網(wǎng)絡(luò)層規(guī)模,分別以預(yù)處理后的圖像大小的1.00倍、0.70倍、0.50倍、0.35倍建立4個脈沖神經(jīng)網(wǎng)絡(luò)層,每個網(wǎng)絡(luò)層又包含4個尺寸相同的層,分別以π/8、π/4+π/8、π/2+π/8、3π/4+π/8 Gabor濾波后的圖像作為輸入。脈沖神經(jīng)網(wǎng)絡(luò)層的突觸連接包含自連接、一對一連接和全連接。NEST仿真器進行仿真后,將脈沖信息作為輸出。 3)支持向量機(Support Vector Machine,SVM)分類。脈沖神經(jīng)網(wǎng)絡(luò)層的脈沖信息輸出經(jīng)過降采樣后,將發(fā)射脈沖數(shù)映射到一維數(shù)組作為輸入,并通過SVM分類器進行圖像分類。 基于NEST仿真器的皮質(zhì)層視覺仿真模型參數(shù)設(shè)置如表1所示。 表1 皮質(zhì)層視覺仿真模型參數(shù)設(shè)置Table 1 Parameter setting of cortical visual simulation model 對皮質(zhì)層視覺仿真模型進行分析得出以下結(jié)論: 1)脈沖神經(jīng)網(wǎng)絡(luò)的運行時間和計算量占比約為整個皮質(zhì)層視覺仿真的90%以上。 2)脈沖神經(jīng)網(wǎng)絡(luò)的平均脈沖發(fā)射率較低。 3)脈沖神經(jīng)網(wǎng)絡(luò)中神經(jīng)元計算量占整個模型計算量的比重較大,神經(jīng)元計算量約為突觸計算量的3萬多倍。 本文將以NEST仿真器中神經(jīng)元計算量占比較大的皮質(zhì)層視覺仿真模型作為樣例對其硬件架構(gòu)設(shè)計進行評估。 本文設(shè)計基于FPGA集群的脈沖神經(jīng)網(wǎng)絡(luò)仿真器,首先在NEST仿真器的基礎(chǔ)上進行重新設(shè)計以支持FPGA硬件平臺,在保持原始仿真結(jié)果準(zhǔn)確性的同時對神經(jīng)元更新算法進行設(shè)計并增加FPGA硬件驅(qū)動和數(shù)據(jù)傳輸模塊。然后對LIF神經(jīng)元計算硬件模塊進行設(shè)計,提出LIF神經(jīng)元流水線并行架構(gòu),充分利用神經(jīng)元內(nèi)并行度和神經(jīng)元間并行度,增大數(shù)據(jù)吞吐率和計算并行度,以神經(jīng)元ID組成的脈沖隊列作為輸出,有效減少存儲空間和數(shù)據(jù)傳輸時間。最后采用多線程和多進程的設(shè)計,充分利用處理器資源,提高系統(tǒng)并行性和擴展性,增加用戶模式,提高系統(tǒng)使用便利度,為大規(guī)模類腦計算系統(tǒng)實現(xiàn)提供技術(shù)支持。 2.1.1 NEST仿真器神經(jīng)元計算算法 為消除神經(jīng)元之間的數(shù)據(jù)依賴性,有利于硬件的并行計算,設(shè)計的神經(jīng)元計算算法具體如下: 算法2神經(jīng)元計算算法 輸入仿真時間和神經(jīng)元數(shù)量 輸出發(fā)射脈沖和神經(jīng)元輸出 1.for (t=0; t 2.for (lag=from; lag 3.for (nneuron=0; nneuron 4.if (ref==0) 5.neuron_compute(); 6.else 7.--ref;} 在LIF神經(jīng)元計算模塊中,最小延遲的遍歷放置于外層循環(huán),支持在最小延遲的最小步長內(nèi)完成所有神經(jīng)元的計算,在未改變原有脈沖神經(jīng)網(wǎng)絡(luò)更新機制的條件下,消除了每個神經(jīng)元之間的數(shù)據(jù)依賴性。 2.1.2 NEST仿真器中LIF神經(jīng)元的計算精度 NEST仿真器中LIF神經(jīng)元變量采用雙精度浮點數(shù),為減少數(shù)據(jù)傳輸需求與系統(tǒng)內(nèi)存需求,將LIF神經(jīng)元中雙精度浮點數(shù)改為單精度浮點數(shù),更改后NEST仿真器的脈沖發(fā)射率及皮質(zhì)層視覺仿真模型的仿真結(jié)果與原來保持一致。使用單精度浮點既保證了NEST仿真器的通用性,又降低了數(shù)據(jù)傳輸需求和系統(tǒng)內(nèi)存需求。 2.1.3 NEST仿真器與硬件平臺的數(shù)據(jù)交互模式 由于LIF神經(jīng)元的數(shù)據(jù)無法全部存儲到FPGA上,因此將LIF神經(jīng)元的數(shù)據(jù)存放到共享內(nèi)存中,NEST仿真器與硬件平臺通過共享內(nèi)存的方式進行數(shù)據(jù)交互。為減少頻繁的內(nèi)存讀寫,在共享內(nèi)存中申請LIF神經(jīng)元變量后,初始化時將NEST仿真器中數(shù)據(jù)傳入到共享內(nèi)存,LIF神經(jīng)元硬件模塊每次通過DMA控制器從共享內(nèi)存中讀取數(shù)據(jù)和輸出數(shù)據(jù)到共享內(nèi)存,最大化地減少神經(jīng)元數(shù)據(jù)的搬運次數(shù)。NEST仿真器中的數(shù)據(jù)更新算法具體如下: 算法3數(shù)據(jù)更新算法 輸入神經(jīng)元初始化數(shù)據(jù) 輸出神經(jīng)元輸出數(shù)據(jù) 1.Initial LIFNeuralDATA(); 2.CopyDatatoShareMemory(); 3.for (t=0; t 4.for (lag=from; lag 5.FPGA_MassUpdateNeuron();//FPGA設(shè)備及DMA驅(qū)動 6.CopyDatafromShareMemory();} LIF神經(jīng)元計算模塊采用流水線設(shè)計來提高吞吐率,如圖2所示,由神經(jīng)元輸入緩沖經(jīng)過一系列乘加運算得到當(dāng)前的神經(jīng)元膜電位,如果膜電位大于閾值則會輸出結(jié)果到神經(jīng)元輸出緩沖,輸出的脈沖攜帶神經(jīng)元ID,將發(fā)出脈沖的神經(jīng)元ID存儲到共享內(nèi)存,并按照輸出順序排列在一段連續(xù)的內(nèi)存空間中,設(shè)置結(jié)束標(biāo)志位為0,若讀取到0,則說明本輪神經(jīng)元更新所發(fā)射的脈沖讀取完畢。單個神經(jīng)元計算模塊具有4個乘法和2個加法并行單元,充分利用了神經(jīng)元計算模塊的并行性。 圖2 LIF神經(jīng)元計算模塊的硬件架構(gòu)設(shè)計Fig.2 Hardware architecture design of LIF neuron computing module 神經(jīng)元流水線結(jié)構(gòu)如圖3所示,包括數(shù)據(jù)讀取R、神經(jīng)元計算C、數(shù)據(jù)寫回W3個模塊。 圖3 LIF神經(jīng)元計算模塊的延遲Fig.3 Delay of LIF neuron computing module 整個流水線時延計算公式如式(6)所示: Latencytotal=(TII×RoundDivUpper(Nneuron,Mneuron)+ TIL)/Freq (6) 其中,TII為初始化間隔時間,RoundDivUpper()為向上取整函數(shù),Mneuron為能夠支持神經(jīng)元計算模塊的最大并行數(shù),TIL為迭代延遲,Freq為工作頻率時鐘,Trip Count為循環(huán)迭代總數(shù)。每個時鐘周期讀取和輸出Mneuron個神經(jīng)元參數(shù),Mneuron取決于每個神經(jīng)元的參數(shù)量和傳輸數(shù)據(jù)位寬,Nneuron由NEST仿真器給定的LIF神經(jīng)元數(shù)量決定。 LIF神經(jīng)元硬件架構(gòu)的數(shù)據(jù)流和控制流設(shè)計如圖4所示。NEST仿真器運行在ARM核,通過AXI-LITE控制LIF_NEURON神經(jīng)元計算模塊,并將神經(jīng)元總數(shù)量通過寄存器輸出到LIF_NEURON硬件模塊。AXI-STREAM協(xié)議由4個DMA控制器實現(xiàn),通過AXI-STREAM將神經(jīng)元變量參數(shù)寫入輸入緩沖,利用DATA_SCATTER模塊分發(fā)到LIF神經(jīng)元中各個變量,LIF_NEURON神經(jīng)元更新完成后,經(jīng)過DATA_GATHER模塊寫回輸出緩沖。本文采用8個LIF神經(jīng)元并行計算,并通過分時復(fù)用的方式讀取和更新共享內(nèi)存中的數(shù)據(jù)。其中,AXI-STREAM最大數(shù)據(jù)位寬為1 024 bit,ZYNQ 7030的DDR3 1066f支持2.01 GB/s的數(shù)據(jù)帶寬,LIF神經(jīng)元計算模塊最大帶寬需求為1.175 GB/s,滿足設(shè)計要求。 圖4 LIF神經(jīng)元硬件架構(gòu)的數(shù)據(jù)傳輸設(shè)計Fig.4 Data transmission design of LIF neuron hardware architecture 2.3.1 NEST仿真器多線程與多進程設(shè)計 為便于大規(guī)模脈沖神經(jīng)網(wǎng)絡(luò)仿真,NEST仿真器本身支持OpenMP的共享內(nèi)存多線程技術(shù)與支持MPI的分布式內(nèi)存多進程技術(shù),可適應(yīng)不同集群平臺。 NEST仿真器在脈沖神經(jīng)網(wǎng)絡(luò)仿真前建立網(wǎng)絡(luò)連接。按照平均分配的原則將神經(jīng)元分配至各進程中的線程,并賦予每個神經(jīng)元全局ID、線程ID及進程ID,隨后根據(jù)NEST仿真器中的查找表(Look Up Table,LUT)建立突觸,通過突觸建立各個進程和線程之間的連接關(guān)系,進程中使用MPI消息機制進行神經(jīng)元之間的脈沖消息傳遞,每個突觸連接包含權(quán)重、延遲和目標(biāo)神經(jīng)元全局ID。目標(biāo)神經(jīng)元用來查找目標(biāo)節(jié)點,延遲用來定義從源神經(jīng)元(Source neuron)到目標(biāo)神經(jīng)元(Target neuron)需要的仿真步長。 NEST仿真器會給每個線程分配接收緩沖(Receiver buffer)和發(fā)送緩沖(Send buffer),接收緩沖負(fù)責(zé)接收所有傳入的脈沖信息,發(fā)送緩沖負(fù)責(zé)存放發(fā)射脈沖的信息,每個線程都具有相同大小的接收緩沖,每個緩沖中具有相同的數(shù)據(jù)內(nèi)容,NEST仿真器通過線程ID從接收緩沖獲取相應(yīng)的脈沖事件數(shù)據(jù),然后通過突觸連接找到對應(yīng)的神經(jīng)元進行脈沖傳遞。MPI信息交換機制是將進程中的發(fā)送緩沖拷貝并發(fā)送到其他所有接收進程,NEST仿真器中脈沖發(fā)射與接收流程如圖5所示,其中,t為當(dāng)前仿真時間,Tstep為預(yù)設(shè)的總仿真時間,為仿真步長。 圖5 脈沖發(fā)射與接收流程Fig.5 Procedure of spiking transmitting and receiving 由于ZYNQ 7030的PS端為ARM A9雙核處理器,且支持雙線程運行,因此本文設(shè)計了2個LIF神經(jīng)元硬件模塊,由ARM端的線程控制LIF神經(jīng)元硬件模塊,如圖6所示。多線程采用共享內(nèi)存方式,使用2個LIF神經(jīng)元硬件模塊同時讀寫DDR3內(nèi)存,可充分發(fā)揮DDR的帶寬優(yōu)勢,但由于線程之間存在上下文切換,因此多線程的加速比不能達(dá)到理論最大值。 圖6 多線程硬件設(shè)計Fig.6 Multi-thread hardware design 如圖7所示,T1和T2分別代表線程1和線程2,多進程采用分布式內(nèi)存方式,每個進程包含發(fā)送緩沖和接收緩沖,在脈沖神經(jīng)網(wǎng)絡(luò)仿真開始前將網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)映射到NEST仿真器,為每個線程和進程分配神經(jīng)元,發(fā)出的脈沖信號通過以太網(wǎng)從發(fā)送緩沖發(fā)送到接收緩沖。 圖7 多進程硬件設(shè)計Fig.7 Multi-process hardware design 每個進程節(jié)點配備單獨的DDR3內(nèi)存,可增加整個系統(tǒng)的內(nèi)存容量并提供更高的計算性能,但同時需要考慮多節(jié)點的通信問題。本文中NEST仿真器的皮質(zhì)層視覺仿真模型具有脈沖發(fā)射率低和神經(jīng)元更新計算需求大的特性,其通信數(shù)據(jù)計算公式如式(7)所示: Mcommunication=(Nspike/Nmpi+Nthread×dmin)× (Mgid+Moffset)×Nmpi (7) 其中,Nthread為預(yù)設(shè)的SNN仿真器線程數(shù),Nmpi為預(yù)設(shè)的NEST仿真器進程數(shù),dmin為最小延遲,Mgid為發(fā)出脈沖的全局ID變量,Moffset為脈沖偏移變量,由于全局ID和脈沖偏移均為雙精度浮點變量,因此Mgid和Moffset總數(shù)據(jù)量為16 Byte。 2.3.2 用戶編程模式 NEST仿真器加入動態(tài)加載比特流來配置FPGA模塊,用戶可根據(jù)需求選擇是否使用FPGA硬件加速模塊。FPGA集群的每個進程都可通過NEST仿真器動態(tài)加載比特流,并且可根據(jù)神經(jīng)元類型加載不同的神經(jīng)元硬件模塊,提高用戶使用FPGA集群的便利性。 如圖8所示,運行NEST仿真器,在初始化階段判斷是否需要FPGA硬件加速模塊,如果不需要則直接在雙核ARM A9上運行,如果需要則根據(jù)神經(jīng)元類型自動下載相應(yīng)的FPGA比特流,并通過NEST仿真器控制多線程和多進程調(diào)度以及FPGA與DRAM的數(shù)據(jù)交互,單個線程內(nèi)實現(xiàn)8個LIF神經(jīng)元并行計算的硬件設(shè)計,同時采用流水線架構(gòu),當(dāng)前輪次仿真輸入復(fù)用上一輪仿真的輸出。利用OpenMP多線程編程、MPI消息傳輸機制和以太網(wǎng)通信實現(xiàn)計算節(jié)點與計算節(jié)點之間的脈沖傳遞。 圖8 基于FPGA集群的脈沖神經(jīng)網(wǎng)絡(luò)仿真器整體架構(gòu)Fig.8 Overall architecture of spiking neural network simulator based on FPGA cluster NEST仿真器:NEST 2.14.0版本,GCC 5.0編譯器,Python 3.5。 皮質(zhì)層視覺仿真模型:最小延遲dmin為1 ms,仿真精度為0.1 ms,總生物仿真時間為50 ms,神經(jīng)元數(shù)量為48 904,突觸數(shù)量為355 516。 FPGA設(shè)計軟件:Xilinx FPGA設(shè)計集成工具(Xilinx Vivado 2018),高層次綜合工具(Xilinx Vivado HLS 2018)。 CPU:Intel Xeon E5-2620,8個核心,內(nèi)存為128 GB DDR3。 ARM:ARM A9處理器主頻為667 MHz,2個核心,內(nèi)存為1 GB DDR3。 FPGA集群系統(tǒng):FPGA集群包含8個Xilinx ZYNQ 7 030節(jié)點,每個節(jié)點包括PS端的ARM A9雙核處理器系統(tǒng)和可編程邏輯端(PL)的FPGA器件,FPGA時鐘頻率為100 MHz,FPGA板卡之間基于TCP/IP協(xié)議并采用1 000 Mb/s網(wǎng)絡(luò)帶寬的以太網(wǎng)進行通信。 針對單個LIF神經(jīng)元硬件模塊進行仿真,設(shè)置仿真精度為0.1 ms、0.5 ms、1.0 ms,輸入恒定電流為700 pA,仿真時間為100 ms,分別對原始NEST仿真器與基于FPGA的NEST仿真器進行結(jié)果測試,原始NEST仿真器LIF神經(jīng)元實現(xiàn)結(jié)果如圖9所示,基于FPGA集群的NEST仿真器LIF神經(jīng)元實現(xiàn)結(jié)果如圖10所示。 圖9 原始NEST仿真器LIF神經(jīng)元實現(xiàn)結(jié)果Fig.9 LIF neuron implementation results of the original NEST simulator 在圖9和圖10中,直線表示膜電位輸出值,黑點表示NEST仿真器在某個仿真時間內(nèi)存在脈沖發(fā)射,對比原始NEST仿真器和基于FPGA集群的NEST仿真器單個LIF神經(jīng)元以恒定電流輸入的脈沖仿真結(jié)果,可以看出:在單個神經(jīng)元仿真中,本文實現(xiàn)的LIF神經(jīng)元硬件模塊與原始NEST仿真器的仿真結(jié)果保持一致,不存在精度損失,達(dá)到了理想結(jié)果。 圖10 基于FPGA集群的NEST仿真器LIF神經(jīng)元實現(xiàn)結(jié)果Fig.10 LIF neuron implementation results of cluster NEST simulator based on FPGA 針對皮質(zhì)層視覺仿真模型的脈沖層進行仿真,分別得到原始NEST仿真器和基于FPGA集群的NEST仿真器的皮質(zhì)層視覺仿真模型的脈沖層結(jié)果,仿真時間為50 ms,選取80×80大小的網(wǎng)絡(luò)層輸出結(jié)果,如圖11和圖12所示,其中黑點表示NEST仿真器中某個神經(jīng)元在某個仿真時間內(nèi)產(chǎn)生了脈沖,對原始NEST仿真器脈沖仿真結(jié)果與基于FPGA集群的NEST仿真器脈沖仿真結(jié)果進行對比,其脈沖輸出結(jié)果保持一致。通過對比多次實驗結(jié)果和不同層的脈沖輸出結(jié)果證明本文基于FPGA集群的NEST仿真器在脈沖神經(jīng)網(wǎng)絡(luò)仿真時可保證仿真結(jié)果的準(zhǔn)確性,并得到正確的輸出結(jié)果。 圖11 原始NEST仿真器脈沖結(jié)果Fig.11 Spiking results of the original NEST simulator 圖12 基于FPGA集群的NEST仿真器脈沖結(jié)果Fig.12 Spiking results of NEST simulator based on FPGA cluster 本文NEST仿真器中神經(jīng)元計算模塊采用單精度浮點數(shù)據(jù),與原NEST仿真器的神經(jīng)元計算模塊雙精度浮點數(shù)據(jù)相比,在皮質(zhì)層視覺模型仿真圖像分類的準(zhǔn)確率和脈沖發(fā)射率方面并無差異,結(jié)果如表2所示。 表2 皮質(zhì)層視覺仿真模型性能分析Table 2 Performance analysis of cortical visual simulation model 在基于NEST仿真器的皮質(zhì)層視覺仿真模型中,預(yù)設(shè)dmin=1,平均脈沖發(fā)射率為3.84 spike/s/neuron,總的仿真時間為50 ms,神經(jīng)元數(shù)量為48 904,總的脈沖發(fā)射數(shù)為9 389,本文設(shè)計采用8個FPGA節(jié)點,單個節(jié)點最大支持2個線程,根據(jù)式(7)計算得出總的MPI通信量為0.143 MB。本文應(yīng)用1 000 Mb/s以太網(wǎng),即每秒鐘傳輸125 MB數(shù)據(jù),由于MPI傳輸時間的理論值約為1.1 ms,但MPI存在頻繁啟動問題,因此隨著節(jié)點的增加,MPI所占時間也不斷增加,如表3所示。 表3 不同規(guī)模FPGA集群的MPI性能測試Table 3 MPI performance test of FPGA clusters of different scales FPGA資源包括LUT、LUTRAM、觸發(fā)器(Flip-Flop,FF)、BRAM(Block RAM)和DSP。單個FPGA節(jié)點中2個LIF神經(jīng)元硬件模塊的資源利用率情況如表4所示。 表4 單個FPGA的資源利用率Table 4 Resource utilization of a single FPGA 本文設(shè)計并實現(xiàn)基于FPGA集群的NEST脈沖神經(jīng)網(wǎng)絡(luò)仿真器,以皮質(zhì)層視覺仿真模型為例,分別對比Xeon E5-2620(8 core)和ARM A9(2 core),其性能評估結(jié)果如表5所示。 表5 在CPU、ARM和ARM+FPGA平臺上的性能評估Table 5 Performance evaluation of CPU,ARM and ARM+FPGA platforms 本文實現(xiàn)了基于FPGA集群的NEST仿真器,在計算能效方面,其單個節(jié)點能效是ARM A9的30倍,是Xeon E5-2620的56.10倍;FPGA集群的能效是Xeon E5-2620的43.93倍,是ARM A9的23.54倍。在計算速度方面,單個節(jié)點速度是ARM A9的33.21倍,是Xeon E5-2620的1.97倍;FPGA集群的速度是ARM A9的208倍,是Xeon E5-2620的12.36倍。 根據(jù)本文得到的FPGA集群性能及加速比,基于FPGA集群的NEST仿真器在皮質(zhì)層視覺仿真模型中,隨著FPGA節(jié)點數(shù)目的改變,節(jié)點間的性能預(yù)測結(jié)果如表6所示。 表6 不同規(guī)模FPGA集群的性能預(yù)測Table 6 Performance prediction of FPGA clusters of different scales 由表6可知,在16個FPGA節(jié)點內(nèi),總時延隨著節(jié)點數(shù)的增加而減少,當(dāng)節(jié)點數(shù)超過16個時,MPI通信將成為整個FPGA集群的瓶頸,隨著節(jié)點數(shù)的增加,整個系統(tǒng)時延也不斷上升,能效比不斷降低。因此,為實現(xiàn)更大規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò),下一步的工作重點為MPI網(wǎng)絡(luò)通信的優(yōu)化與改進。 本文提出一種基于FPGA集群的NEST脈沖神經(jīng)網(wǎng)絡(luò)仿真器,采用流水線設(shè)計提高吞吐率,使用多線程和多進程設(shè)計充分利用處理器資源,提高系統(tǒng)并行性、擴展性以及使用便利性。實驗結(jié)果表明,NEST仿真器在計算速度和能效方面均有較大幅度的提升,其為神經(jīng)科學(xué)家提供了速度更快、能耗更低的脈沖神經(jīng)網(wǎng)絡(luò)仿真平臺。為進一步提高基于FPGA集群的NEST仿真器的通用性,后續(xù)將針對Izhikevich、HH等類型的神經(jīng)元計算模塊進行設(shè)計,通過優(yōu)化網(wǎng)絡(luò)傳輸性能,實現(xiàn)支持更大網(wǎng)絡(luò)規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò)仿真器與類腦計算平臺。1.3 基于NEST仿真器的皮質(zhì)層視覺仿真模型
2 基于FPGA的NEST仿真器硬件架構(gòu)設(shè)計
2.1 支持FPGA硬件架構(gòu)的NEST仿真器設(shè)計
2.2 LIF神經(jīng)元計算模塊的硬件架構(gòu)設(shè)計
2.3 支持FPGA集群的NEST仿真器多節(jié)點設(shè)計
2.4 基于FPGA集群的NEST仿真器總體架構(gòu)設(shè)計
3 實驗結(jié)果與分析
3.1 軟硬件環(huán)境設(shè)置
3.2 LIF神經(jīng)元硬件模塊實驗結(jié)果分析
3.3 皮質(zhì)層視覺仿真模型的脈沖層實驗結(jié)果分析
3.4 皮質(zhì)層視覺仿真模型性能分析
3.5 FPGA集群節(jié)點間的數(shù)據(jù)傳輸分析
3.6 FPGA資源利用率分析
3.7 基于FPGA集群的NEST仿真器性能評估
3.8 不同規(guī)模FPGA集群的性能預(yù)測
4 結(jié)束語