華夏,朱錚皓,徐聰,張曦煌*,柴志雷,2,陳聞杰
(1.江南大學 人工智能與計算機學院,江蘇 無錫 214122;2.江蘇省模式識別與計算智能工程實驗室(江南大學),江蘇 無錫 214122;3.軟硬件協同設計技術與應用教育部工程研究中心(華東師范大學),上海 200062)
以脈沖神經網絡(Spiking Neural Network,SNN)[1]為代表的類腦計算在神經科學領域有著重要意義。目前針對SNN的很多研究采用軟件模擬方式[2-3],比較成熟的類腦仿真器如NEST(NEural Simulation Tool)[4]、Brain2[5]、Brian2GeNN(links Brian to Gpu enhanced Neuronal Network)[6]和CARLsim[7]等精確度高、靈活性強,因此應用廣泛。在實現平臺方面,由于SNN 本身具有明顯的分布式計算特點,且達到一定規模的SNN 才能展現出較強的智能水平,因此搭建大規模分布式平臺是構成類腦計算平臺的主流方式。
專用的類腦計算平臺[8-10]理論上能夠取得更高的性能與功耗指標,但是當專用計算平臺和所運行的SNN 工作負載不匹配時,計算能效會大打折扣,甚至還不如通用計算機系統[11]。因此,針對特定的SNN 工作負載,如何找到它在對應分布式計算平臺上的最佳映射是類腦計算領域的重要問題。
針對以上問題,劉俊秀等[12]提出一種動態優先級仲裁策略以解決SNN 硬件實現系統上的脈沖傳輸負載不均衡問題,有效提高了系統的穩定性。Balaji等[13]設計了一種將SNN 映射到神經形態芯片上的方法,通過合理映射有效減少了脈沖傳遞延遲和計算能耗。劉家華等[14]設計了一種將神經元映射到多核并行計算平臺上的方法,提升了并行計算環境下SNN 的仿真效率。Qu等[15]采用了帶時間戳的稀疏矩陣存儲方法,有效優化了類腦計算平臺的負載不平衡問題,提高了平臺上的SNN 仿真速度。Titirsha等[16]對神經形態芯片進行了總能耗建模,并提出一種基于啟發式的映射方法,能為神經元和突觸分配合理的計算資源,降低了神經形態芯片的能耗。Song等[17]提出了一種基于同步數據流圖(Synchronous DataFlow Graphs,SDFGs)的方法,將SNN 映射到多核硬件實現系統,并實現了系統吞吐量和資源消耗之間的平衡。這些工作提升了類腦計算平臺和芯片的穩定性與運行性能,但是這些映射方法與優化設計尚未綜合考慮多個方面的SNN 工作負載特性。
在眾多類腦仿真器中,NEST 仿真器在SNN 研究應用廣泛,它支持多種復雜程度各異的神經元和突觸模型,在分布式計算平臺上具有十分優秀的可擴展性[18]。在研究基于NEST 的SNN 工作負載方面,Kunkel等[19]在NEST 仿真器中設計了一種“NEST dry-run”模式,通過投入一個進程進行網絡仿真即可有效預測多進程并行環境下的內存和計算時間負載消耗。Nguyen等[20]分析了NEST 仿真器運行SNN 的時間代價,提出了中央處理器(Central Processing Unit,CPU)和圖形處理器(Graphic Processing Unit,GPU)協同工作時的SNN 仿真時間預測模型。上述工作雖然解決了類腦計算平臺負載消耗預測的問題,但是沒有從計算與通信負載平衡的角度考慮計算平臺合理映射的問題。
2021 年,筆者所在小組對SNN 進行了工作負載分析,針對NEST 仿真器建立了內存、計算和通信負載模型,實現了一種基于NEST 的SNN 工作負載自動映射器(Workload Automatic Mapper for SNN,SWAM)[21]。SWAM 能夠預測SNN的工作負載和在計算平臺上的映射結果,并給出映射指導。然而SWAM 尚未深入研究通信的實現機制、缺乏有效的負載模型參數獲取方法。在實際運行時,SWAM 存在針對通信工作負載的預測精度不高、對大規模網絡適用性較差的問題。
因此,本文在SWAM 基礎上進一步分析NEST 通信機制及通信操作算法,建立更精準的通信負載模型;針對負載模型中部分具有實時性的參數以及精準通信負載模型中的新增參數,設計了參數量化方法;設計了最大網絡規模預測模塊,提供了對不同計算平臺的最大網絡承載規模預測功能;在此基礎上實現了包含精準通信模型和新增功能的工作負載自動映射器SWAM2。
SNN 是類腦計算的基礎,被譽為第三代人工神經網絡,具有低能耗和高效率的特點。SNN 的主要構成要素包括神經元、突觸、連接拓撲、學習機制與可塑性等。SNN 運行過程可以分為神經元計算和突觸傳播兩部分,它們的計算分別由SNN 案例選擇的神經元模型和突觸模型決定。
神經元模型定義了神經元內部狀態更新和產生脈沖的過程,突觸模型定義了突觸前神經元產生的脈沖經突觸處理后發送給突觸后神經元的過程。在分布式平臺中,神經元分布在不同節點上,因此突觸的傳播需要進行節點間通信。
目前業界針對大規模SNN 主要通過搭建大規模分布式集群的方式降低單個計算節點上的內存消耗與計算時間消耗。但計算平臺的性能受節點規模影響,隨著節點數增加,單節點的計算時間消耗減少,但是節點間的通信時間增加。因此特定的工作負載和分布式平臺之間的映射都存在計算與通信平衡的問題。當投入節點數小于平衡點時,計算時間大于通信時間,未充分利用計算平臺性能;反之,過量投入計算節點會造成平臺的計算性能冗余。特定SNN 工作負載在分布式平臺上的最佳映射指通過確定合適的投入節點規模(最佳映射節點數),平衡計算與通信時間,最大限度減少SNN 案例的仿真耗時,保證平臺以最優的性能運行。
本文通過分析NEST 仿真器實現機制對SNN 工作負載進行研究。在NEST 上進行SNN 模擬主要分為創建、連接、仿真三個階段。
NEST 支持分布式計算,使用消息傳遞接口(Message Passing Interface,MPI)實現計算節點間的數據通信。NEST的創建和連接階段分別對應SNN 案例中神經元和突觸的構建,進行分布式計算時,NEST 根據任務分配機制在每個計算節點上分布神經元和突觸。
NEST 采用基于進程的輪詢算法分配神經元,將神經元按各自的全局標識編號(Global IDentifier,GID)分配到不同的計算節點中。如圖1(a)所示,由兩個節點組成的分布式計算平臺包含進程rank0 和rank1。NEST 根據神經元GID 以循環方式將總共4 個神經元均勻分布在兩個進程上,括號內的數字表示神經元的GID。代理變量用于記錄分布在其他進程上的神經元GID。

