999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

PEST:由PYNQ 集群實現的高能效NEST 類腦仿真器

2021-11-17 08:23:38李佩琦郁龔健劉家航柴志雷
計算機與生活 2021年11期
關鍵詞:模型

李佩琦,郁龔健,華 夏,劉家航,柴志雷,3+

1.江南大學 物聯網工程學院,江蘇 無錫214122

2.江南大學 人工智能與計算機學院,江蘇 無錫214122

3.江蘇省模式識別與計算智能工程實驗室,江蘇 無錫214122

當前,以深度學習為代表的智能計算系統仍存在系統能耗高、通用智能水平弱兩個主要瓶頸,難以成為解決人工智能問題的終極手段[1]。而人類的大腦是由約1011個神經元、1015個突觸構成的復雜生物體,不但具有很高的智能水平而且功耗只有20 W 左右[2],其計算模式非常值得研究借鑒。目前的類腦計算主要基于工作機理更接近生物大腦的脈沖神經網絡(spiking neural networks,SNN)來實現[3]。由于達到一定規模的SNN 才能展現出較強的智能水平,類腦計算最具挑戰性的難題之一,就是對大規模SNN進行仿真時保持系統的高性能及低功耗。

針對類腦計算的高能效需求,工業界和學術界嘗試采用專用類腦芯片和系統來實現脈沖神經網絡。2018 年曼徹斯特大學推出了SpiNNaker2 神經芯片,該芯片相比第一代專門構建了用于指數和對數運算的硬件加速器,通過定點化設計,在有一定精度損失的情況下提高了芯片能效比[4-5]。2020 年,英特爾推出神經擬態系統Pohoiki Springs,其內部由768顆Loihi 神經擬態芯片組成,該系統在低于500 W 功耗的情況下可使用多達1 億個神經元來執行任務[6]。“天機芯”是清華大學類腦計算研究中心施路平團隊研發的一款新型人工智能芯片,整個芯片由156 個計算單元(Fcore)組成,包含約4 萬個神經元和1 000 萬個突觸,支持機器學習算法和現有類腦計算算法[7]。2020 年浙江大學推出了類腦芯片“達爾文2”,該芯片由576 個內核組成,每個內核支持256 個神經元,神經突觸超過1 000 萬,通過系統級擴展可構建千萬級神經元類腦計算系統[8]。

專用的類腦芯片與系統可以達到更佳的性能和功耗指標,但存在面向不同應用時適應性差的缺陷。當其與應用負載不匹配時,能效表現會大打折扣。例如,在SpiNNaker 上運行一個全尺寸皮質微電路模型時[9],由于該模型中神經元連接的突觸數量超過了SpiNNaker 設定的最優值,平臺無法運行在最優狀態,計算能效還不如基于高性能集群的NEST 軟件模擬方式[10]或單塊GPU(graphics processing unit)方式[11]。

類腦計算的另一種實現方式是以軟件方式構建類腦仿真器,目前比較成熟的類腦仿真器如Brain[12]、NEST[13]、BindsNET[14]等已得到了大量的應用,并且形成了各自的生態。采用軟件方式實現具有靈活性強、精度高等優點,但存在計算復雜度高、仿真速度慢、運行功耗高等問題。

軟件實現的類腦仿真器中,NEST 仿真器生態完整、用戶眾多,相比其他類腦仿真器,NEST 交互接口完備,可以在Arm、X86 等不同計算平臺上運行,并且支持并行與分布式計算。本文首要解決的工程問題是如何在保持良好應用生態的前提下追求計算能效最高,因此本文的工作選擇通過PYNQ 集群加速NEST,而不是直接做類腦芯片或系統。

在基于PYNQ 集群加速NEST 時,需要解決的關鍵問題是如何通過硬件定制、軟硬件協同,使得SNN的應用負載和硬件平臺相互最佳適配,達到最佳能效。本文提出一種基于PYNQ 集群的高能效NEST類腦仿真器PEST,希望以此為類腦仿真提供一個合適的計算平臺,本文的主要工作如下:

(1)構建大規模PYNQ 集群,實現基于NEST 仿真器的規模可伸縮類腦計算系統;

(2)針對單節點進行優化,設計軟硬件數據交互接口,通過FPGA(field programmable gate array)并行與流水化設計、計算定點化等實現IAF 神經元FPGA硬件加速;

(3)針對集群整體進行優化和分析,設計集群的網絡文件系統,分析集群性能功耗平衡點,通過消息傳遞接口(message passing interface,MPI)分布式計算實現PEST 高能效計算。

1 NEST 仿真器

NEST 是一個可以構建大規模神經網絡模型的脈沖神經網絡仿真器。它包含了50 多種神經元模型和10 余種突觸模型[15]。在NEST 中,不同的神經元和突觸模型可以共存,任何兩個神經元都可以有不同性質的多重連接。NEST的另一個特點是可以進行擴展,用戶可以添加自定義神經元、突觸和設備模型[16]。目前NEST 作為主流的脈沖神經網絡模擬器被廣泛使用。NEST 的應用從基礎的單個神經元實現[17]到復雜的人類小腦網絡模型仿真[18]都有涉及,并且運行在NEST 上的應用都可通過Python 語言進行開發。

