ISSCC 2017論文導讀 Session 14 Deep Learning Processors,DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN

轉載請註明,本文出自Bin的專欄http://blog.csdn.net/xbinworld,謝謝!markdown


DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN Processor for General-Purpose Deep Neural Networks網絡

單位:KAIST(韓國科學技術院,電子工程-半導體系統實驗室)session

KAIST是ISSCC的常客,一年要在上面發好幾篇芯片論文,16年ISSCC上Session 14有一半的paper是出自KAIST的,只能說怎一個牛字了得。去年的關於卷積計算的paper,感受還比較基礎(固然也有一些很不錯的小trick,好比把kernel的字典都存在片上RAM中,只傳輸係數,能夠把帶寬下降一個數量級以上),今年的這篇能夠算是至關完善;架構

本篇的核心特徵:
可配置性:一、 異構架構;二、混合負載劃分方法。
低功耗:一、動態自適應的定點計算;二、基於量化表的乘法器。分佈式

這裏寫圖片描述

特色1:兩套架構

用於深度學習加速的專用SoC。和CPU、GPU通用GPP的對好比下。做者但願強調分佈式存儲和計算的優點,可是我感受本質上仍是一個多核+數據交換的結構,只是結構比較簡單,核之間不通信,由於CNN的數據切分後是獨立的。ide

這裏寫圖片描述

在不一樣的計算層,其計算和存儲的支配地位是不一樣的,以下圖。在卷積層,計算是主要的瓶頸,而在全鏈接、編解碼+LSTM(RNN)層,存儲則成爲了瓶頸。若是針對單一的網絡特徵進行設計,則難以知足全盤的要求。性能

這裏寫圖片描述

這個觀點基本上是業界目前設計的共識,可是我的認爲ALEXNET/VGG做爲設計依據有一點點out,相信在明年的設計中,resnet和inception這樣的網絡加速優化會有更多工做。不過拿ALEXNET做爲benchmark自己沒有問題。學習

下面是VGG的計算分解,能夠看到不一樣層的計算和參數量區別仍是挺大的。優化

這裏寫圖片描述

因此做者設計了2套徹底獨立的架構,由一個卷積加速模塊CP+一個RNN-LSTM模塊FRP,再加RISC控制器組成系統。人工智能

這裏寫圖片描述

具體來看卷積加速器CP:由4×4個計算核構成,每一個計算核內爲12×4的PE陣列,經過控制器進行指令驅動計算卷積。數據經過NoC傳遞。分佈式Memory保證PE陣列、計算核的數據需求。經過Aggregation Core將數據進行集中處理(Pool/ReLU/…)並和RNN計算模塊進行數據交互。

算一下,CP裏總共有16core* 48 = 768 PE單元

這裏寫圖片描述

或者看這個圖彷佛更清楚:CP中每個CORE都有獨立的數據和參數Memory,數據Mem到PE GROUP是一個全連。這樣架構下,就有多個粒度的配置自由度——cluster,core,group等

這裏寫圖片描述

特色2:混合式的負載劃分(任務切割)

由於採用的分佈式數據存儲,所以就存在一個數據切分的問題,做者在這方面的考慮分析也比較詳細:有數據劃分(能夠獲得最終結果,可是參數每個都要存所有kernel的channel),channel劃分(參數不重複存,可是計算結果是臨時結果,還須要再累加起來,由於結果多因此片內存不下——實際上是沒設計地方存——因此須要寫到外面DDR再讀回來),混合劃分(把二者的優缺點勻一下,最終選擇這個)

這裏寫圖片描述

以VGG-16網絡爲例,其在不一樣的層間在image和channel兩個方向上分佈很是不均勻,所以,單一的負載分類都很難達到好的效果,而mix方式效果相比是最優的。以下圖。

這裏寫圖片描述

特色3:動態on-line調整的定點格式(用於CP)

不一樣層的數據分佈是不同的,帶來的影響就是採用浮點計算會更精確,可是代價更高;採用定點計算會消耗不多的資源,可是隻能表徵一部分數據。