圖1 NEST運行機制Fig.1 NEST operation mechanism
NEST 中的突觸分配機制與該突觸連接的神經元相關聯,SNN 案例中的突觸根據各自連接關系,會被分配到其突觸后神經元所在的進程上。由于神經元的分配采用了輪詢算法,突觸也會近似均勻地分布到各個進程之中。
網絡仿真階段包括突觸傳遞脈沖(Deliver)、神經元更新(Update)和脈沖收集(Gather)三部分。在分布式平臺上,使用NEST 進行網絡仿真的計算負載消耗主要包括Deliver 和Update 階段中各進程上的神經元、突觸模型的更新時間,通信負載消耗主要是Gather 階段收集脈沖信息所需的進程間MPI 通信時間消耗。
如圖1(b)所示,脈沖收集階段負責收集所有進程上的脈沖信息。在該階段中,每個進程都記錄了本進程上產生脈沖的神經元,并且每個進程會把各自記錄的神經元的GID(斜線、魚鱗線表示)放入各自的通信緩沖區Sendbuffer,且要求所有進程的通信緩沖區大小相等。若有進程上的脈沖數量大于該進程的Sendbuffer 尺寸,則擴大該進程的Sendbuffer并且通過一次MPI_Allgather 通信將各個進程上的Sendbuffer同步到最新的尺寸,這可能導致緩沖區未填滿,未填充的緩沖區內容為空(空白方塊表示)。各進程Sendbuffer 大小確定后,通過MPI_Allgather 通信將所有進程的通信緩沖區依次匯總到全局通信緩沖區Globalbuffer,最后發送給每個進程。
SWAM 是一個基于NEST 的工作負載自動映射器,能夠預測SNN 工作負載與映射結果并完成映射。SWAM 包括工作負載建模和自動映射器設計兩部分內容。
1.3.1 基于NEST的工作負載模型
針對NEST 的工作負載包括內存、計算、通信三方面。在SWAM 中,已經針對這三方面的工作負載進行了建模。
在內存方面,每個進程的總內存消耗M由運行NEST 所需的基本內存消耗Mo,神經元內存消耗Mn和突觸內存消耗Ms三部分組成。
在計算方面,每個進程的計算時間消耗timecalculate包括神經元計算時間消耗Tn和突觸計算時間消耗Ts。
其中:tn_ref(i) 為處于不應期的神經元的單次更新時間;tn_unref(i)為非不應期且無脈沖產生的神經元的單次更新時間;tspike(i)為產生脈沖的神經元的單次更新時間;ts(z)為突觸單次更新時間;Nspike(i)是脈沖產生次數;cn_ref(i)、cn_unref(i)為仿真過程中神經元更新處于不應期、非不應期且非脈沖激發狀態的次數,cn_ref(i)、cn_unref(i)能夠根據Nspike(i)計算得出;nkind為神經 元類型總數,i∈[ 1,nkind]為神經 元類型編號;Avgout(jpre)(z)為突觸前神經元群落的出度;skind為突觸類型總數;z為突觸類型編號;numj為突觸前神經元群落的個數;jpre為群落的編號;p為使用NEST 進行SNN 仿真時投入的進程數量。
在通信方面,每個進程通過MPI 通信收集脈沖信息的時間消耗如下:
其中:Td為通信操作的執行次數;tMPI(sendbuffer,p)是在p進程規模下的通信時間消耗;sendbuffer為單個進程上的通信數據量大小;tbandwidth表示平臺帶寬對通信時間的影響。
1.3.2 自動映射器流程
SWAM 流程包括量化和自動化映射模塊,如圖2 所示。

