SpiNNaker 項目 - 譯稿1
翻譯了擬態神經晶元領域的一個重要的項目:曼徹斯特大學的 Steve Furber要用一百萬個ARM核心來模擬神經元,通過互聯實現百分之一的人類大腦的模擬。作為備受質疑的歐盟人腦計劃的一部分,這個項目聽起來簡直是瘋狂,燒錢和過於浪漫主義的代名詞。在學術角度上這個項目無疑是值得稱讚的,作為博士開題的潛在研究項目之一,我把SpiNNaker項目中比較重要的一篇綜述翻譯過來。這篇文章寫於2013年,也就是SpiNNaker項目開始執行的第6年,距今已經五年了,在這五年中間這個項目沒有什麼太多的產出,當年的合作學校和研究團隊也都已經各奔東西了,2017年也就是去年的一波AI晶元熱潮,看起來又能把這個項目燃燒一番,也就是我現在要做的工作,以下是翻譯草稿。
簡介 脈衝神經網路結構項目(the spiking neural network architecture,the sinNNaker Project)的目的是實現一個大規模並行化百萬級核心電腦。這個電腦的互聯結構是基於哺乳動物大腦的連接特性的,以便能夠在生物學角度適用於實時的大量級的脈衝神經網路。這種互聯結構的特別之處在於,他能夠允許大量的小數據包的傳輸,每個數據包都包含神經元的動作電位或者說脈衝的確切的源以及暗含著時間因素。本文主要回顧了項目的當前進程,即已經實現了2500個處理器的系統。另外展示了能夠支持靈活資源訪問的實時事件驅動編程模型,同時啟動了本項目在世界範圍內一大批合作者中的應用。
1 介紹
SpiNNaker 項目的動力來源於一個巨大的挑戰,即理解大腦是如何表達和處理信息的【1】。現如今大多數的前沿科學都在考慮小如亞原子大如宇宙外圍的事情,但是在我們的世界中,仍然有一個與人類關係密切的未解之謎,即我們的腦袋,這個能輕而易舉地拿在手中,不藉助顯微鏡直接觀察的器官,是如何行使它的職能並處於我們所有的生活中的中心位置的。
神經科學已經告訴了我們人腦的基本單位,神經元,是如何構造大腦的。腦成像技術也告訴了我們當我們進行某一個心理活動時候,我們的腦子是如何活動的。前者主要研究單個或者十幾個一組或者數百個一組的神經元,後者則是要觀察人腦幾百萬個神經元的集體活動情況。但是在這兩種量級之間,除了電腦模型,沒有什麼科學儀器可以充當中介來連接這兩個量級,我們認為這裡應當是所有有意思的信息處理髮生的地方。
我們的結論是,我國我們想要全面了解我們的大腦是如何處理和表達信息的,我們就需要建立一個電腦模型來測試我們設想的人腦工作方式。
A 神經元和脈衝
什麼樣的電腦能夠支持這樣的大腦模型來工作?
人腦通常被視為由少於1000億個神經元組成的,每一個神經元都是一個多輸入多輸出設備。
但是仍有一些疑惑存在,主要在於比構成大腦的神經元細胞數量更多的神經膠質細胞的作用,尤其是星形膠質細胞在突觸可塑性上的作用。因此任何的通用目的系統都需要能夠適應這些已經被證明是重要的問題。
神經元細胞原理上是通過動作電位(action potential)或者稱之為尖峰(spikes)的信號來通訊的。這些簡單的非同步脈衝是一系列電化學中再生過程(regeneration process)的結果,可以保證信號在長長的生物線纜上傳遞的穩定性,而且只與特定的產生尖峰神經元和產生尖峰的時間有關。脈衝的高度和寬度在其接收突觸上,很大程度上是沒有變化的。這使得神經活動的地址-事件表達編碼(address-evet representation,AER,encoding)得以大範圍的適用。這種編碼是以時序的神經標識來表示網路上的信息流的。
AER的信息觀點有一些明顯的例外,有些神經元通過傳輸發射多巴胺這樣的神經介質來對周邊的所有的神經元產生影響。其他的神經元則是通過連接的間隙直接與相鄰神經元溝通。然而在大腦的大部分地方,首要的實時信息流是AER表示的脈衝流。因此若是一個通用母的的電腦模型平帶就應該在提供有意的AER脈衝支持同時,提供相應的工具鏈來支持這種例外的信息流。
B 電腦模型
什麼樣的電腦計算能力和架構能夠支持人類大腦的實時模型?
對於這個問題,最簡單的預測建議是10^15個大腦突觸,平均輸入頻率10Hz,每個突觸事件需要大學100個指令來升級突觸後神經元的狀態和部署任何突觸可塑性演算法。這些動作會產生每秒10^18次操作,即一個百萬億次機器的性能。雖然百萬億次的高性能電腦現在並不存在,但是最近中國的天河2已經實現了每秒3x10^16次的浮點操作【5】,因此百萬億次計算機距離我們並不遠。
然而,計算機能力並不是唯一的問題。大腦中的交流模式是基於非常小的信息包,他們在複雜路徑上往多個目標點傳輸。高性能的計算機,在另一方面來說,其實是為點對點通信,大數據包而優化的。當把大腦量級的脈衝神經網路部署到傳統的集群機器和高性能計算機的時候,這種失配就會導致明顯的低效能。
C SpiNNaker
SpiNNaker機器是為支持大腦中已知的各種通訊方式而設計的電腦。為了能夠完成這個任務中大量的計算要求,SpiNNaker基於大規模並行計算,並且其架構能夠支持最高一百萬個微處理器核,而這個數量的限制僅僅在於預算和結構上的方便性,並沒有什麼基本原理的上的限制。
SpiNNaker的關鍵創新點是其通信結構,這種結構特別的針對大數量小信息包做了優化。作為對比,同上邊所講的一樣,傳統的集群機器和高性能計算機則是為大數據包而設計的。SpiNNaker上,每一個通信包都搭載了一個單個的神經元脈衝事件,通信包大小為40bit,其中32bit是AER的神經元識別符,8bit是用於識別包類型的管理比特位。(32bit的AER識別碼並沒有架構原理上的限制,如果想要支持更大的神經模型,可以使用更長的識別碼)。AER尖峰的時間是隱式的,這種通訊結構可以在少於一毫秒的時間內傳輸一個包,這也是實時神經建模的要求。
雖然SpiNNaker的設計集中在能夠支持AER尖峰的包交換上,但是使用同樣的通信機制,也可以支持非AER信息流傳送離散的(通常1ms)更新內容給連續變化的參數。
為了實現高效的大規模並行化操作,SpiNNaker的設計可以接受一些讓步,其中一個就是確定性操作的要求。通信系統非同步的本質導致了包接收順序的非確定性,包有可能被偶爾丟棄以防止通信的死鎖。所以,再在確定的條件下,重新發送確定性操作和其關聯操作來配合傳統的時序模型是有可能的,但是這並不是操作這種機器的自然的,或者更有效的方法。
D 文章組織
本文是SpiNNaker項目的一個綜述,同時也是使用本機器的一個教程。本項目的貢獻和本文的結構如下:
我們對SpiNNaker的架構(第一部分)和硬體部署(第三部分)進行了介紹。
我們介紹了系統軟體(第四部分),描述了事件驅動的軟體模型(第五部分)和其支持API(第六部分),還有一個在此API上運行的簡單常式(第七部分)。
我們描述了用以隱藏物理層結構的分隔和配置軟體(PACMAN 第八部分)
最終,我們描述了一些在本機器上運行的典型應用(第九部分),我們未來的計劃和更大量級的機器(第十部分),最終描繪了我們在開發本機器過程中的經歷帶給我們的一些結論。
2 架構
更詳細架構在之前的論文中有介紹【6】,所以再次哦我們主要描述架構的一些適合來跟進的關鍵特性(見圖1)
圖一,SpiNNaker節點的一個原理性架構組成
一個SpiNNaker機器是一個由處理節點構成的均質二維多指令多數據陣列。每一個節點都整合了18個ARM968處理核心,每個核心包括96kByte的本地內存和128MBytes的共享內存,一個包路由,還有一個通用斯通支持協議。每一個處理器核心都是一個通用的,沒有浮點硬體的,200MH在,32bit的集成處理器,因此演算法上通常要部署為定點數據。
A 可達到的性能
每一個核心可以對數百個神經元模型進行建模,例如Leaky Integrate and Fire 或者Izhikevich模型,並且有1000個突出順序配置給每一個神經元。在實踐中,有很多不同的約束都有可能限制一個處理器核心可以實時支持的神經元的數量,但是通常來說計算能力的預算是由輸入的連接來決定的,這就決定了一個上限:(神經元數量)x(每個神經元輸入的數量)x(平均輸入激發率)。其中連接是指一個到達的尖峰通過一個獨立的突觸。理論上,一個處理器核心可以支持最高每秒一千萬個連接,雖然目前的軟體部署飽和時候只能達到這個數量的一半,並且可塑突觸模型甚至要進一步減少這個數量。
B 尖峰和包
SpiNNaker的關鍵創新點是一個輕量級的多廣播包路由機制,可以支持非常高的生物大腦中已知的連通性。這種機制傳統AER的一個擴展【3】【4】。當運行中的軟體決定了一個神經元需要發射一個尖峰的時候,他會簡單的發行一個識別這個尖峰神經元的包。這個負責發射的處理器並不知帶這個包要到哪裡去,因為這是路由網路的責任。
每一個節點都會與一個包路由其配合,路由器會檢查每一個包的源,相應地把包發送到,在一個二維三角網眼結構中,這個路由的18個本地處理器的子集或者相鄰節點下的任意子集,其使用的多廣播傳輸已經被證明是最適用於神經應用的【7】.具體的路由方式由路由器中的路由表決定,這個表會在應用載入機器時候被初始化。
由於包識別符是32bit,因此在每一個可能的源上都部署完整的路由表是不可能的。所以有一些優化手段就會被使用以保證表大小的合理性。
表存在可定址內存(CAM, Content addressable memory)上,並且其目錄要求只包含通過節點的包。
CAM有四個狀態,0匹配,1匹配,全匹配,無匹配。這就使得一個CAM入口能夠為所有有共同路由要求的神經元提供路由服務。
當如果沒有CAM條目匹配源識別符的花,默認的路由機制會允許這個包直接通過節點。
這些優化使每個節點上的,包含1024個詞條的路由表更加高效。路由表的初始化問題會在第八章討論。
C 處理器配置
每個SpiNNaker節點會選擇18個處理器核心中的一個作為監視處理器(monitor processor)。這種選擇是出於容錯靈活性的考慮。一旦監視處理器被確定,他會被分配一個操作系統支持規則。接下來的16個處理器會被賦予應用支撐規則,第18個處理器則會作為容錯冗餘封存。
though on a proportion of nodes, the 18th processor may be faulty as nodes with only 17 functional processors are accepted in production to enhance yield.
3 晶元,封裝,板和系統
SpiNNaker架構的物理部署在其他文章中有詳細的描述【8】.故此本章中我們會講一些相關的亮點。
A晶元和封裝
每一個SpiNNaker節點都部署在一個19mm平方的300球柵陣列BGA封裝上。這個封裝包含了一個定製的多處理器片上系統SoC集成電路,包括18個ARM968處理器,每個處理器有32kByte指令內存和64kByte的數據內存,這些處理器都通過自計時的片上網路連接到數個片上共享資源和第二個晶元,一個128MBytes的低功耗移動雙數據速率(DDR)的SDRAM。這兩個晶元堆疊在封裝基板上並使用金線焊接(見圖3).SDRAM的整合帶寬經測量在900MB/s。
B 基板
封裝的晶元會被裝配到印製的電路板上(PCB板,printed circuit boards,見圖2)。PCB上的晶元間連接時使用自計時2-7不歸零協議來傳輸4bit,兩線制的符號,此外還有一根線用來傳輸應答回復。
理論上,直連方式可以用於建造任意尺寸的SpiNNaker機器,但是在實踐上,SpiNNaker是由一系列48節點的PCB構成的,PCB間連接是使用高速串列連接,而且每八個片間連接是用Xilinx的Spartan6 FPGA,在串列線上多路復用實現的。
C系統
不同大小的SpiNNaker的系統可以由一個或多個48節點的PCB裝配而成。另外有一個4節點的小板可以非常方便的用於訓練,開發和移動機器人。最大的機器,整合了一百萬個AR,處理器核心,用了1200個48節點的的板,放在十個機房櫃種,峰值電量需求75kW。
4 SpiNNaker系統軟體
SpiNNaker的軟體可以分為SpiNNaker系統上自己運行的和在其他系統上運行的,但是有些可能會與SpiNNaker進行交互。運行的在SpiNNaker上的軟體主要是用C寫的,這個軟體能夠被分為控制軟體(一種原始的操作系統)和執行用戶計算任務的應用軟體。
SpiNNaker系統與外部世界的主要介面是乙太網和基於IP的通信協議。每一個SpiNNaker晶元都有乙太網介面,並且每個PCB上只有一個晶元會使用這個介面。這個介面用於把代碼和數據下載到SpiNNaker上,同時從應用中手機結果。對於一些應用而言,100Mb/s的就扣是一個瓶頸,因此我們考察了FPGA提供的Gbit的連接在SpiNNaker的PCB上的應用和提高情況。
A SpiNNaker 軟體
在SpiNNaker 系統上的控制軟體被稱為SpiNNaker監控程序(SC&MP)。SpiNNaker晶元包含主引導代碼,能夠使代碼通過乙太網介面或者片間連接載入,SC&MP監控程序的載入也是使用這種方式,通過乙太網連接初始化到單個晶元上。SC&MP監控程序會隨後通過片間連接被傳播到整個系統中,並且在選出來的監視處理器上持續運行,同時提供一系列的服務來保證剩下的每個晶元上的16或者17個應用核心能夠從外部世界中載入應用程序。
一個簡單的,用於SpiNNaker系統內部的包協議被稱為SpiNNaker 數據電報協議(SDP,SpiNNaker Datagram Protocol)。SC&MP監控程序會在SDP包面前扮演一個路由的角色,來許可他們能否被從系統中的任意核心之間收發,或者通過乙太網介面發到外部的終端上。這個協議構成了SpiNNaker晶元之間,SpiNNaker與外部機器的,應用載入和高級通訊的基本框架。在獨立的晶元之間,SDP包通過共享內存介面來完成交換。而在片間,SDP則會通過片間鏈接,進行順序的點對點傳送。要把SDP攜帶出系統,包通常會被嵌入在UDP/IP包中並通過乙太網介面送到外部的終端。
SpiNNaker應用是指在SpiNNaker系統中的一個或多個應用核心上運行的程序。通常會用C語言來寫,使用SDP或者多點廣播包來實現其通信需求。因為核心和片上內存數據大小的限制,給操作系統的空間是很少的,並且只有最小限度的輔助程序能夠與應用程序一起被載入。每一個應用程序都會與一個支持庫相連,即SpiNNaker應用實時內核(SpiNNaker Application Runtime Kernel,SARK)。SARK為應用核心提供了啟動代碼來為應用程序設置實時環境。同時也為應用程序提供了一個函數庫,比如內分配和中斷控制。SARK也包含了一個與SC&MP監控程序的通訊介面,運行在監視處理器上,來保障和控制應用程序與其他SpiNNaker晶元或者外部系統通訊。在SDP頂部運行的協議便是為了實現這個功能的。
應用程序是使用ARM交叉編譯器生成的,需要使用SARK和其他的實時庫完成鏈接。鏈接階段的輸出文件會被轉換成APLX格式(application load and execute)格式,這種格式是SC&MP監控軟體的一部分。APLX文件能夠被下載到SpiNNaker系統,並被監控軟體載入器(SC&MP loader)載入到相關應用核心的內存中合適的位置。
大多數的SpiNNaker應用使用Spin1 API的事件管理庫,這個庫提供了能夠聯合常見中斷的措施,能夠處理事件句柄代碼和管理事件隊列。當處理器沒有處理事件的時候,會進入低功耗睡眠模式。這個API可以被視作用戶應用和硬體之間的軟體層。為了促使SpiNNaker程序開發能夠使用這個API,我們開發了一個運行在Linxux工作站上的模擬器,這個模擬器提供了一套與Spin1 API 相同的調用庫。這能讓用戶可以在沒有SpiNNaker硬體的情況下開發和調試SpiNNaker應用,以便熟悉編程模式。
B 主機軟體
我們把控制SpiNNaker系統的工作站稱之為主機(host)。在這個項目中,一系列的SpiNNaker相關的主機軟體被開發了出來。同時也開發了一些工具用於把應用下載到SpiNNaker系統中。其中「ybug」程序為這些函數提供了命令行介面,同時也允許使用腳本控制。同時用C,Perl,Python語言開發了一些基於SpiNNaker數據電報協議,SDP的程序編程介面(Application Programmer Interfaces, APIs)。這些都使SpiNNaker系統能夠可編程式控制制,讓應用可以下載,控制和更新。
另外,本項目也開發了一些監視應用,實現了SpiNNaker應用的結果在主機上可視化。其中最簡單的是在主機上顯示輸出文字信息,同時複雜數據的時候在主機上可以使用光柵圖來展示,例如在一個神經網路模擬中激發的脈衝,或是單個神經元中的點位(圖4)。
圖4,SpiNNaker監視器的輸出實例
輸入SpiNNaker應用的數據,其配置也會要求主機軟體來提供這些數據。一個這樣的主機軟體就是「spike server」,被用來提供實時的尖峰(spikes,即神經事件)給SpiNNaker上運行的神經模擬。
影響SpiNNaker軟體開發的一個重要部分是把複雜的問題映射(map)到SpiNNaker硬體上。一個典型的例子是一個神經網路模擬,其中的獨立的神經元或者一組神經元會被分配到系統中的核心中,同時為了網路的連接性,路由表會被設置為允許他們進行適當的交流。將要在本文第八部分中講述的「PACMAN」程序便是這種程序的一個典型【10】.
圖5展示了構成一個SpiNNaker系統的不同種類組件軟體的安排。
圖5, 主機,根節點和其他SpiNNaerk節點上的運行的軟體組件
5 事件驅動的軟體模型
SpiNNaker上部署的編程模型是實時事件驅動系統。這個應用處理器有一個基礎狀態,在這個狀態上他會停止處理並等待一個中斷,這就改善了整個系統的能量效率。在標準的神經模型應用中,有三種主要的事件能夠喚醒處理器。
1)到達的尖峰包。通常會讓處理器,從這個尖峰相關的源突出數據結構的SDRAM,直接開始一個DMA(Direct memory access)傳輸。
2)DAM完成。一旦突觸數據傳輸完畢,處理器必須處理這個數據。
3)1ms時鐘定時。每一個處理器都有一個本地時鐘來對時間進行標記,並且在神經元動力學上,每一個毫秒會完成一個積分步長,1ms是個典型值,這個間隔是可以編程的。
當然,這些事件是非同步的且不可預測的,因此處理器上運行的軟體必須有能力對時間進行排序,也要能夠處理多個重疊的申請。通過一個支持每個應用處理器上事件驅動操作的實時內核,我們能夠實現這個任務,同時直接給用戶展示一個API,用戶便可以在這個API上完全使用C來創建應用了。
6 SpiNNaker應用編程介面 API
SpiNNaker應用程序編程介面(Spin1 API)【11】提供了一個執行環境來支持輕量級的,事件驅動的編程模型。這個模型的中心目標是通過保持核心在低電量狀態來省電,只對特定的事件有反應。這就導致了應用處理器無法控制執行流(execution flow),只能指明函數,對回調函數做出反應,在特定的事件來臨時被執行,例如一個包,一個DMA傳輸的完成或者在周期性時間區間的結尾。這個應答機制也會被用來隱藏子系統的細節,子系統會由API直接且高效的負責。
圖6,事件驅動的軟體架構
圖6展示了事件驅動架構的基本結構。應用開發者需要寫特定時間的相關回調常式,並在API給他們註冊中註冊一個優先順序,這個優先順序會定義這些回調函數能否進入隊列。當相關的事件出現時,調度器會決定這個回調函數是立即原子執行(即非隊列回調,non-queueable call back)還是根據優先順序放入調度隊列(即隊列回調,queueable callback)。其中隊列回調並不是必須被原子性的執行,因為如果在執行期間有相關事件發生的話,他們有可能被非隊列回調佔領。
當調度程序dispatcher進入睡眠狀態的時候(在低功耗中的等待中斷狀態,處理器的核時鐘會被關閉),回調函數隊列被清空同時能夠被任何事件喚醒。應用開發者就可以指定一個非隊列回調最為優先回調,讓他就有最高優先順序並且能夠與隊列回調一樣,能搶佔其他的非隊列回調。這個API就為回調函數提供了能夠控制關鍵區域中的進出支持,來保護高優先順序的回調函數能夠在醉話情況下可以中斷他們,例如在訪問一個共享資源的時候。
這個是實時內核可以支持非常大數量的處理器,但是最適合在相對簡單的模型運行在每一個處理器上。需要說明的是,在沒有事件發生時候,系統會進入停滯狀態,而當處理器被到達的事件擠爆的時候則會影響實時性能。在實踐中,足夠仔細的模型到系統映射能夠防止這兩種不測。
7 底層應用舉例
我們部署了一個康威生命遊戲細胞自動機在為一個運行在SpiNNaker API頂層的一個簡單的並行編程例子。下面是這個例子的關鍵特性。
首先程序需要包含下面的API調用。
#include<spin1api.h>
接著是設置自動機初始化狀態和路由表的常式,在這個例子中,設置路由表是這個編程任務中,目前為止最複雜的一個方面,因為每個生命的鄰居鏈接必須穿過晶元邊界,在處理器之間建立。
Void set_up_route_tables (uintchip,uintcore){…}
Void init_Life_state(uintchip,uintcore){…}
現在我們必須定義事件驅動的回調函數子程序。在這個例子中,相關的事件是計時器滴答和到達的包。
Void tick_callback(uintticks,uintdumy){…}
Void pkt_in(uintkey,uintdata){…}
模擬在每個處理器的C_mian程序中開始,晶元和核心的地址首先會被發現,接著初始化子程序會被調用:
Void c_main(void)
{
Uint chip = spin1_get_chip_id();
Uint core = spin1_get_core_id();
Set_up_rout_tables(chip,core);
Init_life_state(chip,core);
時鐘周期會被設置為1ms,事件回調會被設置為折黨的優先順序(包收取通常是最高優先順序)。
Spin1_set_timer_tick(1000);
Spin1_callback_on(TIMER_TICK,tick_callback,1);
Spin1_callbackon(MC_PACKET_RECEIVED,pkt_in,-1);
最終,模擬開始:
Spin1_start();
}
8 分區和配置管理器(partitioning and configuration manager)
在第七章描述的例子展示了基於API的應用是如何設置模擬參數的,SDRAM內容和基於演算法處理的路由表的。當對於簡單的或者組織性高的問題來說這是有可能的的,但對任意練級和任意神經元類型的網路建模的話,就是個問題了,對此,一更進一步的抽象將在這裡介紹。要配置一百萬個核心的機器,每個核心要對一千個神經元個一百萬個突觸進行建模,現在就成了一個棘手的問題。有十億個神經元要被映射,一萬億個突觸需要配發路徑來完成部署一個用戶規定的模型。
要解決這問題,我們將介紹PACMAN【10】,作為軟體層來允許戶使用標準化的介面來寫他們的模型,並翻譯他,在SpiNNaker上運行它。這個軟體被設計為保持不同的障礙分割:特定領域上平台的用戶介面,已經在科學界被表達的神經模型,例如PyNN【12】和Nengo【13】.PACMAN是一個演算法集,可以把模型翻譯到機器碼。這種執行在數據上的演算法反映了網路模型,系統信息(拓撲,錯誤狀態等),還有數據結構轉換的方法。
PACMAN是使用全體神經元和其間投影來進行映射,路由和翻譯網路模型的,而不是依賴於單個神經元和突觸。通過利用在神經網路中的層次結構,這種方法減少了翻譯過程中的演算法複雜度。這是通過對中樞神經系統的研究而選擇的做法,中樞神經系統的功能隔離區是通過軸突路徑連接的【14】,皮質區域有一個明顯規律性的層狀結構。不同層的神經元固定的鏈接到一個標準的電路板上。最終,許多神經語言【12】【12】【16】【17】都用這種天然的抽象模型,這其實是自然選擇的結果。
使用神經語言作為用戶介面,隱藏了配置並行系統的複雜性,鼓勵跨平台使用模型,可以讓這個平台更容易被非專業人士使用,提供了用戶一個熟悉的環境來開發模型和分析結果。這個翻譯過程正是由圖7中的PACMAN來執行的,途中展示了演算法流和他們工作在的數據表達。
圖7 PACMAN中的演算法流程(左)與他們工作在的數據表示(右)
這個模型是在模型視角的集合和推測表達的。是一個隔離分開的整體,保留了他們之間的互相連接結構,並根據機器的約束要求,由每個核的神經和突觸的容量來決定。這個模型是使用一個類似有向圖的結構(PACMAN視角)來表示的,並使用系統庫中表達的信息來映射和路由在一個物理機器實例上(系統視角)。最終整個模型會使用存儲在模型庫中的翻譯機制,被翻譯到給每個組件(ARM核,SDRAM,路由)可執行的機器語言,載入系統並執行。
圖8 網路例子(左)一個激發態的和一個抑制態的群體,大小比例為4:1被PACMAN映射到4個SpiNNaker晶元的60個處理器上。
一個簡單的網路例子在圖8(左)中有展示:激發態和抑制態的群體周期性的進行互聯。激發和抑制神經元的比例為4:1來保持激發和抑制的平衡。
這個網路可以使用PyNN【12】來表示,首先創建兩個群體的神經元,總計有n個神經元,其參數如下:
Cell_params ={
『tau_refrac』: 5.0,
『v_thresh』:-50.0,
『v_reset』:-60.0,
『tau_m』: 20.0,
『tau_syn E』: 5.0,
『tau_syn_I』: 10.0,
『v_rest』:-49.0,
『cm』: 0.2
}
ex = Population(n-n/5; IF_curr_exp;cell_params)
in = Population(n/5; IF_curr_exp, cell_params)
靜止電位高於閾電位來在所有的神經元上誘導自發放電。群體之間是使用叫做定點概率連接器(fixed probability connector)的東西來進行互聯的,他連接了所有的突觸前群體中的神經元到所有的突觸後群體的神經元,其參數是概率p,權重w和延遲d。
con = FixedProbabilityConnector (p connect =p; w; d)
e_e = Projection (ex; ex; con; target =『excitatory』)
e_i =Projection (ex; in; con; target =『excitatory』)
i_i =Projection (in; in; con; target =『inhibitory』)
i_e =Projection (in; ex; con; target =『inhibitory』)
所有由激活的群體發出的預測都指向激活的突觸,所有的由抑制的群體發出的預測都指向抑制的突觸。
PACMAN會像圖8(右)所示,自動的區分和映射網路。圖8(右)正是展示了一個總神經元數量n為6000,每個核心映射100個神經元的例子。作為結果,模型需要被分到48個激發態,12個抑制態的小組,每一個都會被分配到一個物理機器的單獨核心,並有系統庫提供幾何結構(在這裡是一個四晶元板子)和平台的功能狀態。模型庫為IF_curr_exp的神經元類型(是一個有指數衰減突觸的泄露積分激發模型,
a leaky integrate and fire with exponential decaying synapses),突觸,參數提供翻譯方法。圖9展示了1秒模擬的結果光柵圖,每一個點都表示神經元(縱坐標)在某時刻(橫坐標)發出的一個尖峰脈衝。紅色(藍色)點表示激發(抑制)態神經元發出的尖峰,互聯性參數則是被設置為激發圖中所展現的震蕩活動。
圖9,圖8所示網路的模擬結果光柵圖。每一個點都表示一個神經元尖峰脈衝,紅點是激發態神經元,藍點是抑制態神經元。這個網路中的震蕩活動很清晰的展示在圖中。
9 典型應用
在這個章節中,我們會總結一些情景可以展示SpiNNaker平台的靈活性,並同時展示一個運行在裝備了AER感測器和48節點SpiNNaker板子的機器人上的實驗。
使用前面章節中展示的軟體和硬體,我們已經能夠在一個48節點SpiNNaker板子上實時模擬最多達250000個神經元和八千萬神經突觸(如圖2中所示),並且其能耗預算只有1w每個SpiNNaker封裝(包括一個SpiNNaker晶元和一個128MByte的SDRAM,見圖3)。也就是說,尖峰傳輸(神經模擬中的主要花費部分【18】)和能耗,這個實驗展示了每秒18億次連接,使用很少的微焦每個神經元每個事件【19】。並且展示了該系統在當前的軟體結構下能支撐的最大吞吐量。
目前的工作也為一個皮質微電路的生物學可行模型提供了優秀的功率效率展示【15】【20】,壓縮了10 000個Izhikevich神經元,複製了皮質中的尖峰動態,同時有4千萬個實時突觸【21】。
A Nengo介面
用PyNN的時候,就有使用神經工程框架(NEF,Neural Engineering Framework)可能定義任意的網路結構,也有可能在網路中,對尖峰神經元的功能函數和動態系統進行編碼。使用NEF,就有可能建立複雜的認知結構(cognitive architectures),例如SPAUN【24】,一個基於尖峰的大腦功能模型,這個模型使得對比人類的神經活動和行為數據變得可能。SpiNNaker因此可以與Nengo【25】進行鏈接,這個在NEF中部署的軟體,使得用戶能夠通過指定需要計算的函數來構建神經網路。Nengo通過計算神經元和互聯參數,把函數翻譯到神經電路系統,PACMAN則負責把這個模型分配和設置到板子上。通過NEF的應用,SpiNNaker便成為了一個「神經計算盒」:輸入值和向量使用NEF原理直接編碼成為SpiNNaker板上的尖峰活動。期望的計算會被尖峰神經元實時進行,最終輸出向量和數值會被由尖峰活動解碼。Nengo的介面展示了不同的前端可以使用PACMAN來鏈接,同時展示了這個平台可以使用特定的神經內核來編程,比如使用二進位飯嗎來完成NEF的編碼解碼過程。
B AER感測器介面
生物啟發並不局限於計算架構和方法的探索,他同樣適用於神經擬態【26】的感測器。毫秒級的脈衝編碼已經被用於解釋視覺系統處理信息和快速識別複雜動態的場景的能力【27】。與顳葉在刺激的150毫秒之後才開始,最顯著的不同不同,需要經曆數個突觸階段來到達下顳皮質(物體識別發生的視覺區域),神經元可以在大多數一個尖峰中發射來對信息進行編碼,並且可以確信的是編碼會在一個尖峰時間中進行。
AER感測器可以使用基於事件的方法來被用於開發感覺信息的時間特性。舉個例子,硅視網膜,其靈感就是來源與他的生物學的同行,即為基於幀的處理在擬態神經基質上部署另一個方法。每一個像素都是非同步執行的,會對一個光照強度變化,在幾毫秒之內發送一個AER信息,而並不需要等待整個幀掃描結束,這就幫助了減少視覺信息傳送中延遲和冗餘信息。最為一個能展示基於事件系統好處超過基於幀系統的的另一個例子,請看歐盟的「實時卷積地址事件表達視覺架構」項目(Convolution Address Event Representation (AER) Vision Architecture for Real-Time)【32】。
這些感測器使用原生的基於事件的處理方式和AER表達方式來對感覺信息進行編碼,同時可以,因此被直接鏈接到SpiNNaker上,SpiNNaker扮演了一個基於事件的計算平台。在於德賽維亞電子學院的合作過程中,我們使用FPGA連接了一個硅視網膜到SpiNNaker上【33】,直接把尖峰脈衝(即MC包)注射到包交換網路,而這個FPGA可以翻譯到達的視網膜AER事件到SpiNNaker晶元間鏈接使用的自計時2-7協議。使用這種機制,這個感測器就在SpiNNaker上成為了一個視覺晶元。在模型級,硅視網膜可以使用PyNN進行實例化:
Pol_0,pol_1=p.instantiate_retina()
這裡創建了兩個群體(pol_0.pol_1,一個是用於每個極,分別的編碼用於增減亮度),這其中的神經元在形態學生會被組織成一個二維視覺區域。這些群體會產生尖峰,無論硅視網膜有沒有發射事件,並且可以被任意的鏈接到模型中的其他群體。PACMAN能夠自動的把每個群體映射到一個特定的模型實例來保留鏈接信息。
AER感測器的模擬信息介面已經在與神經研究所(蘇黎世,瑞士,使用DVS感測器【30】和硅耳蝸【34】),大阪大學生物組(日本,打扮,使用視網膜持續和暫態響應啟發的感測器【35】)和視覺研究所(法國巴黎,使用ATIS硅視網膜【36】)的合作下完成了。
C 與機器人平台集成
當時用AER感測器開發事件驅動的原生系統的時候,把他與機器人平台在實時環境中進行鏈接會放映SpiNNaker的實時特性。
當有了AER感測器,機器人平台就有可能在模型級使用PyNN或者Nengo,當系統使用PACMAN來自動配置的時候,就可以讓信息在機器人和感測器之間通過一個定製的介面板子進行傳輸【37】。這個機器人是一個定製的全方向移動平台,有嵌入式的低階動機控制和基本的感測系統,是德國慕尼黑技術大學的神經科學系統原理組開發的。這整個系統是一個單機,自動化,可重構的機器人平台,並且在控制環中沒有使用個人電腦。
我們開發了一個感知動作閉環結構,作為例子,這個機器人代理需要區分兩個不同的刺激,遇到喜歡的時候(一個『+』號)則向前移動,出現不喜歡的(一個『x』)時候便向後移動。這是一個曉得模型,只用了48節點板子的10%的資源,但是這能證明了這個系統的負載能力。
使用的網路結構如圖10所示。這兩個表示一個128*128硅視網膜不同極性的群體會被實例化,正如第9章B部分左江的一樣。這些群體會被連接到四個不同的特徵映射,來表示視網膜輸入和內核表的的卷積結果,如圖10中在資格特徵映射中的白色插入,黑行表示興奮連接,周圍的白色表示抑制性的兩翼。這個操作,實在所有的特徵映射中進行並行計算的,也就是說尖峰時間,
圖10 閉環感知行動機器人舉例,當給機器人展示『+』的時候,會提取整合垂直行和水平行,然後向前移動。灰色的內核和虛線表示展示『x』的時候的路徑,事實是並沒有被激活,因為『+』正在被展示。
10 未來計劃
當前的SpiNNaker硬體已經展示了使用交叉了計算神經科學和神經機器通信。所有的主要硬體功能都要求一個更大的機器,這個機器已經被開發朱磊並且進行測試了,當前的任務是建造一個更大的機器並且當前的主要工作是未來封裝和PCB的製造。
在接下來的兩年中,我們主要承諾是開發一個至少有一百萬個處理器的機器,來為歐盟旗艦的人類大腦項目(HBP)做出貢獻。在其中,SpiNNaker將要作為其中一個擬態神經平台出現,提供給廣大的HBP社區。
一個更早期的,不是很正式的承諾是,證明SpiNNaker有能力實時運行滑鐵盧的學的SPAUN模型【24】。這個模型需要使用大約36個48節點SpiNNaker板子,或者30000個處理器,雖然這個預測可能在Nengo的支持(稀疏連接,減少激發率)下降低,但仍會成為SpiNNaker機器作為能夠支持一個大規模實時尖峰神經模型的一個夠硬的證明。
11 相關工作
當SpiNNaker展示了一個特別的,結合了數字多核計算,和調整為生物實時大規模尖峰神經網路建模的輕量級連接結構的同時,也有很多其他的設計開發了不同的方法來實現相同的最終目的【40】。這些不同的方法可以根據他們是使用數字技術還是模擬技術對神經元和突觸進行建模來分類,即通訊拓撲學是如何部署的,突觸可塑性的支持技術。
數字模型可能會被部署在傳統的通用計算機上,包括集群計算機和高性能計算機,或者是特殊目的硬體比如FPGA【41】【42】,圖形處理單元【43】或者定製硅晶元【44】。而模擬模型【45】可能在閾值之下,因此生物實時性能能夠達成 ,或者超過閾值【47】,此時的電路就可能比生物實時性更快。而大規模項目包括以下這些:
斯坦福的Neurogrid【46】為實時神經模型部署了有數字生成樹AER通信【48】的亞閾值模擬電路。Neurogrid可以為一百萬個神經元進行實時建模,而功耗只有3W。這個項目結合了單一傳播和廣播數字路由技術,使用模擬信號來通過本地擴散網路(diffusion network)
IBM的Neurosynaptic core【49】則是部署了定製的數字電路來實現硬體和軟體模擬之間的一對一通信。意在構建一個通用的認知子系統【44】。這個系統也是使用AER通訊的。
海德爾堡的HICANN系統【47】則是部署了晶圓級的超閾值模擬電路,能夠在10^4倍的生物級實時上操作,使用了兩層AER協議,一層是晶圓內通訊,第二層負責晶圓間通信。
劍橋的BlueHive系統【41】在FPGA上部署數字電路實現實時性能。這個項目的通訊方式並不是純AER,多廣播是使用一套「扇出」信息來負載目的地,權重和延遲。
這些例子闡明了把大規模尖峰神經元系統在實時或者更快的速度上建模方法的多樣性。對於使用數字電路還是模擬電路的問題上都有不同意見(例如模擬電路通常能量利用率更高,但是數字電路靈活性和可重用性更好),同時也有哼多其他的設計意見,因此這個領域對於新主意是非常開放和有好的,同時也缺少一個穩定的能用於定量對比不同方案的的測評系統。
12 結論
SpiNNaker項目自有概念起已經十五年了,接受紫荊並開始運作也有八年了。我們大多數的時間都花費在理解大腦建模問題上,也有如何開發架構,硅和軟體結構上。如今軟體開發還在進行中,架構和硅結構並且與預期的【1】一樣可以提供非常穩定的工作了。
SpiNNaker平台的潛力也在不斷地被挖掘,而且就目前的狀況來看,反饋是非常積極的。這個平台可以提供靈活穩定並且方便的使用(當然在這個方面的提高空間依舊很高),而且在更廣闊的應用領域都有能力提供有用的結果。
這個平台正在被擴充到終極的百萬核心的機器,新的挑在已經浮現,尤其是在管理,應用映射,載入性能,機器內部活動可觀察,最突出的是在機器上運行大量級模型時的調試問題。所有的這些問題都是需要進行持續研究和開發的領域,但是在不斷增長的用戶(到目前為止都非常寬容)的幫助和反饋下,在HBP的經費保障和支持下,在一系列曼徹斯特大學(也包括歐盟研究委員會高等研究計劃和數個工程物理科學研究會EP)提供的經費資助的其他項目為本平台帶來的支持和使用下,我們將繼續努力來提高這個平台的負載能力。
現在是時候去擴大我們的志向來理解大腦中的信息處理的原理了,而SpiNNaker平台正是為這個偉大抱負提供超大負載能力而設計的。接下來的五年里是重要的,將決定我們的這個平台能夠為全球大腦研究項目成果提供多少的符合要求的負載能力。
推薦閱讀:
※發現海馬和眶額皮層在決策編碼中的重要作用
※【原著解讀】丹尼特的《心靈的演化》:由腦組成的腦
※【重磅】快速、高解析度的全腦成像新技術
※杏仁核在強化學習中扮演著重要角色
※「認真臉」長胖怎麼會是你的錯呢!