白皮書

二進位加權神經網路推理的FPGA加速

YOLOv3的一個特點是在單個圖像中進行多對象識別。我們使用這個網路是因為它是一種更複雜、更複雜的方法,它將挑戰適應有限邊緣環境的能力。

當今的 FPGA 對數據中心和邊緣環境的需求都在快速增長。這是由於性能的進步,使用更簡單的FPGA開發工具,以及對為特定應用定製硬體加速的靈活性的需求不斷增長。FPGA加速器解決方案通常與CPU一起工作,是異構計算方法的一部分,該方法專注於滿足最終使用者需求的靈活應用性能。

在本白皮書中,我們解釋了這樣一個應用:使用最新的基於機器學習的圖像識別系統(YOLOv3)進行流量監控,該系統使用OpenCL改編為帶有Intel Stratix 10 FPGA的BittWare 520N加速器板。本文研究了作為關鍵 FPGA 驅動程式提到的三個方面:性能與 CPU、使用 OpenCL 代替 HDL 的易開發性,以及定製應用程式的靈活性(在此變數計算精度中,包括個位數二進位權重)以使用最小的功耗/資源。

機器學習的需求增加

直到十年前,人工智慧幾乎完全存在於學術界、研究機構和科幻小說的領域。相對較新的認識是,機器學習(ML)技術可以在實踐和經濟上大規模應用,以解決現實世界的應用問題,這導致了市場參與者充滿活力的生態系統。

然而,任何關於機器學習突破的消息仍然需要權衡,因為這是一種非常耗費大量計算的方法來解決問題,無論是在數據集的訓練階段,還是在所謂的推理階段——“運行時”,其中未知輸入被轉換為推斷輸出。雖然機器學習應用程式的訓練階段只需要在不受限制的時間段內在數據中心發生一次,通常延長到數小時或數天,但即時推理通常必須在系統邊緣使用受約束的硬體平臺在幾分之一秒內發生。

本白皮書的 PDF 版本

為了使機器學習在採用率上不斷增長,必須開發推理解決方案,以便在硬體中快速實現最新的機器學習庫,這些庫可以根據應用程式需求進行定製。

靈活的外建處理器

減少機器學習推理所需的矽計數(因此功耗)的一種方法是減少計算的動態範圍。例如,從32位減少到16位浮點運算,只會略微降低應用程式在識別精度方面的性能,但可以大大降低硬體要求。

如果我們走得更遠呢?這就是FPGA可以脫穎而出的地方,因為隨著所需位數的減少,甚至減少到單個二進位元,硬體結構可以適應僅使用所需的位。我們也可以在專案中使用可變精度,包括在需要時在Stratix 10 FPGA上使用硬化的浮點DSP邏輯塊。FPGA允許設計人員擁有一系列工具,以最好地定製硬體以滿足應用要求。

事實上,我們的研究重點是僅使用二進位權重執行機器學習:權重是二值化的,只有兩個值:+1 和 -1。雖然許多基於圖像的機器學習應用程式使用一系列卷積操作,統稱為卷積神經網路(CNN),但這種新的CNN變體更具體地稱為二進位加權神經網路(BWNN)。它將捲積層和完全連接層中的所有定點乘法運算減少到整數加法。

關於作者

Richard Chamberlain是BittWare的系統架構師。Richard 負責 OpenCL 開發專案,在 FPGA 的高級程式設計方面擁有豐富的經驗。他定期為客戶提供有關新設計的最佳硬體和開發方法的建議,或基於其他系統類型(如CPU或GPU)的調整設計。

空標題

這項研究的另一個關鍵組成部分是使用520N的OpenCL支援將硬體開發過程抽象為類似軟體的工具流。這允許將最新的應用程式庫用作硬體加速的基礎,從而減少使用傳統HDL方法(在此期間可能會發佈更新,性能更好的ML庫)針對特定設備和ML庫所需的數月或更長時間。例如,本白皮書源於我們在基於 BittWare Arria 10 的開發板 385A-SoC 上為 OPERA 專案所做的工作。我們的開發團隊迅速將OpenCL代碼從該設備遷移到更大、更快的 Stratix 10 結構中。

可變精度、使用 DSP 實現浮點,以及使用 OpenCL 進行開發,這些組合構成了一個應用定製的硬體解決方案,但具有類似軟體的開發速度。

二進位神經網路

處理CNN網路中的捲積需要存儲和處理數百萬個係數。傳統上,這些係數中的每一個都以完整的單精度表示形式存儲。研究人員已經證明,係數可以降低到一半的精度,而不會對整體精度產生任何重大變化,同時減少所需的存儲量和記憶體頻寬要求。目前可用的大多數預訓練的CNN模型都使用部分降低的精度。

