Tangram: Optimized Coarse-Grained Dataflow for Scalable NN Accelerators 閱讀筆記

Tangram: Optimized Coarse-Grained Dataflow for Scalable NN Accelerators

@(論文筆記)網絡

1.Abstract

  • 針對層內並行性提出了buffer sharing dataflow。能夠將分佈式buffer組織爲一種共享的buffer,避免了數據的複製與訪存。
  • 針對層間的pipline,設計了一種alternate layer loop ordering的方法,能夠將暫存的數據以一種更加粗粒化的方式進行傳播,減少了buffer的需求和pipline延遲。
  • 針對複雜的有向無環結構(google net)作了優化。

2.Introduction

提出了兩個問題:架構

  • Parallelizing a single NN layer (intra-layer parallelism) leads to signifcant data duplication 層內的卷積並行化致使了不少數據的複製(從一個buffer複製到另外一個buffer)
  • pipeliningthe processing of multiple layers (inter-layer pipelining) results in substantial challenges in resource utilization and on-chip buffer requirements (在層間流水線設計時,對資源利用率以及片上buffer提出了很大挑戰)

解決:app

  • Tangram. 一種分塊加速器數據流,對粗粒度並行化進行了優化
  • 對於層內的並行計算,提出了一種buffer sharing dataflow (BSD),消除了buffer之間數據複製的低效。使得原來分佈的sram存儲整合爲靠近tile pe的共享buffer,
  • 對於層間的流水線,alternate layer loop ordering (ALLO) dataflow,減小了對片上緩存的要求以及流水線的延遲。
  • 對於有向無環的結構作了優化,最小化這些結構對片外存儲的依賴。分佈式

    3.Background

    本文的NN engine與eyeriss相同:
    ide

這種結構的問題:oop

  1. 簡單增長PE數量並不高效。
    • 小的網絡層沒法徹底利用pe陣列。
    • 再更換fmap時會有較高的延遲以及能耗
    • 大的面積致使長的數據傳播路徑
  2. 單片PE陣列沒法處理層間的pipline

採用的是scaling NN accelerators 能夠解決這些問題:
性能

pe經過NoC與其餘pe通訊,而且能夠直接與片外存儲通訊。而每一個array內則是細粒化的並行結構。把相似SIMD的並行架構稱做fine-grained parallelism細粒度並行,而多核做爲coarse-grained parallelism粗粒度並行優化

主要有兩種粗粒度並行方案:ui

  1. 層內的並行,包括batch、fmap、output和input的並行。
  2. 層間的pipline
    其中,層間的pipline能夠高效的利用硬件資源,尤爲是在處理某些比較小的層(目前的趨勢就是層數變多,大小變小)或者硬件資源富餘時。另外在處理一些有向無環的結構時,能夠利用NoC傳播fmap減小了片外訪存。

4.Baseline Architecture and Its Inefciencies

baseline 硬件結構:

  • 16*16tiles
  • Eyeriss-like NN engine that includes an 8 × 8 PE array and a 32 kB private SRAM

Baseline intra-layer dataflow:

  • TETRIS
  • ScaleDeep

主要問題:

  • 數據浪費,每一個engine的緩存都持有一份當前數據的拷貝。而且從表一能夠發現,沒有一種層內的並行能夠徹底將數據分割進不一樣的pe,多少會存在數據須要共享複製到另外一個pe中的狀況。

Baseline inter-layer pipelining:
當前的層間pipline結構都須要充足的硬件資源才能實現。
本文的層間pipline是經過:

  • 將原先多層的網絡分割爲若干個segments
  • 每次,只有一個segment的結構會被映射到pe上
  • 每層佔用的片上資源與其計算量成正比
  • 只有第一層和最後一層纔有片外訪存的權限

此外,內部的大塊GLB須要在外部存儲於內部buffer之間搬運大部分數據,很是低效,尤爲是當要緩存一個segment的數據時。
而且,整個數據流是順序進行的,下一層的輸入須要等待上一層的輸出徹底結束才能開始
還不支持有向無環的結構。

5.Tangram Parallel Dataflows

Intra-Layer Parallelism with Buffer Sharing


上面的圖是傳統的eyeriss的數據流,一份數據將會在pe之間複製若干份。這種方式浪費了片上buffer資源, 並無充分利用數據複用。

Buffer sharing dataflow (BSD)


提出了改進的方案:BSD
第一個時間步時從外部mem內將不一樣的feature導入pe,在第二個時間步,pe之間經過NoC得到臨近pe之間的data,直到ifmap將輸出ofmap更新完。
更完整的數據流以下:
首先將weight垂直調換,計算輸出map後在進行水平的fmap循環。示意圖以下

Loop transformation model for BSD

從代碼循環來看:

ti,to,tb是分塊係數(分紅多少塊),每一個buffer存儲1/t的數據,數據須要rotate的次數等於to,也就是輸出map的分塊數。

