对深度网络模型量化工作的总结

摘要

由于工作的关系,搞了半年模型量化工作,今天想对这半年来的量化工作做一个小小的总结。

在这里我就不阐述量化的原理和计算方式,网上一搜一大把。(主推商汤的量化哦~~)

这里主要是我对量化工作做些总结。(和大家分享一下)


模型为什么要量化

平时我们在进行模型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