賽靈思器件上的 INT4 優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)(1)
對于 AI 推斷,在提供與浮點(diǎn)相媲美的精度的同時(shí),INT8 的性能優(yōu)于浮點(diǎn)。然而在資源有限的前提下,INT8 卻不能滿足性能要求,INT4 優(yōu)化則是解決之道。通過 INT4 優(yōu)化,與現(xiàn)有的 INT8 解決方案相比,賽靈思在實(shí)際硬件上可實(shí)現(xiàn)高達(dá) 77% 的性能提升。
本文引用地址:http://2s4d.com/article/202009/418351.htm概要
賽靈思在其硬件平臺上提供 INT8 AI 推斷加速器 — 深度學(xué)習(xí)處理器單元 (XDPU)。然而,在某些資源受限,要求高性能、低時(shí)延的場景(例如對資源、功耗敏感的邊緣側(cè)場景和低時(shí)延 ADAS 場景)中,為了實(shí)現(xiàn)比 INT8 更低的功耗和更高的性能,需要對神經(jīng)網(wǎng)絡(luò)進(jìn)行低比特量化。然而,極低比特量化(如二進(jìn)制或三進(jìn)制)卻會(huì)導(dǎo)致精度劣化。
因此,4 位激活參數(shù)和 4 位權(quán)重參數(shù) (4A4W) 全流程硬件友好型量化解決方案可實(shí)現(xiàn)更優(yōu)異的精度/資源權(quán)衡取舍。本白皮書介紹了在 Zynq? UltraScale+? MPSoC 和 Zynq-7000 SoC 系列(16nm 和 28nm)上面向 CNN 4 位 XDPU 實(shí)現(xiàn)的低精度加速器。這種加速器通過高效地映射卷積計(jì)算,充分發(fā)揮其 DSP 功能。這種解決方案可提供優(yōu)于 XDPU 兩倍的解決方案級性能。在 ADAS 系統(tǒng)中執(zhí)行 2D 檢測任務(wù)時(shí),這種實(shí)現(xiàn)方案能夠在 Zynq UltraScale+ MPSoC ZCU102 板上實(shí)現(xiàn) 230fps 的推斷速度,與 8 位 XDPU 相比性能提高 1.52 倍。此外,在用于 ADAS 系統(tǒng)中的不同任務(wù)時(shí),該解決方案可實(shí)現(xiàn)媲美全精度模型的結(jié)果。
介紹
企業(yè)日益重視基于 AI 的系統(tǒng)在數(shù)據(jù)中心、汽車、工業(yè)和醫(yī)療等領(lǐng)域中的產(chǎn)品化。這帶來了兩大挑戰(zhàn):
? AI 推斷需要完成的計(jì)算量成數(shù)量級增加,同時(shí)還要保持價(jià)格、功耗、時(shí)延和尺寸大小不變。
? AI 科學(xué)家繼續(xù)日復(fù)一日地在算法和模型上開展創(chuàng)新,需要各種不同的硬件架構(gòu)提供最佳性能。
對持續(xù)創(chuàng)新的強(qiáng)烈需求則需要使用靈活應(yīng)變的領(lǐng)域?qū)S眉軜?gòu) (DSA)。優(yōu)化 AI 推斷性能和降低功耗的主要趨勢之一是使用較低精度和混合精度。為降低硬件設(shè)計(jì)復(fù)雜性,模型量化被當(dāng)作關(guān)鍵技術(shù)應(yīng)用于各類硬件平臺。大量工作被投入用于最大限度地降低 CNN 運(yùn)算量和存儲(chǔ)成本。這項(xiàng)研究充分地證明,對于大多數(shù)計(jì)算機(jī)視覺任務(wù),在不嚴(yán)重犧牲精度的情況下,權(quán)重參數(shù)和激活參數(shù)可以用 INT8 表達(dá)。然而對于某些邊緣應(yīng)用而言,硬件資源仍然不足。在對邊緣應(yīng)用使用較低的位寬(如 1 位、2 位)時(shí),一些常見的硬件設(shè)計(jì)解決方案使用簡化的乘法器。盡管這些解決方案時(shí)延低、吞吐量大,但它們與全精度模型相比,仍然存在較大的精度差距。因此,在模型精度和硬件性能之間尋求平衡變得至關(guān)重要。
賽靈思運(yùn)用幾種常見的網(wǎng)絡(luò)結(jié)構(gòu)((ResNet50V1[參考資料 2]、ResNet50V2[參考資料 3] 、MobilenetV1[參考資料 4]和MobilenetV2[參考資料 5]),在 ImageNet 分類[參考資料 1]任務(wù)上通過使用幾種不同的量化算法進(jìn)行了實(shí)驗(yàn)。結(jié)果顯示精度隨著位寬減少而下降。尤其是在位寬低于 4 時(shí)精度下降顯著。此外,賽靈思也使用 Williams 等介紹的 Roofline 模型[參考資料 6],分析不同位寬下的硬件性能,如圖 1 所示。以賽靈思 ZCU102 評估板為例,隨著 MAC 的精度降低,硬件成本降低,性能得到提高。此外,實(shí)驗(yàn)結(jié)果還顯示,低比特量化可通過降低存儲(chǔ)器需求提高性能。這在 ResNet-50 神經(jīng)網(wǎng)絡(luò)的卷積運(yùn)算強(qiáng)度上得到證實(shí)。該網(wǎng)絡(luò)分別用 8 位精度和 4 位精度進(jìn)行了運(yùn)算。因此,INT4 在模型精度和硬件性能之間實(shí)現(xiàn)了最佳權(quán)衡。
圖 1:在 ZCU102 上以不同位寬運(yùn)行 Roofline 模型
如何量化全流程硬件友好型 CNN
為實(shí)現(xiàn)整個(gè)量化過程的硬件友好化,INT4 量化法可分為三個(gè)部分:量化機(jī)制、硬件友好型量化設(shè)計(jì)、量化感知訓(xùn)練。
量化機(jī)制
賽靈思使用經(jīng)訓(xùn)練的量化閾值 (TQT) [參考資料 7]將 DNN 從單精度浮點(diǎn) (FP32) 轉(zhuǎn)換為 INT4。對于權(quán)重和激活參數(shù),量化函數(shù)可正式地寫作:
方程 1 體現(xiàn)出輸入值 x 的量化值取決于閾值 t、位寬 b 和量化比例系數(shù)s。閾值 t 一般初始化為
待量化的張量的絕對值的最大值。隨后在訓(xùn)練過程中用 log2t 的形式進(jìn)行優(yōu)化。量化系數(shù)s是 2 的冪,具有硬件友好性。上下截?cái)噙\(yùn)算去除部分離群數(shù)據(jù),加大權(quán)重參數(shù)和激活參數(shù)的分布緊密度,更有利于量化。
如上文所述,log2t 是一種在訓(xùn)練過程中可學(xué)習(xí)的參數(shù)。優(yōu)化它就能確定合適的量化范圍。與之相反,log2t 的梯度可通過鏈?zhǔn)椒▌t確定。此外,輸入值 x 的梯度也可通過下式計(jì)算:
TQT 證明對數(shù)表達(dá)能確保閾值和輸入值的標(biāo)度不變性。采用對數(shù)方式訓(xùn)練閾值更容易管理,并且被證明是非常高效的。
硬件友好型量化設(shè)計(jì)
要進(jìn)行量化訓(xùn)練,必須從全精度網(wǎng)絡(luò)中構(gòu)建低比特網(wǎng)絡(luò)。以全流程硬件友好型量化為基礎(chǔ),下文介紹部分常用網(wǎng)絡(luò)結(jié)構(gòu)并對幾種粗粒度模塊的量化解決方案進(jìn)行總結(jié)。對于這些量化模塊,INT4 量化方法可用于多種類型的網(wǎng)絡(luò)結(jié)構(gòu)。部分常用模塊的量化解決方案如圖 2 所示。圖 2中的虛線表明能根據(jù)實(shí)際網(wǎng)絡(luò)結(jié)構(gòu)增添或者刪除。
模塊 1:CBR(Conv+BN+ReLU)
作為 CNN 中的通用結(jié)構(gòu),BN 層被合并以減少訓(xùn)練和推斷過程中的觸發(fā)器數(shù)。然而,BN 層存在不一致性;批量運(yùn)算在訓(xùn)練過程中使用當(dāng)前批次的平均值和方差,但在推斷過程中移動(dòng)平均值和方差。如果量化的是從當(dāng)前批次的平均值和方差獲得的合并參數(shù),在推斷時(shí)就會(huì)導(dǎo)致偏差。為消除這種不匹配,應(yīng)使用下列最佳實(shí)踐[參考資料 8]、[參考資料 9]來量化這種結(jié)構(gòu)。在將 BN 折疊到 ConV 后,就對折疊到 INT4 的參數(shù)進(jìn)行量化。該模塊的量化如圖 2 (b) 所示。
模塊 2:BRC(BN+ReLU+Conv)
如圖 2 (c) 所示,在緊隨卷積層的 BN 層被合并后,仍然存在獨(dú)立的 BN 層。然而,在現(xiàn)有的 INT4 量化方法中,BN 層基本不受重視。為有效地部署這個(gè)獨(dú)立的 BN 層,一種量化神經(jīng)網(wǎng)絡(luò)[參考資料 10]的簡化方法被用于在訓(xùn)練過程中保持全精度,并在推斷過程中吸收浮點(diǎn)標(biāo)度和閾值偏差。這種方法可延伸用于所有線性運(yùn)算(包括推斷中的卷積),同時(shí)有助于保持精度。該模塊的量化詳見圖 2 (d)。
模塊 3:加法
對于加法模塊,共享的量化層被用于量化所有輸入和輸出。根據(jù)經(jīng)驗(yàn),加法運(yùn)算對精度敏感,但
占用硬件資源較少。因此該層一般量化為 8 位。此外,為了量化所有輸入和輸出,還將使用標(biāo)度共享規(guī)則。共享規(guī)則的作用是讓硬件繞過標(biāo)度計(jì)算,消除了浮點(diǎn)乘法的需要。如圖 2 (b) 所示,“ShareQuantize”指這些量化層共享相同標(biāo)度。
其他:
為確保卷積運(yùn)算的輸入是 4 位,加法運(yùn)算的 8 位輸出需要再次被量化為 4 位,如圖 2 中的“再量化”所示。對于第一層和最后一層,仍然進(jìn)行 INT4 量化。整個(gè)網(wǎng)絡(luò)的輸出被量化成 8 位。內(nèi)積層
與卷積層保持一致。
量化感知訓(xùn)練
量化感知訓(xùn)練通常被用作一項(xiàng)關(guān)鍵技術(shù),用來降低低比特模型與全精度模型之間的精度差。在本白皮書描述的 INT4 量化方法中,它仍起著不可或缺的作用。量化感知訓(xùn)練過程都使用算法 1(如下所示)。
算法 1:逐層量化感知訓(xùn)練輸入:
全精度輸入、權(quán)重和偏差:X、W、Bias
針對輸入和權(quán)重的可學(xué)習(xí)對數(shù)域閾值:ax、aw、abias
位寬:針對輸入和權(quán)重,b=4;針對偏差,b=8
輸出:
輸出:Y
1. 初始化 ax = log2 max (|x|),aw = log2 max (|w|),abias = log2 max (|bias|)
2. 根據(jù)方程 1 計(jì)算 q(x)、q(w)和 q(bias)
3. Y = Forward(q(x), q(w), q(bias))
4. 計(jì)算分類損耗:Loss。對所有可學(xué)習(xí)參數(shù)使用正則化方法。
5. 參閱方程 3
6. 使用 Adam 更新全精度參數(shù)
(未完待續(xù))
評論