圖2 SWAM流程Fig.2 SWAM flow
量化模塊:模型中的穩定參數通過量化程序獲取數值。穩定參數包括計算負載模型參數tn_ref(i)、tn_unref(i)、tspike(i)、ts(z)以及tMPI。
自動化映射模塊包含兩個部分:1)網絡參數自動采集(Auto_Collect),即在SNN 的構建階段自動采集模型中如Avgout(jpre)(z)、Td等網絡參數;2)工作負載預測與映射(Auto_Forecast&Map),即將量化模塊和Auto_Collect 獲取的參數轉化為工作負載消耗的預測值,并根據預測結果,按映射標準給出最佳映射節點數。
本章在SWAM 的基礎上,優化了通信負載模型,提出了負載模型參數更為精準的量化方法,以提升SWAM 工作負載預測性能。同時,新增并設計了最大網絡規模預測模塊,提供針對不同計算平臺最大網絡承載規模的預測功能。在此基礎上設計并實現了一種更為精準的工作負載自動映射器SWAM2。
在通信工作負載方面,SWAM 缺乏對NEST 通信機制和通信操作算法的分析,導致負載模型準確性不高。本節基于SWAM 對建模過程中的通信負載模型進行了優化設計,以提高通信時間的預測準確率。
2.1.1 NEST通信模塊算法建模
根據1.3 節的分析,使用NEST 進行SNN 仿真時,主要通過MPI_ALLgather 通信操作傳遞脈沖信息,因此針對MPI_ALLgather 的實現進行算法分析并建模。
MPI_ALLgather 是一種全局收集通信操作,每個進程都收集來自所有進程的發送數據Sendbuffer,并把收集的數據匯總為全局通信數據Globalbuffer。為了建立MPI_ALLgather操作的時間代價模型,將通信量大小為n的點對點通信成本tP2P建模為通信建立時間和網絡傳輸時間,如式(6)所示:
其中:ta為通信建立時延;tb為網絡時延。
MPI_Allgather 操作中每個進程都需要收集其他p-1 個進程上的發送數據,因此它需要的網絡傳輸數據量為sendbuffer× (p-1),其中sendbuffer為單進程的通信數據量大小。此外,由于NEST 調用了MPICH(Message Passing Interface CHameleon)[22],根據實際情況選擇遞歸倍增、Bruck 和環算法中的一種實現全局收集通信操作,三種算法在實現步驟上有所不同。參考文獻[23]的工作,對MPI_ALLgather 操作的時間代價tcomm建模:
其中:cstep是執行MPI_Allgather 操作所需的操作步驟數。在不同進程數p和Globalbuffer 長度下cstep取值如下:
1)當p為2 的整數次冪,且Globalbuffer 長度小于512 KB時,采用遞歸倍增算法,cstep=lbp。
2)當p非2 的整數次冪,且Globalbuffer 長度小于80 KB時,采用Bruck 算法,cstep=l bp。
3)其他情況下采用環算法,cstep=p-1。
MPI_Allgather 操作中的通信建立時延ta包括在源節點上進行數據整合和目標節點上進行數據分解、校驗等所需的時間,因此ta與計算平臺的性能有關,與通信量大小無關。網絡時延tb表示每字節通信數據在通信網絡中的傳輸時間,tb的值與平臺通信帶寬B有關。
2.1.2 通信負載模型優化
基于上述分析,可對NEST 中每個進程進行MPI 通信的時間消耗建立更精準的工作負載模型:
其中:tcomm(sendbuffer,p)為通信帶寬為B的計算平臺在p個進程規模下,調用一次MPI_Allgather 通信操作所耗的時間;sendbuffer為每個進程的通信數據量大小。
相較于SWAM 的通信負載模型,精準通信負載模型更加重視通信時間代價隨平臺投入進程數變化的規律,同時更好地體現了平臺網絡帶寬對每次通信操作的影響。
本節對部分具有實時性的建模參數難以獲取的問題進行分析,然后設計了一種參數量化方法。此外,針對精準通信負載模型中新增的參數設計了量化方法。
2.2.1 建模參數獲取分析
如表1 所示,負載模型中的參數按照類型可分為時間參數和網絡參數。精準通信負載模型中新增參數ta、tb為時間參數,sendbuffer為網絡參數。根據對NEST 仿真架構的分析,網絡參數中的進程間通信量sendbuffer和各神經元群落的脈沖產生次數Nspike在SNN 仿真過程中持續增加,且由于脈沖發射率具有實時性,難以對它的變化規律進行建模,一般情況下必須通過完整網絡仿真獲取。因此可以將sendbuffer和Nspike劃分為實時網絡參數。

