亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        PEST:由PYNQ 集群實(shí)現(xiàn)的高能效NEST 類腦仿真器

        2021-11-17 08:23:38李佩琦郁龔健劉家航柴志雷
        計(jì)算機(jī)與生活 2021年11期
        關(guān)鍵詞:類腦仿真器集群

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

        1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫214122

        2.江南大學(xué) 人工智能與計(jì)算機(jī)學(xué)院,江蘇 無錫214122

        3.江蘇省模式識別與計(jì)算智能工程實(shí)驗(yàn)室,江蘇 無錫214122

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

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

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

        類腦計(jì)算的另一種實(shí)現(xiàn)方式是以軟件方式構(gòu)建類腦仿真器,目前比較成熟的類腦仿真器如Brain[12]、NEST[13]、BindsNET[14]等已得到了大量的應(yīng)用,并且形成了各自的生態(tài)。采用軟件方式實(shí)現(xiàn)具有靈活性強(qiáng)、精度高等優(yōu)點(diǎn),但存在計(jì)算復(fù)雜度高、仿真速度慢、運(yùn)行功耗高等問題。

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

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

        (1)構(gòu)建大規(guī)模PYNQ 集群,實(shí)現(xiàn)基于NEST 仿真器的規(guī)模可伸縮類腦計(jì)算系統(tǒng);

        (2)針對單節(jié)點(diǎn)進(jìn)行優(yōu)化,設(shè)計(jì)軟硬件數(shù)據(jù)交互接口,通過FPGA(field programmable gate array)并行與流水化設(shè)計(jì)、計(jì)算定點(diǎn)化等實(shí)現(xiàn)IAF 神經(jīng)元FPGA硬件加速;

        (3)針對集群整體進(jìn)行優(yōu)化和分析,設(shè)計(jì)集群的網(wǎng)絡(luò)文件系統(tǒng),分析集群性能功耗平衡點(diǎn),通過消息傳遞接口(message passing interface,MPI)分布式計(jì)算實(shí)現(xiàn)PEST 高能效計(jì)算。

        1 NEST 仿真器

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

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

        Fig.1 NEST simulator running mechanism圖1 NEST 仿真器運(yùn)行機(jī)制

        NEST 仿真器通過C++進(jìn)行開發(fā),在NEST 中包含一個(gè)獨(dú)立的PyNN 后端接口,允許與PyNN 配合使用。PyNN 是一款開源的神經(jīng)網(wǎng)絡(luò)仿真器的通用接口,用戶可以通過PyNN 將Python 腳本直接運(yùn)行在NEST 仿真器上,實(shí)現(xiàn)通過Python 對NEST 的編程和調(diào)試。

        NEST 可支持并行與分布式計(jì)算,它通過自身包含的MPI 通信協(xié)議與多臺計(jì)算機(jī)進(jìn)行數(shù)據(jù)通信。通過MPI 的并行編程模式可以建立一個(gè)由多臺計(jì)算機(jī)構(gòu)成的計(jì)算集群,圖2 展示了NEST 運(yùn)行小型分布式網(wǎng)絡(luò)時(shí)的運(yùn)行機(jī)制。

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

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

        2 基于PYNQ 的計(jì)算集群設(shè)計(jì)與搭建

        2.1 PYNQ-Z2 計(jì)算節(jié)點(diǎn)

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

        Fig.3 Hardware architecture of PYNQ-Z2圖3 PYNQ-Z2 硬件架構(gòu)

        2.2 PYNQ 框架

        PYNQ 框架是在FPGA+CPU 異構(gòu)系統(tǒng)的基礎(chǔ)上引入了Python,其提供了一種更友好、更易用的開發(fā)方式,降低了FPGA 開發(fā)門檻。PYNQ 開源框架主要包含PYNQ 硬件庫和Overlay 設(shè)計(jì)兩部分[20]。PYNQ硬件庫可用于加速軟件應(yīng)用程序,或?yàn)樘囟☉?yīng)用程序定制專用硬件平臺。Overlay 設(shè)計(jì)由兩個(gè)主要部分組成,一個(gè)是PL 設(shè)計(jì)(生成bitstream),另一個(gè)是Tcl項(xiàng)目框圖文件。PL 設(shè)計(jì)通常是高度優(yōu)化的特定任務(wù),Overlay 通常設(shè)計(jì)為可配置的,可用于不同的應(yīng)用程序中。

        圖4 為PYNQ 框架硬件結(jié)構(gòu)圖,用戶通過PC 訪問ARM 端的Jupyter,在Jupyter 中可以調(diào)用PYNQ 硬件庫控制FPGA 以實(shí)現(xiàn)各種功能。

        Fig.4 Hardware structure diagram of PYNQ framework圖4 PYNQ 框架硬件結(jié)構(gòu)圖

        2.3 PYNQ-Z2 計(jì)算節(jié)點(diǎn)

        2.3.1 整體設(shè)計(jì)

        Fig.5 Cluster hardware structure diagram圖5 集群硬件結(jié)構(gòu)圖

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

        該集群可擴(kuò)展性強(qiáng),由于在本集群中不涉及到任何的專用電路,可以根據(jù)需要對集群規(guī)模進(jìn)行相應(yīng)的調(diào)整。如果要對計(jì)算節(jié)點(diǎn)進(jìn)行擴(kuò)充只需要將新的計(jì)算節(jié)點(diǎn)與網(wǎng)絡(luò)交互層相連并且保證主節(jié)點(diǎn)能夠訪問到該節(jié)點(diǎn)即可。PYNQ集群計(jì)算平臺如圖6所示。

        Fig.6 PYNQ cluster computing platform圖6 PYNQ 集群計(jì)算平臺

        2.3.2 集群計(jì)算規(guī)模

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

        2.3.3 網(wǎng)絡(luò)設(shè)計(jì)

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

        3 基于PYNQ 集群的NEST 軟硬件協(xié)同設(shè)計(jì)

        3.1 單節(jié)點(diǎn)的實(shí)現(xiàn)與優(yōu)化

        3.1.1 單節(jié)點(diǎn)實(shí)現(xiàn)

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

        Fig.7 Single-node PEST structure framework圖7 單節(jié)點(diǎn)PEST 結(jié)構(gòu)框架

        3.1.2 PYNQ-Z2 內(nèi)存分配

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

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

        其中,ddr_size為內(nèi)存的整體大小;neuron_num為神經(jīng)元的數(shù)量;data_type為數(shù)據(jù)類型;para_num為神經(jīng)元的參數(shù)數(shù)量。

        Fig.8 PYNQ-Z2 shared memory allocation diagram圖8 PYNQ-Z2 共享內(nèi)存分配圖

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

        3.1.3 通用數(shù)據(jù)傳輸接口設(shè)計(jì)

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

        ARM 端與FPGA 兩部分?jǐn)?shù)據(jù)傳輸?shù)慕涌谠O(shè)計(jì)如圖9 所示,被加速部分為計(jì)算瓶頸,將該部分在ARM端移除,放到FPGA 部分重新設(shè)計(jì)。當(dāng)ARM 端的NEST 仿真器開始運(yùn)行時(shí),首先映射一段共享內(nèi)存用來存放需要FPGA 計(jì)算的數(shù)據(jù),當(dāng)開始仿真時(shí),將計(jì)算所需數(shù)據(jù)存入共享內(nèi)存中。

        Fig.9 Software and hardware general data interface structure diagram圖9 軟硬件通用數(shù)據(jù)接口結(jié)構(gòu)圖

        當(dāng)數(shù)據(jù)準(zhǔn)備完成后,通過軟件驅(qū)動程序?qū)?nèi)存映射的地址data_address 通過AXI 控制總線發(fā)送給FPGA,F(xiàn)PGA 根據(jù)data_address 讀取共享內(nèi)存中對應(yīng)數(shù)據(jù)進(jìn)行計(jì)算。該部分的偽代碼如下所示,其中mem_size為每段數(shù)據(jù)所需要的內(nèi)存大小,fpga_address為FPGA 控制總線的基地址,offset 為控制總線的地址偏移量。

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

        3.1.4 IAF 神經(jīng)元的硬件設(shè)計(jì)

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

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

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

        Fig.10 Hardware implementation of IAF neuron圖10 IAF 神經(jīng)元硬件實(shí)現(xiàn)

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

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

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

        式中,all_latancy代表計(jì)算所需要的整體時(shí)間,latency代表單個(gè)神經(jīng)元的計(jì)算時(shí)間,neuron_num為整體的神經(jīng)元數(shù)量,num為神經(jīng)元計(jì)算時(shí)的并行度。

        Fig.11 IAF neuron pipelining data processing圖11 IAF 神經(jīng)元流水化數(shù)據(jù)處理

        3.1.5 IAF 神經(jīng)元數(shù)據(jù)傳輸優(yōu)化

        IAF 神經(jīng)元的膜電位大于門限值時(shí)會對外發(fā)射脈沖,同時(shí)更新計(jì)算參數(shù)和權(quán)重,當(dāng)通過FPGA 進(jìn)行神經(jīng)元計(jì)算時(shí),每次需要傳輸?shù)臄?shù)據(jù)量如下所示:

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

        Fig.12 Data input interface diagram圖12 數(shù)據(jù)輸入接口圖

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

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

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

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

        最后單獨(dú)設(shè)計(jì)一個(gè)AXI_Master 接口用于發(fā)出IAF 神經(jīng)元ID 并更新權(quán)重值,神經(jīng)元發(fā)射脈沖時(shí)會將該神經(jīng)元的ID 發(fā)送到ARM 端,并接收ARM 端發(fā)送過來的新權(quán)重值,因此每次FPGA 發(fā)送的神經(jīng)元ID個(gè)數(shù)與接收到的權(quán)重值數(shù)量保持一致,將這兩個(gè)相關(guān)的參數(shù)放到同一個(gè)高速接口上可以節(jié)省接口資源,還可以在每次數(shù)據(jù)傳輸時(shí)檢查數(shù)據(jù)數(shù)量是否一樣,保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。

        3.1.6 IAF 神經(jīng)元計(jì)算定點(diǎn)化

        NEST 仿真器中默認(rèn)的數(shù)據(jù)類型為雙精度浮點(diǎn)型,如果在FPGA 中使用雙精度浮點(diǎn)型數(shù)據(jù)進(jìn)行乘法或加法運(yùn)算會大量消耗FPGA 上的DSP 資源,嚴(yán)重影響神經(jīng)元計(jì)算并行度。

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

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

        NEST中,IAF神經(jīng)元默認(rèn)的閾值電壓為15 mV[23],當(dāng)神經(jīng)元的膜電位超過閾值電壓時(shí)神經(jīng)元發(fā)射脈沖,膜電位清零,因此,膜電位數(shù)值主要分布在0~15范圍內(nèi)。

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

        Fig.13 Data distribution of IAF neurons圖13 IAF 神經(jīng)元數(shù)據(jù)分布

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

        對于權(quán)重值,當(dāng)定點(diǎn)數(shù)的數(shù)據(jù)精度為Q4(-2 048 ≤x≤2 047.937 5)時(shí)即可滿足使用需求。

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

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

        3.2 基于集群的實(shí)現(xiàn)與優(yōu)化

        3.2.1 基于PYNQ 集群的實(shí)現(xiàn)

        如圖15 所示,整個(gè)集群通過以太網(wǎng)進(jìn)行連接,集群中的每個(gè)節(jié)點(diǎn)除了包含PYNQ 異構(gòu)計(jì)算單元外,還包含一組receive buffer 和send buffer,其中receive buffer 的作用是接收其他節(jié)點(diǎn)發(fā)送過來的脈沖信息供本節(jié)點(diǎn)進(jìn)行計(jì)算;send buffer 作用與receive buffer相反,用于將本節(jié)點(diǎn)內(nèi)產(chǎn)生的脈沖發(fā)送給其他節(jié)點(diǎn)。

        Fig.15 Operation mechanism of PYNQ cluster圖15 PYNQ 集群的運(yùn)行機(jī)制

        通過MPI 在多節(jié)點(diǎn)上運(yùn)行NEST 仿真器時(shí),仿真器首先會將神經(jīng)元與突觸的整體連接關(guān)系記錄下來,再根據(jù)節(jié)點(diǎn)分布情況將神經(jīng)元和突觸平均分配給每一個(gè)節(jié)點(diǎn)進(jìn)行計(jì)算。當(dāng)其中一個(gè)節(jié)點(diǎn)上的某個(gè)神經(jīng)元需要發(fā)送脈沖時(shí),該節(jié)點(diǎn)會將神經(jīng)元信息放到send buffer 中并通過以太網(wǎng)發(fā)送給目標(biāo)節(jié)點(diǎn),目標(biāo)節(jié)點(diǎn)通過receive buffer 接收脈沖信息,進(jìn)行后續(xù)的計(jì)算。計(jì)算結(jié)束后再通過MPI 將各節(jié)點(diǎn)的神經(jīng)元計(jì)算結(jié)果收集起來。

        3.2.2 PYNQ 集群計(jì)算平衡點(diǎn)分析

        在理想情況下,如果運(yùn)行相同的計(jì)算模型,集群每個(gè)節(jié)點(diǎn)分配的計(jì)算量與節(jié)點(diǎn)數(shù)成反比,節(jié)點(diǎn)越多單個(gè)節(jié)點(diǎn)的計(jì)算量越小,整體計(jì)算速度越快。但是隨著節(jié)點(diǎn)增加,集群內(nèi)節(jié)點(diǎn)間通信愈加復(fù)雜,節(jié)點(diǎn)間的通信量增加,通信時(shí)間會隨著節(jié)點(diǎn)數(shù)增多而逐漸增加,集群整體計(jì)算性能甚至?xí)诠?jié)點(diǎn)數(shù)過多時(shí)出現(xiàn)下降。

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

        其中,tmpi(sendbuffer,P)為P規(guī)模下每次發(fā)送sendbuffer內(nèi)數(shù)據(jù)所需要的時(shí)間,Td為整個(gè)計(jì)算的運(yùn)行次數(shù),tbandwidth為帶寬限制所造成的時(shí)間影響。由于設(shè)計(jì)集群時(shí)對網(wǎng)絡(luò)帶寬需求進(jìn)行過分析(2.3.3小節(jié)),網(wǎng)絡(luò)帶寬滿足使用需求,tbandwidth可以忽略不計(jì);tmpi(sendbuffer,P)可以通過時(shí)間統(tǒng)計(jì)函數(shù)進(jìn)行實(shí)際測量,當(dāng)計(jì)算節(jié)點(diǎn)增多或者計(jì)算規(guī)模增大時(shí),tmpi(sendbuffer,P)所需要的時(shí)間會相應(yīng)增多。

        3.2.3 PYNQ 集群文件系統(tǒng)優(yōu)化

        如果對集群中某一節(jié)點(diǎn)的文件或配置進(jìn)行修改,為保證集群能夠正常運(yùn)行,需要對所有節(jié)點(diǎn)都執(zhí)行相同的操作。隨著集群節(jié)點(diǎn)數(shù)量的增多,如果對每個(gè)節(jié)點(diǎn)的文件逐個(gè)修改會相當(dāng)耗時(shí),將網(wǎng)絡(luò)文件系統(tǒng)(network file system,NFS)引入PYNQ 集群可以方便對各節(jié)點(diǎn)文件進(jìn)行管理,集群中網(wǎng)絡(luò)文件系統(tǒng)整體設(shè)計(jì)如圖16 所示。

        Fig.16 PYNQ cluster network file system structure圖16 PYNQ 集群網(wǎng)絡(luò)文件系統(tǒng)結(jié)構(gòu)

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

        4 實(shí)驗(yàn)結(jié)果

        4.1 實(shí)驗(yàn)環(huán)境介紹

        4.1.1 軟硬件實(shí)驗(yàn)平臺

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

        硬件環(huán)境:集群每個(gè)節(jié)點(diǎn)為XilinxPYNQ-Z2 開發(fā)板(FPGA 部分BlockRAMs 資源140,DSP48E資源220,LUT 資源53 200,F(xiàn)F 資源106 400)。目前集群使用48 塊PYNQ-Z2 開發(fā)板構(gòu)建計(jì)算節(jié)點(diǎn)層,48 塊開發(fā)板分成兩組連接在2 臺交換機(jī)上,位于網(wǎng)絡(luò)交互層的交換機(jī)相互橋接將48 塊開發(fā)板構(gòu)建成一個(gè)完整的集群。

        FPGA 加速部分通過Vivado HLS 進(jìn)行設(shè)計(jì),通過Vivado 工具綜合實(shí)現(xiàn)整體硬件電路并生成bitstream,計(jì)算模型運(yùn)行在Jupyter 上并通過PYNQ 框架進(jìn)行調(diào)用。

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

        4.1.2 計(jì)算模型介紹

        神經(jīng)網(wǎng)絡(luò)模型1:皮質(zhì)層視覺模型

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

        Fig.17 Cortical visual model network structure圖17 皮質(zhì)層視覺模型網(wǎng)絡(luò)結(jié)構(gòu)

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

        神經(jīng)網(wǎng)絡(luò)模型2:皮層微電路模型

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

        Fig.18 Cortical microcircuit model network structure圖18 皮層微電路模型網(wǎng)絡(luò)結(jié)構(gòu)

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

        4.2 PEST 運(yùn)行準(zhǔn)確率驗(yàn)證

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

        Fig.19 Contrast of cortical visual model results圖19 皮質(zhì)層視覺模型結(jié)果對比

        圖19 中橫坐標(biāo)代表運(yùn)行時(shí)間,縱坐標(biāo)為神經(jīng)元序號,隨著時(shí)間的推移,當(dāng)某個(gè)神經(jīng)元發(fā)射脈沖時(shí)會在圖中相應(yīng)位置打點(diǎn)。由于對比時(shí)采用完全一致的數(shù)據(jù)集和計(jì)算參數(shù),神經(jīng)元發(fā)射脈沖的時(shí)間應(yīng)大致相同,對比兩張脈沖激發(fā)圖可以發(fā)現(xiàn),單節(jié)點(diǎn)PEST與原版NEST 的脈沖激發(fā)圖基本一致,結(jié)果正確。

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

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

        皮層微電路模型測試時(shí)使用8 000 個(gè)神經(jīng)元的模型規(guī)模進(jìn)行測試,其運(yùn)行結(jié)果以脈沖激發(fā)率的分布情況來表示。

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

        圖20 為8 種不同皮層網(wǎng)絡(luò)連接時(shí)的脈沖發(fā)射率分布圖,其中深色矩形塊為脈沖發(fā)射率的主要分布區(qū)間,紅色豎線為脈沖發(fā)射率中位值,紅色加號為離群點(diǎn)。對比原版NEST 與單節(jié)點(diǎn)PEST 的運(yùn)行結(jié)果發(fā)現(xiàn),脈沖發(fā)射率的主要分布區(qū)間和中位值結(jié)果完全一致,離群點(diǎn)的結(jié)果由于計(jì)算精度的影響在個(gè)別情況下稍有誤差。

        4.3 資源消耗

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

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

        由于IAF 神經(jīng)元的計(jì)算大量消耗DSP,通過對數(shù)據(jù)位寬進(jìn)行優(yōu)化,如將浮點(diǎn)數(shù)轉(zhuǎn)換成16 bit 點(diǎn)或半精度浮點(diǎn),有效減少了DSP 的使用,在提高計(jì)算并行度的同時(shí)提高了整體資源的利用率。

        4.4 PEST 集群最佳節(jié)點(diǎn)數(shù)評估

        當(dāng)把某個(gè)SNN 工作負(fù)載運(yùn)行到PEST 上時(shí),節(jié)點(diǎn)過多或過少都會影響系統(tǒng)的能效,因此需要對該工作負(fù)載分配最佳數(shù)量的計(jì)算節(jié)點(diǎn)。在對PEST 進(jìn)行性能分析時(shí)運(yùn)行皮質(zhì)層視覺模型,圖片選擇128×128、200×200 和300×300 像素的不同數(shù)據(jù)集進(jìn)行測試。首先對不同節(jié)點(diǎn)數(shù)的計(jì)算時(shí)間進(jìn)行實(shí)際測試,實(shí)驗(yàn)結(jié)果如圖21 所示。

        Fig.21 Running time comparison of cortical visual model under different number of nodes圖21 皮質(zhì)視覺模型在不同節(jié)點(diǎn)數(shù)運(yùn)行時(shí)間對比

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

        運(yùn)行其他兩個(gè)數(shù)據(jù)集時(shí)由于圖片像素增多,所生成的神經(jīng)元數(shù)量也隨之增多,計(jì)算時(shí)間隨之增加。由于神經(jīng)元計(jì)算規(guī)模增大,通信時(shí)間和神經(jīng)元更新時(shí)間都相應(yīng)增加,其分布特性與運(yùn)行小數(shù)據(jù)集時(shí)類似,運(yùn)行200×200 和300×300 數(shù)據(jù)集時(shí),PEST 仿真器的最佳計(jì)算節(jié)點(diǎn)數(shù)分別為16 節(jié)點(diǎn)和24 節(jié)點(diǎn)。

        在PEST 上運(yùn)行8 000 和16 000 兩種神經(jīng)元規(guī)模的皮層微電路模型進(jìn)行測試,測試結(jié)果如圖22 所示。

        Fig.22 Running time comparison of cortical microcircuit model with different number of nodes圖22 皮層微電路模型在不同節(jié)點(diǎn)數(shù)運(yùn)行時(shí)間對比

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

        目前已有研究自動地為工作負(fù)載分配合適的計(jì)算節(jié)點(diǎn),限于篇幅在此不再展開介紹。

        4.5 PEST 集群性能與能效評估

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

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

        通過表3~表5 可知,PEST 的運(yùn)算性能與功率隨著計(jì)算節(jié)點(diǎn)的增多而線性增加,而Xeon 2620 和AMD 3600X 的運(yùn)算性能和功率在運(yùn)行皮質(zhì)層視覺模型時(shí)基本維持不變。

        在運(yùn)行皮質(zhì)層視覺模型128×128 數(shù)據(jù)集時(shí),PEST 集群在8 節(jié)點(diǎn)時(shí)計(jì)算性能最佳,神經(jīng)元更新時(shí)間相比3600X 提升16 倍,比Xeon 2620 快23.8 倍。在300×300 數(shù)據(jù)集下24 節(jié)點(diǎn)PEST 集群神經(jīng)元更新時(shí)間相比3600X 提升44 倍,是Xeon 2620 的62.9 倍。整體計(jì)算量越大,PEST 在計(jì)算速度上的優(yōu)勢越明顯。

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

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

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

        如表6、表7 所示,運(yùn)行皮層微電路模型時(shí),PEST在神經(jīng)元更新部分相比其他兩個(gè)平臺依然優(yōu)勢明顯,在模型規(guī)模為8 000 神經(jīng)元時(shí),PEST 在16 節(jié)點(diǎn)時(shí)計(jì)算性能最佳,神經(jīng)元更新時(shí)間相比3600X 提升4.6倍,比Xeon 2620 快7.5 倍。在16 000 神經(jīng)元計(jì)算規(guī)模下20 節(jié)點(diǎn)PEST 的神經(jīng)元更新時(shí)間相比3600X 提升14.3 倍,是Xeon 2620 的24.5 倍。神經(jīng)元數(shù)量越大時(shí),PEST 運(yùn)行皮層微電路模型的性能優(yōu)勢越明顯。

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

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

        更新能效比方面,PEST 相比其他兩個(gè)平臺依然具有優(yōu)勢,在8 000 神經(jīng)元規(guī)模下,16 節(jié)點(diǎn)的PEST 更新 能效比相比3600X 提升5.3 倍,比Xeon 2620提升7.9 倍。在16 000 神經(jīng)元規(guī)模下,PEST 的更新能效比相比3600X 提升13.4 倍,比Xeon 2620 提升20.2 倍。

        通過4.4 節(jié)可知,PEST 在節(jié)點(diǎn)最佳數(shù)時(shí)的計(jì)算性能與運(yùn)行在其他節(jié)點(diǎn)數(shù)時(shí)性能差距并不明顯,用戶可以根據(jù)需求選擇適當(dāng)?shù)墓?jié)點(diǎn)數(shù)進(jìn)行模型計(jì)算,在損失一定計(jì)算速度的情況下使用更少的節(jié)點(diǎn)數(shù)進(jìn)行計(jì)算可以在能效比方面達(dá)到更好的效果。

        5 結(jié)束語

        本文以PYNQ-Z2 開發(fā)板為基礎(chǔ),結(jié)合PYNQ 框架和NEST 類腦仿真器等軟硬件設(shè)備,搭建了一套異構(gòu)類腦計(jì)算系統(tǒng)。通過對集群中IAF 神經(jīng)元更新部分進(jìn)行優(yōu)化,增加FPGA 并行計(jì)算模塊,優(yōu)化集群文件系統(tǒng)等方式,提升了整體計(jì)算性能,簡化了操作復(fù)雜度,實(shí)現(xiàn)了高性能、低功耗、規(guī)??缮炜s的PEST 類腦計(jì)算集群,為類腦計(jì)算提供了一種新的計(jì)算平臺。

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

        猜你喜歡
        類腦仿真器集群
        世界首款類腦互補(bǔ)視覺芯片研制成功
        基于多尺度網(wǎng)格細(xì)胞模型的無人機(jī)類腦矢量導(dǎo)航方法
        海上小型無人機(jī)集群的反制裝備需求與應(yīng)對之策研究
        一種無人機(jī)集群發(fā)射回收裝置的控制系統(tǒng)設(shè)計(jì)
        電子制作(2018年11期)2018-08-04 03:25:40
        中國成立“類腦國家實(shí)驗(yàn)室”“借鑒人腦”攻關(guān)人工智能
        Python與Spark集群在收費(fèi)數(shù)據(jù)分析中的應(yīng)用
        勤快又呆萌的集群機(jī)器人
        基于多線程的慣導(dǎo)邏輯仿真器設(shè)計(jì)
        天文測量仿真器模擬星圖精度分析
        并行片上網(wǎng)絡(luò)仿真器ParaNSim的設(shè)計(jì)及性能分析
        爱情岛论坛亚洲永久入口口| 色婷婷久久99综合精品jk白丝| 日本精品中文字幕人妻| 亚洲精品无码不卡在线播he| 日韩免费无码一区二区三区| 国产成人午夜福利在线小电影| 开心激情网,开心五月天| 最近免费中文字幕中文高清6| 欧洲精品免费一区二区三区| 亚洲综合色区无码专区| 国产精品丝袜美腿诱惑| 久久午夜福利电影| 少妇无码一区二区三区免费| 久久免费国产精品一区二区| 老熟妇嗷嗷叫91九色| 亚洲第一狼人天堂网亚洲av| 精品亚洲欧美无人区乱码| 九一成人AV无码一区二区三区| 久久精品国产黄片一区| 成视频年人黄网站免费视频| 久久久无码一区二区三区| 日本一区二区国产高清在线播放| 人妻中文字幕日韩av| 亚洲色欲色欲大片www无码| 亚洲色大成网站www在线观看| 久久精品成人一区二区三区蜜臀| 麻豆国产一区二区三区四区| 精品亚洲成a人在线观看青青 | 一区二区三区在线日本视频| 在线观看免费无码专区| 毛茸茸性xxxx毛茸茸毛茸茸| 国产高潮精品一区二区三区av| 少妇下面好爽好紧好湿一区二区| 亚洲人成影院在线观看| 岛国大片在线免费观看 | 亚洲精品乱码久久久久99| 日韩午夜免费视频精品一区| 中文在线8资源库| 国产AV国片精品有毛| 一本色道88久久加勒比精品| 亚洲av无码av在线播放|