pytorch的三種量化方式詳解
這篇博客詳細介紹了pytorch官方教程提到的三種量化方式的原理,詳細解釋了三種量化方式的區別;
1. 靜態量化 :torch.quantize_per_tensor
- scale (標度)和 zero_point(零點位置)需要自定義。量化后的模型,不能訓練(不能反向傳播),也不能推理,需要解量化后,才能進行運算
詳細的解釋,參考這篇博客: 靜態量化
2. 動態量化 : torch.quantization.quantize_dynamic
- 系統自動選擇最合適的scale (標度)和 zero_point(零點位置),不需要自定義。量化后的模型,可以推理運算,但不能訓練(不能反向傳播)
- 詳細的解釋,參考這篇博客: 動態量化
3. 量化意識訓練
- 系統自動選擇最合適的scale (標度)和 zero_point(零點位置),不需要自定義。但這是一種偽量化,量化后的模型權重仍然是32位浮點數,但大小和8位定點數權重的大小相同。偽量化后的模型可以進行訓練。雖然是以32位浮點數進行的訓練,但結果與8位定點數的結果一致。
- 示例程序: 量化意識訓練