EdgeBoard中CNN架構的剖析

特邀精選發表於2020-03-26

人工智慧領域邊緣側的應用場景多種多樣,在功能、效能、功耗、成本等方面存在差異化的需求,因此一款優秀的人工智慧邊緣計算平臺,應當具備靈活快速適配全場景的能力,能夠在安防、醫療、教育、零售等多維度行業應用中實現快速部署。

百度大腦EdgeBoard嵌入式AI解決方案,以其豐富的硬體產品矩陣、自研的多併發高效能通用CNN(Convolution Neural Network)設計架構、靈活多樣的軟核算力配置,搭配移動端輕量級Paddle Lite高效預測框架,透過百度自定義的MODA (Model Driven Architecture)工具鏈,依據各應用場景定製化的模型和演算法特點,向使用者提供高價效比的軟硬一體的解決方案,同時和百度大腦模型開發平臺(AIStudio、EasyDL)深度打通,實現模型的訓練、部署、推理等一站式服務。

1. EdgeBoard計算平臺的多產品矩陣

EdgeBoard是基於Xilinx 16nm工藝Zynq UltraScale+ MPSoC的嵌入式AI解決方案,採用Xilinx異構多核平臺將四核ARM Cortex-A53處理器和FPGA可程式設計邏輯整合在一顆晶片上,高效能運算板卡上搭載了豐富的外部介面和裝置,具有開發板、邊緣計算盒、抓拍機、小型伺服器、定製化解決方案等表現形態。

EdgeBoard計算卡產品可以分為FZ9、FZ5、FZ3三個系列,是基於Xilinx XCZU9EG、XAZU5EV、XAZU3EG研發而來,分別具有高效能,影片硬解碼,低成本等特點,同時還有不同的DDR容量版本。以上三個版本PS側同樣採用四核Cortex-A53 、雙核Cortex-R5、以及GPU Mali-400MP2等處理器配置,PS到PL的介面均為12x32/64/128b AXI Ports,主要的區別在於PL側擁有的晶片邏輯資源大小不同,可參見下表。EdgeBoard中CNN架構的剖析