如圖1 所示,NEST 仿真器在運行時主要包含創建、連接、仿真3 個階段。在仿真階段中一般又分為發送、更新和收集3 個部分。針對不同的應用場景,每部分的仿真時間所占的比例有一定的差異。

Fig.1 NEST simulator running mechanism圖1 NEST 仿真器運行機制

NEST 仿真器通過C++進行開發,在NEST 中包含一個獨立的PyNN 后端接口,允許與PyNN 配合使用。PyNN 是一款開源的神經網絡仿真器的通用接口,用戶可以通過PyNN 將Python 腳本直接運行在NEST 仿真器上,實現通過Python 對NEST 的編程和調試。

NEST 可支持并行與分布式計算,它通過自身包含的MPI 通信協議與多臺計算機進行數據通信。通過MPI 的并行編程模式可以建立一個由多臺計算機構成的計算集群,圖2 展示了NEST 運行小型分布式網絡時的運行機制。

Fig.2 NEST parallel distributed computing diagram圖2 NEST 并行分布式計算圖

圖2 中,NEST 運行在由2 臺計算機(節點)構成的分布式計算平臺上,NEST 進行分布式計算時會將要計算的神經元平均分配給每個節點,圖中設定4 個IAF 神經元,因此每個節點分配2 個,Proxy 用來表示存在于其他節點上的神經元id。Sg 和Sd 分別代表脈沖生成器和脈沖探測器,這兩部分需要在每個節點上進行構建。

2 基于PYNQ 的計算集群設計與搭建

2.1 PYNQ-Z2 計算節點

計算集群采用Xilinx PYNQ-Z2 開發板構建。其主芯片為Zynq 7020,該芯片是Xilinx 公司推出的全可編程SoC 芯片(all programmable system on chips,APSOC)。如圖3,它主要由ARM 處理器(processing system,PS)和可編程邏輯FPGA(programmable logic,PL)兩大部分組成[19],兩部分的數據主要通過AXI 總線進行傳輸。

Fig.3 Hardware architecture of PYNQ-Z2圖3 PYNQ-Z2 硬件架構

2.2 PYNQ 框架

PYNQ 框架是在FPGA+CPU 異構系統的基礎上引入了Python,其提供了一種更友好、更易用的開發方式,降低了FPGA 開發門檻。PYNQ 開源框架主要包含PYNQ 硬件庫和Overlay 設計兩部分[20]。PYNQ硬件庫可用于加速軟件應用程序,或為特定應用程序定制專用硬件平臺。Overlay 設計由兩個主要部分組成,一個是PL 設計(生成bitstream),另一個是Tcl項目框圖文件。PL 設計通常是高度優化的特定任務,Overlay 通常設計為可配置的,可用于不同的應用程序中。

圖4 為PYNQ 框架硬件結構圖,用戶通過PC 訪問ARM 端的Jupyter,在Jupyter 中可以調用PYNQ 硬件庫控制FPGA 以實現各種功能。

Fig.4 Hardware structure diagram of PYNQ framework圖4 PYNQ 框架硬件結構圖

2.3 PYNQ-Z2 計算節點

2.3.1 整體設計

Fig.5 Cluster hardware structure diagram圖5 集群硬件結構圖

PYNQ 集群的結構設計如圖5 所示,整體可以分為三層:第一層為計算節點層;第二層為網絡交互層;第三層為系統控制層。計算節點層在PYNQ 集群中負責數據的處理,該層每個節點間沒有連接關系,各節點都通過以太網連接到網絡交互層。網絡交互層主要是由網絡交換機組成的,在運行時計算節點間會相互發送脈沖信息,該層的主要任務是負責節點間信息傳輸,另外系統控制層的各種指令會通過該層發送到每一個節點上,該層還起到連接系統控制層和計算節點層的作用。系統控制層由計算節點中的主節點構成,任意節點都可充當主節點,用戶可自行定義,它相比其他節點最大的不同是要負責計算任務的分發和接收其他節點處理完的計算結果,主節點在系統運行時也要執行相應的計算任務,整體上與其他節點的差異很小。

該集群可擴展性強,由于在本集群中不涉及到任何的專用電路,可以根據需要對集群規模進行相應的調整。如果要對計算節點進行擴充只需要將新的計算節點與網絡交互層相連并且保證主節點能夠訪問到該節點即可。PYNQ集群計算平臺如圖6所示。

Fig.6 PYNQ cluster computing platform圖6 PYNQ 集群計算平臺

2.3.2 集群計算規模

單塊PYNQ 開發板的內存大小為512 MB[21],通過實際測試,在排除用于運行系統和NEST 仿真器初始化所需要的內存后,可用的內存大小約為200 MB左右。NEST 仿真器運行時每個神經元和突觸所占用的內存大小分別約為1 500 B 和50 B[22]。如果NEST 運行在單節點上,每個節點上最多可以支持14萬個神經元或者410 萬個突觸的計算規模。如果多個節點同時工作,由于NEST 在進行分布式計算時會將神經元和突觸平分給全部節點進行計算,在單節點的計算規模不變的情況下,增加節點數量,相當于成倍擴大了計算規模,理論上N節點的集群最大支持14×N萬個神經元計算或者410×N萬個突觸計算。

2.3.3 網絡設計

