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