- 题目:An Energy-Efficient Sparse Deep-Neural-Network Learning Accelerator With Fine-Grained Mixed Precision of FP8–FP16
- 时间:2019
- 期刊:JSSC
- 研究机构:KAIST
1 缩写 & 引用
- FGMP: fine-grained mixed precision
- FF: feed forward
- BP: back propagation
- WG: weight gradient update
- EMA: external memory access
- FMA: fused multiply add
- ILB: input load balance
- LRF: local register file
2 abstract & introduction
之前有很多论文是 inference端的低位宽量化和稀疏性的利用,但是没有人做训练,因为训练需要浮点数运算,他把这个trick用在了DNN训练上
本篇论文的主要贡献有:
- FP8和FP16之间的混合精度,保证了精度,也能实现更高的吞吐
- 能利用DNN的稀疏性,进行DNN的训练
- 输入负载的平衡
正常的训练一共有三个部分
- FF:前向传播
- BP:后向传播
- WG:根据后向传播的值更新权重
3 细粒度混合精度
根据浮点数指数部分的值,如果在一定范围之内,就用fp8来存储,否则用fp16存储,根据一个阈值来确定
实际是用“混合乘加器”,可以同时算两个fp8或者一个fp16,内部的很多电路都是公用的,只比标准的fp16乘法器多13%的面积开销
4 稀疏深度学习计算单元
DL core包含这几部部分:
- 4个PE_LINE:一个PE_LINE包含12个PE和一个本地路由器
- 列缓冲区col-buf:存储权重
- 片上存储DMEM:存储特征图
- local aggregation 单元
- 一个PE_LINE有12个PE,所以一次可以完成12个乘加,输入共享同一个输入特征图像素,和12个不同的kernel对应的数相乘,得到12个对应不同output channel的部分和。
- 一个输入特征图像素之后,再取相同一列,相同input channel,下一行的输入特征图像素,权重不变,这又能产生12个部分和
- 假设一共有Row行,那么就能产生12xRow个部分和,一个PE内部就需要存储Row个部分和,之前权重一直不变
- 然后输入下一个input channel,同一列,第一行的像素值,权重也要换成对应input channel的数
- 一共有4个PE_LINE,那么每个PE_LINE都负责1/4的input channel,这样如果负载不平衡的时候,四个PE_LINE之间还能平衡一点
- 4个PE_LINE对应位置的PE,比如说PE_LINE0、PE_LINE1、PE_LINE2、PE_LINE3的PE0的结果累计起来
5 跳零MAC运算
跳零操作有两个层次:
- 上一节说过,每个PE_LINE内部输入特征图像素都是广播到12个PE的,那么如果输入特征图像素是零,就跳过他,存着对应的index就可以
- 如果一个tile内部,input channel都是零,那么对应input channel的权重也不用load了
6 输入负载平衡
PE_LINE之间是按照input channel维度进行切分的,而input channel之间相互独立,可以调整input channel来平衡负载
- 题目:LNPU: A 25.3TFLOPS/W Sparse Deep-Neural-Network Learning Processor with Fine-Grained Mixed Precision of FP8-FP16
- 时间:2019
- 会议:ISSCC
- 研究机构:KAIST