【TensoRRT】如何使用trtexec.exe进行INT8量化

以下是使用 trtexec.exe 进行 INT8 量化的详细步骤及注意事项,结合多个实践场景和技术文档整理而成:


一、INT8 量化的核心步骤

1. 准备校准数据集

  • 数据要求​:需准备 100-1000 张代表性数据(如图像),用于统计激活值的动态范围。
  • 格式要求​:支持图像文件(如 .jpg.png)或预处理后的 .npy 文件,需与模型输入形状完全一致(如 BCHW 格式)。
  • 示例数据路径​:
    --calib=./calibration_data  # 指定校准数据目录

2. 模型转换与量化参数设置

  • 基本命令​:
    trtexec.exe --onnx=model.onnx --int8 --saveEngine=model_int8.engine --calib=./calibration_data
  • 关键参数​:
    • --int8:启用 INT8 量化模式。
    • --calib:指定校准数据集路径(需预处理后的数据)。
    • --minShapes/--optShapes/--maxShapes:定义动态输入形状范围(如 input:1x3x224x224)。
    • --best:结合 FP16 和 INT8 混合精度,平衡速度与精度。

3. 校准与缓存生成

  • 校准缓存文件​:
    首次运行时,TensorRT 会生成校准缓存文件(如 calibration.cache),用于后续引擎构建的复用。
  • 校准器类型​:默认使用 IInt8EntropyCalibrator2,适合图像分类任务;其他场景可自定义校准器。

4. 动态输入与混合精度优化

  • 动态输入支持​:若模型支持动态 Batch 或分辨率,需显式指定形状范围:
    --minShapes=input:1x3x224x224 --optShapes=input:8x3x224x224 --maxShapes=input:16x3x224x224
  • 混合精度​:
    添加 --fp16 参数启用 FP16+INT8 混合量化,减少精度损失。

二、性能测试与验证

1. 推理性能测试

  • 参数示例​:
    trtexec.exe --loadEngine=model_int8.engine --iterations=100 --duration=10 --percentile=95
  • 关键指标​:
    • 延迟​:关注 GPU Compute Time(纯推理耗时)。
    • 吞吐量​:通过 --iterations 和 --duration 计算每秒处理量(FPS)。

2. 精度验证

  • 对比测试​:分别运行 FP32、FP16 和 INT8 引擎,对比输出结果(如分类 logits、检测框位置)。
  • 误差容忍度​:通常 INT8 量化精度下降控制在 0.3%-1% 内可接受。

三、常见问题与解决方案

1. 精度下降严重

  • 原因​:校准数据不具代表性或预处理不一致。
  • 解决​:
    • 确保校准数据分布与真实场景一致。
    • 使用 QAT(量化感知训练)优化敏感层。

2. 校准失败或显存不足

  • 原因​:输入形状不匹配或显存限制。
  • 解决​:
    • 显式指定 --workspace=4096(单位:MB)增加显存上限。
    • 检查校准数据与 --optShapes 是否一致。

3. 动态模型量化效果差

  • 原因​:动态输入导致激活值范围不稳定。
  • 解决​:
    • 为每个动态形状生成独立校准缓存。
    • 使用 polygraphy 工具分批次校准。

四、实战案例参考

YOLOv5 INT8 量化效果(Jetson Orin NX)​

精度模式推理耗时显存占用mAP@0.5
FP3237.1 ms800 MB27.8%
INT813.2 ms310 MB27.5%
  • 结论​:INT8 速度提升 2.8 倍,显存节省 61%,精度损失仅 0.3%。

五、工具与资源推荐

  1. Polygraphy​:简化校准流程,支持自定义数据加载脚本。
  2. Nsight Systems​:分析量化后模型各层耗时,定位性能瓶颈。
  3. 官方文档​:
    • TensorRT 开发者指南
    • trtexec 参数详解

通过上述步骤和工具,可高效完成 INT8 量化并验证其效果。若需进一步优化精度,建议结合 QAT 或调整校准策略

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩瀚之水_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值