模型量化技術(入門級理解,不涉及復雜公式和深入的原理)


量化技術

量化的概念

一般是高精度浮點數表示的網絡權值以及激活值用低精度(例如8比特定點)來近似表示

達到模型輕量化,加速深度學習模型推理,目前8比特推理已經比較成熟

使用低精度的模型推理的優點:

①模型存儲主要是每個層的權值,量化后模型占用空間小,32比特可以縮減至8比特

並且激活值用8比特后,減小了內存的訪問帶寬需求

②單位時間內處理定點運算指令比浮點數運算指令多

量化的分類

一般按照量化階段不同分為后量化和訓練時量化,用的比較多的是后量化,像tensorRT和RKNN

按照量化映射方法又可以分為對稱量化和非對稱量化

對稱量化(int8  -128-127)

              

 

 

 

 

對稱算法是通過一個收縮因子,將FP32中的最大絕對值映射到8比特的最大值,最大絕對值的負值(注意此值不是fp32的最小值,是最大絕對值的相反數,故對稱)映射到

8比特的最小值,有對應的映射公式(較復雜,不做展示)如圖所示。一般不采用zero-point。

收縮因子:

 

 

 

對於fp32的值若均勻分布在0左右,映射后的值也會均勻分布,若fp32的值分布不均勻,映射后不能充分利用

映射空間。

非對稱量化(uint8   0-255)

                 

 

 

 

 

 

通過收縮因子和零點(用於偏移),將 FP32 張量 的 min/max 映射分別映射到 8-bit 數據的 min/max ,有對應的映射公式(較復雜,不做展示)

收縮因子: 

 

加入零點的原因,0有特殊意義如padding,若不加零點z,量化后會映射到0,加入零點z后,浮點0量化后映射到0-255中間的一個數字。

可以無誤差地量化浮點數中的數據 0,從而減少補零操作(比如卷積中的padding zero)在量化中產生額外的誤差。

缺點是只有正數,有的處理方式是把0點左移到-128,范圍控制在【-128,127】中,但還是非對稱量化。

對稱與非對稱的優缺點:

非對稱可以處理好FP32數據分布不均勻的情況。

若對稱算法產生的量化后數據很多都是在【0,127】內,左邊的范圍利用很少,減弱了量化數據的表示能力,影響模型精度

 

 

量化的粒度

一般分為通道級量化和張量級量化,(不具體介紹概念)

通常張量的每一個通道代表一類特征,因此不同通道之間可能有數據分布相差較大情況,此時適合使用通道級量化

一般而言卷積中建議對權值使用非對稱通道級的量化,激活采用張量級量化

TensorRT后量化算法

不飽和的線性量化就是量化后的數據扎堆在某一個范圍(導致本不該相同的變為相同的),存在一些范圍利用少的情況,會導致精度損失較大。

TensorRT量化方法:

  激活值飽和量化(右圖),選擇合適的閾值T

  權值非飽和量化(左圖)

 

 TensorRT另一個主要的優化是在層間融合或張量融合

模型推理的時候,每一次的操作都是由gpu啟動不同的cuda核心來完成的,大量的時間花在cuda核心啟動和讀寫操作上,造成了內存帶寬的瓶頸和GPU資源浪費。TENSORRT通過層間融合,橫向融合把卷積偏置激活合並成一個結構,並且只占用一個cuda核心,縱向融合把結構相同,權值不同的層合並成一個更寬的層,也是占用一個cuda核心,因此整個模型結構更小更快。

 參考:

https://www.cnblogs.com/qccz123456/p/11767858.html

公眾號 gaintpanda

rknn開發社區資料,文檔

http://t.rock-chips.com/forum.php?mod=viewthread&tid=1226


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM