劉家航,郁龔健,李佩琦,華 夏,柴志雷,2,陳聞杰
(1.江南大學(xué) 人工智能與計(jì)算機(jī)學(xué)院,江蘇 無(wú)錫 214122;2.江蘇省模式識(shí)別與計(jì)算智能工程實(shí)驗(yàn)室,江蘇 無(wú)錫 214122;3.華東師范大學(xué)軟硬件協(xié)同設(shè)計(jì)技術(shù)與應(yīng)用教育部工程研究中心,上海 200062)
深度學(xué)習(xí)在數(shù)據(jù)挖掘、自然語(yǔ)言處理、語(yǔ)音處理、文本分類(lèi)等諸多領(lǐng)域都取得了突出的成果,但其存在需要海量標(biāo)注數(shù)據(jù)、通用智能水平弱等局限性[1],難以成為解決人工智能問(wèn)題的終極手段。人類(lèi)大腦是由約1011個(gè)神經(jīng)元、1015個(gè)突觸構(gòu)成的復(fù)雜的生物體,具有很高的智能水平,但功耗只有25 W左右[2],其計(jì)算模式值得借鑒。目前,出現(xiàn)了越來(lái)越多的大腦神經(jīng)計(jì)算科學(xué)的研究工作,以期通過(guò)解析人類(lèi)大腦工作機(jī)理、發(fā)展類(lèi)腦計(jì)算來(lái)克服現(xiàn)有深度學(xué)習(xí)的不足[3]。類(lèi)腦計(jì)算的基礎(chǔ)是脈沖神經(jīng)網(wǎng)絡(luò)(Spiking Neural Network,SNN),與傳統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)相比,SNN 的工作機(jī)理更接近于生物大腦。
大腦規(guī)模所需的計(jì)算資源遠(yuǎn)超單個(gè)計(jì)算節(jié)點(diǎn)或芯片的功能[4],因此,為了獲得最佳的計(jì)算能力,構(gòu)建大規(guī)模集群形成分布式計(jì)算平臺(tái)成為當(dāng)前主流[5-7]。然而隨著計(jì)算節(jié)點(diǎn)的增多,通信時(shí)間所占比例越來(lái)越大,有效計(jì)算的比例逐漸下降,導(dǎo)致SNN的計(jì)算效率下降。
針對(duì)通信的優(yōu)化,壓縮、打包尖峰數(shù)據(jù)等[8-10]傳統(tǒng)方法只關(guān)注對(duì)通信的脈沖數(shù)據(jù)進(jìn)行優(yōu)化,局限性較大。在神經(jīng)元映射對(duì)通信的影響方面,CARLOS等提出HP-NBX 方法[11],利用超圖分區(qū)和動(dòng)態(tài)稀疏交換減少進(jìn)程之間的連接,從而提高通信平衡性,優(yōu)化通信過(guò)程。URGESE 等提出SNN-PP方法[12],在SpiNNaker 中使用譜聚類(lèi)算法將神經(jīng)元分組成亞群,使亞群中緊密相連的組保持在同一個(gè)計(jì)算節(jié)點(diǎn)(進(jìn)程)中,目的是最小化相互的連接并保持高度連接的組件相互靠近。BALAJI 等提出SpiNeCluster 方法[13],根據(jù)尖峰信息將SNN 劃分為局部和全局突觸,最大限度減少共享互連上的尖峰數(shù)量。XIANG等提出一種基于跨層的神經(jīng)映射方法[14],將屬于相鄰層的突觸連接神經(jīng)元映射到同一片上網(wǎng)絡(luò)節(jié)點(diǎn),同時(shí)為適應(yīng)各種輸入模式,還考慮輸入尖峰率并重新映射神經(jīng)元以提高映射效率。
針對(duì)大規(guī)模分布式類(lèi)腦計(jì)算的仿真,NEST 仿真器是一款主流的類(lèi)腦模擬器開(kāi)源軟件[15]。NEST 仿真器可以模擬任何規(guī)模的脈沖神經(jīng)網(wǎng)絡(luò),并且支持集成式的MPI、OpenMP 通信協(xié)議,其通過(guò)分布式計(jì)算大幅提高了仿真速度。NEST 的通信機(jī)制采用“緩沖區(qū)動(dòng)態(tài)相等”的方法,各節(jié)點(diǎn)無(wú)需通信,直接動(dòng)態(tài)保持發(fā)送緩沖區(qū)相等。
雖然NEST 對(duì)通信時(shí)間進(jìn)行了一定程度的優(yōu)化,但是由于緩沖區(qū)互相無(wú)交流,使得通信數(shù)據(jù)量持續(xù)增加,因此其在能耗方面表現(xiàn)較差。針對(duì)這一問(wèn)題,本文提出基于SNN 子圖跨節(jié)點(diǎn)優(yōu)化的神經(jīng)元重分布算法ReLOC,通過(guò)分析SNN 模型中神經(jīng)元之間聯(lián)系的緊密性,減少神經(jīng)元到其他節(jié)點(diǎn)的連接,并以稀疏交換思想對(duì)NEST 本身的通信機(jī)制進(jìn)行改進(jìn),利用其稀疏性提高通信效率。
脈沖神經(jīng)網(wǎng)絡(luò)(SNN)被譽(yù)為第三代人工神經(jīng)網(wǎng)絡(luò)[16],其模擬神經(jīng)元更加接近實(shí)際,并且把時(shí)間的影響也考慮在內(nèi)。脈沖神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元不是在每一次迭代中都被激活,而是在其膜電位達(dá)到某一個(gè)特定值時(shí)才被激活。當(dāng)一個(gè)神經(jīng)元被激活時(shí),它會(huì)產(chǎn)生一個(gè)信號(hào)傳遞給其他神經(jīng)元,并改變其膜電位。
神經(jīng)科學(xué)家通常用SNN 評(píng)估理論和實(shí)驗(yàn)結(jié)果[17-18]。SNN 仿真分為2 個(gè)階段:計(jì)算和交換。計(jì)算階段包括基于偏微分方程更新神經(jīng)元模型;交換階段將神經(jīng)元產(chǎn)生的脈沖發(fā)送到其突觸后神經(jīng)元處。在分布式系統(tǒng)中,交換涉及到進(jìn)程間通信過(guò)程,而節(jié)點(diǎn)規(guī)模越大,通信所占的比例就越大。
NEST 是一款應(yīng)用廣泛的SNN 模型仿真器,其大規(guī)模分布式計(jì)算特性非常適合用來(lái)作為SNN 負(fù)載表征的模擬器工具。本節(jié)介紹NEST 的仿真架構(gòu)、并行分配和通信機(jī)制。
1.2.1 NEST 仿真架構(gòu)
圖1 展示了NEST 的運(yùn)行過(guò)程。首先使用Create在各個(gè)節(jié)點(diǎn)上創(chuàng)建神經(jīng)元;然后Connect 連接神經(jīng)元,創(chuàng)建突觸;最后Simulate 進(jìn)行仿真,此過(guò)程分為三步,即更新所有神經(jīng)元變量(Update)、將產(chǎn)生的脈沖發(fā)送出去(Communicate)以及更新本地突觸變量(Deliver)。
圖1 NEST 運(yùn)行流程Fig.1 Procedure of NEST operation
1.2.2 NEST 并行架構(gòu)和神經(jīng)元分配
NEST 并行架構(gòu)采用支持MPI 節(jié)點(diǎn)間通信和OPENMP 線程通信,并使用虛擬進(jìn)程(Virtual Process,VP)的概念來(lái)統(tǒng)一管理并行系統(tǒng),虛擬進(jìn)程數(shù)量NVP由進(jìn)程數(shù)量P和線程數(shù)量T決定,NVP=P×T。
神經(jīng)元分配采用基于VP 的循環(huán)分配,使得神經(jīng)元在各個(gè)節(jié)點(diǎn)上均勻分布。如圖2 所示,其中:Sg 代表spike-generator 脈沖激發(fā)器,此設(shè)備在VP 上是完整創(chuàng)建的;Iaf 代表神經(jīng)元,是基于虛擬進(jìn)程的分配。由于這種分配方式不可避免地將聯(lián)系緊密的神經(jīng)元分配到不同的節(jié)點(diǎn),導(dǎo)致通信消耗增大,因此神經(jīng)元分配對(duì)于通信的改進(jìn)是必要的。
圖2 NEST 并行架構(gòu)和神經(jīng)元分配方式Fig.2 Parallel architecture and neuron allocation mode of NEST
1.2.3 NEST 通信架構(gòu)
NEST 采用將單個(gè)時(shí)間片內(nèi)的神經(jīng)元連續(xù)更新的思想:神經(jīng)元先進(jìn)行若干次連續(xù)更新,然后一次時(shí)間片內(nèi)產(chǎn)生的脈沖統(tǒng)一進(jìn)行MPI 通信。
NEST 使用MPI_Alltoall 函數(shù)進(jìn)行通信,通常的設(shè)計(jì)是每次通信前先通信一次確保每個(gè)節(jié)點(diǎn)的發(fā)送緩沖區(qū)都保持相等,這樣通信兩次的設(shè)計(jì)毫無(wú)疑問(wèn)會(huì)隨著節(jié)點(diǎn)增加造成通信時(shí)間劇增,因此,NEST 不使用這種設(shè)計(jì),而是采用所有節(jié)點(diǎn)同時(shí)自主保持通信緩沖區(qū)相等的策略。
如圖3 所示,在進(jìn)行每一輪通信時(shí),首先將脈沖放入發(fā)送緩沖區(qū)中,如果緩沖區(qū)的容量小于脈沖數(shù),則將脈沖放滿進(jìn)行通信,然后擴(kuò)大發(fā)送緩沖區(qū)的容量,繼續(xù)放入剩下的脈沖,直到脈沖傳輸完成,其中發(fā)送緩沖區(qū)的容量會(huì)一直變大。這樣設(shè)計(jì)提高了通信的可擴(kuò)展性,但是會(huì)導(dǎo)致通信能耗迅速增加,并且NEST 集體通信導(dǎo)致發(fā)送緩沖區(qū)無(wú)論有沒(méi)有脈沖都需要發(fā)送數(shù)據(jù),這無(wú)疑增加了通信消耗,而并行SNN 的通信應(yīng)當(dāng)是進(jìn)程間存在脈沖交換時(shí)才會(huì)發(fā)生。
圖3 NEST 通信機(jī)制流程Fig.3 Procedure of NEST communication mechanism
1.2.4 NEST 負(fù)載特性
在使用多節(jié)點(diǎn)仿真時(shí),神經(jīng)元會(huì)被均勻地分發(fā)到每個(gè)節(jié)點(diǎn)上,產(chǎn)生跨節(jié)點(diǎn)通信。如圖4 所示,在NEST 上運(yùn)行平衡隨機(jī)網(wǎng)絡(luò)模型,隨著節(jié)點(diǎn)增加,通信所占比例逐漸增大,計(jì)算效率逐漸下降。
圖4 NEST 各階段時(shí)間占比Fig.4 Time proportion of NEST each stage
圖5 顯示了NEST 通信能耗的變化,可以看出,隨著節(jié)點(diǎn)的增加,通信數(shù)據(jù)量迅速上升,NEST 在通信能耗方面可擴(kuò)展性變差。針對(duì)通信能耗可擴(kuò)展差的問(wèn)題,本文對(duì)NEST 進(jìn)行稀疏性通信優(yōu)化,以期提高通信效率。
圖5 通信數(shù)據(jù)量Fig.5 Communication data volume
針對(duì)NEST 集群的神經(jīng)元循環(huán)分配帶來(lái)的問(wèn)題,本文實(shí)現(xiàn)神經(jīng)元重分布算法ReLOC。通過(guò)對(duì)神經(jīng)元之間連接關(guān)系的分析,重新分布神經(jīng)元,使得跨硬件節(jié)點(diǎn)之間的連接變得更加稀疏。在此基礎(chǔ)上,改進(jìn)NEST 通信方式,使NEST 集群可以更好地利用稀疏性以減少通信代價(jià)。
分布式集群最重要的問(wèn)題就是節(jié)點(diǎn)間的通信問(wèn)題,因?yàn)橥挥|前和突觸后神經(jīng)元總是不可避免地被分布到不同的節(jié)點(diǎn),最優(yōu)分布是所有神經(jīng)元都被放入同一個(gè)節(jié)點(diǎn),但是此分布無(wú)法體現(xiàn)分布式集群的優(yōu)勢(shì)。節(jié)點(diǎn)間通常使用以太網(wǎng)連接,因此,網(wǎng)絡(luò)帶寬和延遲直接影響通信速度。除此之外,神經(jīng)元彼此之間的連接也會(huì)對(duì)跨節(jié)點(diǎn)通信造成較大影響。
將一個(gè)SNN 模型建立為如圖6 所示的SNN 連通圖,圓點(diǎn)代表神經(jīng)元,中間帶箭頭的線段表示突觸。然后將一個(gè)神經(jīng)元和它的突觸后神經(jīng)元共同組成這個(gè)SNN 圖的子圖,如圖7 所示,假如一個(gè)神經(jīng)元產(chǎn)生脈沖,那么脈沖數(shù)據(jù)會(huì)被發(fā)送給所有的突觸后神經(jīng)元。所有的脈沖傳輸都是基于這樣的SNN子圖。
圖6 并行SNN 連通圖Fig.6 Parallel SNN connected graph
圖7 SNN 子圖Fig.7 SNN subgraph
在NEST 仿真器中,當(dāng)一個(gè)節(jié)點(diǎn)上包含一個(gè)神經(jīng)元的多個(gè)突觸后神經(jīng)元時(shí),這些突觸后神經(jīng)元會(huì)共享一個(gè)脈沖數(shù)據(jù)。因此,無(wú)論突觸后神經(jīng)元的數(shù)量如何,此神經(jīng)元發(fā)出的脈沖傳輸?shù)酱斯?jié)點(diǎn)都只算作一個(gè),即神經(jīng)元到節(jié)點(diǎn)的連接。每次神經(jīng)元更新產(chǎn)生的總脈沖總是小于或等于節(jié)點(diǎn)數(shù)乘以神經(jīng)元數(shù)。因此,如何將一個(gè)SNN 子圖中的神經(jīng)元分布到盡可能少的節(jié)點(diǎn)上,并且改進(jìn)NEST 通信機(jī)制使其更適用稀疏性優(yōu)化成為重要問(wèn)題,本文設(shè)計(jì)的ReLOC 算法每次都加入當(dāng)前匹配集最優(yōu)匹配的神經(jīng)元,形成新的匹配集。根據(jù)最優(yōu)匹配規(guī)則選取屬于匹配集中的突觸后神經(jīng)元最多的神經(jīng)元,將SNN子圖放入盡可能少的節(jié)點(diǎn),從而減少跨節(jié)點(diǎn)脈沖。在此基礎(chǔ)上,改進(jìn)NEST 原本的集體通信,利用稀疏交換的思想,在跨節(jié)點(diǎn)脈沖減少的同時(shí),避免多余的進(jìn)程數(shù)據(jù)交換,從而提高NEST 通信效率。
2.2.1 算法描述
ReLOC 算法描述如算法1 所示,其將神經(jīng)元按照緊密度的聯(lián)系分布到若干節(jié)點(diǎn)上,通過(guò)對(duì)節(jié)點(diǎn)神經(jīng)元容納量的限制,平衡節(jié)點(diǎn)的負(fù)載。
算法1ReLOC 算法
ReLOC 算法輸入為節(jié)點(diǎn)數(shù)和神經(jīng)元連接表。一個(gè)SNN 模型可以建立成一張連通圖G=(V,E),V代表所有的神經(jīng)元集合,E代表神經(jīng)元之間的突觸連接。而神經(jīng)元連接表可以表示為圖G的鄰接矩陣A,A是Nn×Nn維的,Nn表示神經(jīng)元的總數(shù),節(jié)點(diǎn)數(shù)用Nnp來(lái)表示。ReLOC 算法輸出為各節(jié)點(diǎn)的神經(jīng)元分布,表示為一個(gè)分布矩陣T,T是Nn×Nnp維的。
首先選取一個(gè)節(jié)點(diǎn),將一個(gè)隨機(jī)的神經(jīng)元r分布到此節(jié)點(diǎn)上,k表示當(dāng)前節(jié)點(diǎn);然后依次在此節(jié)點(diǎn)上放入未分配的神經(jīng)元,直到節(jié)點(diǎn)k達(dá)到最大容納量max_neurons,規(guī)則是每次放入的神經(jīng)元都是未分配的神經(jīng)元集neurons 中神經(jīng)元的突觸后神經(jīng)元在節(jié)點(diǎn)k中分布最多的神經(jīng)元。當(dāng)神經(jīng)元按照此方法依次進(jìn)行匹配時(shí),每次匹配的神經(jīng)元都是與匹配集聯(lián)系最密切的神經(jīng)元。ReLOC 算法中的符號(hào)定義如表1 所示。
表1 符號(hào)定義Table 1 Symbolic interpretation
ReLOC 算法的思想是先選定一個(gè)神經(jīng)元,每次匹配一個(gè)和它聯(lián)系最緊密的神經(jīng)元,形成一個(gè)神經(jīng)元集,然后繼續(xù)循環(huán)匹配和此神經(jīng)元集聯(lián)系最緊密的神經(jīng)元,生成新的神經(jīng)元集。此算法中決定神經(jīng)元之間密切程度的是神經(jīng)元集中屬于突觸后神經(jīng)元的數(shù)量。因?yàn)槊看纹ヅ涠紩?huì)使一個(gè)SNN 子圖(見(jiàn)圖7)最大化分布到同一個(gè)節(jié)點(diǎn)上,當(dāng)所有匹配都是最優(yōu)時(shí),每個(gè)子圖都會(huì)避免分布在多個(gè)節(jié)點(diǎn)上,從而減少通信量。
ReLOC 算法只需要在任意一個(gè)節(jié)點(diǎn)上運(yùn)行,然后將分布結(jié)果發(fā)送給其他節(jié)點(diǎn)即可。內(nèi)存使用按照式(1)計(jì)算:
其中:M表示總內(nèi)存;N表示神經(jīng)元總數(shù)量;Mint表示整型參數(shù)占用內(nèi)存。
2.2.2 ReLOC 算法的有效性
ReLOC 算法的核心是匹配過(guò)程,每一次匹配都會(huì)選擇最優(yōu)的匹配集,最優(yōu)意味著最低代價(jià)的SNN子圖切割,即SNN 子圖分布在最少的節(jié)點(diǎn)上。
為了描述SNN 的拓?fù)?,將神?jīng)元連接圖用鄰接矩陣A來(lái)表示,A[i,j]∈{0,1},當(dāng)神經(jīng)元i和j之間存在突觸連接時(shí),A[i,j]=1,否則A[i,j]=0。用T來(lái)表示分布矩陣,當(dāng)神經(jīng)元i被分布到節(jié)點(diǎn)j時(shí),T[i,j]=1,否則T[i,j]=0。
根據(jù)上文提到的突觸后神經(jīng)元共享脈沖數(shù)據(jù),衡量跨節(jié)點(diǎn)通信可以用神經(jīng)元到節(jié)點(diǎn)的連接數(shù)量NNP來(lái)表示。首先定義P:
P[i,j]≥0 表示神經(jīng)元i到節(jié)點(diǎn)j存在連接,那么NNP可以表示為:
2.2.3 基于ReLOC 算法的NEST 性能優(yōu)化
為了利用ReLOC 算法的便捷性,并且與原先的NEST 調(diào)用代碼不產(chǎn)生沖突,本文改變了NEST 的基本架構(gòu),在Connect 時(shí)不創(chuàng)建具體的突觸對(duì)象,只是通過(guò)所有連接得到一個(gè)連接表,然后在調(diào)用Simulate函數(shù)初始化仿真時(shí)根據(jù)連接表進(jìn)行神經(jīng)元的重分布處理,之后再創(chuàng)建突觸和運(yùn)行仿真過(guò)程。重分布具體流程如圖8 所示。其中,Setnod 是系統(tǒng)調(diào)用ReLOC 進(jìn)行神經(jīng)元重新分配的標(biāo)志,對(duì)于非稀疏性SNN 模型,則無(wú)需調(diào)用此模塊。Setnod 函數(shù)可以輸入?yún)?shù),根據(jù)參數(shù)選擇不同的重分布算法,此模塊是可擴(kuò)展的,可以自行添加新的算法。
圖8 重分布流程Fig.8 Procedure of relocation
用戶調(diào)用應(yīng)用重分布稀疏方法的NEST 內(nèi)核的Python 代碼以如下為例,對(duì)比原代碼新增了2 個(gè)函數(shù)調(diào)用,設(shè)置重分布(Setnod)和設(shè)置通信方式(Setcomm),兩者都需要在ResetKernel 后進(jìn)行調(diào)用。如果不調(diào)用則默認(rèn)使用原來(lái)的NEST 神經(jīng)元分配和通信方式。
稀疏交換是HOEFLER 等提出的動(dòng)態(tài)稀疏數(shù)據(jù)交換算法[19],是節(jié)點(diǎn)對(duì)節(jié)點(diǎn)通信的模式,即一個(gè)節(jié)點(diǎn)只發(fā)送必要的數(shù)據(jù)給另一個(gè)節(jié)點(diǎn),期間需要啟動(dòng)多次MPI通信,總體效率不如集體通信(MPI_Alltoall)。但是如果減少每個(gè)節(jié)點(diǎn)的通信節(jié)點(diǎn)(一個(gè)節(jié)點(diǎn)需要向另一個(gè)節(jié)點(diǎn)發(fā)送脈沖數(shù)據(jù),即本節(jié)點(diǎn)神經(jīng)元到其他節(jié)點(diǎn)的連接)的數(shù)量,那么就可以減少啟動(dòng)MPI 通信的次數(shù),進(jìn)而提高通信效率。
如圖9 所示,在啟動(dòng)通信階段,每個(gè)節(jié)點(diǎn)都會(huì)使用MPI_Reduce_scatter 函數(shù)與其他節(jié)點(diǎn)交流得到源節(jié)點(diǎn)的信息,避免與非相鄰進(jìn)程交流,以此提高通信效率。然后每個(gè)節(jié)點(diǎn)都將脈沖數(shù)據(jù)異步發(fā)送給其所有的目標(biāo)節(jié)點(diǎn),并等待接收其源節(jié)點(diǎn)發(fā)送的脈沖,一旦接收完畢,則表明通信階段結(jié)束。
圖9 稀疏交換流程Fig.9 Procedure of sparse exchange
每個(gè)節(jié)點(diǎn)與其他目標(biāo)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)傳輸時(shí)使用非阻塞通信,即用MPI_Isend 進(jìn)行發(fā)送數(shù)據(jù),用MPI_Recv 接收數(shù)據(jù),最后使用MPI_Waitall 等待數(shù)據(jù)全部傳輸完成,然后繼續(xù)仿真操作。此過(guò)程不需要等待全部節(jié)點(diǎn)通信結(jié)束,通過(guò)非阻塞通信、重疊通信與計(jì)算階段提高并行計(jì)算的效率。
在NEST 上使用稀疏交換之前需要先調(diào)用Setcomm(type)函數(shù),其中的參數(shù)可以設(shè)置,從而啟用不同的通信機(jī)制,如果不調(diào)用此函數(shù)則默認(rèn)通信為NEST 原本通信模式。
在使用稀疏交換之前先進(jìn)行神經(jīng)元重分布操作,減少本節(jié)點(diǎn)神經(jīng)元到其他節(jié)點(diǎn)的連接,由于稀疏SNN 模型每一輪神經(jīng)元產(chǎn)生的脈沖比較稀少,因此減少了節(jié)點(diǎn)到節(jié)點(diǎn)通信的發(fā)生,并且只需要發(fā)送目標(biāo)進(jìn)程所需的脈沖數(shù)據(jù),一定程度上解決了NEST集體通信帶來(lái)的通信能耗可擴(kuò)展性差的問(wèn)題。
本文選擇以下2 個(gè)實(shí)驗(yàn)案例進(jìn)行分析:
1)皮質(zhì)微電路SNN 模型
此案例基于POTJANS 等提出的皮質(zhì)微電路(Cortical Microcircuit,CM)模型[20]。CM 模型網(wǎng)絡(luò)包含4層,每層由抑制性和興奮性神經(jīng)元群組成,分為8個(gè)群體,共7.7 萬(wàn)個(gè)神經(jīng)元和3 億突觸。神經(jīng)元類(lèi)型為iaf_psc_exp,所有連接均為靜態(tài)突觸,連接規(guī)則為fixed_total_number,另有8 個(gè)泊松和對(duì)應(yīng)的神經(jīng)元群全連接。此案例在生物學(xué)上比較合理地模擬了大腦皮層的神經(jīng)活動(dòng),為了驗(yàn)證網(wǎng)絡(luò)稀疏性對(duì)于SNN 分布式計(jì)算的好處,將該模型的神經(jīng)元和突觸縮放至0.1和0.02,以0.1 ms 的時(shí)間步長(zhǎng)仿真200 ms。
2)平衡隨機(jī)網(wǎng)絡(luò)模型
在此案例中,平衡隨機(jī)網(wǎng)絡(luò)模型的神經(jīng)元被分成2 個(gè)種群,分別由400 個(gè)興奮性神經(jīng)元和100 個(gè)抑制性神經(jīng)元構(gòu)成,每個(gè)神經(jīng)元的固定入度為5,因此,共有2 500 個(gè)突觸。神經(jīng)元類(lèi)型為iaf_psc_alpha,所有連接均為靜態(tài)突觸,連接規(guī)則為fixed_indegree,1 個(gè)泊松和所有神經(jīng)元連接。將該模型分別在類(lèi)腦平臺(tái)上以0.1 ms 的時(shí)間步長(zhǎng)仿真200 ms。
本文選取由28 塊PYNQ-Z2 組成的高性能異構(gòu)類(lèi)腦平臺(tái),每個(gè)節(jié)點(diǎn)包括PS(Process System)端的ARM A9 雙核處理器系統(tǒng)和1 個(gè)PL(可編程邏輯)端的FPGA 器件,物理內(nèi)存512 MB。節(jié)點(diǎn)之間使用1 000 Mb/s 網(wǎng)絡(luò)帶寬的以太網(wǎng)進(jìn)行通信,采用TCP/IP 協(xié)議。
上述2 種模型都是Python 編寫(xiě)的NEST 案例,本文調(diào)用NEST 的內(nèi)核(C++實(shí)現(xiàn))對(duì)SNN 進(jìn)行仿真,主要特征是采用時(shí)間步驅(qū)動(dòng),并行通信使用MPI 庫(kù)。
對(duì)模型進(jìn)行時(shí)間統(tǒng)計(jì):1)計(jì)算時(shí)間是指每個(gè)節(jié)點(diǎn)所有神經(jīng)元順序狀態(tài)更新所花時(shí)間;2)通信時(shí)間是指節(jié)點(diǎn)通信啟動(dòng)到數(shù)據(jù)接收完成所花的時(shí)間;3)仿真時(shí)間是指完成仿真所花的全部時(shí)間,包括計(jì)算時(shí)間和通信時(shí)間;4)通信數(shù)據(jù)量是指MPI 函數(shù)在200 ms 仿真時(shí)間內(nèi)所有節(jié)點(diǎn)實(shí)際發(fā)送的全部數(shù)據(jù)字節(jié)量(unsigned int 型)。
3.4.1 神經(jīng)元重分布
分別測(cè)試應(yīng)用神經(jīng)元重分布算法和循環(huán)分布算法的交換數(shù)據(jù)量和神經(jīng)元到進(jìn)程的數(shù)量,通信模式均采用NEST 默認(rèn)通信機(jī)制。如圖10(a)所示,在應(yīng)用ReLOC 算法后,神經(jīng)元到進(jìn)程的數(shù)量平均減少約20%,但是由于NEST 的通信機(jī)制為集體通信,無(wú)法利用稀疏連接帶來(lái)的好處,因此交換的數(shù)據(jù)量并未減少,如圖10(b)所示。
圖10 重分布和循環(huán)分布算法實(shí)驗(yàn)結(jié)果對(duì)比Fig.10 Comparison of experimental results by relocation and cyclic allocation algorithms
3.4.2 神經(jīng)元重分布和稀疏交換
使用重分布稀疏交換方法(ReL-SE)和原版本NEST 模式運(yùn)行3.1 節(jié)的2 個(gè)實(shí)驗(yàn)案例,這2 個(gè)案例對(duì)于僅使用靜態(tài)突觸的稀疏性SNN 網(wǎng)絡(luò)有比較好的代表性。分別使用4、8、16、28 個(gè)節(jié)點(diǎn)進(jìn)行仿真,運(yùn)行結(jié)果如圖11 和圖12 所示。可以發(fā)現(xiàn),對(duì)于稀疏SNN 模型,在通信數(shù)據(jù)量大幅減少的情況下,通信時(shí)間和仿真時(shí)間與原版本相差不大,這就使得通信能耗大幅減少。如圖11 所示,在皮質(zhì)微電路模型中,由于起初神經(jīng)元脈沖比較密集,導(dǎo)致發(fā)送緩沖區(qū)一開(kāi)始就會(huì)非常大,因此后續(xù)通信數(shù)據(jù)的浪費(fèi)更加明顯,在28 個(gè)節(jié)點(diǎn)上的仿真結(jié)果表明,使用重分布稀疏交換方法的通信能耗相比NEST 模式減少約98.63%。由圖11(a)和圖12(a)可以看出,當(dāng)節(jié)點(diǎn)較少時(shí),NEST 模式的仿真時(shí)間少于重分布稀疏交換方法,然而節(jié)點(diǎn)繼續(xù)增加,NEST 模式的仿真時(shí)間卻呈快速上升趨勢(shì)。與此相應(yīng),通信時(shí)間也在快速接近,可以預(yù)見(jiàn)的是,節(jié)點(diǎn)的擴(kuò)張有利于稀疏通信。由圖11(c)和圖12(c)可以看出,NEST 原本通信數(shù)據(jù)量隨著節(jié)點(diǎn)的增加呈現(xiàn)快速上升趨勢(shì),而稀疏交換的數(shù)據(jù)量卻緩慢增長(zhǎng),由此可見(jiàn),同時(shí)配后稀疏交換能夠大幅降低通信能耗。
圖11 皮質(zhì)微電路模型運(yùn)行結(jié)果Fig.11 Running result of CM model
圖12 平衡隨機(jī)網(wǎng)絡(luò)模型運(yùn)行結(jié)果Fig.12 Running result of balanced stochastic network model
如圖13 所示,隨著節(jié)點(diǎn)的增加,ReLOC 算法花費(fèi)時(shí)間越來(lái)越少,這是因?yàn)楣?jié)點(diǎn)的增加導(dǎo)致每個(gè)節(jié)點(diǎn)上所能容納的神經(jīng)元減少,因此在算法循環(huán)進(jìn)行神經(jīng)元匹配時(shí),突觸后神經(jīng)元位于節(jié)點(diǎn)神經(jīng)元集的個(gè)數(shù)的計(jì)算次數(shù)大幅減少。
圖13 ReLOC 算法耗時(shí)Fig.13 Time consuming of ReLOC algorithm
由于神經(jīng)元重分布是仿真前一次性消耗的時(shí)間,因此隨著仿真時(shí)間的增加,ReLOC 所需代價(jià)逐漸降低。所以,節(jié)點(diǎn)和仿真時(shí)間與ReLOC 算法的代價(jià)成反比,使得代價(jià)最終可以忽略不計(jì)。
NEST 循環(huán)分配導(dǎo)致聯(lián)系緊密的神經(jīng)元易產(chǎn)生分離。針對(duì)該問(wèn)題,本文通過(guò)實(shí)現(xiàn)神經(jīng)元的重分布,使聯(lián)系緊密的神經(jīng)元更容易分布到同一節(jié)點(diǎn),使進(jìn)程間的通信更加稀疏。同時(shí),對(duì)NEST 本身的通信機(jī)制進(jìn)行改進(jìn),利用稀疏交換思想大幅減少通信數(shù)據(jù)量,并配合ReLOC 算法提高通信效率。本文在使用重分布稀疏交換方法時(shí)只需要調(diào)用2 個(gè)函數(shù)來(lái)啟動(dòng)使用,與原版本NEST 的用戶交互相比并未發(fā)生很大的變化,此方法的效果隨著節(jié)點(diǎn)增多進(jìn)一步明顯,而實(shí)現(xiàn)代價(jià)隨節(jié)點(diǎn)和仿真時(shí)間的增加逐漸減少。后續(xù)將通過(guò)對(duì)神經(jīng)元進(jìn)行更有效的分配,進(jìn)一步縮短通信時(shí)間。同時(shí),由于本文算法對(duì)于擁有STDP 突觸的案例效果不佳,因此下一步也將考慮2 種突觸的平衡性優(yōu)化神經(jīng)元重分布算法。