trtexec 远不止转 engine,它其实是 TensorRT 的"瑞士军刀",主要有三大类功能:构建、性能测试、调试分析。
1. 构建引擎
除了基本转换,还有很多常用构建选项:
# 精度控制
trtexec --onnx=lprnet.onnx --saveEngine=lpr_fp16.engine --fp16
trtexec --onnx=lprnet.onnx --saveEngine=lpr_int8.engine --int8 # 无校准数据时精度会差
# 动态 shape(比如批量可变)
trtexec --onnx=lprnet.onnx --saveEngine=lpr.engine \
--minShapes=input:1x3x24x94 \
--optShapes=input:8x3x24x94 \
--maxShapes=input:16x3x24x94
# 提高优化等级(构建更慢,推理更快)
trtexec --onnx=lprnet.onnx --saveEngine=lpr.engine --builderOptimizationLevel=5
2. 性能基准测试(benchmark)——这可能是它最常用的功能
不保存引擎也可以直接测速,或者加载已有引擎测:
# 加载已有 engine 测性能,不用重新构建
trtexec --loadEngine=y8n_fp32.engine
# 控制测试时长和迭代
trtexec --loadEngine=y8n_fp32.engine --duration=10 --warmUp=500
# 更接近真实部署的测法
trtexec --loadEngine=y8n_fp32.engine --useCudaGraph --useSpinWait
输出会给你 latency(含 90/95/99 分位数)、throughput、GPU 计算时间、H2D/D2H 拷贝耗时等,是在 Orin 上评估模型能不能满足帧率要求的标准做法。
3. 调试与分析
# 只验证 ONNX 能否解析成功,不构建(很快)
trtexec --onnx=lprnet.onnx --skipInference
# 逐层性能分析,看哪一层是瓶颈
trtexec --loadEngine=lpr.engine --dumpProfile --separateProfiling
# 导出逐层信息和耗时到 JSON,方便可视化分析
trtexec --loadEngine=lpr.engine --exportProfile=profile.json --exportLayerInfo=layers.json
# 用真实数据喂进去并 dump 输出,验证结果对不对
trtexec --loadEngine=lpr.engine --loadInputs=input:input.bin --dumpOutput
# 详细日志,排查解析/tactic 选择问题
trtexec --onnx=lprnet.onnx --verbose
其他实用功能:--timingCacheFile=cache.bin 保存 tactic 计时缓存,下次构建同类模型快很多(Orin 上构建慢,这个很有用);--profilingVerbosity=detailed 配合 Nsight Systems 做深度 profiling;--best 让它自动尝试所有精度组合选最快的。
评论
0