极智AI | 谈谈昇腾CANN量化

Posted 极智视界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极智AI | 谈谈昇腾CANN量化相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

                                  

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

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

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

                                                

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

                                                        

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

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

                                         

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

                                                 

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

 其中:

                                                    

                                                    

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

                                     

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

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

【极智视界】

极智AI | 谈谈昇腾CANN量化


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

以上是关于极智AI | 谈谈昇腾CANN量化的主要内容,如果未能解决你的问题,请参考以下文章

极智AI | 谈谈昇腾 CANN AIPP

极智AI | 昇腾 CANN ATC 模型转换

极智AI | 谈谈昇腾 auto tune

极智AI | 三谈昇腾 auto tune

极智AI | 再谈昇腾 auto tune

极智AI | 昇腾开发环境搭建 CANN & MindStudio (无坑版)