0
点赞
收藏
分享

微信扫一扫

极智AI | 谈谈昇腾CANN量化


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

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

极智AI | 谈谈昇腾CANN量化_人工智能

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

极智AI | 谈谈昇腾CANN量化_昇腾_02

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

极智AI | 谈谈昇腾CANN量化_昇腾_03

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

                                  

极智AI | 谈谈昇腾CANN量化_深度学习_04

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

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

极智AI | 谈谈昇腾CANN量化_深度学习_05

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

                                                

极智AI | 谈谈昇腾CANN量化_人工智能_06

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

                                                        

极智AI | 谈谈昇腾CANN量化_昇腾_07

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

极智AI | 谈谈昇腾CANN量化_昇腾_08

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

                                         

极智AI | 谈谈昇腾CANN量化_CANN_09

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

                                                 

极智AI | 谈谈昇腾CANN量化_量化_10

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

极智AI | 谈谈昇腾CANN量化_CANN_11

其中:

                                                    

极智AI | 谈谈昇腾CANN量化_深度学习_12

                                                    

极智AI | 谈谈昇腾CANN量化_人工智能_13

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

                                     

极智AI | 谈谈昇腾CANN量化_CANN_14

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

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


极智AI | 谈谈昇腾CANN量化_深度学习_15

举报

相关推荐

0 条评论