写点什么

关于深度学习量化的操作

作者:芯动大师
  • 2024-09-18
    四川
  • 本文字数:1474 字

    阅读完需:约 5 分钟

关于深度学习量化的操作

0. 简介

深度学习中做量化提升运行速度是最常用的方法,尤其是大模型这类非常吃 GPU 显存的方法。一般是高精度浮点数表示的网络权值以及激活值用低精度(例如 8 比特定点)来近似表示达到模型轻量化,加速深度学习模型推理,目前 8 比特推理已经比较成熟。比如 int8 量化,就是让原来 32bit 存储的数字映射到 8bit 存储。int8 范围是[-128,127], uint8 范围是[0,255]。

使用低精度的模型推理的优点:1. 模型存储主要是每个层的权值,量化后模型占用空间小,32 比特可以缩减至 8 比特,并且激活值用 8 比特后,减小了内存的访问带宽需求。2:单位时间内处理定点运算指令比浮点数运算指令多。

1. 量化分类

一般按照量化阶段不同分为后量化和训练时量化,用的比较多的是后量化,像 tensorRT 和 RKNN 按照量化映射方法又可以分为对称量化和非对称量化。

1.1 非对称量化(uint8 0-256)

非对称量化需要一个偏移量 Z 来完成零点的映射,即量化前的零点和量化后的零点不一致。非对称量化的一般公式为:

S=rmax−rminqmax−qminS=qmax​−qmin​rmax​−rmin​​

Z=qmax−Round(rmaxS)Z=qmax​−Round(Srmax​​)

rmaxrmax​和 rminrmin​表示真实数据的最大值和最小值, qmaxqmax​和 qminqmin​表示量化后的最大值和最小值,例如 uint8 就是 0 和 256。 Round()表示取整,如果是量化为 int 型。

1.1.1 量化

q=Round(rS+Z)q=Round(Sr​+Z)

1.1.2 反量化

r=(q−Z)∗Sr=(q−Z)∗S



1.2 对称量化(int8 -128-127)

对称算法是通过一个收缩因子,将 FP32 中的最大绝对值映射到 8 比特的最大值,最大绝对值的负值(注意此值不是 fp32 的最小值,是最大绝对值的相反数,故对称)映射到 8 比特的最小值。对称量化在量化前和量化后的零点保持一致,即零点对应,因此无需像非对称量化那样引入一个偏移量 Z。 对称量化的一般公式为:

S=∣rmax∣∣qmax∣S=∣qmax​∣∣rmax​∣​

1.2.1 量化

q=Round(rS)q=Round(Sr​)Round()表示取整,如果是量化为 int 型。

1.2.2 反量化

r=q∗Sr=q∗S




2. 量化的优缺点

2.1 量化的优点


  1. 减小模型尺寸,如 8 位整型量化可减少 75%的模型大小

  2. 减少存储空间,在边缘侧存储空间不足时更具有意义

  3. 易于在线升级,模型更小意味着更加容易传输

  4. 减少内存耗用,更小的模型大小意味着不需要更多的内存

  5. 加快推理速度,访问一次 32 位浮点型可以访问四次 int8 整型,整型运算比浮点型运算更快

  6. 减少设备功耗,内存耗用少了推理速度快了自然减少了设备功耗

  7. 支持微处理器,有些微处理器属于 8 位的,低功耗运行浮点运算速度慢,需要进行 8bit 量化


2.2 量化的缺点


  1. 模型量化增加了操作复杂度,在量化时需要做一些特殊的处理,否则精度损失更严重

  2. 模型量化会损失一定的精度,虽然在微调后可以减少精度损失,但推理精度确实下降

3. 对称和非对称使用

对称量化无需引入偏移量 Z,因此计算量低,缺点是量化后的数据是非饱和的,即有一部分区域不存在量化的数据。

非对称量化因为额外引入了一个偏移量来修正零点,因此需要的计算量会大一点。优点是其量化后的数据是饱和的,即量化前的最小值对应量化范围的最小值,量化后的最大值对应量化范围的最大值。


对于 fp32 的值若均匀分布在 0 左右,映射后的值也会均匀分布,若 fp32 的值分布不均匀,映射后不能充分利用。所以非对称可以处理好 FP32 数据分布不均匀的情况

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

此外还有很多其他的魔改版本,比如激活值饱和量化,通过选择合适的阈值 T 来将一些范围利用少的情况去除,然后再做对称量化。从而也实现对应的饱和量化的操作。下图为魔改版本激活值饱和量化(右图),选择合适的阈值 T。以及原始版本权值非饱和量化(左图)



发布于: 刚刚阅读数: 5
用户头像

芯动大师

关注

凡事预则立,不预则废! 2022-06-01 加入

某公司芯片AE工程师,嵌入式开发工程师,InfoQ签约作者,阿里云专家博主,华为云·云享专家,51CTO专家博主,腾讯云社区优秀共创官。

评论

发布
暂无评论
关于深度学习量化的操作_深度学习_芯动大师_InfoQ写作社区