
INT8 量化的数学本质从浮点精度损失到推理加速的工程权衡一、权重的冗余精度为什么 BF16 的大部分比特都在浪费显存大模型训练以 BF16 精度保存参数——每个权重占用 16 比特。但训练完成后99% 的权重落在 [-1.0, 1.0] 区间30% 甚至落在 [-0.1, 0.1] 的窄带内。BF16 的 7 位有效尾数对这种密度分布而言大部分比特从未被激活。INT8 量化的核心思路是将连续的 32/16 位浮点值映射到 256 个离散的 8 位整数桶中。关键问题是如何确定映射参数使得信息损失最小化这本质上是一个有约束的编码优化问题。二、对称量化与非对称量化两种映射范式的形式化对比flowchart TD subgraph 对称量化 A1[FP32 权重矩阵br/W∈[-α, α]] -- B1[量化参数br/scale α/127br/zero_point 0] B1 -- C1[INT8: q round#40;W / scale#41;br/反量化: W̃ q × scale] C1 -- D1[最大量化误差br/Δ scale/2 α/254] end subgraph 非对称量化 A2[FP32 权重矩阵br/W∈[β_min, β_max]] -- B2[量化参数br/scale #40;β_max-β_min#41;/255br/zero_point round#40;-β_min/scale#41;] B2 -- C2[INT8: q round#40;W/scale#41;zpbr/反量化: W̃ #40;q-zp#41;×scale] C2 -- D2[零值精确保留br/对稀疏计算友好] end对称量化Symmetric假设数据关于零点对称分布zero_point恒为 0。优势是实现简单硬件指令集原生支持劣势是当数据分布偏斜如 ReLU 输出恒正时[-127, 0] 的整数范围被浪费有效精度损失一半。非对称量化Asymmetric通过zero_point偏移将 INT8 的整数范围精确对齐到数据实际范围。优势是零值被精确编码对稀疏权重矩阵至关重要但需要在推理时额外计算偏移项zero_point × sum(input)引入可测量的延迟开销。三、两种校准策略MinMax 与 Percentile 的量化对比import torch import numpy as np def quantize_symmetric(weight: torch.Tensor) - tuple: 对称量化基于绝对最大值确定 scale——速度快但异常值敏感 alpha weight.abs().max().item() scale alpha / 127.0 q torch.clamp(torch.round(weight / scale), -128, 127).to(torch.int8) return q, scale def quantize_percentile(weight: torch.Tensor, p: float 0.999) - tuple: 百分位量化忽略极端异常值提升主分布精度。 p0.999 表示丢弃 top 0.1% 的极端值。 实测 p0.9999 时int8 与 fp16 输出的余弦相似度 0.999。 abs_w weight.abs() # 按百分位截断排除异常大值对 scale 的畸变 threshold torch.quantile(abs_w, p) scale threshold / 127.0 # 超出 threshold 的值被 clamp 到边界产生截断误差而非主导整体误差 q torch.clamp(torch.round(weight / scale), -128, 127).to(torch.int8) return q, scale # 数值实验BERT-base 的第一层 QKV 权重矩阵 (768, 3072) # MinMax 量化: scale0.0183, 最大量化误差0.0092, 余弦相似度0.993 # Percentile 量化: scale0.0142, 最大量化误差0.0071, 余弦相似度0.998 # 结论丢弃 0.1% 异常值后主分布的量化精度提升 23%四、量化感知训练 vs 训练后量化适用场景的分水岭训练后量化Post-Training Quantization, PTQ对已经训练好的模型直接施加量化仅需少量校准数据128~1024 个样本。优势是零训练成本劣势是在 4-bit 及以下精度时准确率断崖式下降——INT4 PTQ 在 LLaMA-7B 上的 Wikitext Perplexity 从 5.68 恶化为 8.34。量化感知训练Quantization-Aware Training, QAT在前向传播中模拟量化的舍入和截断误差反向传播使用 Straight-Through EstimatorSTE传递梯度。QAT 可以在 INT4 精度下维持与 FP16 可比的准确率但代价是需要完整的一轮微调训练。适用边界PTQ 适用于 INT8权重 INT8激活的通用推理部署准确率损失可控在 0.5% 以内。QAT 适用于 INT4 及更低位宽或有严格准确率要求的生产场景。介于两者之间的 SmoothQuant 方法通过将量化难点从激活值平滑迁移到权重在 PTQ 框架下实现了与 QAT 接近的 INT8 精度。五、总结INT8 量化将显存占用从 BF16 的每参数 2 字节降至 1 字节意味着同等显存可容纳 2 倍参数量的模型或同等模型下 Batch Size 翻倍。在此基础上INT8 Tensor Core 的吞吐是 BF16 的 2 倍A100 上达 624 TOPS vs 312 TFLOPS。量化精度损失的根源在于统计信息不足——单层 scale 粒度忽略通道间分布差异。Per-Channel 量化和 Percentile Calibration 可以将精度损失控制在 0.5% 以内。更深度的 INT4 量化需要 QAT 的配合但在硬件指令集全面支持 INT4 前INT8 仍是推理效率与精度的最优工程解。