zoukankan      html  css  js  c++  java
  • 模型量化技术(入门级理解,不涉及复杂公式和深入的原理)

    量化技术

    量化的概念

    一般是高精度浮点数表示的网络权值以及激活值用低精度(例如8比特定点)来近似表示

    达到模型轻量化,加速深度学习模型推理,目前8比特推理已经比较成熟

    使用低精度的模型推理的优点:

    ①模型存储主要是每个层的权值,量化后模型占用空间小,32比特可以缩减至8比特

    并且激活值用8比特后,减小了内存的访问带宽需求

    ②单位时间内处理定点运算指令比浮点数运算指令多

    量化的分类

    一般按照量化阶段不同分为后量化和训练时量化,用的比较多的是后量化,像tensorRT和RKNN

    按照量化映射方法又可以分为对称量化和非对称量化

    对称量化(int8  -128-127)

                  

    对称算法是通过一个收缩因子,将FP32中的最大绝对值映射到8比特的最大值,最大绝对值的负值(注意此值不是fp32的最小值,是最大绝对值的相反数,故对称)映射到

    8比特的最小值,有对应的映射公式(较复杂,不做展示)如图所示。一般不采用zero-point。

    收缩因子:

    对于fp32的值若均匀分布在0左右,映射后的值也会均匀分布,若fp32的值分布不均匀,映射后不能充分利用

    映射空间。

    非对称量化(uint8   0-255)

                     

    通过收缩因子和零点(用于偏移),将 FP32 张量 的 min/max 映射分别映射到 8-bit 数据的 min/max ,有对应的映射公式(较复杂,不做展示)

    收缩因子: 

    加入零点的原因,0有特殊意义如padding,若不加零点z,量化后会映射到0,加入零点z后,浮点0量化后映射到0-255中间的一个数字。

    可以无误差地量化浮点数中的数据 0,从而减少补零操作(比如卷积中的padding zero)在量化中产生额外的误差。

    缺点是只有正数,有的处理方式是把0点左移到-128,范围控制在【-128,127】中,但还是非对称量化。

    对称与非对称的优缺点:

    非对称可以处理好FP32数据分布不均匀的情况。

    若对称算法产生的量化后数据很多都是在【0,127】内,左边的范围利用很少,减弱了量化数据的表示能力,影响模型精度

    量化的粒度

    一般分为通道级量化和张量级量化,(不具体介绍概念)

    通常张量的每一个通道代表一类特征,因此不同通道之间可能有数据分布相差较大情况,此时适合使用通道级量化

    一般而言卷积中建议对权值使用非对称通道级的量化,激活采用张量级量化

    TensorRT后量化算法

    不饱和的线性量化就是量化后的数据扎堆在某一个范围(导致本不该相同的变为相同的),存在一些范围利用少的情况,会导致精度损失较大。

    TensorRT量化方法:

      激活值饱和量化(右图),选择合适的阈值T

      权值非饱和量化(左图)

     TensorRT另一个主要的优化是在层间融合或张量融合

    模型推理的时候,每一次的操作都是由gpu启动不同的cuda核心来完成的,大量的时间花在cuda核心启动和读写操作上,造成了内存带宽的瓶颈和GPU资源浪费。TENSORRT通过层间融合,横向融合把卷积偏置激活合并成一个结构,并且只占用一个cuda核心,纵向融合把结构相同,权值不同的层合并成一个更宽的层,也是占用一个cuda核心,因此整个模型结构更小更快。

     参考:

    https://www.cnblogs.com/qccz123456/p/11767858.html

    公众号 gaintpanda

    rknn开发社区资料,文档

    http://t.rock-chips.com/forum.php?mod=viewthread&tid=1226

  • 相关阅读:
    对svn分支合并类型和深度的理解
    SVN中trunk,branches,tags用法详解
    如何从dump中查找ASP.NET Session的数据【转】
    c++学习笔记
    柳永教授嫖娼案庭审记录
    C++资源之不完全导引(转载)
    不讨老婆之“不亦快哉”(三十三则)(李敖)
    在一个ajax extender 工程中实现多个 ajax extender 控件的方法
    Creating a new extender(zz)
    打标签
  • 原文地址:https://www.cnblogs.com/ywheunji/p/13348190.html
Copyright © 2011-2022 走看看