DSP48E2 Slice 上優(yōu)化 INT8 深度學(xué)習(xí)運(yùn)算分析
賽靈思 INT8 優(yōu)化為深度學(xué)習(xí)推斷提供了性能最佳、能效最高的計(jì)算技術(shù)。賽靈思的集成式 DSP 架構(gòu)與其他 FPGA DSP 架構(gòu)相比,在INT8 深度學(xué)習(xí)運(yùn)算上能實(shí)現(xiàn) 1.75 倍的解決方案級(jí)性能。
概要本白皮書旨在探索實(shí)現(xiàn)在賽靈思 DSP48E2 Slice 上的 INT8 深度學(xué)習(xí)運(yùn)算,以及與其他 FPGA 的對(duì)比情況。在相同資源數(shù)量情況下,賽靈思的 DSP 架構(gòu)憑借 INT8在 INT8 深度學(xué)習(xí)每秒運(yùn)算次數(shù) (OPS) 上相比其它 FPGA,能實(shí)現(xiàn) 1.75 倍的峰值解決方案級(jí)性能。由于深度學(xué)習(xí)推斷可以在不犧牲準(zhǔn)確性的情況下使用較低位精度,因此需要高效的 INT8 實(shí)現(xiàn)方案。
賽靈思的 DSP 架構(gòu)和庫專門針對(duì) INT8 深度學(xué)習(xí)推斷進(jìn)行了優(yōu)化。本白皮書介紹如何使用賽靈思 UltraScale 和 UltraScale+ FPGA 中的DSP48E2,在共享相同內(nèi)核權(quán)重的同時(shí)處理兩個(gè)并行的 INT8 乘法累加 (MACC) 運(yùn)算。本白皮書還闡述了要運(yùn)用賽靈思這一獨(dú)特技術(shù),為何輸入的最小位寬為 24 位。本白皮書還以 INT8優(yōu)化技術(shù)為例,展示了該技術(shù)與神經(jīng)網(wǎng)絡(luò)基本運(yùn)算的相關(guān)性。
用于深度學(xué)習(xí)的 INT8深度神經(jīng)網(wǎng)絡(luò)(DNN)已掀起機(jī)器學(xué)習(xí)領(lǐng)域的變革, 同時(shí)運(yùn)用新的達(dá)到人類水平的 AI 功能重新定義眾多現(xiàn)有的應(yīng)用。
隨著更精確的深度學(xué)習(xí)模型被開發(fā)出來,它們的復(fù)雜性也帶來了高計(jì)算強(qiáng)度和高內(nèi)存帶寬方面的難題。能效正在推動(dòng)著深度學(xué)習(xí)推斷新模式開發(fā)方面的創(chuàng)新,這些模式需要的計(jì)算強(qiáng)度和內(nèi)存帶寬較低,但絕不能以犧牲準(zhǔn)確性和吞吐量為代價(jià)。降低這一開銷將最終提升能效,降低所需的總功耗。
除了節(jié)省計(jì)算過程中的功耗,較低位寬的計(jì)算還能降低內(nèi)存帶寬所需的功耗,因?yàn)樵趦?nèi)存事務(wù)數(shù)量不變的情況下傳輸?shù)奈粩?shù)減少了。
研究顯示要保持同樣的準(zhǔn)確性,深度學(xué)習(xí)推斷中無需浮點(diǎn)計(jì)算[ 參考資料 1][ 參考資料 2][ 參考資料 3],而且圖像分類等許多應(yīng)用只需要 INT8 或更低定點(diǎn)計(jì)算精度來保持可接受的推斷準(zhǔn)確性[ 參考資料 2][ 參考資料 3]。表 1 列出了精調(diào)網(wǎng)絡(luò)以及卷積層和完全相連層的動(dòng)態(tài)定點(diǎn)參數(shù)及輸出。括號(hào)內(nèi)的數(shù)字代表未精調(diào)的準(zhǔn)確性。
表 1 :帶定點(diǎn)精度的 CNN 模型
賽靈思 DSP Slice 片上的 INT8 深度學(xué)習(xí)
賽靈思的 DSP48E2 設(shè)計(jì)用于在一個(gè)時(shí)鐘周期內(nèi)高效地完成一個(gè)乘法累加算法, 多達(dá) 18x27 位的乘法和多達(dá) 48 位的累加,如圖 1 所示。除了采用回送或鏈接多個(gè) DSP Slice,乘法累加 (MACC) 也能使用賽靈思器件高效完成。
圖 1 :使用 MACC 模式的 DSP Slice
在運(yùn)行 INT8 計(jì)算時(shí),較寬的 27 位寬自然占有優(yōu)勢(shì)。在傳統(tǒng)應(yīng)用中,預(yù)加法器一般用于高效實(shí)現(xiàn) (A+B) x C計(jì)算,但這類計(jì)算在深度學(xué)習(xí)應(yīng)用中很少見。將 (A+B) x C 的結(jié)果拆分為 A x C 和 B x C,然后在獨(dú)立的數(shù)據(jù)流中進(jìn)行累加,使之適用于典型深度學(xué)習(xí)計(jì)算的要求。
對(duì) INT8 深度學(xué)習(xí)運(yùn)算來說,擁有 18x27 位乘法器很占優(yōu)勢(shì)。乘法器的輸入中至少有一個(gè)必須為最小 24位,同時(shí)進(jìn)位累加器必須為 32 位寬,才能在一個(gè) DSP Slice 上同時(shí)進(jìn)行兩個(gè) INT8 MACC 運(yùn)算。27 位輸入能與 48 位累加器結(jié)合,從而將深度學(xué)習(xí)求解性能提升 1.75 倍(1.75:1 即為 DSP 乘法器與 INT8 深度學(xué)習(xí) MACC 的比率)。其他廠商提供的 FPGA 在單個(gè) DSP 模塊中只提供 18x19 乘法器,DSP 乘法器與INT8 MACC 之比僅為 1:1。
可擴(kuò)展的 INT8 優(yōu)化目標(biāo)是找到一種能夠?qū)斎?a、b 和 c 進(jìn)行高效編碼的方法,這樣 a、b 和 c 之間的相乘結(jié)果可以容易地分解為 a x c 和 b x c。
在更低精度計(jì)算中,例如 INT8 乘法中,高位 10 位或 19 位輸入用 0 或 1 填充,僅攜帶 1 位信息。對(duì)最終的 45 位乘積的高位 29 位來說,情況一樣。因此可以使用高位 19 位開展另一計(jì)算,不會(huì)影響低位 8 位或16 位輸入結(jié)果。
總的來說,要把未使用的高位用于另一計(jì)算必須遵循兩條規(guī)則:
1. 高位不應(yīng)影響低位的計(jì)算。
2. 低位計(jì)算對(duì)高位的任何影響必須可檢測(cè)、可能恢復(fù)。