摘要
端侧设备算力弱、内存小,直接部署几百兆浮点模型几乎不可行------这是 AI 落地绕不开的坎。量化把 FP32 压成 INT8,体积缩到四分之一且几乎不掉精度,正是破局关键。本篇从仿射映射讲起,理清对称与非对称、量化粒度的取舍,拆解精度损失来源,帮你建立量化的核心直觉,为后续 PTQ、QAT 实战打底。
1. 端侧部署的困境
当我们试图把神经网络塞进手机、嵌入式设备或 IoT 终端时,马上就会撞上三重约束:
-
算力:移动端处理器(如 ARM Cortex-A 系列)的浮点算力通常在几十到上百 GFLOPS,而桌面级 GPU 可达数十 TFLOPS,差距约两个数量级。
-
内存带宽:LPDDR 带宽典型值为 15--50 GB/s,桌面 GPU 的 HBM 带宽可达 1--2 TB/s。模型推理的瓶颈往往是搬运权重而非计算本身。
-
功耗:持续高负载计算会触发温控降频,电池供电设备尤为敏感。
以 ResNet-50 为例:FP32 模型体积约 98 MB,在 iPhone 12 的 A14 芯片上单次推理约 15 毫秒,功耗约 0.8W。当模型规模增大到 ViT-Large(约 1.2 GB),移动端几乎无法运行------加载即 OOM。
量化的价值就在这里:把 FP32 权重和激活值压缩到 INT8,模型体积直接缩到四分之一,内存带宽需求同步降低,定点运算在专用 NPU/DSP 上还能拿到更优的能效比。
2. 量化的数学定义
说白了,量化本质就是浮点数到整数的一次仿射映射:
r = s × (q - z)
其中:
-
r:原始浮点值
-
q:量化后的整数值
-
s(scale):浮点缩放因子,决定映射精度
-
z(zero-point):浮点 0.0 对应的整数值,用于精确定位零值
反量化(推理时恢复)为:
q = round(r / s) + z
来个具体例子:假设某层权重的值域为 -2.0, 3.0,量化为 INT8(值域 -128, 127),那么:
s = (3.0 - (-2.0)) / (127 - (-128)) ≈ 0.0196
z = round(127 - 3.0 / 0.0196) ≈ -26
原始值 1.5 被量化为:round(1.5 / 0.0196) + (-26) = 77 - 26 = 51。反量化回去就是 51 × 0.0196 = 0.9996,和原始值差了约 0.5------这就是不可恢复的舍入误差。
3. 对称量化 vs 非对称量化
对称量化直接令 z = 0,强制量化区间关于零点对称。公式简化为:
r = s × q
优点:推理时反量化只需一次乘法,不用减法,硬件实现更高效。代价是:当数据分布不对称时(比如 ReLU 输出的激活值恒 ≥ 0),一半的 INT8 值域就被白白浪费了。
非对称量化保留 z ≠ 0,把 INT8 的值域完整利用起来。公式跟前节一样。推理时需要"乘法 + 减法",计算开销略增,但精度更高。
工程上怎么选?一条经验规则:权重通常用对称量化(权重大多近似正态分布,对称性好);激活值则要看激活函数------ReLU 后的激活值适合非对称,GELU/SiLU 后则根据校准数据再定。
4. 量化粒度
量化粒度决定了 scale 和 zero-point 的共享范围,直接左右精度与效率的平衡:
4.1 Per-Tensor 量化
整个张量共享一套 (s, z)。实现简单,推理计算路径统一。问题是张量内不同通道的值域差异可能很大------一个通道权重集中在 -0.1, 0.1,另一个通道却跑到 -2.0, 2.0,per-tensor 一量化,小值通道几乎被压成零。
4.2 Per-Channel 量化
对权重的每个输出通道(卷积核 / 线性层输出维度)独立算一组 (s, z)。比如一个 64 × 3 × 3 × 3 的卷积核,per-channel 会为 64 个输出通道各算一组参数。精度比 per-tensor 好得多,代价是推理时每个通道的反量化要独立做一次乘法。
4.3 Per-Group 量化
把通道内进一步分组,每组 32、64 或 128 个元素独立量化。这是大模型 4-bit 量化的标准做法,在精度和效率之间找到了工程上的甜点。分组越小精度越高,但量化参数的存储开销也越大。当组大小 = 128 时,参数开销只增加 1/128,几乎可以忽略。
5. 量化误差从哪来
量化的精度损失,其实是三个因素叠加的结果:
-
舍入误差:连续浮点值映射到离散整数刻度,每个值最多损失 ±0.5 × s。误差会在多层网络里累积,每层都逃不掉。
-
截断误差:确定量化范围 r_min, r_max 时,超出边界的离群值会被硬截断。比如一个权重张量 99.9% 的值在 -0.5, 0.5,偏偏个别值飙到 ±10------按全范围量化,s 太大、内部值全被压碎;按 99.9% 范围截断,又会损失极端值的信息。
-
分布不匹配:量化默认数据均匀分布,可实际激活值往往是指数分布或长尾分布,量化刻度跟数据密度对不上,误差自然就来了。
后续整个系列都会围绕怎么压住这三点误差展开------PTQ 用校准数据优化截断策略,QAT 通过训练让模型主动适应量化误差,动态量化则在运行时统计、绕开激活分布的预校准假设。
6. 总结
量化的核心是一次仿射映射,由此衍生出对称与非对称的选择、per-tensor / per-channel / per-group 三种粒度的取舍,以及舍入、截断、分布不匹配三大精度损失来源。掌握这些,你就能判断何时量化、用什么粒度、误差从何而来。端侧部署已成 AI 落地主战场,量化是从"能跑"到"跑得好"的关键一跃,技术价值与工程需求都在快速放大。下一篇我们进入训练后量化(PTQ)实战。