技術解析 模型量化壓縮

2021-10-19 19:39:52 字數 2240 閱讀 8766

隨著深度學習技術滲透入越來越多領域,人工智慧在邊緣側的大規模應用被提上日程。尤其這兩年人工智慧-計算機視覺方向在安全生產、工業質檢、智慧型硬體等應用場景中在廣泛應用,這些應用場景往往對效能及資料安全有苛刻的要求,故而在邊緣計算、移動終端、嵌入式終端的產品落地也隨之進入白熱化階段。

終端落地很重要的兩個指標依舊是推理時間儲存開銷。網路模型壓縮的需求越來越大,模型量化應運而生。本篇我們將**模型量化的概念原理、優缺點及easydl-easyedge模型量化的實現方法。

所謂量化,就是把模型引數從浮點數轉換成整數的一種模型壓縮技術。工業界量化一般指int8,8表示儲存乙個權重元素所需的位數。把fp32的值經過線性變換轉換成int8,網路中耗時的卷積層計算就成了整數的計算,運算量將大大降低,int8 使用的位元數只有 fp32的25%,模型推理所佔的記憶體也隨之降低。

用我們最日常的邊緣裝置——手機來舉個例子。

easydl-easyedge量化從演算法上可以分為訓練後量化和量化訓練,根據目標端模型的不同又可以分為paddleslim、openvino、nnie和tensorrt的量化

量化是從r(fp32)到q(int8)的線性對映。

r和q的關係如下:

量化引數:

•         縮放因子(scale):s

•         偏移量(offset):z

如何確定縮放因子和偏移量的值?目前easydl-easyedge採用的方法有:

•         abs_max: ±abs_max 對映為±127,偏移量z恒為0(paddleslim量化)

•         min_max: min對映為-127, max對映為127,偏移量需要計算(openvino量化)

abs_max對映說明示意圖

min_max對映說明示意圖

easydl-easyedge量化採用了訓練後量化量化訓練兩種演算法。

訓練後量化:固定權重值,將權重提前量化, 權重進行的是逐通道量化——以通道為單位,每個channel單獨使用一組s和z;使用少量校準資料,在校準過程中觀察模型的行為來計算啟用張量的比例因子和偏差。整個量化過程最快只需2分鐘。

量化訓練:權重需要訓練學習(fine-tune),採用量化訓練得到的int8模型在效果上通常會比訓練後量化的模型更好,但量化過程需要的時間也會稍微長一些。

目前在easydl-easyedge的多種部署方式裡均可以獲取量化加速模型的服務。比如在本地部署裡,選擇通用小型裝置獲取arm加速版本或選擇伺服器獲取cpu加速版等等。

在裝置上使用量化後的模型,會發現裝置功耗更低、推理更快。比如使用easydl經典版高精度分類模型,在通用 x86 cpu 上單張推理時間從 128ms 縮短至 30ms,高效能分類模型單張推理時間從 99ms 縮短至 15ms,效能大幅提公升。

x86 cpu版sdk量化前後效能資料對比表

而整個生成量化模型的過程你都無需費神,只要交給easydl-easyedge!快來一起體驗量化帶來的變化吧!

easydl零門檻ai開發平台與全功能ai開發平台bml也均整合了easyedge的全部服務,端到端實現從模型開發到模型量化,輸出離線sdk的一站式開發流程,可便捷獲取高精度高效能的離線服務。

keras模型量化

模型量化的本質就是將模型中的引數按照一定的規則 把32位或者64位浮點數 轉化位16位浮點數或者8位定點數。這裡我用keras和numpy實現了16位和8位的量化,未考慮量化的科學合理性,僅僅是搞清楚量化本質的一次實驗。量化 coding utf 8 project tf2learning file...

模型輕量化

1.輕量化網路 參考 mobilenet v1核心是把卷積拆分為depthwise pointwise兩部分。圖5為了解釋mobilenet,假設有 的輸入,同時有 個的卷積。如果設定 且,那麼普通卷積輸出為 如圖6。圖6 普通3x3卷積,k 2 depthwise是指將 的輸入分為 組,然後每一組...

模型壓縮技術,卷積核解讀

1.compressing and regularizing deep neural networks 1 權重值的大小反映了連線的重要性 刪除不夠重要的連線 called pruning 2 權重值輕微的變動對模型的 能力影響甚微 權重共享 值接近的權重共享同乙個權重值,通過索引表查詢 帶來的好處...