表1 負載模型參數分類Tab.1 Classification of workload model parameters
實時網絡參數均不受計算平臺性能影響,但是與投入仿真進程數和具體SNN 的規模、連接拓撲有關。因此,實時網絡參數sendbuffer和Nspike的獲取必須針對不同情形進行多次完整網絡仿真,它的代價無疑較大。針對此問題,SWAM 通過少量預仿真采集網絡中神經元平均脈沖發射率,根據脈沖發射率和本地進程的神經元數量預測參數Nspike,同時根據Nspike推測平均通信發射任務量以框定sendbuffer。
2.2.2 Single_Mode實時網絡參數量化方法設計
針對實時網絡參數的獲取問題,本節參考“NEST dryrun”[19]的設計思想提出了一種實時網絡參數的低成本量化方法Single_Mode。Single_Mode 是一種經過修改的NEST 仿真器運行模式。在Single_Mode 下進行網絡仿真只需投入一個進程rank0,它的特殊設計能夠使rank0 的網絡仿真行為類似于NEST 常規流程中投入p個進程進行網絡仿真時rank0的仿真行為。因此,Single_Mode 下采集進程rank0 上的實時網絡參數能夠作為對參數真實數值的量化。Single_Mode 的具體實現包含對NEST 中網絡構建流程和仿真流程的修改。
1)Single_Mode 網絡構建流程。
運行Single_Mode 需要設定所需量化的條件下的網絡參數(目標SNN 和投入網絡仿真進程數p)。網絡構建時只構建屬于進程rank0 的神經元和突觸數據結構。除rank0 外的p-1 個進程稱為偽進程,偽進程未實例化。
Single_Mode 下的網絡構建流程中,進程rank0 獨立運行,不需要任何來自偽進程的信息。進程rank0 上僅實例化滿足條件GID%p=0 的神經元。由于存儲突觸信息的數據結構與其目標神經元(突觸后神經元)存儲在同一進程上,因此進程rank0 僅需要檢測突觸的目標神經元是否分布在本地,以決定是否構建記錄該突觸的數據結構。
2)Single_Mode 網絡仿真流程。
NEST 常規仿真流程中,每個進程獨立進行神經元更新,突觸傳遞脈沖的過程。但是脈沖收集階段需要收集其他進程上的脈沖信息,為了模擬真實仿真流程,Single_Mode 實現中修改了NEST 仿真流程中的脈沖收集階段。
如圖3 所示,Single_Mode 下的脈沖收集階段中rank0 會將神經元產生的脈沖信息放入通信緩沖區Sendbuffer(rank0)。然而偽進程都未實例化,不會產生脈沖信息,為了模擬p個進程下的真實仿真行為,使rank0 能夠收集偽進程的脈沖信息,Single_Mode 為每個偽進程構造了偽脈沖信息。構造方法參考了“NEST dry-run”的設計,在NEST 中神經元群落均勻分布在所有進程上,每個進程都包含了神經元群落的一個子集。偽脈沖信息的構造假設在同一時間內,一個神經元群落的所有子集產生的脈沖數量幾乎相等。因此Single_Mode 在仿真的每個時間片內構造了與rank0 上的脈沖數量相同的偽脈沖信息,以填充偽進程的通信緩沖區。

