一、INT8推理概述:为什么需要量化?

大家好,我是你们的老朋友。今天咱们聊聊INT8推理。

说实话,我刚入行那会儿,对量化这事也挺抵触的。你想啊,模型训练得好好的,FP32精度多高啊,干嘛非要砍成INT8?这不是自废武功吗?

后来我踩了个坑。有个客户要求把模型部署到边缘设备上,那设备内存只有512MB。FP32模型一加载,直接OOM。嗯,从那以后,我再也不敢小看量化了。

1.1 为什么需要INT8量化?

说白了,就三个字:快、省、小。

  • 快:INT8计算比FP32快2-4倍。我实测过,在T4显卡上,ResNet-50的INT8推理比FP32快了将近3倍。
  • 省:内存带宽省4倍。你想想看,同样读一批数据,INT8只要读FP32的1/4大小。
  • 小:模型体积缩小4倍。从500MB变成125MB,部署起来轻松多了。

核心观点:INT8量化不是锦上添花,而是很多场景下的刚需。尤其是边缘计算、移动端、IoT设备,没有量化,很多模型根本跑不起来。

1.2 量化原理:对称 vs 非对称

量化到底在做什么?我习惯用一个比喻来解释。

想象你有一把尺子,FP32的刻度非常密,能精确到小数点后很多位。INT8的刻度就粗多了,只有256个格子。量化,就是把FP32的数值映射到这256个格子里。

映射方式有两种:对称量化和非对称量化。

对称量化

对称量化,就是零点在0的位置。公式很简单:

Q = round(x / scale)

其中scale = max(|x|) / 127。注意这里用的是127,不是128。为什么?因为INT8的范围是[-128, 127],对称量化只用到[-127, 127],留一个-128给特殊情况。

我在项目中遇到过一个问题:如果模型权重分布很对称,比如均值为0,那对称量化效果很好。但如果分布偏了,比如ReLU后的激活值全是正数,对称量化就浪费了一半的表示范围。

非对称量化

非对称量化引入了零点(zero point),公式变成:

Q = round(x / scale) + zero_point

scale = (max - min) / 255,zero_point = round(-min / scale)。

这样就能充分利用INT8的256个格子了。对于ReLU后的激活值,非对称量化明显更优。

对比项 对称量化 非对称量化
零点位置 固定在0 可偏移
表示范围利用率 低(分布偏时) 高
计算复杂度 低 稍高(需处理零点)
适用场景 权重(通常对称) 激活值(通常非对称)

我的建议:权重用对称量化,激活值用非对称量化。这是业界最常用的组合,我在多个项目里验证过,效果稳定。

1.3 精度与性能的权衡

量化不是免费的午餐。你省了内存和计算,但精度会掉。问题是:掉多少?

我做过一个实验,拿MobileNetV2在ImageNet上测试:

  • FP32:Top-1准确率 71.8%
  • INT8(校准集100张):71.2%
  • INT8(校准集500张):71.5%

你看,只掉了0.3%-0.6%。对于很多应用来说,这个损失完全可以接受。

但有些模型就没这么幸运了。我记得有一次部署一个轻量级检测模型,量化后mAP直接掉了5个点。排查了半天,发现是某个层的激活值分布太广,量化误差被放大了。

避坑指南:我曾经遇到过量化后模型直接输出NaN的情况。后来发现是某个层的scale值计算时,分母出现了0。所以一定要检查校准数据是否覆盖了所有可能的输入范围。

影响精度损失的因素主要有三个:

  1. 模型结构:大模型(如ResNet-152)量化损失通常小于小模型(如MobileNet)
  2. 校准数据集:校准集要能代表真实数据分布。我一般用500-1000张图片做校准
  3. 量化粒度:逐层量化 vs 逐通道量化。逐通道量化精度更高,但计算更复杂

1.4 知识体系总览

下面这张图,是我自己总结的INT8量化知识体系。你看一眼,就能明白今天讲的内容在整个框架中的位置。

INT8量化知识体系 INT8量化推理 为什么需要量化? 量化原理 精度与性能权衡 推理加速 内存节省 模型体积缩小 对称量化 非对称量化 校准方法 精度损失 性能提升 权衡策略 核心目标:在可接受的精度损失下, 最大化推理速度和内存效率

这张图把INT8量化的核心脉络理清楚了。你从根节点往下看,三个分支对应我们今天讲的三个核心问题。每个分支下面还有更细的子问题,后面几章我们会逐一展开。

1.5 小结

好了,今天的内容就到这里。总结一下:

  • INT8量化是为了解决模型部署中的速度、内存、体积三大问题
  • 对称量化和非对称量化各有适用场景,权重用对称,激活用非对称是我个人的最佳实践
  • 精度和性能的权衡是量化的核心,校准数据集的选择往往决定了最终效果

下一章,我们会深入讲解量化感知训练(QAT)和训练后量化(PTQ)的具体实现。到时候我会带大家手写一个量化工具,保证你学完就能用。

想要更多资料,联系可可