TensorRT vs ONNX Runtime 量化工具对比评测
作为一名AI部署工程师,最近在项目中需要对YOLOv5模型进行量化压缩,测试了TensorRT和ONNX Runtime两种主流量化方案。
测试环境
- GPU: RTX 3090
- CUDA: 11.8
- TensorRT: 8.5.3
- ONNX Runtime: 1.14.0
- 模型: YOLOv5s (640x640)
TensorRT量化流程
# 1. 构建INT8校准数据集
python calibrate.py --data_dir /calibration_data --output calib_cache.bin
# 2. 使用TensorRT构建量化模型
trtexec --onnx=yolov5s.onnx \
--explicitBatch \
--int8 \
--calib=calib_cache.bin \
--saveEngine=yolov5s_int8.trt
ONNX Runtime量化流程
import onnx
from onnxruntime.quantization import QuantizationConfig, quantize_dynamic
# 动态量化
quantize_dynamic(
model_input='yolov5s.onnx',
model_output='yolov5s_quant.onnx',
per_channel=True,
reduce_range=True
)
性能对比结果
| 工具 | 模型大小 | 推理时间(ms) | 精度损失 |
|---|---|---|---|
| TensorRT INT8 | 12.4MB | 15.2ms | 0.3% |
| ONNX Runtime 动态 | 15.7MB | 18.7ms | 0.8% |
实战踩坑记录
- TensorRT INT8校准数据集必须使用真实推理数据,不能用训练集
- ONNX Runtime量化后模型需要重新测试性能,可能存在兼容性问题
- 两种工具在边缘设备上表现差异明显,TensorRT更适合GPU部署
最终选择TensorRT方案,因为精度损失小且推理速度提升明显。

讨论