集群在運行時,位于各節點上的神經元在達到閾值時會發射脈沖給目標神經元,如果目標神經元位于其他節點上則會通過網絡交互層將脈沖信息發送到對應節點,在PYNQ 集群中使用了2 個千兆交換機通過橋接的方式構建網絡交互層。NEST 中單個神經元發送脈沖時通信數據量為4 B,并且單個神經元脈沖發射頻率通常低于100 次/s[16]。假設每個節點都工作在理論最大神經元數量下,并且全部神經元的所有脈沖都發射到其他節點,那么每個節點的通信量為53 MB/s,千兆交換機的傳輸速度高于該值,可以保證集群物理層的數據傳輸需求。

3 基于PYNQ 集群的NEST 軟硬件協同設計

3.1 單節點的實現與優化

3.1.1 單節點實現

單節點設計如圖7 所示,用戶可以通過Python 設計SNN 計算模型并運行在Jupyter Notebook 上,在Jupyter Notebook 中調用PyNN 庫,PyNN 通過PyNEST界面或者SLI 解釋器運行NEST 來實現相應的功能,ARM 端的NEST 仿真器包含有AXI 接口可以實現與FPGA 部分的數據傳輸。由于FPGA 設計靈活、可以并行計算的特點,可以將NEST 仿真器上適合并行計算的步驟(神經元更新、突觸更新等)根據使用需求移植到FPGA 上進行計算,提升NEST 仿真器的整體計算速度。

Fig.7 Single-node PEST structure framework圖7 單節點PEST 結構框架

3.1.2 PYNQ-Z2 內存分配

在PYNQ 中通常會通過CMA 函數申請一段連續內存來實現ARM 與FPGA 之間的信息交互。CMA 函數申請到內存后會將內存的起始地址發送給ARM 與FPGA,ARM 與FPGA 再將所要相互傳輸的數據寫入到這塊內存中以供對方通過內存地址直接讀取。通過CMA 函數申請內存可以根據實際需求申請內存大小,但是采用此種方法申請的內存起始地址隨機,并且每次使用時都需要重新申請。

為了方便ARM 與FPGA 之間進行數據的交互,將PYNQ-Z2 的內存空間專門劃分出一部分用于數據交互,避免每次使用時都要重新申請內存,內存優化如圖8 所示。在PYNQ 中DDR 大小為512 MB,內存地址為0x0-0x20000000,劃分的共享內存大小由所傳輸的數據量決定,計算公式為:

其中,ddr_size為內存的整體大小;neuron_num為神經元的數量;data_type為數據類型;para_num為神經元的參數數量。

Fig.8 PYNQ-Z2 shared memory allocation diagram圖8 PYNQ-Z2 共享內存分配圖

根據公式,本設計將每個節點的共享內存大小設定為64 MB,起始地址為0x1C000000,該共享內存大小可以保證單節點在最大神經元數量時每個神經元存儲119 個4 B 參數,滿足NEST 計算時的使用需求。內存重新分配后,ARM 與FPGA 進行數據交互可以直接將數據寫入共享內存中而不需要每次重新申請內存。

3.1.3 通用數據傳輸接口設計

NEST 運行時神經元與突觸的類型和數量與計算模型的需求相關,在運行不同的計算模型時NEST計算瓶頸會有很大的不同,用戶可以根據不同的計算需求將需要被加速的計算模塊放到FPGA 上進行并行和流水化設計,因此設計通用的數據傳輸接口非常必要。

ARM 端與FPGA 兩部分數據傳輸的接口設計如圖9 所示,被加速部分為計算瓶頸,將該部分在ARM端移除,放到FPGA 部分重新設計。當ARM 端的NEST 仿真器開始運行時,首先映射一段共享內存用來存放需要FPGA 計算的數據,當開始仿真時,將計算所需數據存入共享內存中。

Fig.9 Software and hardware general data interface structure diagram圖9 軟硬件通用數據接口結構圖

當數據準備完成后,通過軟件驅動程序將內存映射的地址data_address 通過AXI 控制總線發送給FPGA,FPGA 根據data_address 讀取共享內存中對應數據進行計算。該部分的偽代碼如下所示,其中mem_size為每段數據所需要的內存大小,fpga_address為FPGA 控制總線的基地址,offset 為控制總線的地址偏移量。

計算完成后FPGA 會通過AXI 控制總線發送完成信號到ARM 端,ARM 端接收到完成信號從共享內存的指定位置讀出所需數據繼續運行并解除映射,該部分偽代碼如下所示:

3.1.4 IAF 神經元的硬件設計

在NEST 仿真器中,每個神經元的計算相對獨立,各個神經元在進行更新的時候不會用到其他神經元的數據和參數,該種計算方式非常適合通過FPGA 進行并行計算。IAF 神經元是指數泄漏積分-觸發神經元模型,其在SNN 中應用廣泛,計算相對復雜,很可能會成為影響計算速度的瓶頸,對其進行硬件加速十分必要。在不應期之前IAF 神經元只更新部分參數,只有當不應期到來之后,IAF 神經元才更新膜電位的值,膜電位的計算公式如下所示:

式中,Vm(t)為更新后的神經元膜電位,Vm(t-1)為更新之前的神經元膜電位,P22、P21ex、P21in、P20分別對應膜電位衰減因子、興奮型電流衰減因子、抑制型電流衰減因子和初始化與外部電流的衰減因子,Si_syn_ex和Si_syn_in分別為興奮型電流和衰減型電流,Sie為外部輸入電流,Si0為初始化電流。

