公众号我是算法工程师

公众号我是算法工程师

来源 | PaperWeekly  作者 | Gemfield


在深度学习中,量化指的是使用更少的 bit 来存储原本以浮点数存储的 tensor,以及使用更少的 bit 来完成原本以浮点数完成的计算。这么做的好处主要有如下几点:

  • Post Training Dynamic Quantization,模型训练完毕后的动态量化;

  • Post Training Static Quantization,模型训练完毕后的静态量化;



  • 量化会有精度损失;



这种量化方式经常缩略前面的两个单词从而称之为 Dynamic Quantization,中文为动态量化。这是什么意思呢?你看到全称中的两个关键字了吗:Post、Dynamic:

  • Post:也就是训练完成后再量化模型的权重参数;

  • Linear

  • LSTM

  • LSTMCell

  • RNNCell

  • GRUCell 

  • qconfig_spec 指定了一组 qconfig,具体就是哪个 op 对应哪个 qconfig;

  • 每个 qconfig 是 QConfig 类的实例,封装了两个 observer;

  • 这两个 observer 分别是 activation 的 observer 和 weight 的 observer;

  • 但是动态量化使用的是 QConfig 子类 QConfigDynamic 的实例,该实例实际上只封装了 weight 的 observer;

  • activate 就是 post process,就是 op forward 之后的后处理,但在动态量化中不包含;

  • observer 用来根据四元组(min_val,max_val,qmin, qmax)来计算 2 个量化的参数:scale 和 zero_point;

  • qconfig_spec 赋值为一个 set,比如:{nn.LSTM, nn.Linear},意思是指定当前模型中的哪些 layer 要被 dynamic quantization;

  • scale = max_val / (float(qmax - qmin) / 2) = 0.5541 / ((127 + 128) / 2) = 0.004345882...



  • Convolution, Batch normalization

  • Convolution, Batch normalization, Relu

  • Convolution, Relu

  • Linear, Relu

  • Batch normalization, Relu

  • QuantStub 的 scale 和 zp 是怎么来的(静态量化需要插入 QuantStub,后文有说明)?

  • conv activation 的 scale 和 zp 是怎么来的?

  • conv weight 的 scale 和 zp 是怎么来的?

  • fc activation 的 scale 和 zp 是怎么来的?

  • fc weight 的 scale 和 zp 是怎么来的?

  • relu activation 的 scale 和 zp 是怎么来的?

  • scale = 0.7898 / ((127 + 128)/2 ) = 0.0062

  • scale = (2.9971 + 3) / (127 - 0) = 0.0472

  • 静态量化的 float 输入必经 QuantStub 变为 int,此后到输出之前都是 int;




  • Xmin、Xmax 是当前运行中正在求解和最终求解的最小值、最大值;

  • X 是当前输入的 tensor;



那么如何更方便的在你的代码中使用 PyTorch 的量化功能呢?一个比较优雅的方式就是使用 deepvac 规范——这是一个定义了 PyTorch 工程标准的项目:

https://github.com/DeepVAC/deepvac

基于 deepvac 规范(包含库),我们只需要简单的打开几个开关就可以使用上述的三种量化功能。

注:文仅学术分享,侵删


猜您喜欢:


超100篇!CVPR 2020最全GAN论文梳理汇总!

附下载 | 《Python进阶》中文版

附下载 | 经典《Think Python》中文版

附下载 | 《Pytorch模型训练实用教程》

附下载 | 最新2020李沐《动手学深度学习》

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 | 超100篇!CVPR 2020最全GAN论文梳理汇总!

附下载 |《计算机视觉中的数学方法》分享


如何使用PyTorch的量化功能?-LMLPHP

本文分享自微信公众号 - 机器学习与生成对抗网络(AI_bryant8)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

04-02 17:10