Cambricon-X: An Accelerator for Sparse Neural Networks——學習筆記

Cambricon-X: An Accelerator for Sparse Neural Networks——學習筆記

公司AI項目新架構中需要增加稀疏功能,調研學習了cambricon-x的paper,希望能對新架構開發起到啓發作用。學習筆記共享出來供大家交流學習,錯誤處請指正。

1. 文章核心思想

基於稀疏網絡模型提出了IM硬件模塊設計,完成稀疏控制訪存及PE計算加速,提升整體加速性能。

2. 稀疏模型

cambricon-x中只對權重稀疏化,未作map稀疏化。
原因:
全連接層的神經元稀疏化可以比較自然的得到支持,而卷積層的神經元稀疏化則不太容易支持,原因是爲了提升輸入數據的複用性,對於被prune掉的輸出神經元,需要找到另一個feature map裏相同位置的輸出神經元代替,這會導致用於管理輸出神經元的地址對齊邏輯變得比較複雜,在Cambricon-X的硬件層面並沒有做這個支持,於是相應的支持不得不上推到軟件層面,這就引入了額外的開銷,減少了性能加速的收益。

3.Accelerator Design

3.1 Overview

加速器由以下模塊組成:
1)Control Processor(CP)
2)Buffer Controller(BC)
3)Neural Buffers(NBin and NBout)
4)DMA
5)Computation Unit(CU)
在這裏插入圖片描述

3.2 Computation Unit

計算模塊PE包括一個PEFU和SB存儲單元,完成卷積乘累加計算,PE架構如Fig6:
在這裏插入圖片描述
PEFU:Neural network functional unit for pe;PEFUs從本地SB中讀取weights,從BC中讀取indexed neurons,併產生卷積計算輸出到BC;單個PEFU由Tm個dsp組成
SB:用來存儲部分和sparse後的weights,每個PE中2kB SB,每個SB提供Tm個16bit的data並行度,總計2 x Tn kB的sram。每個SB每個clock輸出Tm個weights給到PEFU模塊

Tm=4時SB存儲方式:
在這裏插入圖片描述
PE計算:
ofmap0 = w00 * ifmap0 + w40 * ifmap4
ofmap1 = w11 * ifmap1 + w21 * ifmap2 +w31 * ifmap3 +w51 * ifmap5 + w61 * ifmap6

3.3 Buffer Controller

3.3.1 BCFU

基於IM來實現對需要的neurons進行選擇傳入PE中,PE完成計算後通過BCFU控制輸出給NBout模塊,完成輸入輸出neurons的控制,端口並行度Tm。
在這裏插入圖片描述

3.3.2 IM

根據sparse weights的來生成,用於選取和spares weihgts對應的ifmap。
首先從IM模塊中取出index,只有標記的indexed neurons纔會傳遞到PEs,這樣和稀疏前的neuros相比,大大減少了neural buffer和PEs間的帶寬要求。
IM模塊中使用一個bit位來對synapse進行標識,“1”表示連接存在,“0”表示缺失。IM模塊實現的方法重點研究了direct indexing 和step indexing。
在這裏插入圖片描述

1)direct indexing實現方法
direct indexing sparse實現原理見下圖(a),硬件實現參考圖(b);具體過程如下:
(1)先在原始binary string進行累加,得到累加後的string,累加後的string結果指示PEs連接位置
(2)將原始binary string和累加後的string做and邏輯,用輸出結果選擇讀取neuros給PEs
PS:此處NBin中的ifmap爲原始的ifmap,根據indexing reseults進行指定地址讀取
在這裏插入圖片描述
2)step indexing實現方法
step indexing中ifmap的是基於兩個weights間distance換算來讀取,具體分兩部:
(1)IM中index number順序相加,得到一組和稀疏後weights對應的feature索引
(2)按得到的feature索引從BC模塊中讀取對應feature值作爲PE輸入feature
ps:Index number的位寬paper中說是取決於網絡的稀疏性,具體如何確認?
在這裏插入圖片描述
paper中對direcet indexing和step indexing兩種方法rtl實現後的面積、功耗等性能進行比較,step indexing具有優勢,最終在Cambricon-X裏使用了step indexing的方法來實現IM。
IM每個clock能讀取Tm x Tm個data輸入到每個PE中。
ps:Tm x Tm怎麼得來的?
在這裏插入圖片描述

3.4 CP

不同指令來實現設計的高效、靈活控制,用於對數據格式,計算執行,訪存控制等。存在小的指令memory中

3.5 NB

NB模塊包含NBin和NBout,分別用於緩存輸入和輸出feature。存儲的feature是不考慮網絡稀疏性的feature,即原始的feature。NBin輸入數據寬度是Tm x 16bit,輸入輸出Buffer設置爲8KB大小

3.6 Interconnect and communication

3.6.1 Interconnect

採用Fat-tree連接拓撲,原因:
1)避免BC和PEs間連接的不平衡的delay導致出現長關鍵路徑。
2)Fat-tree連接Fanout相對其它連接小,能緩解佈線擁塞
導致具體論文參考《Fat-trees: Universal networks for hardware-efficient supercomputing》

3.6.2 Communication

片內和片外數據交換通過DMA模塊完成,對交換數據訪問按tile進行遍歷

3.7 Hardware characteristics

實現評估中Tm = Tn = 16

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章