模型量化基础(对称 / 非对称量化)

46 阅读6分钟

模型量化基础(对称 / 非对称量化)

一、核心主题

围绕模型量化的基础概念、核心方法(对称量化与非对称量化)展开,解析量化的本质目标、技术原理及关键操作流程,同时提及量化后计算优化与异常处理,为后续神经网络量化及 PyTorch 实操奠定理论基础。

二、核心知识点梳理

(一)模型量化的基础认知

  1. 量化的定义:将模型中高精度的浮点型数据(如 32bit 浮点数,FP32)转换为低精度的整数型数据(如 8bit 整数,INT8、4bit 整数,INT4)的过程,核心作用于模型的参数(权重)和激活值(计算过程中生成的中间数据)。

  2. 量化的核心目标

  • 减少存储占用:低精度整数数据体积远小于浮点数(如 INT8 仅为 FP32 的 1/4),可大幅降低模型文件大小,便于部署到存储资源有限的设备(如边缘设备、嵌入式设备);

  • 降低显存消耗:模型加载和运行时,低精度数据占用更少显存,支持更大规模模型在普通硬件上运行;

  • 加快推理速度:整数运算的计算效率高于浮点运算,尤其适配硬件(如 CPU、GPU)的整数计算单元,可提升模型推理吞吐量。

(二)核心量化方法:对称量化与非对称量化

1. 对称量化(Symmetric Quantization)
  • 核心逻辑:以 “0” 为中心,通过寻找浮点数据的绝对值最大值确定量化范围,确保正负区间对称,仅需计算 “缩放系数”,无需额外处理 “零点”,流程简单高效。

  • 关键步骤

  1. 统计待量化浮点数据(如某一层的权重)的绝对值最大值,记为max_val

  2. 确定目标整数精度的范围(如 INT8 的范围为[-127, 127],避免溢出),计算缩放系数scale = max_val / 127

  3. 量化过程:将每个浮点数x按公式x_quant = round(x / scale)转换为整数,完成精度压缩;

  4. 反量化过程:在模型计算或精度验证时,按公式x_dequant = x_quant * scale将整数映射回浮点数,恢复近似原始数据。

  • 优缺点

    • 优点:计算简单,无需存储零点信息,显存 / 存储开销更低;

    • 缺点:若数据分布不对称(如激活值多集中在正值区域),会浪费部分整数取值范围,可能导致精度损失。

2. 非对称量化(Asymmetric Quantization)
  • 核心逻辑:不依赖 “0” 中心,通过匹配浮点数据的实际最值范围与整数的取值范围,引入 “零点”(zero point)校正偏移,更贴合非对称分布的数据(如多数激活值、部分权重)。

  • 关键步骤

  1. 统计待量化浮点数据的最小值min_val和最大值max_val

  2. 确定目标整数精度的范围(如 INT8 的范围为[0, 255],常用无符号整数适配非负数据),计算缩放系数scale和零点zero_point

  • scale = (max_val - min_val) / (255 - 0)(整数范围差值除以浮点范围差值);

  • zero_point = round(-min_val / scale)(通过零点抵消浮点数据的最小值偏移,使浮点最小值映射到整数最小值);

  1. 量化过程:按公式x_quant = round(x / scale + zero_point)转换为整数,确保浮点范围完整映射到整数范围;

  2. 反量化过程:按公式x_dequant = (x_quant - zero_point) * scale恢复浮点数。

  • 优缺点

    • 优点:能更充分利用整数取值范围,适配非对称数据分布,精度通常高于对称量化;

    • 缺点:计算复杂度更高,需额外存储零点信息,显存 / 存储开销略增。

3. 两种量化方法对比
对比维度对称量化非对称量化
核心参数仅需缩放系数(scale)需缩放系数(scale)+ 零点(zero_point)
数据分布适配适合对称分布(如多数权重)适合非对称分布(如多数激活值)
计算复杂度
存储开销低(无需存储零点)略高(需额外存储零点)
精度表现对称数据精度优,非对称数据易损失非对称数据精度优,适配场景更广

(三)量化后的计算优化与异常处理

  1. 量化后矩阵乘法优化
  • 核心原理:模型中核心计算(如权重与输入的矩阵乘法)可直接基于低精度整数进行(如 INT8 矩阵乘),无需全程反量化到浮点数;

  • 优势:整数矩阵乘的计算周期更短,硬件(如 CPU 的 AVX 指令集、GPU 的 Tensor Core)对整数运算的并行支持更好,可显著减少推理时间。

  1. 量化异常值处理
  • 异常值影响:浮点数据中可能存在少量极端值(如噪声导致的超大 / 超小值),若直接参与量化,会拉大max_valmin_val的差距,降低scale,导致多数正常数据量化后精度损失;

  • 处理思路:通过 “截断”(将超出合理范围的异常值限制在min_val/max_val内)或 “统计滤波”(基于均值 ±3 倍标准差等规则剔除异常值),确保量化范围聚焦于核心数据分布。

  1. 量化力度选择
  • 量化力度(如 4bit、8bit、16bit)需平衡 “精度” 与 “效率”:

    • 高力度量化(如 4bit):存储 / 显存节省更多,但精度损失风险高,适合对精度要求较低的场景(如边缘设备快速推理);

    • 低力度量化(如 16bit):精度接近浮点,适合对精度要求高的场景(如大模型微调、关键任务推理);

    • 8bit 量化:兼顾精度与效率,是当前最常用的量化力度,多数模型在 8bit 下精度损失可控制在 5% 以内。

三、总结

  1. 模型量化的核心是 “用低精度整数替代高精度浮点数”,目标是优化存储、显存与推理速度,需根据数据分布选择对称或非对称量化;

  2. 对称量化简单高效,适合对称分布数据;非对称量化引入零点,适配非对称数据,精度更优,需根据场景灵活选择;

  3. 量化不仅是 “精度压缩”,还需结合计算优化(如整数矩阵乘)和异常值处理,才能在效率与精度间找到平衡;