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

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