白皮書

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

BWNN在交通中標記的車輛的視頻截圖

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

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

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

對機器學習的需求不斷增長

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

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

本白皮書的 PDF 版本

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

靈活的 FPGA

減少機器學習推理所需的矽數量(因此功耗)的一種方法是減少計算的動態範圍。例如,將浮點運算從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)。然後將捲積的輸出乘以平均值。

BWNN 轉換權重圖示

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

FPGA 優化

首先,權重的二值化將外部記憶體頻寬和存儲需求降低了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、GPGPU 和 FPGA 中的並行性。在這裡,英特爾 FPGA OpenCL 編譯器已用於對面向英特爾 Stratix 10 設備的加速器進行程式設計。本白皮書的目標FPGA加速器是BittWare 520N板。

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

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

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

520N PCIe卡,無蓋

圖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 卷積。

BWNN 卷積示例
圖3:卷積流水線示例

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

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

 

表 1:32×32 卷積矩陣的第 10 層資源

奧吉奇 (ALM)兆赫峰值 TOps加速與
OpenMP 32 線程
(至強中央處理器 D-1587 1.7 GHz)
536,122 (57%)3005.550x
表 2 : Stratix 10 G280 3×3 設計性能

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

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

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

BWNN 速度與 CPU 圖表
圖 4:加速與 CPU 的比較
每焦耳圖的 BWNN 影像數
圖 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中的潛力。