极智AI | 谈谈昇腾CANN量化

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

大家好,我是极智视界,本文介绍一下 谈谈昇腾CANN量化

昇腾CANN的量化体现在AMCT工具,也即模型压缩工具,后面再来说AMCT,这篇先聊一下昇腾CANN的量化执行流程和原理。量化是指对原始框架的模型权重weights 和 数据activation 进行低比特化int8的处理,以此可以达到的优化效果如下:

极智AI | 谈谈昇腾CANN量化_第1张图片

量化分为训练后量化(Post-Training Quantization) 和 量化感知训练(Quantization-Aware Training),这里主要讲的是训练后量化。量化一般不依赖于硬件,所以不管是昇腾的量化还是英伟达的量化甚至是嵌入式设备的量化,都是不用跑在运行环境上的,一般用普通CPU来跑量化的过程就可以了,跑完量化过程后生成一个量化后的模型,然后再送入下一个推理流程。咱们一般指的量化就是权重和数据从float32->int8的过程,但是并不是所有的算子都会进行量化处理,如一些非线性算子(如激活算子)一般就不量化,所以网络中可能会插入一些所谓的dequant的算子,这些算子一定会和quant算子成对出现,量化的运行原理可以用下图来展示:

极智AI | 谈谈昇腾CANN量化_第2张图片

量化常用的算法有二值化、线性量化和对数量化,线性量化又可以根据是否有offset细分为对称量化和非对称量化两种,而CANN里的量化算法采用了线性量化方式,并将对称和非对称量化方式进行了归一。

极智AI | 谈谈昇腾CANN量化_第3张图片

CANN的量化可以用如下表达式进行表示:

                                  data_{int8}=clip_{int8}(round(data_{fp32}/scale)+offset)

其中scale是缩放因子,offset是偏移量。前面已经说到CANN的量化算法是对称量化和非对称量化的归一,这是什么意思呢?咱们先来看看对称量化和非对称量化是怎么回事。

首先来看对称量化,过程可以用下图来表示:

极智AI | 谈谈昇腾CANN量化_第4张图片

对称量化公式可以表示为:

                                                data_{int8}=round(data_{fp32}/scale)

 其中的scale的计算方式如下,int8数据对应的表示范围为[-128*scale, 127*scale]

                                                        scale = data_{max}/127

 再来看非对称量化,过程可以用下图来表示:

极智AI | 谈谈昇腾CANN量化_第5张图片

非对称量化公式可以表示为:

                                         data_{uint8} = round(data_{fp32}/scale-offset)

 其中scale为fp32浮点数,datauint8为uint8的定点数,offset是int8的定点数,scaleoffset的计算方式如下:

                                                 scale = (data_{max} - data_{min})/255

 接着咱们来看CANN的归一化方法,即通过将非对称量化公式通过简单的数据变换,使量化后的数据与对称量化算法在数据格式上保持一致,即均为int格式。具体的变换过程如下:

data_{fp32} = scale \times (data_{uint8} + offset) = scale \times (data_{int8} + offset + 128) = scale \times (data_{int8} - offset')

 其中:

                                                    data_{int8} = data_{uint8} - 128

                                                    offset' = -(offset + 128)

 通过上述变换后,可以将量化数据也转换统一为int8格式,从而达到量化数据格式的归一,在确定scale和变换后的offset'后,可以得到CANN量化的计算方式,如下:

                                     data_{int8} = clip(round(data_{fp32}/scale) + offset')

 下篇咱们来说说CANN的量化怎么用。

好了,以上分享了谈谈昇腾CANN量化,希望我的分享能对你的学习有一点帮助。

【极智视界】

《极智AI | 谈谈昇腾CANN量化》


搜索关注我的微信公众号「极智视界」,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !

你可能感兴趣的:(极智AI,量化,昇腾,CANN,人工智能,深度学习)