低計(jì)算成本技術(shù)
首先,我們將討論如何降低計(jì)算成本本身。
量化
量化是權(quán)重或激活(每層的輸入和輸出)中比特的減少,通常在 fp32 中構(gòu)建。眾所周知,深度學(xué)習(xí)在推理過程中能夠以比訓(xùn)練過程更低的位精度進(jìn)行處理,盡管這取決于模型,但即使是 8 位定點(diǎn)數(shù)和位數(shù)更少的定點(diǎn)數(shù)也具有實(shí)用的精度。FPGA 與 1 位左右的低精度網(wǎng)絡(luò)特別兼容,因?yàn)榭梢允褂?LUT 將卷積運(yùn)算替換為查找表。
修剪
修剪是在卷積層等使用的權(quán)重矩陣中,稀疏化(移至 0)足夠接近 0 的值的過程。足夠接近 0 的系數(shù)對(duì)卷積運(yùn)算的最終結(jié)果影響很小,因此將其設(shè)置為 0 不會(huì)顯著影響推理結(jié)果。在實(shí)踐中,我們會(huì)設(shè)置剪枝的閾值等參數(shù),給出測(cè)試模式,檢查允許的誤差范圍。
修剪主要應(yīng)用于兩個(gè)粒度。
- 1、粗粒:每通道
- 2、細(xì)粒度:單位因子
1 的粗粒度修剪只是簡單地刪除了通道,因此可以在不特別注意計(jì)算硬件的情況下提高速度。另一方面,2的細(xì)粒度修剪只會(huì)增加矩陣內(nèi)部0元素的數(shù)量,同時(shí)保持矩陣的大小不變。
在這里我們將限制在這個(gè)級(jí)別,但是還有其他方法可以減少計(jì)算量,例如拓?fù)湔{(diào)整可以減少模型本身的計(jì)算量。
FPGA 上優(yōu)化的 DNN 框架
在 GPU 上做深度學(xué)習(xí)時(shí),無論前端選擇哪種框架,后端幾乎都是跑NVIDIA 優(yōu)化過的cuDNN 庫。cuDNN 庫經(jīng)過優(yōu)化,幾乎可以榨干 GPU 的峰值性能。出于這個(gè)原因,在不實(shí)現(xiàn)卷積等功能的情況下在后端使用這些庫是很常見的。
FPGA 也是如此,例如 Xilinx 提供了一個(gè)名為Vitis-AI的推理框架,而英特爾 FPGA 提供了OpenVINO 工具包。在本節(jié)中,根據(jù)DPU Vitis-AI 中用于邊緣設(shè)備
DPU
DPU是Deep Learning Processing Unit的縮寫,顧名思義就是深度學(xué)習(xí)的處理器。與我們目前創(chuàng)建的架構(gòu)不同,其中電路來處理每一層,DPU 實(shí)現(xiàn)了一個(gè)巨大的算術(shù)單元塊,并通過在算術(shù)單元塊上連續(xù)執(zhí)行每一層的處理來執(zhí)行推理過程。
DPU的硬件架構(gòu)如下圖所示。如圖所示,DPU 具有類似于普通處理器的架構(gòu),例如指令調(diào)度器。
DPU只支持8bit的量化網(wǎng)絡(luò),其量化工具在Vitis-AI(原DNNDK)中提供。
下面我們挑選 DPU 架構(gòu)中的一些有趣的點(diǎn)簡單說一下。
數(shù)據(jù)并行度提取
在上一篇文章中,我們提取了像素之間和輸出通道之間的 2 軸數(shù)據(jù)并行性以進(jìn)行加速。DPU 還提取輸入通道之間的數(shù)據(jù)并行性。
DPU 有幾種配置,可以根據(jù)要實(shí)現(xiàn)的芯片大小進(jìn)行更改,如下表所示。
性能最高的B4096架構(gòu)共有2048個(gè)算子,像素并行度8,輸入通道方向16個(gè),輸出通道方向16個(gè)。雖然有 2048 個(gè)運(yùn)算單元,但總共是 4096 次運(yùn)算/時(shí)鐘,因?yàn)槊總€(gè)運(yùn)算單元同時(shí)執(zhí)行乘法和加法。
上次創(chuàng)建的架構(gòu)中,運(yùn)算次數(shù)最多的卷積層只有4*8=32個(gè)運(yùn)算單元,兩個(gè)卷積層加起來就有32+16=48個(gè)單元,性能簡直快了近40倍,區(qū)別蠻大的。
用于 DSP 的 DDR(雙倍數(shù)據(jù)速率)
在 DPU 中,通過僅以雙倍工作頻率運(yùn)行 DSP 來提高性能,如下圖所示。每個(gè)周期可能的操作數(shù)翻了一番,從而使 DSP 的使用量減半。
DPU方面主要針對(duì)Zynq Ultrascale+,工作頻率為300~400 MHz。
所以DSP運(yùn)行在600-800 MHz范圍內(nèi),速度非常快。
特別是,這種時(shí)鐘分頻的優(yōu)化在像這次這樣用 HLS 開發(fā)時(shí)很難重現(xiàn),需要在 RTL 中進(jìn)行調(diào)整。
另外,在像 DPU 這樣的架構(gòu)中,每個(gè)周期持續(xù)向計(jì)算單元提供數(shù)據(jù)是一個(gè)問題,但我的印象是這也得到了很好的優(yōu)化。這是作者的經(jīng)驗(yàn),但是在對(duì)1K圖像進(jìn)行3×3卷積時(shí),運(yùn)算單元能夠在90%以上的周期內(nèi)運(yùn)行(當(dāng)通道數(shù)是并行數(shù)的倍數(shù)時(shí))。
由于很難創(chuàng)建優(yōu)化到這種程度的HLS,因此在 FPGA 上實(shí)際執(zhí)行深度學(xué)習(xí)時(shí),在某些框架上執(zhí)行推理會(huì)更有效。但是,我認(rèn)為有些模式在現(xiàn)有框架上無法很好地處理,例如使用更優(yōu)化的架構(gòu)來切換每一層的量化位數(shù)。在這種情況下,可能需要構(gòu)建自己的硬件來處理數(shù)據(jù)。
總結(jié)
感謝您閱讀到這里。
在本系列教程中,我們專注于在 FPGA 上實(shí)際編寫代碼和執(zhí)行處理。說到FPGA開發(fā),大家可能會(huì)有這樣的印象,寫RTL很難,還得懂硬件。然而,就像我一開始創(chuàng)建的推理電路一樣,如果我不關(guān)心性能,我可以將高級(jí)綜合應(yīng)用于普通的 C 代碼并且它可以工作。此外,在隨后的加速中,我們主要通過簡單地添加 #pragma. 就能實(shí)現(xiàn) 400 倍的顯著速度提升。我認(rèn)為在創(chuàng)建DPU等優(yōu)化庫時(shí)仍然需要用RTL編寫,但如果目的是在短時(shí)間內(nèi)創(chuàng)建適度優(yōu)化的庫(像這次的HLS)如果使用它,則可以輕松開發(fā)一些應(yīng)用。
-
處理器
+關(guān)注
關(guān)注
68文章
19896瀏覽量
235249 -
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618524 -
DPU
+關(guān)注
關(guān)注
0文章
393瀏覽量
24937 -
LUT
+關(guān)注
關(guān)注
0文章
50瀏覽量
12851
發(fā)布評(píng)論請(qǐng)先 登錄
如何解決汽車制造商多樣性價(jià)值和復(fù)雜性成本的矛盾?

掌握5G測(cè)試的復(fù)雜性:越來越受到關(guān)注
免疫系統(tǒng)的主組織相容復(fù)雜性及其應(yīng)用
基于構(gòu)件回歸測(cè)試的復(fù)雜性度量框架
云計(jì)算用戶需要注意的一些主要趨勢(shì)
比爾蓋茨與喬布斯的共同特質(zhì):整合復(fù)雜性
導(dǎo)致計(jì)算機(jī)程序的復(fù)雜性和多樣性的算法
大數(shù)據(jù)分析學(xué)習(xí)的挑戰(zhàn):復(fù)雜性、不確定性及涌現(xiàn)性
組合最優(yōu)化計(jì)算機(jī)算法和復(fù)雜性的PDF電子書免費(fèi)下載
模型復(fù)雜性日益增加,AI優(yōu)化的硬件隨之出現(xiàn)
駕馭軟件定義車輛的復(fù)雜性

評(píng)論