白皮書

卷積神經網路的 FPGA 加速

概述

卷積神經網路(CNN)已被證明在複雜的圖像識別問題上非常有效。本白皮書討論了如何使用 BittWare 的 FPGA 加速器產品加速這些網路,該產品使用英特爾 OpenCL 軟體開發套件進行程式設計。然後,本文描述了如何通過降低計算精度來顯著提高圖像分類性能。精度的每次降低都使FPGA加速器每秒處理的圖像越來越多。

咖啡集成

Caffe是一個深度學習框架,考慮了表達,速度和模組化。它由伯克利願景和學習中心和社區貢獻者開發。

Caffe 框架使用 XML 介面來描述特定 CNN 所需的不同處理層。通過實現不同的層組合,用戶能夠根據其給定的要求快速創建新的網路拓撲。

這些層中最常用的是:

  • 卷積:捲積層使用一組可學習的過濾器對輸入圖像進行捲積,每個篩檢程式在輸出圖像中生成一個特徵圖。
  • 池化:最大池化將輸入圖像分區為一組不重疊的矩形,併為每個此類子區域輸出最大值。
  • Rectified-Linear: Given an input value x, The ReLU layer computes the output as x if x > 0 and negative_slope * x if x <= 0.
  • 內部產品/完全連接:圖像被視為單個向量,每個點都對新輸出向量的每個點有貢獻

通過將這4層移植到FPGA,絕大多數正向處理網路都可以使用Caffe框架在FPGA上實現。

圖 1:典型 CNN – 卷積神經網路的示例說明

亞歷克斯網

AlexNet是一個眾所周知且使用良好的網路,具有免費提供的經過訓練的數據集和基準測試。本文討論了針對AlexNet CNN的FPGA實現,但這裡使用的方法同樣適用於其他網路。

圖 2 說明瞭 AlexNet CNN 所需的不同網路層。有5個捲積層和3個完全連接的層。這些層佔用>此網路處理時間的99%。不同的捲積層有 3 種不同的濾波片尺寸:11×11、5×5 和 3×3。創建針對不同捲積層優化的不同層是低效的。這是因為每層的計算時間因應用的濾鏡數量和輸入圖像的大小而異。由於處理的輸入和輸出特徵的數量。但是,每個捲積都需要不同數量的層和不同數量的圖元來處理。通過增加應用於更多計算密集型層的資源,可以平衡每個層以在相同的時間內完成。因此,可以創建一個流水線流程,該流程可以在任何時候傳輸多個圖像,從而最大限度地提高所用邏輯的效率。也就是說,大多數處理元素大部分時間都很忙。

圖2:AlexNet CNN – 卷積神經網路

表 1 顯示了 Imagenet 網路的每一層所需的計算。從這個表中可以看出,5×5卷積層比其他層需要更多的計算。因此,需要為FPGA提供更多的處理邏輯,以使該層與其他層保持平衡。

內部乘積層具有 n 到 n 映射,每個乘法加法都需要一個唯一的係數。與捲積層相比,內部產品層通常需要的計算量要少得多,因此需要的邏輯並行化更少。在這種情況下,將內部產品層移動到主機 CPU 上是有意義的,讓 FPGA 專注於卷積。

FPGA 邏輯領域

FPGA元件具有兩 個處理 區域,DSP和ALU邏輯。DSP 邏輯是用於乘法或乘法加法運算子的專用邏輯。這是因為使用 ALU 邏輯進行浮點大(18×18 位)乘法的成本很高。鑒於 DSP 操作中乘法的共性,FPGA 供應商為此提供了專用邏輯。英特爾更進一步,允許重新配置 DSP 邏輯以執行浮動指標操作。為了提高 CNN 處理的性能,有必要增加在 FPGA 中實現的乘法數。一種方法是降低位精度。

 空標題

表 1 : ImageNet 層次計算要求

位精度

大多數CNN實現使用浮點精度進行不同的層計算。對於CPU或GPGPU實現,這不是問題,因為浮點IP是晶元架構的固定部分。對於 FPGA,邏輯元件不是固定的。英特爾的Arria 10和Stratix 10設備具有嵌入式浮動DSP模組,也可以用作定點乘法。實際上,每個DSP元件可以用作兩個獨立的18×19位乘法。通過使用18位固定邏輯執行卷積,與單精度浮點數相比,可用運算子的數量翻了一番。

圖3:Arria 10浮點DSP配置

