对深度网络模型量化工作的总结
Posted 一个开心的算法攻城狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对深度网络模型量化工作的总结相关的知识,希望对你有一定的参考价值。
摘要
由于工作的关系,搞了半年模型量化工作,今天想对这半年来的量化工作做一个小小的总结。
在这里我就不阐述量化的原理和计算方式,网上一搜一大把。(主推商汤的量化哦~~)
这里主要是我对量化工作做些总结。(和大家分享一下)
模型为什么要量化
平时我们在进行模型forward和backward的时候,大多采用的是能够支持32bit计算的设备。
在进行模型保存的时候,我们往往得到的是参数,其范围也是32bit的浮点范围
虽然模型的精度很高,但是模型往往很大,参数计算的速度也会略有些慢
并且对于芯片行业,很少一部分芯片是搭载32bit计算的(我所认知里)
目前,芯片支持8bit和16bit的还是较多些。
为了能让芯片更加的AI化,也就是说模型在8bit或者16bit的参数范围内也能进行正常推理,并且保持一定的精度。
为此,量化的工作是很必要的。
量化的本质
其实量化的本质就是:
在能够减少精度损失的情况下(可以理解为浮点数转定点数的精度损失)
将连续取值的浮点型模型权重或者流经模型的张量数据进行定点化,近似为有限多个离散值的过程
量化主要是以更少位数的数据类型如8bit或16bit来映射32bit的数据范围
注意的是,模型的输入和输出依旧是浮点类型(这里主要是将参数进行量化后在进行反量化的过程)
从而减少模型尺寸,达到模型内存消耗小,以及加快了模型的推理速度等目的。(目前我知道的商汤对模型量化这里很有研究)
对于我工作中所接触的模型量化,其优缺点总结如下
优点
- 模型尺寸的减少,对应的内存空间以及存储空间的占用量少了。(比如将32bit模型量化到8bit模型,其空间就节省了近4倍数)
- 提高了模型在线升级的速度,当然这也归功于模型小,其传输的时间也就小了很多
- 加快了模型的推理速度,比如访问一次32bit的参数量,可以访问4次8bit的参数量,并且整型可比浮点类型运算快的多(但是,之前参加过一次商汤的分享会,曾提到过量化不一定能够使模型的推理速度增加,当时也只听了一个结论。目前我是没有遇到过)
- 能够支持微型处理器,目前AI芯片支持8bit和16bit的类型较多些,这也是模型量化的一个优势
缺点
模型量化的缺点,模型的精度相比量化前的精度要降低
我曾遇到的是对分割模型的量化,量化前的分割边缘和量化后的分割边缘会有一些差异,该如何解决的问题
虽然后期会对模型量化进行微调
但是推理的精度还是会下降。不过同样的模型QAT的量化方式可能会比PTQ好,但是操作的复杂度也会略高些
END
以上是关于对深度网络模型量化工作的总结的主要内容,如果未能解决你的问题,请参考以下文章