BSD benefts

  • 經過使用BSD, 能夠發現,在數據讀入階段,以前的數據流一次只能讀入一塊ifmap,而如今的數據流能夠一次讀入Po塊ifmap,從數據讀取來看,每次從外部存儲讀數據的次數從ti次減小爲ti/Po次。
  • 此外,在轉換層計算時,若是沒有BSD, 每一個計算單元須要將結果存入外部,在下一層計算時再從外部讀入。而使用BSD能夠直接將計算出的結果傳入計算下一層的engine。

    實際上,BSD等效於一種理想的足夠大的片內存儲,能夠將全部數據存入而無需複製數據。經過將數據調取和循環結合起來,數據老是再內部buffer以內流動。

Inter-Layer Pipelining with ALLO

Alternate layer loop ordering (ALLO)
L-1處理0-2個batch的8輸入通道的ifmap,輸出0-3的ofmap。若是下一層L-2的輸入是接收0-3的ofmap做爲輸入,則能夠跟L-1的計算進行pipline,間隔一個fmap的計算時間。
限制:

  • 以下圖中的兩個循環,第一個循環中,輸出循環在輸入循環之上,也就是說須要接收0-8的輸入圖片並計算才完成一次迭代,一次遍歷輸出一張完整的O輸出圖片。而因爲下層的循環中,輸入循環在輸出循環之上,所以一張輸入圖片將更新6張輸出圖片,只有當4張輸入徹底遍歷後輸出圖片 纔是完整的卷積結果。所以,當上層(L-1)輸出了一張完整的圖片,下層(L-2)就能夠當即接收並計算6張輸出的部分卷積。
  • 這種循環的組織方式能夠將臨近的兩層pipline,但也只限於臨近的兩層。當考慮在L-2後再加入一層時,因爲L-2卷積輸出在當前batch的整個循環結束以前都是不完整的,所以沒法繼續組織這樣的pipline,而是必須等待L-2層該batch的循環結束才能進行正常的卷積。所以這裏的間隔時間將是一整個fmap。以下圖中的L-3:
    enter image description here
    enter image description here

可見,兩個相鄰的層能pipline的條件是他們的輸入輸出分塊參數t須要一致,也就是圖中紅色部分的循環。
ALLO benefts:

  • 若是像上面提到的那樣,臨近的兩層輸入和輸出的分塊參數相同,都爲t, 則ALLO能夠減小t倍的流水線延時以及片內buffer存儲。
  • 可是ALLO只能將一個segment中l層中的一半進行高度pipline(緣由上面也說明了)。也就是l層須要兩兩組合進行pipline(延遲是一張ofmap的計算時間),每一個組合之間的pipline是batch層面的pipline(延時爲一個batch的計算時間)。

Combining ALLO and BSD:

  • 最大限度地節省了大量片內存儲

    Inter-Layer Pipelining for Complex NN DAGs

    目前愈來愈多的網絡出現了複雜的DAG類型(resnet, googlenet,LSTM等)的結構。所以本文針對這種複雜網絡進行了分配策略的優化。

2D region allocation:

  • ScaleDeep 中的設計時靜態的1D的分配策略,也就是每層會分配一列或多列engines,fmap的數據時橫向流動的。
  • 而本文的分配策略是一種之字形的分配:
    |center
    一行分配不下一層時,往上一行走。 好處:
    1. 相比於1D(一整列爲單位)的分配,這種分配更加細緻
    2. 對於不臨近的regions,好比R0和R3,在fmap data須要在他們之間傳輸(NAG結構會出現)時會有更短的路徑。

Spatial layer mapping heuristics:
Segment selection:

  • 只有當一個layer與其餘segment中的layer有共享的數據時,纔會被加入該segment

Region mapping:

  • 將ACT,POOL 和element-wise 層都放進在他以前的卷積或全鏈接層。
  • 在一個區域內(R)的層不容許接收多個臨近區域的輸入數據,只容許有一個。

Dataflow Optimizations for NN Training

因爲在計算反向傳播時,各個層的loss傳播和gradient計算都依賴前向計算出來的激活值,所以反向網絡也能夠經過上面的方法映射到加速器上。

4. Tangram Implementation

包含兩部分:

  • (a) a search tool that identifes the optimized parallelization schemes for each NN
  • (b) a compiler that produces the code for the selected schemes.

Hardware Support

  • 以前的scaladeep 已經設計了一種支持有限數據在一層或多層間的計算模式,所以整個架構只須要按照complier生成的結構去運行便可,無需動態規劃。
  • 使用了scale deep中的MEMTRACK,監察在buffer中的數據是否已經被更新完等待讀出,或者被讀出完畢能夠被重寫。經過在buffer中設置一些緩衝行,能夠防止死鎖。

Dataflow Design Space Exploration

Code Generation

Result

  • monolithic:
    • 耗費了大量(20%)能耗在array總線上,其性能受限於高的延遲以及數據廣播機制
    • 經過設定一個大的global buffer, 在層內的計算時較爲高效的,避免了大量片外訪存
  • Baseline tile:
    • 受制於數據複製,片內buffer緩存容量不足
    • 有較高的片外訪存以及NoC功耗,尤爲是當fmap較大時
  • Tangeram:
    • BSD+ ALLO
    • 支持Pipline的DAG結構

      Parallel Dataflow Analysis

      此外,還對比了層內(BSD)和層外優化(ALLO)的差別:

還對比了不一樣PE數量以及不一樣batch size 對這幾種結構的影響:

相關文章
相關標籤/搜索