但是,通過使用不同的方法來訓練這些係數,位精度可以降低到單個位,再加上一個比例因數 (ref)。在訓練期間,浮點係數將轉換為二值化值,這些值表示某個值是大於還是小於所有輸入係數的平均值。這可以用二進位表示法表示為 1,0(圖 1)。然後,卷積的輸出乘以平均值。

圖 1 :將權重轉換為二進位(平均值 = 0.12)

外形可程式設計門優化

首先,權重的二值化將外部記憶體頻寬和存儲要求降低了 32 倍。FPGA架構可以利用這種二值化,因為每個內部記憶體塊都可以配置為具有1至32位的埠寬度。因此,用於存儲權重的內部FPGA資源大大減少,為任務並行化提供了更多空間。

網路的二值化還允許CNN卷積表示為輸入啟動的一系列加法或減法。如果權重為二進位 0,則從結果中減去輸入;如果權重為二進位 1,則將其添加到結果中。FPGA 中的 每個 邏輯 元件 都 具有 附加 的 載 波 鏈 邏輯, 可以 高效 地 執行 幾乎 任何 位 長度 的 整數 加法。利用這些元件,單個FPGA可以有效地執行數以萬計的並行添加。為此,必須將浮點輸入激活轉換為固定精度。憑藉FPGA架構的靈活性,我們可以調整固定添加項使用的位數,以滿足CNN的要求。對各種CNN中激活動態範圍的分析表明,只需要少數位(通常為8位)即可將精度保持在浮點等效設計的1%以內。可以增加位數以提高精度。

有許多不同的網路可以針對BNN應用程式進行調查,並且很容易選擇許多更簡單的網路之一,例如AlexNet。但是,要真正瞭解FPGA對BWNN處理的有效性,最好使用最先進的網路,例如YOLOv3。這是一個具有許多捲積層的大型捲積網路。

YOLOv3是一個深度網路,由於固定點捨入而引入的錯誤比AlexNet等較小的網路每次添加需要更多的位。FPGA技術的優勢在於能夠修改所需的精確位數。對於我們的設計,我們使用16位來表示在層之間傳輸的數據。

通過二值化轉換為卷積的定點並消除乘法的需要,可顯著減少FPGA中所需的邏輯資源。然後,與單個精度或半精度實現相比,可以在同一FPGA中執行更多的處理,或者釋放FPGA邏輯用於其他處理。

有針對性的網路培訓

YOLOv3 網路是一個具有 106 層的大型捲積網路,它不僅可以識別物件,還可以在這些物件周圍放置邊界框。它在需要跟蹤物件的應用程式中特別有用。

二進位加權網路在經過適當訓練后,僅會略微降低 YOLOv3 網路的準確性。下表說明瞭為重新訓練的 YOLOv3 網路獲得的結果。

自行車對這張圖片的平均置信度為76%,人的平均置信度為82%。與同一圖像上的浮點相比,在自行車上的平均精度為92%(提高16%),在人身上達到88%(比人高出6%)。

 

為了實現 FPGA 的最佳性能,它有助於定位最能映射到 FPGA 的網路功能。在這種情況下,不僅對網路進行了二進位權重訓練,還選擇了能夠有效地映射到FPGA邏輯的適當激活類型。

 

空標題

針對 Stratix 10 進行設計

OpenCL 是一種流行的語言,用於表示 CPU、GPU 和 FPGA 中的並行性。在這裡,英特爾 FPGA OpenCL 編譯器已用於對面向英特爾 Stratix 10 設備的加速器進行程式設計。本白皮書的目標 FPGA 加速器是 BittWare 520N 板。

FPGA設計的性能取決於許多因素,包括但不限於:

  • 設備速度等級
  • 設計中組合邏輯的深度
  • 扇出設計(在多個點之間共用的信號數)
  • 過度填充設備導致的路由擁塞
  • 全域記憶體頻寬

Stratix 10設備非常大,比以前的設備更容易受到這些問題的影響。以下段落更詳細地討論了其中一些問題。

圖2:BittWare 520N FPGA加速器板

組合邏輯深度:英特爾 OpenCL 工具將在可能的情況下自動進行設計,插入所需的套準,以便在 Stratix 10 上實現最佳性能。但是,如果設計中有反饋,則並不總是可以註冊。這通常在創建具有自依賴性的複雜索引要求時發生。因此,有必要在可能的情況下構建代碼,以避免任何此類管道依賴關係;否則,設計的時鐘頻率由這些路徑主導。

扇出:扇出是指具有單個源但具有多個端點的信號。這可能會導致路由工具出現問題,因為設備上可用的網路數量有限。這些路由的擁塞需要一些信號在擁塞點周圍傳遞,從而導致更長的路徑,最終導致時鐘頻率變慢。通過在編碼時瞭解在設計的多個部分之間共用變數的影響,可以減少扇出。

