上篇blog讲了trtexec和onnx_graphsurgeon两个工具,一个用于将onnx转化为trt模型,另一个用于对onnx模型进行修改。这篇blog讲polygraphy和nsight systems,前者用于进行模型优化以及结果验证,后者用于性能分析。
polygraph
polygraph有API库,也有命令行工具,命令行工具有多个模式:
- run模式:推理模型,得到运行细节,包括推理时间,各层的推理时间等信息,可以看作一个推理测试器
- debug模式:检测onnx模型转trt模型中的错误,并将模型分为可转换部分和不可转换部分。
- data模式:调整分析输入输出的数据和模型权重
- convert模式:基本等同于run
- surgeon模式:对模型进行优化
run模式官方文档
例子:
polygraphy run model-02.plan \ # 推理该模型,这里也可以用onnx模型
--trt \ # 使用TensorRT推理,--onnxrt是指用onnxruntime推理
--input-shapes 'tensorX:[4,1,28,28]' \ # 输入的shape,tensorX是对应输入的名称
--verbose \ # 生成详细信息
> result.log 2>&1 # 将详细信息重定向到result.log
polygraphy run modelB.onnx \
--trt \
--plugins ./AddScalarPlugin.so \ # 添加插件,tensorRT插件再下篇blog讲
> result-07.log 2>&1
surgeon模式官方文档
例子:
polygraphy surgeon sanitize yolov5s_v7.onnx \
--fold-constant \
-o modelA-FoldConstant.onnx \
> result.log
inspect模式文档
例子:
polygraphy inspect capability yolov5s.onnx > result_capability.log # 查看tensorRT是否支持该模型
其他用到再写,不在工具学习上做无用功
nsight systems
官方文档
nv官方教程地址。
四个工具的整体工作流程:
1、使用polygraphy判断tensorRT是否支持,如果支持,进行优化,不支持则处理不支持的层
2、如果不支持,使用onnx_graphsurgeon对模型进行修改
3、使用trtexec进行测试,查看推理效果,如果推理时间不理想,使用nsight systems查看哪里时间影响最大
4、如果精度不理想,使用polygraphy查看整体模型中每一层的输出,查看输出误差较大的层,进行处理
6、得到一个工作状态良好的模型,用TensorRT进行推理部署。
还是那句话,不要在工具上费工夫,用到啥再学啥。