圖3 Single_Mode脈沖收集階段設計Fig.3 Design of spike gathering stage in Single_Mode
Single_Mode 下的脈沖收集階段設計如圖3 所示,以2 個進程為例,在每個仿真時間片內rank0 把產生的脈沖信息放入 Sendbuffer(rank0)。偽進程 rank1 的脈沖信息Sendbuffer(rank1)的構建方式是:首先將Sendbuffer(rank0)的內容直接復制給Sendbuffer(rank1);其次,將Sendbuffer(rank0)的非零項(斜線)替換為隨機選擇的神經元GID(魚鱗線表示),但必須滿足GID%p=1,即這些隨機選擇的神經元GID,即使在NEST 常規流程中也會被分配到進程rank1 上。完成偽進程構建后無需進行MPI 通信,而是把rank0 和所有偽進程的脈沖信息依次連接組建全局脈沖信息,rank0 根據全局脈沖信息更新突觸和神經元然后繼續進行下一輪仿真。
這種做法保證了所有進程的發送緩沖區尺寸相等且隨rank0 的脈沖發射率而變化。盡可能模擬投入多進程進行仿真時的真實網絡狀態。按照Single_Mode 的設計進行網絡構建和仿真后,通過在NEST 內核中的統計函數采集rank0 上的最終的通信緩沖區尺寸sendbuffer和各群落的脈沖激發次數Nspike以完成對實時網絡參數的量化。
采用Single_Mode 量化實時網絡參數只需投入一個進程,且無需進行MPI 通信,顯然是一種低成本的方法。根據2.2.1節的分析,實時網絡參數數值與計算平臺算力無關,因此Single_Mode 的量化結果具有平臺通用性。
2.2.3 通信模型時間參數量化方法設計
2.1 節優化的精準通信負載模型中新增的時間參數包括ta和tb,它們的數值與平臺性能和通信帶寬有關。
量化方法是:首先通過控制變量法獲取不同進程規模p、通信量sendbuffer下的MPI_Allgather 運行時間tcomm以形成訓練數據集。然后通過LM(Levenberg-Marquardt)最小二乘優化算法對式(7)中的MPI_Allgather 操作時間代價模型進行訓練,最終得出ta和tb的值,如算法1 所示。

