日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pytorch模型量化介绍

發(fā)布時間:2023/12/10 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pytorch模型量化介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ? 在深度學習領(lǐng)域量化主要是存儲量化(減少存儲所需內(nèi)存)以及計算量化(減少計算時間)。而博主主要使用pytorch,在pytorch里支持的量化主要有動態(tài)量化(推理過程中進行量化)、靜態(tài)量化(訓練后進行量化)、感知量化(邊訓練邊量化,用的時間更長,但精度幾乎無損)。

Tensor量化

? ? ? ?要實現(xiàn)量化首先要進行Tensor量化,Tensor量化與scale、zero-point參數(shù)有關(guān),公式為:

????????round(x/scale+zero-point)

?? ? ? Tensor一般量化有2種模式,per tensor與per channel,前者所有數(shù)值都按照相同方式進行scale與zero-point計算,后者有多種不同的scale與zero-pointc參數(shù),而且精度損失更少。

靜態(tài)量化

? ? ? ? 靜態(tài)量化一般有2種形式,僅weight量化以及weight與activation同時量化。前者主要目的是使得模型參數(shù)所占內(nèi)存減小,且相對簡單。后者則相對較為復(fù)雜。

? ? ? ? 在pytorch內(nèi)靜態(tài)量化分為5個步驟。(以下步驟主要進行的是模型量化,本質(zhì)上就是用量化OP替換非量化OP)

? ? ? ? ? ? ? ?(1)fuse_model,就是將可進行融合的op進行融合,比如Conv與BN層進行融合等。融合后第一個op會替換融合后的op,其余op則替換為nn.identity。

fuse_modules(model, modules_to_fuse, inplace=False, fuser_func=fuse_known_modules, fuse_custom_config_dict=None)

? ? ? ? ? ? ? ? (2)qconfig,該步驟目的是設(shè)置模型量化的方式,通過插入兩個observer來監(jiān)測activation與weight。同時由于推理平臺的不同,pytorch的量化配置也不相同。

? ? ? ? ? ? ? ? (3)prepare,將每個可支持量化的模塊插入Observer,收集數(shù)據(jù)并進行量化分析。

? ? ? ? ? ? ? ? (4)feed data,將一個合適的校驗數(shù)據(jù)送入前述模型中,獲得更好的activation的量化參數(shù)信息。

? ? ? ? ? ? ? ? (5)convert,運用代碼轉(zhuǎn)化模型。

torch.quantization.convert(model, inplace=True)

? ? ? ? ?模型量化后就是量化模型的推理,與浮點模型的區(qū)別主要是要進行量化節(jié)點的插入以及op替換。

? ? ? ? 量化節(jié)點插入:需要在網(wǎng)絡(luò)的forward里面插入QuantStub與DeQuantSub兩個節(jié)點。

? ? ? ? op替換:需要將模型中的Add、Concat等操作替換為支持量化的FloatFunctional。

總結(jié)

以上是生活随笔為你收集整理的Pytorch模型量化介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。