針對上述的計算方法,IAF 神經元的硬件電路設計如圖10 所示,整個硬件電路分為三個階段:第一階段的主要工作是將單個神經元計算所需要的衰減值、電流值和更新前的膜電位Vm(t-1)送入計算單元中進行計算,得到最新的膜電位Vm(t);第二階段的工作是將Vm(t)與門限值進行比較,如果Vm(t)大于門限值則進入第三階段,否則將Vm(t)值暫存用于下一次的計算;第三階段Vm(t)會進行復位并將該神經元ID存入IDBuffer用于后續的計算。

Fig.10 Hardware implementation of IAF neuron圖10 IAF 神經元硬件實現

在NEST 仿真器中神經元計算為串行計算,正常情況下神經元讀寫數據各需要一個時鐘周期,假設單個神經元的計算時間(latency)為N+2 個時鐘周期,當串行計算時整體的計算時間為神經元數量與單個神經元計算時間的乘積。

由于每個神經元的計算參數各自獨立,神經元間的數據沒有相互依賴性,可以對神經元計算部分進行并行化處理,但由于數據吞吐量和FPGA 邏輯資源的限制,計算并行度有一定的局限性,通過設計流水化的計算結構可以在資源受限的情況下大幅提高資源利用率,提高整體的計算性能。

針對IAF 神經元的流水化設計如圖11 所示,IAF神經元的計算過程在圖中簡化為讀取數據(Rd)、計算(Ex)、寫回數據(Wr)三部分,其中num代表并行計算的神經元數量,每個神經元的計算時間同樣為N+2 個時鐘周期,當同時使用并行處理和流水化操作后,其總體計算時間公式如下所示:

式中,all_latancy代表計算所需要的整體時間,latency代表單個神經元的計算時間,neuron_num為整體的神經元數量,num為神經元計算時的并行度。

Fig.11 IAF neuron pipelining data processing圖11 IAF 神經元流水化數據處理

3.1.5 IAF 神經元數據傳輸優化

IAF 神經元的膜電位大于門限值時會對外發射脈沖,同時更新計算參數和權重,當通過FPGA 進行神經元計算時,每次需要傳輸的數據量如下所示:

其中,spike_num代表發射脈沖的神經元數量,data_type為數據類型,para_num為每個神經元需要更新的參數數量。IAF 神經元計算參數較多,并且NEST 仿真器中數據大多采用雙精度浮點數,如果每次計算后對所有參數進行更新則每個神經元單次更新的數據有80 B。通過對IAF 神經元的參數和計算結果進行分析,神經元的計算參數并不是每次計算后都需要更新,對全部計算參數根據不同的更新需求進行分類,每次計算時只更新必要的數據以減少數據傳輸量,減少數據傳輸時間,輸入數據的設計如圖12所示。

Fig.12 Data input interface diagram圖12 數據輸入接口圖

IAF 神經元的衰減因子在模型運行后初始化,整體的數據量不超過56 B,并且在運行階段不會改變,通過AXI_LITE 接口傳輸衰減因子可以減少高速接口的使用,節省資源。

IAF 神經元的電流值與電壓值同樣只在模型運行的初始化階段進行賦值,但由于神經元數量巨大,使用性能更好的AXI_Master 接口進行數據傳輸,可以減少數據傳輸時間,計算傳輸時間的公式如下所示:

式中,ex_time為傳輸時間,bus_width為總線位寬,clock_frequency為時鐘頻率,由于AXI_Master 總線最大數據位寬為64 bit,在時鐘頻率為100 MHz 的情況下,總線帶寬高達763 MB/s,足夠滿足大量神經元的數據傳輸要求。

IAF 神經元的門限值和復位電壓等參數會在更新訓練圖片時進行更新,更新頻率較低,但每次更新時的數據量很大,對這些參數通過同一組AXI_Master接口進行數據傳輸。

最后單獨設計一個AXI_Master 接口用于發出IAF 神經元ID 并更新權重值,神經元發射脈沖時會將該神經元的ID 發送到ARM 端,并接收ARM 端發送過來的新權重值,因此每次FPGA 發送的神經元ID個數與接收到的權重值數量保持一致,將這兩個相關的參數放到同一個高速接口上可以節省接口資源,還可以在每次數據傳輸時檢查數據數量是否一樣,保證數據傳輸的準確性。

3.1.6 IAF 神經元計算定點化

NEST 仿真器中默認的數據類型為雙精度浮點型,如果在FPGA 中使用雙精度浮點型數據進行乘法或加法運算會大量消耗FPGA 上的DSP 資源,嚴重影響神經元計算并行度。

IAF 神經元計算時包含興奮和抑制兩種類型的衰減因子,它們在模型初始化時生成且都為固定值,其計算公式為:

其中,P為衰減因子,h為模型分辨率,tau為時間常數。由公式可知,衰減因子的數值主要分布在0~1之間。

NEST中,IAF神經元默認的閾值電壓為15 mV[23],當神經元的膜電位超過閾值電壓時神經元發射脈沖,膜電位清零,因此,膜電位數值主要分布在0~15范圍內。