如果需要降低精度的浮點處理,則可以使用半精度。這需要來自FPGA架構的額外邏輯,但假設較低的位精度仍然足夠,浮點計算的數量可能會增加一倍。

本白皮書中描述的管道方法的主要優點之一是能夠在管道的不同階段改變準確性。因此,資源僅在必要時使用,從而提高了設計的效率。

根據CNN的應用容差,位精度可以進一步降低。如果乘法的位寬可以減小到10位或更小,則乘法可以僅使用FPGA ALU邏輯有效地執行乘法。與僅使用 FPGA DSP 邏輯相比,這使得可能的乘法次數增加了一倍。某些網路可能容忍甚至更低的位精度。如有必要,FPGA可以處理低至單個位的所有精度。

對於 AlexNet 使用的 CNN 層,可以確定 10 位係數數據是簡單定點實現可以獲得的最小減少量,同時與單個精度浮點操作相比,誤差保持在 1% 以下。

圖4:Arria 10定點DSP配置

CNN 捲積層

使用滑動窗口技術,可以創建對記憶體頻寬非常輕的卷積內核。

圖5說明瞭如何將數據緩存在FPGA記憶體中,從而允許多次重用每個圖元。數據重用量與卷積核的大小成正比。

由於每個輸入層都會影響CNN捲積層中的所有輸出層,因此可以同時處理多個輸入層。這將增加載入層所需的外部記憶體頻寬。為了緩解增加,除係數外,所有數據都存儲在FPGA器件的本地M20K記憶體中。設備上的片上記憶體數量限制了可以實現的CNN層數。

圖5:3×3卷積的滑動視窗

圖6:OpenCL全域記憶體頻寬(AlexNet)

根據可用 M20K 資源的數量,並非總是能夠在單個 FPGA 上安裝完整的網路。在這種情況下,可以使用高速串行互連串聯多個FPGA。這允許擴展網路管道,直到有足夠的資源可用。此方法的一個關鍵優點是它不依賴於批處理來最大化性能,因此延遲非常低,這對於延遲關鍵型應用程式非常重要。

要平衡各層之間所需的時間,需要調整實現的並行輸入層數和並行處理的像素數。

圖 9:Alexnet 的 5×5 卷積層的資源

大多數CNN功能將適合單個M20K記憶體,並且 FPGA 結構中嵌入了數千個 M20K,可用於並行捲積功能的總記憶體頻寬約為 10 TB/秒。

圖 7 : Arria 10 GX1150 / Stratix 10 GX2800 資源

圖 8 : 通過多個 FPGA 擴展 CNN 網路

圖 9 列出了具有 48 個並行內核的 Alexnet 的 5×5 卷積層所需的資源,這些內核適用於英特爾 Arria10 FPGA 上的單精度和 16 位定點版本。這些數位包括OpenCL板邏輯,但說明瞭較低精度對資源的好處。

全連接層

處理完全連接的層需要每個元素的唯一係數,因此很快就會隨著並行度的提高而使記憶體受限。與捲積層保持同步所需的並行度將很快使FPGA的片外記憶體飽和,因此建議將他的輸入層階段批處理或修剪。

由於內部產品層的元件數量很少,因此批處理所需的存儲量與捲積層所需的存儲量相比很小。然後,批處理層允許對每個批處理層使用相同的係數,從而降低外部記憶體頻寬。

修剪的工作原理是研究輸入數據並忽略低於閾值的值。由於完全連接的層被放置在CNN網路的後期階段,許多可能的功能已經被消除。因此,修剪可以顯著減少所需的工作量。

資源

網路的關鍵資源驅動因素是可用於存儲每層輸出的片上M20K記憶體的數量。這是恆定的,並且與實現的並行度量無關。通過多個FPGA擴展網路會增加可用M20K記憶體的總量,從而增加可以處理的CNN的深度。

空標題

結論

FPGA架構的獨特靈活性允許將邏輯精度調整到特定網路設計所需的最小值。通過限制CNN計算的位精度,可以顯著增加每秒可處理的圖像數量,從而提高性能並降低功耗。

FPGA實現的非批處理方法允許單幀延遲用於對象識別,非常適合低延遲至關重要的情況。例如,避免客體。

將這種方法用於 AlexNet(第 1 層為單精度,然後對其餘層使用 16 位固定),每個圖像可以使用單個 Arria 10 FPGA 在 ~1.2 毫秒內處理,或者使用兩個 FPGA 串聯處理 0.58 毫秒。