?Eyeriss 架構中的訪存行為解析?
Eyeriss 是 MIT 提出的面向卷積神經網絡(CNN)的能效型 NPU(神經網絡處理器)架構,其核心創新在于通過硬件結構優化訪存行為,以解決傳統 GPU 在處理 CNN 時因數據搬運導致的能效瓶頸。以下從訪存行為的關鍵問題、Eyeriss 的解決方案及技術細節展開說明。
?一、CNN 的訪存挑戰:數據復用與帶寬壓力?
CNN 的計算以卷積為核心,其特點是局部性(locality)強但數據復用模式復雜?:
- ?空間局部性?:卷積核在輸入特征圖上滑動,相鄰輸出單元的計算共享大量輸入數據(如 3x3 卷積核覆蓋的 9 個輸入像素)。
- ?通道局部性?:同一輸入通道的數據會被多個卷積核重復使用(如 16 個卷積核共享同一輸入通道)。
- ?批處理局部性?:同一批次(batch)的輸入數據在不同輸出通道間復用。
傳統 GPU 的全局內存(DRAM)→共享內存(Shared Memory)→寄存器三級存儲層次,雖能緩解帶寬壓力,但仍存在:
- ?數據搬運量大?:CNN 的參數(權重)和激活值(中間結果)需頻繁在 DRAM 和計算單元間傳輸。
- ?訪存帶寬成為瓶頸?:計算單元常因等待數據而閑置(計算密度低),能效比差。
?二、Eyeriss 的訪存優化設計?
Eyeriss 通過數據流(Dataflow)架構和片上存儲層次的協同設計,最大化數據復用,減少 DRAM 訪問次數。其核心思想是:??“讓數據盡可能靠近計算單元”?。
?1. 數據流架構:控制數據流動路徑?
Eyeriss 定義了四種經典數據流模式(后擴展為更靈活的 ?NoC-aware 數據流),每種模式針對不同的數據復用場景:
- ?Weight Stationary (WS)??:權重固定在一個 PE(Processing Element)中,輸入激活值和部分和(Partial Sum)流動。
→ ?優勢?:適合權重復用高的場景(如小卷積核),減少權重從片上存儲到 PE 的重復加載。 - ?Output Stationary (OS)??:輸出激活值固定在 PE 中,權重和輸入激活值流動。
→ ?優勢?:適合輸出通道復用高的場景(如多卷積核并行),減少部分和的頻繁更新。 - ?Input Stationary (IS)??:輸入激活值固定在 PE 中,權重和部分和流動。
→ ?優勢?:適合輸入通道復用高的場景(如深層網絡),減少輸入數據的重復搬運。 - ?No Local Reuse (NLR)??:無數據復用,直接按計算順序搬運數據(類似傳統矩陣乘法)。
?Eyeriss 的靈活性?:通過動態配置數據流模式,適配不同層的計算特征(如淺層用 WS,深層用 OS)。
?2. 片上存儲層次:多級緩存與數據分布?
Eyeriss 的存儲層次分為四級,逐級減少對 DRAM 的訪問:
- ?片外 DRAM?:存儲權重和激活值,帶寬有限(如 12GB/s)。
- ?片上全局緩沖區(Global Buffer)??:暫存從 DRAM 加載的數據,按需分發給處理單元(PE Array)。
- ?PE Array 內的局部存儲?:
- ?PE 級寄存器?:每個 PE 包含少量寄存器,存儲當前計算的輸入、權重和部分和。
- ?行緩沖區(Row Buffer)??:每個 PE 行共享的緩沖區,用于暫存輸入激活值(支持空間局部性復用)。
- ?數據廣播與共享機制?:
- ?權重廣播?:同一權重可被多個 PE 共享(通過行緩沖區或全局緩沖區)。
- ?輸入激活值共享?:同一輸入數據可通過行緩沖區廣播給多個 PE(支持通道局部性復用)。
?3. 稀疏性與零值跳過?
CNN 中存在大量冗余計算(如 ReLU 激活后的零值),Eyeriss 通過稀疏數據流跳過零值計算:
- ?標記零值?:在數據加載時標記零激活值,PE 直接跳過相關計算。
- ?動態調整數據流?:零值跳過后,剩余數據重新分配到 PE,避免無效搬運。
?三、Eyeriss 的訪存行為示例(以卷積層為例)??
假設一個 3x3 卷積層,輸入特征圖尺寸 32x32,輸出特征圖 30x30,輸入/輸出通道數各為 16:
- ?數據加載?:
- 權重(3x3x16x16)從 DRAM 加載到全局緩沖區,按 WS 數據流分發給 PE。
- 輸入激活值(32x32x16)分塊加載到全局緩沖區,通過行緩沖區廣播給 PE 行。
- ?PE 計算?:
- 每個 PE 計算局部 3x3 區域的輸出(如 1x1 輸出單元),權重固定,輸入激活值從行緩沖區流動。
- 部分和(Partial Sum)存儲在 PE 寄存器中,逐步累加。
- ?數據復用?:
- ?空間復用?:同一輸入激活值的 3x3 區域被多個 PE 共享(通過行緩沖區)。
- ?通道復用?:同一輸入通道被多個卷積核(16 個)重復使用(通過全局緩沖區)。
- ?結果寫回?:
- 輸出激活值(30x30x16)暫存于全局緩沖區,按需寫回 DRAM(非實時寫入,減少帶寬壓力)。
?四、Eyeriss 的能效優勢?
通過上述設計,Eyeriss 實現了:
- ?數據復用率提升?:輸入激活值的空間復用率達 90%+,權重復用率達 80%+。
- ?DRAM 訪問減少?:相比 GPU,DRAM 訪問量降低 10-100 倍。
- ?計算密度優化?:PE 利用率(Utilization)從 GPU 的 10% 提升至 30%-50%。
?總結?
Eyeriss 的訪存行為優化核心是?“數據流驅動存儲層次”??:通過動態數據流模式匹配計算特征,結合多級片上存儲和數據復用機制,最大限度減少 DRAM 訪問,從而顯著提升能效。這一設計為后續 NPU(如 Google TPU、華為 Da Vinci)的訪存優化奠定了基礎。