本節在1.3.1 節提出的內存負載模型基礎上,設計了針對分布式計算平臺的最大網絡規模預測模塊。
當SNN 在每個進程上的內存消耗等于計算平臺單個節點的最大可用內存Mh(排除系統運行等內存消耗)時,此時的網絡規模即為平臺所能承載的最大網絡規模。在分布式平臺上使用NEST 構建SNN 時,每個進程沒有為非本地神經元、未與本地神經元建立連接的神經元提供基礎設施,因此可對內存負載模型中的神經元內存負載Mn和突觸內存負載Ms進行優化:
其中:N、Np為網絡規模和單節點神經元數分別是進程為每個神經元提供的神經元、突觸基礎設施內存消耗以及本地神經元基礎設施內存消耗;mn和ms為單個神經元模型和突觸模型的內存消耗。
綜上所述,對于神經元平均入度為Avgin的SNN,單個節點最大網絡規模與平臺投入進程數滿足以下關系:
最大網絡規模預測模塊按照式(11)的模型,在確定計算平臺最大可用內存Mh以及投入進程數p后,即可預測出平臺單節點最大網絡規模Nfull。
SWAM2 整體流程如圖4 所示,2.1 和2.2 節的工作分別是對網絡自動化映射和量化模塊的優化。

圖4 SWAM2流程Fig.4 SWAM2 flow
2.4.1 量化模塊
SWAM2 的量化模塊在保留了SWAM 原有的穩定參數量化功能的基礎上,使用優化量化方法獲取了實時網絡參數和通信模型中的時間參數。在目標類腦計算平臺上,使用Single_Mode 運行目標SNN 案例即可完成實時網絡參數的量化。通過在Single_Mode 中設置不同的網絡仿真進程數,可以量化不同進程規模下的實時網絡參數。
對于通信模型中的時間參數ta和tb,首先在目標類腦計算平臺上多次運行MPI_Allgather 通信操作,每次運行時改變進程規模和通信量,采集通信操作運行時間形成訓練數據集,然后調用通信時間參數量化算法獲取參數ta和tb。此外,式(11)中的建模參數和ms在同一個計算平臺上都是固定值,屬于穩定參數,通過手動分析量化獲取。
量化模塊獲得的所有實時網絡參數、時間參數和穩定參數放入參數記錄表中進行存儲,后續流程可以直接讀取表中數據進行工作負載預測和分析。
2.4.2 網絡自動化映射與最大網絡規模預測
網絡自動化映射模塊保留了網絡參數自動采集功能(Auto_Collect)。在工作負載預測與映射(Auto_Forecast&Map)中采用了精準通信負載模型,將量化模塊、Auto_Collect獲取的所有參數轉化為不同進程規模下的計算時間timecalculate、通信時間timeMPI等負載預測結果。
SWAM2 將SNN 案例在計算平臺上的仿真時間消耗作為衡量平臺運行性能的標準,SNN 的仿真時間消耗即是timecalculate和timeMPI之和。SWAM2 按照這一標準,給出平臺取得最優性能(SNN 的仿真時間消耗最少)時投入的進程數量Pbest。由于NEST 在分布式計算平臺的每個節點上運行一個進程,因此Pbest的數值是SNN 在計算平臺上的最佳映射節點數。
最大網絡規模預測模塊首先從參數記錄表中讀取式(11)所需參數,然后通過函數接口接收描述計算平臺信息的參數Mh和p,最后即可完成對最大網絡規模的預測。
本文采用的實驗平臺為由PYNQ Z1/Z2(PYthon productivity for zyNQ Z1/Z2)[24]組成的大規模分布式類腦計算平臺。如圖5 所示,類腦計算平臺的每個節點都包含一個ARM(Acorn Risc Machine)架構的Cortex-A9 處理器及現場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)。計算節點通過1 000 Mb/s 網絡帶寬的以太網連接到網絡交換機,將計算節點分成2 組連接在2 個網絡交換機上,交換機互相橋接構成一個完整平臺,以實現SNN 并行計算。