採用上述三種標準產品的硬體板卡或者一致的硬體參考設計,使用者可無縫適配執行EdgeBoard公開發布的最新版標準映象,也可根據自身專案需求定製相關的硬體設計,並進一步根據效能、成本和功耗要求,以及其他功能模組的整合需求,對軟核的算力和資源進行個性化配置。(多款開發板適配影片教程:https://ai.baidu.com/forum/topic/show/957750

2. 高效能的通用CNN設計架構

2.1 CNN加速軟核的整體設計框架

EdgeBoard的CNN加速軟核(整體的加速方案稱之為軟核)提供了一套計算資源和效能最佳化的AI軟體棧,由上至下分別包括應用層軟體API、計算加速單元的SDK排程管理、Paddle Lite預測框架基礎管理器、Linux作業系統、負責裝置管理和記憶體分配的驅動層和CNN運算元的專用硬體加速單元,用來完成卷積神經網路模型的載入、解析、最佳化和執行等功能。EdgeBoard中CNN架構的剖析

這些主要組成部分在軟體棧中功能和作用相互依賴,承載著資料流、計算流和控制流。基於上圖設計框架,EdgeBoard的AI軟體棧主要分為4個層次:

  • 應用使能層

面向使用者的應用級(APP)封裝,主要是面向計算機視覺領域提供影像處理神經網路推理的業務執行API。

  • 執行框架層

Paddle Lite預測框架提供了神經網路的執行能力,支援模型的載入、解除安裝、解析和推理計算執行。

  • 排程使能層

SDK排程使能單元負責給硬體派發運算元層面的任務,完成運算元相應任務的排程、管理和分發後,具體計算任務的執行由計算資源層啟動。

  • 計算資源層

專用計算加速單元搭配作業系統和驅動,作為CNN軟核的計算資源層,主要承載著部分CNN運算元的高密度矩陣計算,可以看作是Edgeboard的硬體算力基礎。

2.2 CNN運算元的加速分類

專用計算加速單元基於FPGA的可程式設計邏輯資源開發實現,採用ARM CPU和FPGA共享記憶體的方式,透過高頻寬DMA(Direct Memory Access)實現二者資料的高速互動,共享記憶體也並作為異構計算平臺各運算元資料在CPU和FPGA協同處理的橋樑,減少了資料在CPU與FPGA之間的重複傳輸。此外,CNN運算元功能模組可直接發起DDR讀寫操作,充分發揮了FPGA的實時響應特性,減少了CPU中斷等待的時間消耗。

根據CNN運算元的計算特點,EdgeBoard的運算元加速單元可劃分為如下兩類:

  • 複雜運算元加速單元

顧名思義,是指矩陣計算規則較為複雜,處理資料量較多,由於片上儲存資源限制,通常需要多次讀寫DDR並進行分批處理的運算元加速單元。

  1. 卷積(Convolution):包含常規卷積、空洞卷積、分組卷積、轉置卷積,此外全連線(Full Connection)也可透過呼叫卷積運算元實現。
  2. 池化(Pooling):包含Max和Average兩種池化方式。
  3. 深度分離卷積(Depth-wise Convolution):與Pooling的處理特點類似,因此複用同樣的硬體加速單元,提高資源利用率。
  4. 矩陣元素點操作(Element-wise OP):可轉換為特定引數的Pooling操作,因此複用同樣的硬體加速單元,提高資源利用率。
  5. 歸一化函式(L2-Normalize):擁有較高處理精度,且實現資源最優設計。
  6. 複雜啟用函式(Softmax):與Normalize處理特點相似,複用同樣的硬體加速單元和處理流程,提高資源利用率。
  7. 通路運算元加速單元

通路運算元是指在複雜運算元加速單元的計算資料寫回DDR的流水路徑上實現的運算元,適合一些無需專門儲存中間結果,可快速計算並流出資料的簡單運算元。

  1. 各類簡單啟用函式(Relu, Relu6, Leaky-Relu, Sigmoid, Tanh):基本涵蓋了CNN網路中常見的啟用函式型別。
  2. 歸一化(Batch norm/Scale):通常用於卷積運算元後的流水處理,也可支援跟隨在其他運算元後的流水處理。

另外一種分類方式,是根據CNN網路裡的運算元常用程度劃分為必配運算元和選配運算元,前者指CNN軟核必需的運算元單元,通常對應大部分網路都涉及的運算元,或者是晶片資源消耗極少的運算元;後者指CNN軟核可以選擇性配置的運算元單元,通常是特定的網路會有的特定運算元。這樣劃分的好處是,使用者根據MODA工具鏈自定義選擇,減少了模型中無用運算元造成的邏輯資源的開銷和和功耗的增加。

  • 必配運算元:Convolution, Pooling, Element-Wise, Depth-Wise Convolution, BN/Scale, Relu, Relu6
  • 選配運算元:Normalize, Softmax, Leaky-Relu, Sigmoid, Tanh

2.3 卷積計算加速單元的設計思路

作為CNN網路中比重最大、最為核心的卷積計算加速單元,是CNN軟核效能加速的關鍵,也佔用了FPGA晶片的大部分算力分配和邏輯資源消耗。下面將針對EdgeBoard卷積計算加速單元的設計思路進行簡要介紹,此章節也是理解CNN軟核算力彈性配置的技術基礎。

每一層網路的卷積運算,有M個輸入圖片(稱之為feature map,對應著一個輸入通道),N個輸出feature map(N個輸出通道),M個輸入會分別進行卷積運算然後求和,獲得一幅輸出map。那麼需要的卷積核數量就是M*N。

EdgeBoard中CNN架構的剖析針對上述計算特點,EdgeBoard的卷積單元採用脈動陣列的資料流動結構,將資料在PE之間透過暫存器進行打拍操作,可以實現在第二個PE計算結果出來的同時完成和前一個PE的求和。這樣可以使資料在運算單元的陣列中進行流動,減少訪存的次數,並且結構更加規整,佈線更加統一,提高系統工作頻率,避免了採用加法樹等並行結構所造成的高扇出問題。

EdgeBoard中CNN架構的剖析因此,如上圖所示,我們可以分別從Feature Map和Kernel兩個維度去定義脈動陣列的並行結構。從Feature Map的角度,縱向的行與行直接卷積視窗相互獨立,也就是輸出的每行之間所對應的資料計算互不干擾,在此維度定義的多併發計算稱之為Window維度的並行度。從Kernel的角度,為了達到計算結果的快速流出減少片上快取佔用,我們設計了每個Kernel核之間的多併發計算,稱之為Kernel維度的並行度。以上兩個維度同時併發既可以提高整體平行計算效率,也充分利用了脈動陣列的資料流水特性。

2.4 卷積計算加速單元的通用性擴充套件

前一章節詳細介紹了基於PL實現的卷積計算加速單元的設計原理,那麼如果是由於晶片的SRAM儲存資源不夠而導致的CNN網路引數支援範圍較小,EdgeBoard將如何擴充CNN軟核的網路支援通用性? 我們可以利用靈活的SDK排程管理單元提前將Feature Map或者Kernel資料進行拆分,然後再執行運算元任務的下發。

  • 一條滑窗鏈的Feature Map資料不夠儲存

SDK可以將一條滑窗鏈的Feature Map資料分成B塊,並將分塊數B和每個塊的資料量告訴卷積計算加速單元,那麼後者則可以分批依次從DDR讀取B次Feature Map資料,每次的資料量是可以存入到Image SRAM內。

  • Kernel的總體資料不夠儲存

SDK可以將Kernel的數量分割成S份,使得分割後的每份Kernel數量可以下發到PL側的Filter SRAM中,然後SDK分別排程S次卷積運算元執行操作,所有的資料返回DDR後,再從通道(Channel)維度做這S次計算結果的資料拼接(Concat)即可。不過要注意的是,我們的Filter SRAM雖然不需儲存所有Kernel的資料量,但至少要保證能夠儲存一個Kernel的資料量。

由此看來,即使EdgeBoard三兄弟中最小的FZ3擁有極其有限的片上儲存資源,也是能夠很好地完成大多數CNN網路的引數適配。

3.軟核算力的彈性配置

Edgeboard的CNN軟核除了公開發布的標準版本外,還可以由使用者根據自身模型需求和FPGA晶片選型,進行CNN卷積計算單元算力的定製化配置。配置算力的兩個關鍵指標包括Window維度並行度和Kernel維度並行度,具體含義可參考2.3章節,此處不再贅述。

我們以卷積計算加速單元的核心矩陣乘加運算消耗DSP硬核(Hard core)的個數作為CNN軟核核心算力的考察指標。當然,這並不包括卷積前處理、後處理模組,以及其他運算元加速單元或者使用者自定義功能模組所消耗的DSP數量,因此這並不是整個解決方案在FPGA晶片內部的DSP資源消耗。我們的設計可以支援Window並行度1-8的任意整數,支援Kernel並行度包括4,8,16。具體的卷積雙維度配置組合所對應的核心DSP消耗可以參見下表。

Window並行度
Kernel並行度
核心DSP消耗
1
4
72
8
144
16
288
2
4
144
8
288
16
576
3
4
216
8
432
16
864
4
4
288
8
576
16
1152
5
4
360
8
720
16
1440
6
4
432
8
864
16
1728
7
4
504
8
1008
16
2016
8
4
576
8
1152
16
2304

目前,EdgeBoard公開版針對卷積計算加速單元Window維度和Kernel維度的並行度配置,以及核心矩陣乘加運算的DSP硬核消耗可參見下表。

 
FZ3
FZ5
FZ9
Window並行度
2
4
4
Kernel並行度
4
8
16
核心DSP消耗
144
576
1152

EdgeBoard的CNN軟核以其靈活的算力搭配組合以及運算元可定製化的特點,既可以根據具體模型的運算元組合和所佔比例,將一定成本和資源條件內的晶片效能發揮到極致,還可以在滿足場景所要求效能的前提下減少不必要的功耗支出,此外還允許開發者縮減軟核尺寸並將晶片資源應用於自定義功能的IP中,極大地增強了EdgeBoard人工智慧多場景覆蓋的能力。

相關文章