Post-Training Quantization, PTQ
Post-Training Quantization(PTQ) 是 模型训练完成后,对其参数(权重 & 激活值)进行量化 的方法,目的是 减少存储占用 & 提高推理速度,同时尽可能保持模型精度。
相比于 量化感知训练(Quantization-Aware Training, QAT),PTQ 不需要重新训练模型,而是 直接对训练好的模型进行量化转换,适用于 推理优化。
为什么要用 PTQ?
现代深度学习模型(如 Transformer、CNN)通常采用 FP32(32-bit 浮点数) 存储权重和计算数据,这会带来以下问题:
- 存储占用大 💾 → 如 LLaMA 7B(FP32 模型)占用约 28GB 显存,难以在消费级 GPU 上运行。
- 计算速度慢 🐢 → 浮点计算(FP32)较慢,使用整数运算(INT8、INT4)可以加速推理。
- 硬件受限 ⚡ → 移动设备(手机、树莓派)或嵌入式系统无法运行 FP32 模型。
✨ PTQ 通过将 FP32 转换为 INT8、INT4 等低精度格式,能有效 减少模型大小 & 提高推理速度,适用于 部署阶段。
PTQ 量化流程
PTQ 主要包括以下步骤:
1️⃣ 训练完成(Pretrained Model)
- 先用 FP32 训练出模型,得到高精度模型。
2️⃣ 统计激活分布(Calibration)
- 选择 一部分校准数据(Calibration Data)来分析 激活值的分布情况。
- 例如,计算 ReLU、GELU 等激活函数输出的 最大值 & 最小值。
3️⃣ 量化权重(Weight Quantization)
- 线性量化(Linear Quantization):
- 计算 缩放因子(scale) 和 零点(zero-point)。
- 量化公式:
4️⃣ 量化激活值(Activation Quantization)
- 使用 动态或静态量化 方法,将 FP32 激活值转换为 INT8 或更低精度。
5️⃣ 推理(Inference with Quantized Model)
- 用量化后的权重 & 激活值 替换原 FP32 模型,在 CPU/GPU/TPU 上进行高效推理。