IAF 神經元的權重值分為興奮權重和抑制權重,它們主要受脈沖發射率影響,權重值會隨著脈沖發射率的提升而增大。IAF 神經元的脈沖發射率一般低于20 Hz[24],因此權重值同樣存在一定數值范圍。通過運行不同計算模型,統計IAF 神經元數據分布情況,結果如圖13 所示。

Fig.13 Data distribution of IAF neurons圖13 IAF 神經元數據分布

如圖13 所示,通過測試,IAF 神經元的權重值主要分布在-1 400~1 400 之間,其數值范圍較大并且多為整數,將權重值轉化為定點16 bit 數據,可以在保證計算精度的情況下減少數據位寬,降低資源消耗,定點與浮點數轉化的計算公式如下所示。式中x為雙精度浮點數,y為定點16 bit整數,Q為定標值。

對于權重值,當定點數的數據精度為Q4(-2 048 ≤x≤2 047.937 5)時即可滿足使用需求。

衰減因子和膜電位大多位于0~1 之間,進行計算時需要較高的精度。由于膜電位整數部分最少需要5 bit數據,如果使用定點16 bit進行計算,數據精度最多為Q11,會存在很大的精度損失。為保證更好的數據精度,將膜電位和衰減因子轉換成半精度浮點數進行計算,使用半精度浮點數可以減少數據位寬,減少硬件資源的開銷。在Xilinx 高層次綜合語言中包含有半精度浮點數(half)的功能,在硬件設計時可以直接使用half 進行硬件設計。half 由16 bit 數據組成,可以表示6.10×10-5~6.550 4×104范圍內的數值,在滿足整數范圍的同時小數位可以達到定點數Q14的精度。對定點16 bit、half、float 和double 類型的資源消耗進行對比,如圖14 所示,相比之下使用定點16 bit和half類型的數據可以極大節省硬件資源。

Fig.14 Resource consumption comparison of different data types圖14 不同數據類型資源消耗對比

3.2 基于集群的實現與優化

3.2.1 基于PYNQ 集群的實現

如圖15 所示,整個集群通過以太網進行連接,集群中的每個節點除了包含PYNQ 異構計算單元外,還包含一組receive buffer 和send buffer,其中receive buffer 的作用是接收其他節點發送過來的脈沖信息供本節點進行計算;send buffer 作用與receive buffer相反,用于將本節點內產生的脈沖發送給其他節點。

Fig.15 Operation mechanism of PYNQ cluster圖15 PYNQ 集群的運行機制

通過MPI 在多節點上運行NEST 仿真器時,仿真器首先會將神經元與突觸的整體連接關系記錄下來,再根據節點分布情況將神經元和突觸平均分配給每一個節點進行計算。當其中一個節點上的某個神經元需要發送脈沖時,該節點會將神經元信息放到send buffer 中并通過以太網發送給目標節點,目標節點通過receive buffer 接收脈沖信息,進行后續的計算。計算結束后再通過MPI 將各節點的神經元計算結果收集起來。

3.2.2 PYNQ 集群計算平衡點分析

在理想情況下,如果運行相同的計算模型,集群每個節點分配的計算量與節點數成反比,節點越多單個節點的計算量越小,整體計算速度越快。但是隨著節點增加,集群內節點間通信愈加復雜,節點間的通信量增加,通信時間會隨著節點數增多而逐漸增加,集群整體計算性能甚至會在節點數過多時出現下降。

在集群運行時計算時間主要分為數據更新時間、通信時間和其他時間(運行準備時間、數據收集時間)這三部分。數據更新時間是集群用于計算的時間,它與計算量高度相關,當計算量一定時,隨著節點增多該時間線性減少;其他時間根據不同的計算模型會有所不同,節點數量對該部分時間影響相對較小。影響集群通信時間的因素有很多,影響最大的分別為通信信息量、通信進程數和網絡帶寬,MPI通信時間的計算公式如下所示:

其中,tmpi(sendbuffer,P)為P規模下每次發送sendbuffer內數據所需要的時間,Td為整個計算的運行次數,tbandwidth為帶寬限制所造成的時間影響。由于設計集群時對網絡帶寬需求進行過分析(2.3.3小節),網絡帶寬滿足使用需求,tbandwidth可以忽略不計;tmpi(sendbuffer,P)可以通過時間統計函數進行實際測量,當計算節點增多或者計算規模增大時,tmpi(sendbuffer,P)所需要的時間會相應增多。

3.2.3 PYNQ 集群文件系統優化

如果對集群中某一節點的文件或配置進行修改,為保證集群能夠正常運行,需要對所有節點都執行相同的操作。隨著集群節點數量的增多,如果對每個節點的文件逐個修改會相當耗時,將網絡文件系統(network file system,NFS)引入PYNQ 集群可以方便對各節點文件進行管理,集群中網絡文件系統整體設計如圖16 所示。

Fig.16 PYNQ cluster network file system structure圖16 PYNQ 集群網絡文件系統結構

圖16 中,PC 作為服務器端存儲集群的文件系統,不起到對集群的控制作用,PYNQ 集群的文件系統放在PC 指定的共享文件夾中,各節點作為客戶端通過交換機將文件系統加載到本地。如果對各個節點添加文件或者進行修改,只需在PC 端的文件系統上進行修改即可,以此可以提高集群的使用效率。

4 實驗結果

4.1 實驗環境介紹

