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