這裏寫圖片描述

本文采用的是Layer-by-Layer的動態定點計算,其特徵是每層小數點位置是不一樣的,層內則是固定的。

這裏寫圖片描述

相比於以往離線處理數據精度,本文采用了在線的動態FL選取方式,能夠動態適應當前圖片的計算需求,減小WL的字節。從性能上來看,本文的方式對網絡精確度影響最小。

這裏寫圖片描述

這裏寫圖片描述

特色4:基於量化表的乘法器(用於FRP)

在講量化表乘法器以前,先要看一下做者用的LUT-based multiplier,這個方法自己很經典,用在這裏很合適。

這裏寫圖片描述

對於FC/RNN層的量化:4bit位寬能夠知足絕大多數的參數精度需求。——這個是做者說的,實際普遍效果仍是要持懷疑態度的,不過針對4bit的優化自己仍是值得的。

這裏寫圖片描述

所以做者設計了Q-table,對於量化之後的權重,進行預計算,將不一樣輸入和量化後的權重相乘結果存在一張量化表中(Q-Table)。在實際的計算中,根據量化的需求直接從表中讀取計算結果。方法以下:

這裏寫圖片描述

這裏特別說明一下,W0-W16自己並不等間距的,因此不用理解爲簡單的線性量化。——業界有比較多的線性量化,數據自己既能夠認爲是數據也是index,而本篇的設計中,咱們須要知道index才能夠知道數據是多少(查表),固然,由於有預計算,因此知道index之後不用再查表獲得w,直接把I*w的結果查出來。查表代替了乘法,而乘法由於weight是4bit的關係,case比較少,就用空間換了時間(計算)。

每8個數據I就要更新一次Q-Table,有8個16*16bit的乘法器來更新表,這些是公共乘法計算,計算完以後就只有查表沒有乘法了(在FC中)。計算過程:

這裏寫圖片描述

也是有缺點的——至關於只有8個乘法器在運算,OPS有限。可是由於FC是一個帶寬受限問題,因此4bit量化自己顯著下降了帶寬;查表下降了功耗——由於是16*16,而不是16 * 4。再強調一下:知道4bit index的大小沒法直接映射到w自己,因此計算的時候仍是16 * 16 bit。效果以下:

還有一點值得關注:就是對於0數據,不取其對應的參數,這樣參數帶寬進一步下降不少。—— 這一點論文並無討論。須要再分析一下,如何作起來方便,若是誰想清楚了,請告知於我。

這裏寫圖片描述

最後看一下芯片的規格狀況:芯片參數:基於65nm工藝,峯值能效高達8.1TOPS/W(4bit 50MHz@0.77v)。能夠看到不一樣電壓和主頻下,能效差很是多。

這裏寫圖片描述

最後貼一些不一樣參數下的評估,以及動態定點效果,還有與其餘工做的對比結果。
下圖左邊的圖是說,電壓升高才能把主頻升上去,50MHZ的時候能夠在0.77V下運算;而能耗的升高不是簡單線性,能夠看到50MHZ的時候比1/4的200MHZ能耗小不少,所以就有了能效的優點。

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

能夠看到在4bit狀況下,最高能效至關之驚人(用50M主頻,功耗低),受益於低電壓帶來的功耗下降。看來電壓近閾值計算能夠顯著提高能效比。若是不優化,ALEXNET計算時間會由FC決定,由於帶寬太大;而本篇結果看,FC能夠跑1200張,緣由是帶寬很低,因此性能就由CONV部分決定了。

總的來講這是一篇很是好的深度學習加速芯片設計論文。

參考資料

[1]從ISSCC 2017看人工智能芯片的四大趨勢 http://www.jiqizhixin.com/article/2264
[2] https://reconfigdeeplearning.com/2017/02/08/isscc-2017-session-14-slides14-2/ [3] DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN Processor for General-Purpose Deep Neural Networks

相關文章
相關標籤/搜索