权重量化
权重是静态张量,可根据其分布计算 per-tensor 或 per-channel scale。输出通道间幅度差异明显时,合适的粒度通常有助于降低误差。
SHELF 02 / TENSORRT · INT8 QUANTIZATION
从 TensorRT 的量化表示、Post-Training Quantization(后训练量化,简称 PTQ)与显式 Quantize/Dequantize(量化/反量化,简称 Q/DQ)出发,理解 INT8 如何在保留关键精度的同时降低部署资源压力。
01 / WHY INT8 MATTERS
训练通常以 FP32、BF16 或 FP16 承担数值稳定性,而推理阶段最常见的瓶颈往往是权重读取、中间激活、内存带宽和目标设备上的计算吞吐。INT8 用 8 位带符号整数近似浮点张量,能缩小存储与数据搬运开销,并在硬件具备相应 kernel 时提高吞吐。TensorRT 的角色不是简单转换位宽,而是把模型图编译为面向 NVIDIA GPU 的推理 engine。
后训练量化在原模型训练结束后,用代表性输入估计张量范围和 scale。它比 Quantization-Aware Training(量化感知训练,简称 QAT)更容易接入已有模型,但它无法凭空恢复因截断、舍入和离群值造成的信息损失。正确的流程应先建立 FP16 或 FP32 基线,再对任务指标和目标硬件进行对照验证。
02 / INT8 REPRESENTATION
TensorRT 的 INT8 量化使用比例因子将高精度值映射到有限整数范围。量化会引入两类相互冲突的误差:scale 太大时每个量化格点太粗,舍入误差变大;scale 太小时动态范围太窄,大值会被截断。校准本质上是在这两类误差之间找折中。
xq = round(clip(x / s, −128, 127))x 是高精度张量,s 是 scale,xq 是 INT8 表示。实现中的舍入规则、对称性和粒度应以实际 TensorRT 版本和导出框架为准。
x̂ = xq · s实际计算图常在不同位置插入 Q/DQ 节点。这样模型明确表达从高精度到低精度、再回到高精度的位置,而不是把精度选择完全交给运行时猜测。
权重是静态张量,可根据其分布计算 per-tensor 或 per-channel scale。输出通道间幅度差异明显时,合适的粒度通常有助于降低误差。
激活依赖真实输入分布,因此 PTQ 需要代表性数据。校准集覆盖不足时,线上长尾输入可能出现大幅截断或精度退化。
并非所有层都应该强行 INT8。对输出敏感、缺少高效 kernel 或量化误差明显的层可保留在 FP16 / FP32,整体仍可能取得较好的端到端收益。
03 / PTQ & EXPLICIT Q/DQ
较早的 TensorRT INT8 workflow 可以通过 calibration table 和隐式量化让 builder 决定哪些层使用 INT8。当前官方文档将显式 Q/DQ 作为更具控制力、也更面向未来的路径:在框架中完成 PTQ 或 QAT,再导出含 Q/DQ 节点的 ONNX 图,让 TensorRT 按已编码的量化边界构建 engine。
锁定模型、输入 shape、预后处理和 FP16/FP32 任务指标。没有基线,就无法判断量化带来的质量损失或真实性能收益。
用接近目标业务的数据运行模型,收集激活分布并估计 scale。数据数量不是唯一标准,覆盖输入类型和长尾场景更关键。
在 ONNX 中以 QuantizeLinear / DequantizeLinear 表达量化语义。需要检查 Q/DQ 放置是否阻断融合,或遗漏敏感层的精度保护。
TensorRT 根据图、精度、shape profile 与 GPU 特性选择实现。最终 engine 才是应该用 profiler 和真实请求测量的对象。
固定输入输出与算子语义
代表性数据估计 scale / 敏感层
将量化边界写入计算图
目标 GPU 测量质量、延迟和资源
04 / BENEFITS & LIMITS
FP32 到 INT8 的单元素存储理论上减少为四分之一,但 engine 中可能仍包含 FP16/FP32 层、元数据、workspace 和前后处理。端到端表现还受到算子覆盖、动态 shape、batch、内存传输和 GPU 架构影响。因此,数值压缩不等于线性速度提升。
权重和中间激活的字节数通常下降,可缓解显存与内存带宽压力。实际 Engine 体积还取决于未量化层和序列化元数据。
若主要热点算子被映射到高效 INT8 kernel,吞吐与延迟可能改善。要在目标 shape、真实 batch 和实际并发下报告分位数,而不是只给一次均值。
比较任务指标、逐层误差和长尾样本。出现明显退化时,可重新校准、调整 Q/DQ、提高粒度,或保留敏感模块为高精度。
TensorRT 的量化 API 与推荐做法会随版本演进。当前文档已将隐式量化标为弃用方向,并推荐显式 Q/DQ 模型;阅读旧教程时必须先确认 TensorRT 版本、ONNX 导出路径与目标 GPU 的支持范围。
技术结论以原始论文、官方仓库和对应版本文档为准。工程解释用于帮助理解,不替代许可证、支持矩阵与目标设备上的实验验证。