大模型端侧部署的关键算术:FP32 如何映射到低比特整数

本文从数学角度解释大模型量化如何将 FP32 权重和激活映射到低比特整数,并分析 S、Z、量化误差与信噪比,说明 8-bit 甚至 4-bit 量化为何可行。

分类:大模型

端侧部署为何依赖量化

掘金刊载的一篇技术文章系统梳理了模型量化的数学原理。文章指出,量化不是为了“更好”,而是为了让模型在手机、MCU、NPU 等端侧设备上“能跑”。它之所以可行,是因为量化误差在数学上可控;这也是 8-bit 甚至 4-bit 量化之后,模型精度损失通常并不严重的原因。文章的内容框架与 MIT 6.5940 / TinyML 课程中由韩松(Song Han)讲授的 Quantization 一讲一致。

在量化之前,模型通常使用 IEEE 754 单精度浮点数:1 个符号位、8 个指数位、23 个尾数位,数值范围约 ±3.4 × 10³⁸,相对精度约 2⁻²³ ≈ 1.2 × 10⁻⁷,约 7 位有效数字。文章强调,神经网络权重是训练出来的统计量,不是物理常数,并不需要 7 位有效数字级别的精度,这为低比特量化提供了冗余空间。

S 与 Z:把实数装进整数刻度

量化的核心,是把实数 r 映射为整数 q。反量化公式为 r = S · (q − Z),即整数经过缩放和平移还原为实数;量化公式为 q = clamp(round(r / S) + Z, q_min, q_max),即实数经过缩放、四舍五入和零点平移后变成整数。clamp 是限幅函数,用于把结果夹进合法整数区间,防止溢出回绕;被夹掉的值会产生裁剪误差,这也是校准阶段需要优化的对象。

文章特别说明,S 是缩放因子,Z 是零点,但 Z 不是浮点数,而是与 q 同类型的整数。Z 的计算式为 Z = round(q_min − r_min / S),因此它能用同样的 n 比特存储。这样一来,r = S(q − Z) 的运算过程中只有一个浮点乘法,其余都是整数运算,这正是量化能够提升推理效率的关键。

以一个具体例子说明:若数据范围 r ∈ [−0.5, 1.0],采用 uint8 量化,整数范围为 [0, 255],则 S = (1.0 − (−0.5)) / 255 = 1.5 / 255 ≈ 0.005882,Z = round(0 − (−0.5) / 0.005882) = 85。此时,实数 0 对应的整数就是 85。由于 r = S·q − S·Z 是一条直线,它既允许对称分布(Z = 0),也允许非对称分布(Z ≠ 0),例如 ReLU 输出的非负激活。

数据范围怎么取:min-max、对称与裁剪校准

S 的计算核心可以概括为“数据范围 ÷ 整数范围”。整数范围由位宽决定,真正需要选择的是数据范围。若直接使用 min-max 全范围,S = (r_max − r_min) / (q_max − q_min)。例如,某层 ReLU 激活范围为 [0, 6.0],使用 uint8 时,S = 6 / 255 ≈ 0.023529。这种方式不会裁剪任何值,但对离群值极其敏感:如果绝大多数值落在很小范围内,只有一个极端值,S 也会被撑大,导致多数样本的量化误差被放大。

对称量化则强制 Z = 0,映射退化为 r = S · q。此时 α = max(|r_min|, |r_max|),S = α / q_max;有符号情况下,q_max = 2^(n−1) − 1。文章指出,int8 对称量化常用 127 而不是 128,是为了让 ±q_max 对称,−128 被闲置。这个代价很小,但可以简化 GEMM 等矩阵运算。相比之下,非对称量化可以通过非零零点表示偏态数据。

为了进一步控制误差,量化不一定覆盖全部范围,而是故意裁掉少量极端值,用更小步长换取整体精度。设裁剪阈值 T,只量化 [−T, T] 内的值,超过 T 的值直接夹到端点,此时对称量化下 S = T / q_max。T 的选取是核心,文章给出两条准则:

  • MSE 准则:选择 T,使总均方误差最小,平衡裁剪误差和量化误差。
  • KL 散度准则:选择 T,使量化前后的分布差异最小,这是 NVIDIA TensorRT 的做法。

对于高斯或拉普拉斯分布的权重,最优 T 的经验值约在 ±(2.5 ~ 4)σ。文章还提到,PTQ 流程中常见用 100~1000 张校准图片跑前向,目的就是统计每层激活分布,从而确定 S 和 Z。

误差边界与信噪比:低比特为何通常可用

文章进一步推导了量化误差的边界。量化后的值记为 Q(r),误差为 ε = Q(r) − r。在数值未被裁剪的情况下,可以证明 |ε| ≤ S/2。证明思路是令 t = r/S + Z,则量化相当于对 t 四舍五入;四舍五入到最近整数的距离不会超过 1/2 个刻度,再乘回实数步长 S,误差最大就是 S/2。若 r 超出量化范围,被 clamp 夹到端点,则会产生无界裁剪误差。

在 Bennett 均匀量化模型下,如果输入数据足够“乱”、步长足够小,量化误差 ε 可近似看作在 [−S/2, S/2] 上均匀分布。此时误差期望为 0,方差为 S²/12,标准差为 S/√12 ≈ 0.289·S。以 int8、范围 [−1, 1] 为例,S = 1/127 ≈ 0.00787,σ_ε = 0.00787 / √12 ≈ 0.00227,最大误差 S/2 ≈ 0.00394;典型误差约为满量程的 0.23%,最坏情况约为 0.39%。这组数字解释了为什么 8-bit 量化在许多模型任务中已经足够。

信噪比方面,SNR = P_signal / P_noise。对零均值信号,功率可用方差表示,因此 S²/12 可以作为噪声功率的估计。dB 是对数比值单位:功率比写作 10 · log₁₀(P / P₀),幅度比写作 20 · log₁₀(A / A₀)。文章同时提醒,当误差均匀分布假设不成立时,S²/12 只能作为粗略估计,实际误差需要依赖校准过程度量。

对大模型端侧部署而言,这组公式把量化从经验性压缩技巧变成了可计算工程问题。量化需要同时确定 S、Z、T 和校准方法,并在误差、位宽与硬件条件之间取得平衡。它把浮点训练得到的模型权重和激活,转换成误差可控的整数表达,使模型更容易在手机、MCU、NPU 等边缘硬件上运行。

原创文章,作者:点点,如若转载,请注明出处:https://www.dian8dian.com/da-mo-xing-duan-ce-bu-shu-de-guan-jian-suan-shu-fp32-ru-he

Like (0)
点点的头像点点
Previous 13小时前
Next 14 mins ago

相关推荐