圖5 PYNQ類腦計算平臺Fig.5 PYNQ brain-like computing platform
在之前的工作中已針對STDP(Spike Timing Dependent Plasticity)突觸和IAF(Integrate-And-Fire)神經元設計了加速模塊[25-26],選擇調用或不調用加速模塊可獲得兩種不同性能的類腦計算平臺(ARM+FPGA 和ARM)。
為驗證SWAM2 針對不同類型SNN 模型的有效性,本文對兩種不同類型的典型案例進行測試。
1)Example1:高性能計算機基準測試[27]。該測試能夠衡量整個系統的性能,側重于神經形態特性驗證。包含兩個神經元群落in 和ex,神經元均為iaf_psc_alpha 類型,兩個群落中神經元數量之間的比例為1∶4,網絡規模可以成倍調節。該網絡包含靜態、STDP 兩種類型的突觸。
網絡以11 250 個神經元為基準,選取的縮放倍率為1.0。ex 包含9 000 個神經元,in 包含2 250 個神經元,網絡模擬運行250 ms,運行過程中每個神經元更新2 500 次。ex 中的神經元通過STDP 突觸與in 中神經元連接,in 中的神經元通過靜態突觸與ex 中神經元連接,網絡包含約8 100 萬條STDP 突觸和4 556 萬條靜態突觸。
2)Example2:皮質層視覺模型[28]。該模型是無監督的圖像分類算法,可以模仿生物學機制進行圖像分類任務。該SNN 有5 層,前4 層網絡為訓練部分,第5 層為推理部分。神經元模型均是iaf_psc_exp,無設備類型神經元,突觸模型包括靜態突觸和STDP 突觸。
在網絡訓練和驗證過程中均使用了Caltech 101 數據集,模型的網絡規模與數據集圖片尺寸成正比,本文采用尺寸為300× 300 的數據集進行測試,大約產生70 萬個神經元、3 萬條STDP 突觸和570 萬條靜態突觸。網絡模擬運行50 ms,運行過程中每個神經元更新500 次。
為了驗證SWAM2 中優化的通信模型及參數量化方法的有效性,將SWAM2 和SWAM 針對兩種案例預測的實時網絡參數、工作負載數據分別與實測數據進行對比;同時根據SWAM2 和SWAM 預測的計算、通信工作負載,推導出最佳映射節點數并與實測的最佳映射節點數進行對比。
3.3.1 負載數據預測結果對比與分析
在預測實時網絡參數方面,對比表2 和表3 中數據可知,SWAM2 針對案例Example1 和Example2 預測的通信數據量sendbuffer在不同進程規模下都十分接近實測數據,通過計算預測值之和與實測值之和的比值,得到SAWM2 針對這兩個案例的sendbuffer的平均準確率為95.80%,而SWAM 的預測平均準確率為81.46%。

表2 Example1中的sendbuffer 單位:B Tab.2 Comparison of sendbuffer in Example1 unit:B
在工作負載預測方面,表4 對比了SWAM2 和SWAM 對實時網絡參數的預測準確率以及在兩種計算平臺(ARM+FPGA 和ARM)上的平均工作負載數據預測準確率。此外,以ARM 平臺為例,圖6 展示了不同進程數下SWAM2 和SWAM 對計算、通信負載的預測結果,以及實測的負載數據。實驗結果表明,隨著進程數增加,通信時間逐漸增長,計算時間被稀釋,說明SNN 工作負載映射的問題真實存在,尋找最佳映射節點數能夠平衡計算與通信負載,減少SNN 的仿真耗時。SWAM2、SWAM 的預測結果均能夠反映負載數據變化趨勢,而SWAM2 的負載預測結果明顯更加接近真實數據。

表4 預測準確率對比 單位:%Tab.4 Comparison of predicted accuracy unit:%
在通信負載預測方面,從表4 可知,SWAM2 通過建立精準通信負載模型與準確預測參數sendbuffer,有效提升了對通信負載預測的準確率。SWAM2 針對2 個案例預測的timeMPI與實測數據間的平均誤差只有2.60 個百分點,相較于SWAM,減少了12.62 個百分點。
在計算負載預測方面,由于優化了建模參數Nspike的量化方法,相較于實測數據,SWAM2 對兩種案例預測的timecalculate的預測誤差只有1.59 和2.36 個百分點,相較于SWAM,預測誤差減少了5.15 個百分點。
3.3.2 映射結果對比與分析
為了驗證SWAM2 在預測最佳映射結果方面的有效性,針對兩種案例分別在ARM 和ARM+FPGA 兩個平臺上進行仿真時間和映射結果預測對比。如圖7 所示,對通信和計算負載預測準確率的提高使仿真時間的預測更加準確,進而提高了最佳映射結果的準確率。

