模型量化基础:为什么需要量化、FP32与INT8的精度差异、对称量化与非对称量化、量化感知训练(QAT)与训练后量化(PTQ)

大家好,我是你们的老朋友。今天咱们聊聊模型量化。

说实话,我刚入行那会儿,觉得量化这事儿挺玄乎的。不就是把32位浮点数砍成8位整数吗?能有多大区别?后来在项目里被精度掉坑里摔过几次,才真正明白——量化不是简单的“砍一刀”,而是一门平衡艺术。

好,咱们正式开始。

为什么需要量化?

先问个问题:你手头有个训练好的模型,在服务器上跑得飞快,精度也漂亮。但一放到嵌入式设备上,内存爆了,推理慢得像蜗牛。怎么办?

答案就是量化。

量化说白了,就是用更少的比特数来表示模型的参数和激活值。我见过最夸张的例子:一个ResNet-50模型,FP32版本要98MB,量化到INT8后直接缩到25MB。你想想看,在只有几百KB内存的MCU上,这差别就是“能不能跑”和“根本跑不了”的区别。

量化的好处,我总结为三点:

  • 模型体积缩小:INT8模型只有FP32的1/4大小。存储和带宽压力骤减。
  • 推理速度提升:整数运算比浮点运算快得多。在ARM Cortex-M系列上,INT8推理能快2-4倍。
  • 功耗降低:整数运算单元更省电。对电池供电的设备来说,这是刚需。

核心观点:量化不是可选项,而是边缘部署的必选项。没有量化,很多模型根本塞不进嵌入式设备。

FP32与INT8的精度差异

FP32用32位表示一个数,INT8只用8位。精度差距有多大?

我举个例子。FP32能表示的最小正数大约是1.4e-45,最大能到3.4e38。INT8呢?只能表示-128到127的整数,或者0到255的无符号整数。这中间差了十几个数量级。

但别慌。模型推理时,我们关心的不是单个数值的精度,而是输出结果的相对排序。说白了,分类任务里,只要“猫”的概率仍然比“狗”高,精度就没丢。

数据类型 位宽 表示范围 精度 典型场景
FP32 32 ±1.4e-45 ~ ±3.4e38 训练、高精度推理
FP16 16 ±6.0e-8 ~ ±6.5e4 移动端GPU推理
INT8 8 -128 ~ 127 或 0 ~ 255 边缘设备推理

我在项目中遇到过一个问题:一个语义分割模型,量化后输出图像出现了明显的“块状效应”。排查下来,是因为某些层的激活值分布特别不均匀,量化后信息丢失严重。后来加了逐通道量化才解决。

我的经验:量化后精度下降超过1%就要警惕了。先检查激活值的分布,再考虑换量化方案。

对称量化与非对称量化

这是量化里最基础也最容易搞混的概念。我尽量说清楚。

对称量化:量化范围关于0对称。比如FP32的[-1.0, 1.0]映射到INT8的[-128, 127]。0在两边都是0。

非对称量化:量化范围不关于0对称。比如FP32的[0.0, 1.0]映射到INT8的[0, 255]。0映射到某个整数,不一定是0。

你可能会问:什么时候用对称,什么时候用非对称?

我个人习惯:权重用对称量化,激活值用非对称量化

为什么?

  • 权重通常关于0对称分布(想想看,正负权重都有意义)。对称量化能充分利用INT8的表示范围。
  • 激活值经过ReLU后全是非负的。用非对称量化可以把[0, max]映射到[0, 255],不浪费表示能力。

我曾经在一个项目里,所有层都用了对称量化。结果激活值分布偏到一边,量化后信息丢失严重。改成非对称量化后,精度直接回升了0.5%。

注意:非对称量化需要额外存储零点(zero point),计算时多一次减法操作。在极端资源受限的设备上,这个开销不能忽略。

量化感知训练(QAT)与训练后量化(PTQ)

这两个是量化的两种主流实现方式。我分别说说。

训练后量化(PTQ):模型训练完后,直接对权重和激活值做量化。简单粗暴,不需要重新训练。

优点:快,不需要训练数据(或者只需要少量校准数据)。

缺点:精度损失可能较大,尤其是小模型或敏感层。

量化感知训练(QAT):在训练过程中模拟量化效果,让模型学会适应量化误差。

优点:精度损失小,通常能接近FP32水平。

缺点:需要重新训练,耗时耗力。

我个人的建议是:

  • 如果模型比较大(比如MobileNetV2以上),先试PTQ。精度够用就直接用。
  • 如果模型很小(比如TinyML级别的),或者PTQ后精度掉得厉害,上QAT。

我曾经在一个语音唤醒词检测项目里,PTQ后精度从95%掉到82%。换成QAT后,精度回到了93.5%。虽然训练多花了3天,但效果值得。

避坑指南:QAT训练时,一定要在验证集上监控量化模拟的精度。我见过有人训练了10个epoch,结果量化模拟精度反而下降了——因为学习率没调好。

知识体系总览

下面这张图,是我自己梳理的量化知识框架。你看一眼,心里就有谱了。

模型量化知识体系 为什么需要量化? 体积小 · 速度快 · 功耗低 FP32 vs INT8 表示范围 · 精度损失 量化方法 对称 vs 非对称 实现方式 训练后量化(PTQ) vs 量化感知训练(QAT) 选择策略 大模型 → 先试PTQ 小模型 / 精度敏感 → 上QAT 边缘设备部署

这张图把量化从“为什么”到“怎么做”串起来了。你顺着箭头看,思路就清晰了。

总结一下

量化是边缘AI部署的必修课。今天咱们聊了:

  • 为什么需要量化——体积、速度、功耗,三座大山压着,不量化不行。
  • FP32与INT8的精度差异——范围差十几个数量级,但推理任务更关心相对排序。
  • 对称量化与非对称量化——权重用对称,激活用非对称,这是我的经验之谈。
  • QAT与PTQ——大模型先试PTQ,小模型或精度敏感的上QAT。

嗯,今天就到这儿。量化这块内容不少,但掌握了这些基础,后面讲具体部署工具链的时候,你会觉得轻松很多。


专注资料整理