深度学习模型量化:从 PTQ 到 QAT 的深入解析

在深度学习模型的优化中,量化(Quantization)是一种重要技术,它将浮点模型转换为低精度的整数模型,从而减少计算开销和存储需求。量化的两种主要方法是训练后量化(Post-Training Quantization, PTQ)和量化感知训练(Quantization-Aware Training, QAT)。本文将详细解读PTQ和QAT的原理、具体步骤,并探讨它们的适用场景与差异。

1. 训练后量化(PTQ)
1.1 PTQ 的定义

PTQ是在模型训练完成后,对模型参数和激活值进行量化的技术。由于无需修改训练过程,其实现简单且开销低。然而,PTQ会在量化过程中引入近似误差,可能导致模型精度下降。

1.2 PTQ 的核心原理

PTQ的核心在于将模型的权重和激活值从浮点表示(float32)转换为定点整数表示(int8)。这一转换通过量化公式和反量化公式实现:

  • 量化公式:将浮点数(r)映射到整数(q):
    q=round(rS)+Z q = \text{round}\left(\frac{r}{S}\right) + Z q=round(Sr)+Z

    • S是缩放因子(scale),决定了浮点值与整数值之间的比例。
    • Z是零点(zero-point),用于确保零点的精确表示。
  • 反量化公式:将整数(q)转换回浮点数(r):
    r=S⋅(q−Z) r = S \cdot (q - Z) r=S(qZ)

通过这两个公式,浮点权重和激活值可以被映射为定点整数,同时保留一定的数值精度。

1.3 PTQ 的具体步骤
  1. 模型训练:先用标准的浮点精度训练模型,得到一个性能良好的浮点模型。
  2. 收集激活值的统计信息:使用校准数据集运行模型的前向传播,收集各层激活值的分布统计信息。
  3. 计算缩放因子和零点:根据激活值的最小值和最大值确定量化范围,并计算缩放因子(S)和零点(Z)。
  4. 量化权重和激活值:使用量化公式将浮点权重和激活值转换为定点整数。
  5. 推理优化:量化后的模型直接用于推理时,所有计算都使用整数运算,可通过硬件加速器或优化库(如TensorRT、ONNX Runtime)实现高效推理。
1.4 PTQ 的优缺点
  • 优点
    • 实现简单:无需重新训练模型。
    • 性能提升:通过定点运算显著提高推理速度。
    • 适用于大多数场景:当量化误差较小时,模型精度损失可忽略。
  • 缺点
    • 精度下降:对于某些对精度要求高的任务,PTQ的效果可能不理想,尤其是在激活值动态范围大的情况下。
2. 量化感知训练(QAT)
2.1 QAT 的定义

QAT通过在训练过程中模拟量化操作,让模型逐步适应量化误差,从而在量化后仍能保持较高精度。其训练过程与标准训练类似,但在每次前向传播中引入了量化和反量化操作。

2.2 QAT 的核心原理

QAT的关键操作包括:

  • 前向传播中的量化模拟:插入模拟量化操作,按照PTQ的量化公式进行量化和反量化。
  • 量化感知的反向传播:针对量化的非连续性引入直通梯度估计(Straight-Through Estimator, STE),即对量化的梯度传递直接设为1。
  • 动态范围调整:量化范围((S)和(Z))可以根据权重和激活值分布的变化而动态调整。
2.3 QAT 的具体步骤
  1. 准备浮点模型:使用标准方法训练一个浮点模型作为QAT的初始模型。
  2. 量化感知的前向传播:每次前向传播时,将权重和激活值模拟为量化后的整数值,对权重使用静态量化,对激活值使用动态量化。
  3. 误差优化:通过反向传播计算梯度并更新模型参数,量化误差会逐步被模型参数优化吸收。
  4. 生成量化模型:训练完成后,生成完全量化的模型,在推理过程中使用定点运算。
2.4 QAT 的优缺点
  • 优点
    • 精度较高:显著减少量化带来的精度损失。
    • 更适用于复杂模型:对于大模型或激活值动态范围大的任务,QAT更能保证精度。
  • 缺点
    • 训练开销大:需要重新训练模型,时间和计算成本较高。
    • 复杂性增加:需要调整训练流程,开发成本较高。
3. PTQ 和 QAT 的比较
特性 PTQ QAT
实现难度 简单,无需重新训练 较复杂,需要重新训练
模型精度 可能有所下降 通常与浮点模型精度接近
适用场景 简单模型、对精度要求不高的场景 复杂模型、对精度要求高的场景
计算开销 较低,只需一次量化 高,需要完整的训练过程
4. 定点推理:量化模型的高效运行

无论是PTQ还是QAT,最终都将模型转化为整数表示以支持定点推理。以下是整数矩阵乘法的关键步骤:

  • 量化模型参数:权重(W)和输入(X)都被表示为量化整数,预先计算缩放因子(S_W)和(S_X)。
  • 定点矩阵乘法公式:假设输入(q_X)、权重(q_W)和偏置(b)的量化表示分别为:

qY=round(SY⋅qX⋅qW)+ZY q_Y = \text{round}(S_Y \cdot q_X \cdot q_W) + Z_Y qY=round(SYqXqW)+ZY

  • 整数运算替代浮点运算:通过离线计算量化参数,在推理阶段仅需执行整数运算,进一步提升计算效率。(详细见 Part B)
5. 结论

PTQ和QAT是模型量化的两种核心方法,分别适合不同场景。PTQ实现简单,适合对精度要求较低的场景;而QAT在复杂模型中能更好地平衡性能

更多推荐