- 題目: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