賽靈思 INT8 優化為深度學習推斷提供了性能最佳、能效最高的計算技術。賽靈思的集成式 DSP 架構與其他 FPGA DSP 架構相比,在INT8 深度學習運算上能實現 1.75 倍的解決方案級性能。
概要
本白皮書旨在探索實現在賽靈思 DSP48E2 Slice 上的 INT8 深度學習運算,以及與其他 FPGA 的對比情況。在相同資源數量情況下,賽靈思的 DSP 架構憑借 INT8在 INT8 深度學習每秒運算次數 (OPS) 上相比其它 FPGA,能實現 1.75 倍的峰值解決方案級性能。由于深度學習推斷可以在不犧牲準確性的情況下使用較低位精度,因此需要高效的 INT8 實現方案。
賽靈思的 DSP 架構和庫專門針對 INT8 深度學習推斷進行了優化。本白皮書介紹如何使用賽靈思 UltraScale 和 UltraScale+ FPGA 中的DSP48E2,在共享相同內核權重的同時處理兩個并行的 INT8 乘法累加 (MACC) 運算。本白皮書還闡述了要運用賽靈思這一獨特技術,為何輸入的最小位寬為 24 位。本白皮書還以 INT8優化技術為例,展示了該技術與神經網絡基本運算的相關性。
用于深度學習的 INT8
深度神經網絡(DNN)已掀起機器學習領域的變革, 同時運用新的達到人類水平的 AI 功能重新定義眾多現有的應用。
隨著更精確的深度學習模型被開發出來,它們的復雜性也帶來了高計算強度和高內存帶寬方面的難題。能效正在推動著深度學習推斷新模式開發方面的創新,這些模式需要的計算強度和內存帶寬較低,但絕不能以犧牲準確性和吞吐量為代價。降低這一開銷將最終提升能效,降低所需的總功耗。
除了節省計算過程中的功耗,較低位寬的計算還能降低內存帶寬所需的功耗,因為在內存事務數量不變的情況下傳輸的位數減少了。
研究顯示要保持同樣的準確性,深度學習推斷中無需浮點計算[ 參考資料 1][ 參考資料 2][ 參考資料 3],而且圖像分類等許多應用只需要 INT8 或更低定點計算精度來保持可接受的推斷準確性[ 參考資料 2][ 參考資料 3]。表 1 列出了精調網絡以及卷積層和完全相連層的動態定點參數及輸出。括號內的數字代表未精調的準確性。
表 1 :帶定點精度的 CNN 模型
賽靈思 DSP Slice 片上的 INT8 深度學習
賽靈思的 DSP48E2 設計用于在一個時鐘周期內高效地完成一個乘法累加算法, 多達 18x27 位的乘法和多達 48 位的累加,如圖 1 所示。除了采用回送或鏈接多個 DSP Slice,乘法累加 (MACC) 也能使用賽靈思器件高效完成。
圖 1 :使用 MACC 模式的 DSP Slice
在運行 INT8 計算時,較寬的 27 位寬自然占有優勢。在傳統應用中,預加法器一般用于高效實現 (A+B) x C計算,但這類計算在深度學習應用中很少見。將 (A+B) x C 的結果拆分為 A x C 和 B x C,然后在獨立的數據流中進行累加,使之適用于典型深度學習計算的要求。
對 INT8 深度學習運算來說,擁有 18x27 位乘法器很占優勢。乘法器的輸入中至少有一個必須為最小 24位,同時進位累加器必須為 32 位寬,才能在一個 DSP Slice 上同時進行兩個 INT8 MACC 運算。27 位輸入能與 48 位累加器結合,從而將深度學習求解性能提升 1.75 倍(1.75:1 即為 DSP 乘法器與 INT8 深度學習 MACC 的比率)。其他廠商提供的 FPGA 在單個 DSP 模塊中只提供 18x19 乘法器,DSP 乘法器與INT8 MACC 之比僅為 1:1。
可擴展的 INT8 優化
目標是找到一種能夠對輸入 a、b 和 c 進行高效編碼的方法,這樣 a、b 和 c 之間的相乘結果可以容易地分解為 a x c 和 b x c。
在更低精度計算中,例如 INT8 乘法中,高位 10 位或 19 位輸入用 0 或 1 填充,僅攜帶 1 位信息。對最終的 45 位乘積的高位 29 位來說,情況一樣。因此可以使用高位 19 位開展另一計算,不會影響低位 8 位或16 位輸入結果。
總的來說,要把未使用的高位用于另一計算必須遵循兩條規則:
1. 高位不應影響低位的計算。
2. 低位計算對高位的任何影響必須可檢測、可能恢復。
為滿足上述規則,高位乘積結果的最低有效位不得進入低位 16 位。因此高位的輸入應至少從第 17 位開始。對一個 8 位的高位輸入,總輸入位寬至少為 16+8=24 位。這樣的最小 24 位輸入寬度只能保證同時用一個乘法器完成兩次相乘,但仍足以實現 1.75 倍的 MACC 的總吞吐量。
接下來的步驟是在一個 DSP48E2 Slice 中并行計算 ac 和 bc 。DSP48E2 Slice 被用作一個帶有一個 27 位預加法器(輸入和輸出均為 27 位寬)和一個 27 x 18 乘法器的算術單元。見圖 2。
1. 通過預加法器在 DSP48E2 乘法器的 27 位端口 p 打包 8 位輸入 a 和 b ,這樣 2 位向量能盡量分隔開。輸入 a 左移位僅 18 位,這樣從第一項得到的 27 位結果中的兩個符號位 a 以避免在 b <0 和 a =–128 時預加法器中發生溢值。a 的移位量為 18,恰好與 DSP48E2 乘法器端口 B 的寬度一樣。
圖2 :8 位優化
2. DSP48E2 27x18 乘法器用于計算打包的 27 位端口 p 和以二進制補碼格式表達在 18 位 c 中的 8 位系數的積?,F在該 45 位乘積是二進制補碼格式的兩個 44 位項的和:左移位 18 位的 ac 和 bc 。
后加法器可用于累加上述包含單獨的高位乘積項和低位乘積項的 45 位乘積。在累加單個 45 位積時,對高位項和低位項進行了校正累加。最終的累加結果如果沒有溢值,可以用簡單運算分開。
這種方法的局限在于每個 DSP Slice 能累加的乘積項的數量。由于高位項和低位項間始終保持兩位(圖 3),可以保證在低位不溢值的情況下累加多達 7 個項。在 7 個乘積項之后,需要使用額外的 DSP Slice 來克服這一局限。因此這里 8 個 DSP Slice 執行 7 x 2 INT8 乘法- 加法運算,與擁有相同數量乘法器的競爭型器件相比 INT8 深度學習運算的效率提升 1.75 倍。
根據實際用例的要求,這種方法有多種變化形式。帶有校正線性單元 (ReLU) 的卷積神經網絡 (CNN) 產生非負激活,同時無符號 INT8 格式將精度增加一位以上且峰值吞吐量提升 1.78 倍。
圖 3 :用單個 DSP48E2 Slice 打包兩個 INT8 乘運算
CNN 的計算要求
現代神經網絡大部分是從這個原始概念模型 [ 參考資料 4] 衍生而來。見圖 4。
圖 4 :概念和深度神經網絡
雖然從標準感知器結構開始已有相當程度的演進,現代深度學習(也稱為深度神經網絡 (DNN))的基本運算仍然是類感知器的運算,只是有更廣大的總體和更深入的堆疊感知器結構。圖 4 所示的是一個感知器的基本運算。在每個典型的深度學習推斷中它穿過多個層,最終重復數百萬至數十億次。如圖 5 所示,在一層神經網絡中計算 m 個感知器/ 神經元輸出中的每一個的主要計算運算為:
圖 5 :深度學習中的感知器
圖 6 :使用共享輸入并行得到兩個乘積項和
使用 INT8 優化方法將值向左移位 18 位,每個 DSP Slice 就得出最終輸出值的部分且獨立的一部分。用于每個 DSP Slice 的累加器有 48 位寬并鏈接到下一個 Slice。為避免移位飽和影響到計算,鏈接的模塊數量被限制為 7 個,即對總共 n 個輸入樣本使用 2n 個 MACC 和 n 個 DSP Slice。
典型的 DNN 每層有數百到數千個輸入樣本。但是在完成 7 個項的累加后,48 位累加器的低位項可能飽和,因此每 7 個項之和就需要一個額外的 DSP48E2 Slice。這相當于每 7 個 DSP Slice 和 14 個 MACC,另加一個 DSP Slice 用于防止過飽和,從而帶來 7/4 或 1.75 倍的吞吐量提升。
在卷積神經網絡(CNN)中,卷積層一般主要使用同一組權重,從而形成 a x w 和 b x w 類型的并行MACC 運算。因此除輸入共享外,還可以使用權重共享(見圖 7)。
圖 7 :權重共享和輸入共享比較
創建 INT8 鏈接 MACC 的其他方法
INT8 MACC 還能用 FPGA 架構內與 DSP Slice 頻率近似的 LUT 來構建。根據 FPGA 的使用情況,這可以顯著提升深度學習性能,在某些情況下性能可提升三倍之多。許多情況下相對于其他非 FPGA 架構而言,在計算可用深度學習運算時這些可用的計算資源并未考慮在內。
賽靈思 FPGA 中的編程架構是獨有的,因為它能并行且高效地處理多樣化工作負載。例如賽靈思 FPGA能并行執行 CNN 圖像分類、網絡加密和數據壓縮。我們的深度學習性能競爭分析并未將 MACC LUT 考慮在內,因為一般 LUT 用于執行 MACC 功能比用于執行其他并行功能時更有價值。
競爭分析
在本競爭分析中,將英特爾(前 Altera)的 Arria 10 和即將推出的 Stratix 10 器件與賽靈思的 Kintex UltraScale 和 Virtex UltraScale+ 進行了對比。對這種高計算強度的比較,選擇的器件均為每個產品系列中 DSP 密度最高的器件:Arria 10 (AT115)、Stratix 10 (SX280)、Kintex UltraScale (KU115)、Virtex UltraScale+ (VU9P) 和 Virtex UltraScale+ (VU13P) 器件。比較的重點是能用于包括深度學習在內的眾多應用的通用 MACC 性能。
英特爾的 MACC 性能基于運用預加法器的算子。但是這種實現方案產生的是乘積項和非唯一單獨乘積項之和,因此英特爾的預加法器不適用于深度學習運算。
英特爾器件的功耗使用英特爾的 EPE 功耗估算工具估算,并假設在以下最壞情況下:
1. 在最大頻率 (FMAX) 下 DSP 利用率為 90%
2. 時鐘速率為 DSP FMAX 時邏輯利用率為 50%
3. 時鐘速率為 DSP FMAX 的一半時,block RAM 利用率為 90%
4. 4 個 DDR4 和 1 個 PCIe Gen3 x 8
5. DSP 觸發率為 12.5%
6. 80°TJ
圖 8 所示為深度學習運算的能效比較。憑借 INT8 優化,賽靈思 UltraScale 和 UltraScale+ 器件在 INT8精度上相比 INT16 運算(KU115 INT16/KU115 INT8)能效提升 1.75 倍。與英特爾的 Arria 10 和 Stratix 10器件相比,賽靈思器件在深度學習推斷運算上能效高出 2-6 倍。
圖 8 :INT8 深度學習能效對比:賽靈思對比英特爾
結論
本白皮書探討了如何在賽靈思 DSP48E2 Slice 上優化 INT8 深度學習運算,從而實現 1.75 倍的性能提升。賽靈思 DSP48E2 Slice 可用于在共享相同內核權重的同時實現并行 INT8 MACC。為高效地實現 INT, 需要采用 24 位輸入寬度,這項優勢只有賽靈思 UltraScale 和 UltraScale+ FPGA DSP Slice 能夠提供支持。賽靈思非常適合用于深度學習應用中的 INT8 工作負載(例如圖像分類)。賽靈思不斷創新新的基于軟/硬件的方法,以加快深度學習應用的發展。
如需了解有關數據中心深度學習的更多信息,敬請訪問: https://china.xilinx.com/accelerationstack
參考資料
1. 1.Dettmers, 8-Bit Approximations for Parallelism in Deep Learning, ICLR 2016
https://arxiv.org/pdf/1511.04561.pdf
2. Gysel et al, Hardware-oriented Approximation of Convolutional Neural Networks, ICLR 2016
https://arxiv.org/pdf/1604.03168v3.pdf
3. Han et al, Deep Compression:Compressing Deep Neural Networks With Pruning, Trained Quantization And Huffman Coding, ICLR 2016
https://arxiv.org/pdf/1510.00149v5.pdf
4. Rosenblatt, F., The Perceptron:A Probabilistic Model for Information Storage and Organization in the Brain, Psychological Review, Vol. 65, No. 6, 1958
評論
查看更多