Eyeriss
system architecture
工作流程:
Eyeriss只运行的DNN的推理(inference)阶段,不做训练。
- 接受配置流(图中Configuration Bits,1794 b),配置计算模式(卷积核大小,步长;输入大小与维度;输出大小与维度)
- 从DRAM中读取数据,计算一层结果,(一层都计算完之后)将结果写回到DRAM
- 回到1,重新配置下一层结果
on-chip
两个时钟域,分开独立工作:
Core Clock
核心的计算单元,在这里运行计算部分,主要包含以下几个部分:
数据编码解码
Eyeriss-v1采用RLC编码(游程编码),V2采用CSR编码。这种数据压缩表示能够1. 减少存储空间 2. 降低传输数据量,提升传输速度。特别是数据在ReLU之后,数据中有比较多的0,这种编码方式能极大提升效率。
Global Buffer(108 KB)
Eyeriss片上一次能够计算一层,因此需要这些一个比较大的存储空间,当filter,ifmap等数据从DRAM中读取之后,先存储到Global Buffer(存储介质为SRAM)中,SRAM相比DRAM,数据读取能耗更小。
PE array(计算单元阵列)
这里是1214的计算阵列,一个PE中完成一个1-D的卷积运算,PE之间通过*NoC** communicate,每一个PE还有一个local的存储叫spads(scratch pads)。详细信息见后。
Link Clock
这一部分主要就是控制数据的传输,时钟独立于计算单元。
off-chip
主要就是DRAM,从DRAM中读取数据,一层都计算完之后将结果写回到DRAM,与片上之间有一个异步的FIFO中间层。
整个系统的4级存储hierarchy((由大到小):
DRAM, GLB,inter-PE communication,spads
Eyeriss的主要两部分工作:
- 通过数据复用(data reuse)来减少数据流动。
- 压缩数据,减少存储与传输。
对应图中结构就是,PE来实现数据复用,编解码部分来压缩数据。
PE array
1-D Convolution Primitive in a PE
每一个PE计算1-D卷积,filter,ifmap,和psum都可以存储在PE中的spads,不需要数据流动:需要存储的大小为:
type | size |
---|---|
filter | S(卷积核一行中的元素个数) |
ifmap | S |
psum | 1 |
1-D卷积如下所示:
这里图示只是在说明一般的1-D卷积。图示计算模式会分给3个PE来计算,也就是按照右边的划分方式分成3组。
Row-Stationary
在2-D的计算模式中:一个卷积核行数为3,ifmap行数为5的计算过程如下:
运算模式如下:
cycle | filter | ifmap | compute |
---|---|---|---|
0 | row1-> PE1,1 PE1,2 PE1,3 | row1->PE1,1 | PE1,1 |
1 | row2-> PE2,1 PE2,2 PE2,3 | row2->PE2,1 PE1,2 | PE2,1 PE1,2 |
2 | row3-> PE3,1 PE3,2 PE3,3 | row3 -> PE3,1 PE2,2 PE1,3 | PE3,1 PE,2,2 PE1,3 |
3 | row4 -> PE3,2 PE2,3 | PE3,2 PE2,3 | |
4 | row5-> PE3,3 | PE3,3 |
按照这样理解,感觉PSUM箭头的方向是反的?在cycle 0是计算PE1,1,然后结果给PE2,1?
PE sets(logical mapping)
在PE sets设计中,一个卷积核大小和R S,ofmap大小为E F,需要的PE sets为$R\times E$
也就是PE sets的行数为卷积核大小,列数为ofmap的行数。
physical mapping
由于PE array的大小固定,不一定适配PE sets的大小,因此需要调整PE sets,进而能够放到PE array中进行计算。
PE sets大小超过168(12*14的)
就将分割行数,一次处理e行,e < E。
PE sets宽度大于12的,长度大于14,但是总大小不超过168的
调整合并到一个PE array中。
举例如下:
AlexNet 信息如下:
- CONV1 PE sets为11*55,拆解成11*7,图中有两组,每组对应不同的filter channel,使用相同的ifmap channel。同时 Stride为4。并行处理两个channel。
- CONV2 PE sets为5*27,拆解成5*13和5*14,这两组使用相同的filter channel,因此不是并行处理。
- CONV3 PE sets为3*13,可以放到PE array中,还可以多并行处理,也就是这里对应4个filter channel。
- CONV4-CONV5 PE sets也为3*13,但是这里做了另外一种并行化处理。1,2(3,4)组内是同一filter内的channel并行;3,4组与1,2组之间是在对相同的ifmap使用不同的filter。
进一步,如果需要增加并行度:可以考虑增大PE的计算能力:
a 相当于将ifmap中的两行存到spad中,PE计算一行之后结果放到相应的PSUM中,然后再开始计算另外一行。
b 文章中只讲到了time interleaving,没有过多的细节,我猜测是在PE中有更多的控制细节,控制计算filter 1中的第一个元素再来计算filter 2中的第一个元素,(ifmap)保持不动。
c感觉跟b类似,filter和ifmap都交替着来,最后的psum还是将两者相加起来。
最后实现的大小是:
type ifmap spad filter spad psum spad size 12 * 16b 224 * 16b 24 * 16b
RLC (Run length Coding)
编码示意图如下:5b表示0的数目,16bit表示非零值。
每3组run和level打包成一个64bit的集合,其中最后一位表示是否是编码的最后值。
system modules
GLB
- 100KB存储ifmap和psum,分成25个bank,根据ifmap和psum需要动态调整。
- 8KB存储filter,本来大部分都是存储在DRAM中,但是考虑到带宽需求,部分filter存储到GLB中,在计算其他部分的时候预先存储到GLB中。
Network on Chip
Global Input Network
根据ID(row, col)来进行匹配multicast
Global Output Network
基本是Input的反向传输
Local Network
主要是方便psum的流动
PE and Data Gating
针对零元素,不需要计算,因此可以跳过,PE结构如下:
Results
- 工作频率200MHz
- 16 bit 定点
- Alexnet 34.7 frame/s,278mW, VGG16 0.7 frame/s