4.1.1 軟硬件實驗平臺

軟件環境:NEST 仿真器2.14 版本,PyNN API,XilinxVivado 2018.2,XilinxVivadoHLS 2018.2,PYNQ鏡像2.4 版本。

硬件環境:集群每個節點為XilinxPYNQ-Z2 開發板(FPGA 部分BlockRAMs 資源140,DSP48E資源220,LUT 資源53 200,FF 資源106 400)。目前集群使用48 塊PYNQ-Z2 開發板構建計算節點層,48 塊開發板分成兩組連接在2 臺交換機上,位于網絡交互層的交換機相互橋接將48 塊開發板構建成一個完整的集群。

FPGA 加速部分通過Vivado HLS 進行設計,通過Vivado 工具綜合實現整體硬件電路并生成bitstream,計算模型運行在Jupyter 上并通過PYNQ 框架進行調用。

對照組硬件環境:IntelXeonE5-2620(8 cores,主頻2.1 GHz,128 GB 內存)和AMDRyzen5 3600X(6 cores,主頻3.8 GHz,6 GB 內存,虛擬機)。

4.1.2 計算模型介紹

神經網絡模型1:皮質層視覺模型

皮質層視覺模型是一個無監督的圖像識別方案,該網絡架構屬于麻省理工學院提出的HMAX 模型中的一種,它可以模仿生物學的機制對圖像進行分類[25]。如圖17 所示,該網絡為5 層網絡,每層都由IAF 神經元組成,前4 層網絡為模型的訓練部分,由簡單和復雜網絡層(S1,C1,S2,C2)交替組成;第5層的模型推理部分主要由分類器構成。

Fig.17 Cortical visual model network structure圖17 皮質層視覺模型網絡結構

皮質層視覺模型使用Caltech 101 數據集進行模型訓練與結果驗證。實際使用時,數據集中的圖片按照圖片尺寸分成128×128、200×200 和300×300 3 個數據集分別進行測試。網絡中的神經元數量與圖片尺寸成正比,并且逐層遞減(128×128 像素圖像會生成約13 萬IAF 神經元)。模型訓練階段每個神經元平均更新1 700 次,該時間占到了整體運行時間的92%以上,神經元在計算時相互獨立,沒有相互依賴關系,運行該模型時非常適合通過大規模集群并行計算的方法提升計算速度。

神經網絡模型2:皮層微電路模型

該模型模擬1 mm2小鼠大腦皮層的運行機制,模型分為5 層,整體結構如圖18 所示,L1 層代表大腦未被建模部分的外部輸入,Th神經元群落代表丘腦皮層的輸入,L2/3、L4、L5 和L6 層代表4 層皮質,每層皮質都包含一對興奮性(三角形)和抑制性(圓形)群落[9]。

Fig.18 Cortical microcircuit model network structure圖18 皮層微電路模型網絡結構

該模型主要用于推斷局部皮質網絡的連通性與活性的關系,完整規模為80 000 神經元,但由于實驗對照組AMD 3600X 平臺受制于可用內存的限制,最多運行16 000 神經元,因此運行該模型時選擇8 000和16 000 個IAF 神經元進行后續測試。該模型神經元數量相比皮質層視覺模型有所減少,但每個神經元平均計算次數為1 萬次,因此同樣存在整體計算時間過長的問題。

4.2 PEST 運行準確率驗證

運行皮質層仿真模型的圖片訓練部分,對比原版NEST 與單節點PEST 的神經元脈沖發射率和脈沖激發圖,驗證計算結果正確性,測試圖片選擇128×128 像素大小,IAF 神經元數量13 萬,圖片數量10 張,每張圖片的仿真時間為170 ms,步進值0.1,圖片縮放量分別為1.00、0.71、0.50、0.35。通過觀察運行過程中脈沖激發圖可以驗證計算結果的正確性,運行結果如圖19 所示。

Fig.19 Contrast of cortical visual model results圖19 皮質層視覺模型結果對比

圖19 中橫坐標代表運行時間,縱坐標為神經元序號,隨著時間的推移,當某個神經元發射脈沖時會在圖中相應位置打點。由于對比時采用完全一致的數據集和計算參數,神經元發射脈沖的時間應大致相同,對比兩張脈沖激發圖可以發現,單節點PEST與原版NEST 的脈沖激發圖基本一致,結果正確。

在各平臺運行皮質層視覺模型,使用100 張圖片進行圖片分類測試,查看最后的圖片分類結果是否正確。如表1 所示,通過PC 運行單精度浮點與雙精度浮點兩個版本的NEST 進行對比,圖片分類準確率基本一致。在單節點PEST 上運行半精度浮點和定點數混合的NEST版本圖片分類準確率降低4個百分點。

Table 1 Comparison of image classification test accuracy表1 圖像分類測試準確率對比

皮層微電路模型測試時使用8 000 個神經元的模型規模進行測試,其運行結果以脈沖激發率的分布情況來表示。

Fig.20 Comparison of cortical microcircuit model results圖20 皮層微電路模型結果對比

圖20 為8 種不同皮層網絡連接時的脈沖發射率分布圖,其中深色矩形塊為脈沖發射率的主要分布區間,紅色豎線為脈沖發射率中位值,紅色加號為離群點。對比原版NEST 與單節點PEST 的運行結果發現,脈沖發射率的主要分布區間和中位值結果完全一致,離群點的結果由于計算精度的影響在個別情況下稍有誤差。

