pytorch的三种量化方式详解
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位定点数的结果一致。
- 示例程序: 量化意识训练