圖7 SWAM2和SWAM仿真時間預測與實測數據比較Fig.7 Comparison of SWAM2 and SWAM predicted simulation time with measured data
SWAM2 與SWAM 輸出的最佳映射結果Pbest如表5 所示。在ARM 和ARM+FPGA 兩個平臺上,SWAM2 針對Example1預測Pbest的預測誤差分別為2 和0 個節點;針對Example2 預測Pbest的誤差分別為1 和0 個節點。計算預測誤差之和與實測數據之和的比值,得到的預測誤差率為2.45%。與實測數據相比,SWAM2 預測Pbest的平均準確率達到了97.55%,相較于SWAM 準確率提升13.13 個百分點。再次驗證了SWAM2 對通信負載模型和建模參數獲取進行的優化設計的有效性。

表5 最佳映射結果對比Tab.5 Comparison of best mapping results
為了驗證SWAM2 最大網絡規模預測模塊的有效性,將預測結果與通過實測得出的單節點最大網絡規模進行對比。相較于ARM 平臺,ARM+FPGA 平臺的每個節點需要消耗額外64 MB 內存以支持加速,因此它的單節點最大網絡規模小于ARM 平臺。對比結果如表6 所示。

表6 平臺NM與實測數據對比Tab.6 Comparison between platform’s NM and measured data
對實測數據(ARM_M 和ARM+FPGA_M)分析可知,隨著投入節點數增加,單節點最大網絡規模數(NM)減少,原因在于每個節點提供給非本進程神經元的基礎設施內存消耗增大,因此預測分布式計算平臺的最大網絡規模時,考慮基礎設施的內存消耗十分重要。SWAM2 預測的NM十分接近實測結果。以ARM 平臺為例,投入100 節點的NM的預測結果和實測結果(ARM_P 和ARM_M)分別為2 372 和2 250 個神經元。采用與3.3.2 節相同的計算方式,根據預測數據和實測數據得到預測誤差,計算預測誤差之和與實測數據之和的比值得到誤差率,最后得到預測準確率。針對兩種平臺的NM的預測準確率為97.33%。證明了考慮基礎設施內存消耗的模型的準確性。
SWAM2 的內存資源消耗主要包括參數記錄表(V_static)和自動化映射模塊記錄SNN 信息所需的數據結構(V_collect)。上述內存資源消耗與網絡模型規模有關,如表7所示,針 對Example1 和Example2,SWAM2 分別消耗了181.1 KB 和9 678.3 KB,因此SWAM2 的內存消耗處于較低水平。

表7 SWAM2內存消耗 單位:KB Tab.7 SWAM2 memory consumption unit:KB
在時間資源消耗方面,SWAM2 的時間代價較為穩定,針對Example1 和Example2 的時間消耗分別為0.9 s 和2.5 s,與通過真實網絡仿真的方式進行映射試探相比,SWAM2 擁有絕對的時間優勢。
綜上所述,采用了精準通信負載模型與優化的參數量化方法后,SWAM2 在預測平臺通信、計算負載數據方面相較于SWAM 更為精準,對最佳節點映射的預測更為準確。同時SWAM2 新增了最大網絡規模預測功能以幫助使用者針對不同計算平臺有效預測出最大承載網絡規模。此外,針對SWAM2 的資源消耗評估可知,SWAM2 所需的內存和時間代價較小,具備輕量級的優勢。
針對如何在類腦計算平臺上實現工作負載和計算資源的合理映射問題,本文在SWAM 工作負載自動映射器的基礎上加以改進,通過建立精準通信負載模型以及優化建模參數量化方法的方式,提升了對工作負載中的計算、通信時間以及最佳映射節點數的預測準確率;同時設計了最大網絡規模預測模塊,準確預測了不同計算平臺所能承載的最大網絡規模。在此基礎上實現了一種準確度更高、功能更全面的SNN工作負載自動映射器SWAM2。
下一步工作將從以下兩方面展開:1)深入分析工作負載參數的影響因素,優化負載模型參數獲取方法,以實現更加便捷、準確的參數獲取。2)考慮輸入數據特性、模型計算精度等更多因素對SNN 工作負載的影響,從更廣闊的層面探究SNN 工作負載的合理映射問題。