人口過剩:有一種誘惑,要把盡可能多的邏輯塞進設計中;但是,當器件大量使用時,設計時鐘頻率將開始降低。這是由大量信號試圖在FPGA周圍找到路由而導致的路由擁塞引起的。對於達到高時鐘頻率的大型設計,它們必須進行大量流水線處理,並避免高扇出。

記憶體頻寬:在本地FPGA記憶體中並不總是能夠儲存足夠的數據,並且必須從深度外部記憶體寫入或讀取數據。520N 具有 4 組 DDR4 記憶體,總記憶體頻寬約為 98 GB/秒。考慮到S10設備的大小,這個頻寬不足以保持所有神經網路層都提供數據;因此,輸入數據必須盡可能重複使用。幸運的是,CNN代碼允許大量數據重用。使用 Stratix 10 的 HBM2 版本可以稍微緩解此問題,例如在 BittWare 的 520N-MX 板上使用。

最終,大多數設計都是上述的折衷方案,這裡描述的BNN設計也不例外。

圖3說明了設計的主要處理元素,即捲積路徑。在可能的情況下,數據已通過管道傳輸為3個累積路徑。每個捲積塊執行一個 32×32 二進位權重卷積塊,其中 32 個輸入中的每一個都由所有 32 個輸出共用。這當然會導致高扇出,但會降低外部記憶體頻寬的壓力。通過將96×96卷積細分為32×32的多個塊,扇出路由被限制在每個塊內,從而減少了設計的整體扇出。輸入數據通過OpenCL管道傳遞到每個捲積塊,允許編譯器在需要時插入額外的寄存器。

圖 3 中所示的「生產者」、“消耗”和“係數”核將數據從全域記憶體傳遞到不同的卷積塊。消費塊還在輸出上執行浮點啟動功能。

表 1 列出了執行 1024 個 16 位累積(表示每個 32×32 卷積)所需的資源。

圖3:卷積管道示例

存儲所有輸入和輸出特性數據所需的儲存量超過了FPGA器件的可用存儲空間,即使使用16位數據也是如此。因此,數據需要從附加的全域記憶體批量複製到本地FPGA記憶體,一旦並行卷積數量超過全域記憶體可以支持的數量,這最終會主導性能。

 
施捨寄存 器老年 退休金 計劃
35305 (2%)41601 (2%)2048

 

表 1 : 用於 32×32 卷積矩陣的 Stratix 10 資源

ogic (ALMs)兆赫峰值操作加速與
打開MP 32 線程
(至強處理器 D-1587 1.7 千兆赫)
536,122 (57%)3005.550x
表 2 : Stratix 10 G280 3×3 設計性能

存儲所有輸入和輸出特性數據所需的儲存量超過了FPGA器件的可用存儲空間,即使使用16位數據也是如此。因此,數據需要從附加的全域記憶體批量複製到本地FPGA記憶體,一旦並行卷積數量超過全域記憶體可以支持的數量,這最終會主導性能。

表 2 提供了最終編譯設計的一些統計資訊。請注意,邏輯還包括通過PCIe和全域記憶體介面進行主機通信所需的板級支援包資源。

下圖提供了與Arria 10和Xeon CPU相比,速度和每能耗性能的性能比較。請注意,對於Stratix 10,可以使用更多內核來進一步提高速度。

圖 4:加速與 CPU 的關係
圖5:每焦耳能量的圖像數量

HBM2 在 Stratix 10 MX 上

新的BittWare 520N-MX板採用Intel Stratix 10 MX設備。該 FPGA 具有 3D 堆疊高頻寬記憶體 2 (HBM2), 具有 32 個使用者埠, 提供高達 512 GB/s 的組合記憶體頻寬。這種額外的頻寬允許使用不同的架構,有助於減少設計中的高扇出,並減少外部記憶體對內部緩衝的需求。MX設備應該通過簡化記憶體仲裁網路來釋放更多的使用者邏輯進行處理,記憶體仲裁網路對於記憶體密集型演演算法來說可能會變得複雜,並允許以前不可能為CNN提供新的頻寬限制解決方案。

結論

FPGA的靈活性為每個網路的CNN優化提供了機會,而這些優化在其他技術上很難(如果不是不可能的話)實現。隨著工業界開始意識到神經網路的好處和推理應用程序數量的增加,對針對不同數據集、準確性和功率量身定製的網路的需求也將增加。

要充分實現未來應用的廣泛範圍,不可避免地需要通用 API 無法完全滿足的拓撲結構,特別是對於邊緣計算而言。BittWare的各種FPGA解決方案與CNN FPGA優化專業知識相結合,具有獨特的優勢,可以幫助行業實現FPGA在CNN中的潛力。