神经网络模型量化综述(下)

通过训练,神经网络就可以使用更低精度的数据格式(包括浮点、定点和整数)进行推理。低精度数据格式提供了几个性能优势:

  • 许多处理器通过 low-bit 格式提供更高吞吐量的数学管道,这可以加快计算密集型的运算,如卷积和矩阵乘法;

  • 低精度的数据格式可以减少了内存带宽压力,提高了带宽有限计算的性能;

  • 低精度的数据格式可以降低内存大小的需求,这可以提高缓存利用率以及内存系统操作的其他方面。

本文主要研究神经网络模型推理的整数量化,其中网络模型在推理时使用整数权重和激活。表 1 列出了 NVIDIA Turing GPU 体系结构中各种数据类型相对的张量运算吞吐量和带宽减少倍数。与 FP32 中的相同操作相比,在 INT8 类型上执行的数学密集型张量运算的速度可以提高 16 倍。与 FP32 数据类型相比,受内存限制的运算,INT8 可以提高 4 倍的速度,因为它的位数更小。其他处理器,如 TPU,带有 VNNI 指令的英特尔 CPU 和许多新兴的加速器设计都为 INT8 操作提供了显著的加速。

affec81b359e7a3fd84ac966f65a25fb.png
表 1 NVIDIA Turing GPU 架构中张量运算的低精度数据类型的优势

1. 量化基础

均匀量化可分为两步:

  • 首先,选择要量化的实数的范围,限制在该范围之外的值;

  • 其次,将实值映射到可由量化表示的相应位宽的整数(将每个映射的实值四舍五入到最接近的整数值)。

在预先训练的浮点神经网络中启用整数运算需要两个基本操作:

  • 将实数转换为量化的整数表示(例如从 FP32 到 INT8);

  • 将数字从量化的整数表示转换为实数(例如从 INT32 转换为 FP16)。

1.1 映射范围

为选择用于量化的可表示实值的范围, 为有符号整数表示的位宽。均匀量化将输入值 转换为 整数范围内,其中超出范围的输入被截断到最近边界值。由于我们只考虑均匀变换,变换函数只有两种选择: 及其特殊情形 ,其中 ,,。

1.1.1 非对称量化

非对称量化映射实值 到 一个 有符号整数 。公式 (1) 和 (2) 定义了非对称变换函数:

c8acb60addc0853229b5f13f926c2fad.png

其中 是缩放因子, 是零点,即实值零映射到的整数值。在 INT8 的情况下, 和 。 四舍五入为整数值,因此实数零可精确表示为整数。因此,需要对实际可表示范围 进行轻微调整。

公式 (3) 和 (4) 定义了量化运算:

b0362afc62e3d004b524e152d3ac4ca8.png

其中 四舍五入到最接近的整数。图 1a 显示了实值到具有非对称量化的 INT8 表示的映射。其中, 是可表示的整数与所选实数范围的比值。

c678aad8d967a2d48f7288f27b25f4cb.png
图1 实值到 INT8 的量化映射

公式 (5) 显示相应的去量化函数,该函数计算原始实数值输入的近似值。

e77343a21a5f02e4c1f9d52a6112579f.png

1.1.2 对称量化

对称量化仅通过缩放变换执行量化范围映射,输入范围和整数范围都是对称的。对于 INT8,使用整数范围 [−127, 127],选择不使用值 -128 以支持对称。对于 INT8 量化,丢失 256 个可表示值中的一个是无关紧要。但对于较低的位宽整数量化,其可表示值和对称性之间的权衡应该重新评估。

图1b 说明了通过对称量化将实数值映射到 INT8。公式 (

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux基金会AI&Data基金会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值