博客 / 詳情

返回

PTQ 量化數值範圍與優化

一、PTQ 模型量化問題

1.1、模型問題

基於公版模型訓練,沒有對模型做範圍做約束,weight\_decay=1e-6, 訓練出的 float 模型數值分佈很大,如圖 2,可以看到模型的後面幾層數據分佈範圍很廣,最大閾值超過了 8000,對我們量化來説並不友好。

1.2、算子問題

如圖 2,基於全 int16 算子配置量化,當前版本 resize 算子有約束(請查閲工具鏈算子支持情況),只能支持 int8 量化,即使配置了 int16,但算子依舊退化到 int8,因此算子的 cosine 相似度也比較低,基於此閾值,max\_qscale=6653/127=52.385,此 scale 過於大,並不能精細化量化模型,所以全 BPU 算子的整體精度都不高。

圖 1 公版訓練 float 模型

二、精度優化

2.1、cpu 高精度定位

resize 算子有限制,但對於回退 cpu 算子,就能實現 float 精度推理,配置如圖 2,

圖 2 配置 cpu 算子

配置了算子後,精度提升了,如圖 3,可視化效果對比如圖 4,整體量化精度可對齊,定位到了具體問題就是 resize 算子限制導致。

圖 3 cpu 算子精度

圖 4 cpu 算子可視化精度

2.2、添加 bn,加大 weight\_decay

在最後的 conv 層後加上 bn 算子限制特徵數據分佈,同時 weight\_decay 從 1e-6 調整到 1e-3,整體數據範圍如圖 5、圖 6,模型的數據分佈變小了,最後的 cosine 相似度精度也很高,非常利於 int8 量化,後期配置了 int8 量化,模型也可實現高精度量化。

圖 5 全 int16 量化

圖 6 部分 int16 量化

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.