4.3 資源消耗

設計時,在保證資源開銷允許的情況下,最大限度地利用了FPGA 片上資源,資源消耗如表2 所示。

Table 2 FPGA hardware resource utilization表2 FPGA 硬件資源利用率

由于IAF 神經元的計算大量消耗DSP,通過對數據位寬進行優化,如將浮點數轉換成16 bit 點或半精度浮點,有效減少了DSP 的使用,在提高計算并行度的同時提高了整體資源的利用率。

4.4 PEST 集群最佳節點數評估

當把某個SNN 工作負載運行到PEST 上時,節點過多或過少都會影響系統的能效,因此需要對該工作負載分配最佳數量的計算節點。在對PEST 進行性能分析時運行皮質層視覺模型,圖片選擇128×128、200×200 和300×300 像素的不同數據集進行測試。首先對不同節點數的計算時間進行實際測試,實驗結果如圖21 所示。

Fig.21 Running time comparison of cortical visual model under different number of nodes圖21 皮質視覺模型在不同節點數運行時間對比

以128×128 數據集的運行結果為例進行分析,神經元更新計算時間隨著節點數的增加成比例減少,通信時間隨著節點數的增多而逐漸增大,其他時間包括仿真的準備和神經元更新后的結果收集,這些工作由于是集群的主節點獨自進行處理,花費時間較長。同時由于這些步驟為主節點單獨進行,當計算模型一致時,在不同節點規模下的處理時間差異不大。在運行128×128 數據集時,從2 節點開始計算性能依次增加,在8 節點時達到最佳性能,當超過8節點時其計算性能受制于通信時間的增長反而會出現下降。

運行其他兩個數據集時由于圖片像素增多,所生成的神經元數量也隨之增多,計算時間隨之增加。由于神經元計算規模增大,通信時間和神經元更新時間都相應增加,其分布特性與運行小數據集時類似,運行200×200 和300×300 數據集時,PEST 仿真器的最佳計算節點數分別為16 節點和24 節點。

在PEST 上運行8 000 和16 000 兩種神經元規模的皮層微電路模型進行測試,測試結果如圖22 所示。

Fig.22 Running time comparison of cortical microcircuit model with different number of nodes圖22 皮層微電路模型在不同節點數運行時間對比

皮層微電路模型整體神經元數量相對較少,因此不同節點數下神經元更新所占的計算時間差別較小。但由于整體計算次數很多,節點間的通信時間和其他時間受節點數量的影響很大。8 000 與16 000神經元規模分別在16 節點和20 節點時性能最佳。

目前已有研究自動地為工作負載分配合適的計算節點,限于篇幅在此不再展開介紹。

4.5 PEST 集群性能與能效評估

實驗選擇PEST 和其他的PC 平臺進行對比,測試時使用不同的計算模型和規模進行測試,PEST 的節點數量選取了最佳數。由上文所述,在PEST 上運行計算模型時,數據準備和數據收集是由集群中主節點單獨運行,受制于PYNQ-Z2ARM 端的性能,該部分處理時間過長,極大影響整體運行時間。數據準備工作只在模型初始化時運行,并且不受節點數量的影響,因此它可由性能更好的計算平臺處理,集群主節點在運行時可將處理好的數據分發給各節點進行計算。數據收集與準備工作類似,主節點可以只負責收集各節點的計算結果,而將數據處理工作交給性能更強的計算平臺進行處理。因此在進行性能與能效評估時,本實驗只針對集群與其他平臺神經元更新部分進行對比。表中PEST 括號中的數字為測試時的節點數量,各平臺之間的性能對比如表3~表5所示。

Table 3 Performance comparison of cortical visual models of different platforms(128×128 data set)表3 不同平臺皮質視覺模型性能對比(128×128數據集)

通過表3~表5 可知,PEST 的運算性能與功率隨著計算節點的增多而線性增加,而Xeon 2620 和AMD 3600X 的運算性能和功率在運行皮質層視覺模型時基本維持不變。

在運行皮質層視覺模型128×128 數據集時,PEST 集群在8 節點時計算性能最佳,神經元更新時間相比3600X 提升16 倍,比Xeon 2620 快23.8 倍。在300×300 數據集下24 節點PEST 集群神經元更新時間相比3600X 提升44 倍,是Xeon 2620 的62.9 倍。整體計算量越大,PEST 在計算速度上的優勢越明顯。

Table 4 Performance comparison of cortical visual models on different platforms(200×200 data set)表4 不同平臺皮質視覺模型性能對比(200×200數據集)

Table 5 Performance comparison of cortical visual models on different platforms(300×300 data set)表5 不同平臺皮質視覺模型性能對比(300×300數據集)

PEST 在節點數較少時能效比較高,隨著節點增多更新能效比逐漸下降,而Xeon 2620 和3600X 的更新能效比整體變化不大。運行128×128 數據集時,最佳性能的PEST(8)集群相比3600X 更新能效比提升36.9 倍,相比Xeon 2620 提升49 倍。在運行300×300數據集時,性能最優的PEST(24)更新能效比相比3600X 提升34.5 倍,相比Xeon 2620 提升42.2 倍。

