DSP48E2 Slice 上優(yōu)化 INT8 深度學(xué)習(xí)運算分析
賽靈思 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í)推斷可以在不犧牲準確性的情況下使用較低位精度,因此需要高效的 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)存帶寬較低,但絕不能以犧牲準確性和吞吐量為代價。降低這一開銷將最終提升能效,降低所需的總功耗。
除了節(jié)省計算過程中的功耗,較低位寬的計算還能降低內(nèi)存帶寬所需的功耗,因為在內(nèi)存事務(wù)數(shù)量不變的情況下傳輸?shù)奈粩?shù)減少了。
研究顯示要保持同樣的準確性,深度學(xué)習(xí)推斷中無需浮點計算[ 參考資料 1][ 參考資料 2][ 參考資料 3],而且圖像分類等許多應(yīng)用只需要 INT8 或更低定點計算精度來保持可接受的推斷準確性[ 參考資料 2][ 參考資料 3]。表 1 列出了精調(diào)網(wǎng)絡(luò)以及卷積層和完全相連層的動態(tài)定點參數(shù)及輸出。括號內(nèi)的數(shù)字代表未精調(diào)的準確性。
表 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)化目標是找到一種能夠?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ù)。