利用torch.fx进行后量化
生活随笔
收集整理的這篇文章主要介紹了
利用torch.fx进行后量化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
torch.fx 量化支持——FX GRAPH MODE QUANTIZATION
torch.fx目前支持的量化方式:
- Post Training Quantization
- Weight Only Quantization
- Dynamic Quantization
- Static Quantization
- Quantization Aware Training
- Static Quantization
其中,Post Training Quantization中的Static Quantization和Dynamic Quantization提供了demo。
與Eager模式對比
簡單來說,fx提供一個Graph模式:
- 可以自動插入量化節點(如quantize和dequantize),不需要手動修改當前的network及forward
- 這個模式下可以看到forward是怎么被自動構建的,可以進行更精細的調整
Graph模式
局限:只有可以轉換為符號的部分(symbolically traceable)可以被量化,Data dependent control flow是不支持的。如果模型有些部分無法被符號化,則量化只能在模型的部分上工作,不能被符號化的部分會被跳過。
如果需要這些部分被量化:
- 重寫代碼讓這些部分symbolically traceable
- 將這些部分轉換成observed和quantized的子模塊
相關的具體操作見(PROTOTYPE) FX GRAPH MODE QUANTIZATION USER GUIDE。
訓練后量化嘗試
環境準備:
import torch import copy from torch.quantization import get_default_qconfig from torch.quantization.quantize_fx import prepare_fx, convert_fx, fuse_fx步驟
qconfig是QConfig的一個實例,QConfig這個類就是維護了兩個observer,一個是activation所使用的observer,一個是op權重所使用的observer。
| fbgemm (x86) | HistogramObserver (reduce_range=True) | PerChannelMinMaxObserver (default_per_channel_weight_observer) |
| qnnpack (arm) | HistogramObserver (reduce_range=False) | MinMaxObserver (default_weight_observer) |
| default | MinMaxObserver (default_observer) | MinMaxObserver (default_weight_observer) |
總結
以上是生活随笔為你收集整理的利用torch.fx进行后量化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#——ref和out的区别
- 下一篇: 数字问题7:股票问题