如表6、表7 所示,運行皮層微電路模型時,PEST在神經元更新部分相比其他兩個平臺依然優勢明顯,在模型規模為8 000 神經元時,PEST 在16 節點時計算性能最佳,神經元更新時間相比3600X 提升4.6倍,比Xeon 2620 快7.5 倍。在16 000 神經元計算規模下20 節點PEST 的神經元更新時間相比3600X 提升14.3 倍,是Xeon 2620 的24.5 倍。神經元數量越大時,PEST 運行皮層微電路模型的性能優勢越明顯。

Table 6 Performance comparison of cortical microcircuit models on different platforms(8 000 neurons)表6 不同平臺皮質微電路模型性能對比(8 000神經元)

Table 7 Performance comparison of cortical microcircuit models on different platforms(16 000 neurons)表7 不同平臺皮質微電路模型性能對比(16 000神經元)

更新能效比方面,PEST 相比其他兩個平臺依然具有優勢,在8 000 神經元規模下,16 節點的PEST 更新 能效比相比3600X 提升5.3 倍,比Xeon 2620提升7.9 倍。在16 000 神經元規模下,PEST 的更新能效比相比3600X 提升13.4 倍,比Xeon 2620 提升20.2 倍。

通過4.4 節可知,PEST 在節點最佳數時的計算性能與運行在其他節點數時性能差距并不明顯,用戶可以根據需求選擇適當的節點數進行模型計算,在損失一定計算速度的情況下使用更少的節點數進行計算可以在能效比方面達到更好的效果。

5 結束語

本文以PYNQ-Z2 開發板為基礎,結合PYNQ 框架和NEST 類腦仿真器等軟硬件設備,搭建了一套異構類腦計算系統。通過對集群中IAF 神經元更新部分進行優化,增加FPGA 并行計算模塊,優化集群文件系統等方式,提升了整體計算性能,簡化了操作復雜度,實現了高性能、低功耗、規模可伸縮的PEST 類腦計算集群,為類腦計算提供了一種新的計算平臺。

后期工作可以從以下幾方面進行研究:(1)繼續針對不同神經元或突觸類型設計FPGA 并行優化方案;(2)探索計算性能與功耗的最佳平衡點,設計自動確定性能最佳節點的方法;(3)優化仿真過程中的非主要性能瓶頸,進一步提升集群整體的計算性能。

猜你喜歡
模型
一半模型
一種去中心化的域名服務本地化模型
適用于BDS-3 PPP的隨機模型
提煉模型 突破難點
函數模型及應用
p150Glued在帕金森病模型中的表達及分布
函數模型及應用
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
3D打印中的模型分割與打包
主站蜘蛛池模板: 亚洲天堂视频在线观看免费| 日韩av资源在线| 欧美日韩高清在线| 99re这里只有国产中文精品国产精品 | 热这里只有精品国产热门精品| 亚洲国产中文精品va在线播放 | 国产乱码精品一区二区三区中文 | 亚洲免费福利视频| 99re视频在线| 日韩无码真实干出血视频| 91区国产福利在线观看午夜| 美女啪啪无遮挡| 国产乱视频网站| 女人18毛片一级毛片在线| 最新日本中文字幕| 国产精品免费电影| 91色综合综合热五月激情| 真人免费一级毛片一区二区| 亚洲欧美人成电影在线观看| 免费一级毛片完整版在线看| 国产在线精品香蕉麻豆| а∨天堂一区中文字幕| 91麻豆精品视频| 超薄丝袜足j国产在线视频| 国产视频欧美| 亚洲综合天堂网| 婷婷综合在线观看丁香| 午夜视频日本| 91精品国产综合久久不国产大片| 2021无码专区人妻系列日韩| 欧美一区二区人人喊爽| 午夜国产大片免费观看| 国产精品毛片在线直播完整版| 26uuu国产精品视频| 亚洲人成影视在线观看| 国内精品视频| www.日韩三级| 成人午夜久久| 久久www视频| 国产乱人激情H在线观看| 国产天天色| 亚洲成肉网| 国产综合日韩另类一区二区| 国产女人在线观看| 亚洲欧美日韩天堂| 亚洲天堂视频在线观看免费| 国产主播喷水| 国产一级视频在线观看网站| 亚洲无码高清视频在线观看| 在线免费不卡视频| 国产成人a毛片在线| 天天做天天爱夜夜爽毛片毛片| 国内精品九九久久久精品| 日本在线免费网站| 一本大道无码日韩精品影视| 手机永久AV在线播放| 成人看片欧美一区二区| 欧美成人区| 凹凸国产分类在线观看| 在线无码九区| 四虎影视国产精品| 久久这里只精品热免费99| 亚洲高清无码精品| 成人韩免费网站| 黄色一级视频欧美| 精品無碼一區在線觀看 | 国产精品午夜福利麻豆| 国产成人禁片在线观看| 国产又爽又黄无遮挡免费观看| 国产精品尹人在线观看| 永久在线精品免费视频观看| 99视频在线精品免费观看6| 天天色综网| 原味小视频在线www国产| 亚洲综合九九| 国产福利影院在线观看| 一区二区日韩国产精久久| 四虎在线观看视频高清无码 | 搞黄网站免费观看| 99精品国产电影| 99视频在线看| 久久精品波多野结衣|