tensorRT還提供了一套可用于engine
生成過程中debug
的工具,包括Polygraphy
、ONNX GraphSurgeon
和PyTorch-Quantization
。這些小工具用處很大,值得花時間進一步研究。
Debug方法示例
polygraphy
Polygraphy是TensorRT官方提供的一系列小工具合集,是一個非常強大的Debug工具。
可以使用Polygraphy檢查ONNX或TRT的網絡結構,可以debug engine,還可以利用Polygraphy查看ONNX與TRT模型的輸出差異等。
例如利用Polygraphy查看ONNX與TRT模型的輸出差異
# 使用默認參數
polygraphy run polygraphy_debug.engine --trt# 加載onnx推理得到的結果,并設置絕對誤差
polygraphy run polygraphy_debug.engine --trt --load-outputs onnx_res.json --abs 1e-4# 使用fp16和cublas策略庫生成engine,并與onnx推理得到的結果作比較
polygraphy run net_bs8.onnx --trt --onnxrt --tactic-sources CUBLAS --fp16 --rtol 1e-03 --atol 1e-03 # 保存 data_loader生成的輸入和運行得到的結果
polygraphy run net_bs8.onnx --onnxrt --val-range [0,1] --save-inputs net_input.json --save-outputs onnx_res.json
# 對onnx推理得到的結果進行保存,同時運行trt engine,并與onnx推理得到的結果作比較
polygraphy run net_bs8.onnx --onnxrt --load-inputs gpen_input.json --save-outputs onnx_res.json
polygraphy run net_bs8_fp32.engine --model-type engine --trt --load-outputs onnx_res.json --abs 1e-4
--load-inputs net_input.json# 采用二分策略,使用fp16和cublas策略庫按層數迭代生成engine,并加載onnx推理得到的結果作比較,以判斷設置fp16時誤差出現的層的范圍
polygraphy debug precision net_bs8.onnx --fp16 --tactic-sources cublas --check polygraphy run polygraphy_debug.engine --trt --load-outputs onnx_res.json --abs 1e-1
誤差在設置范圍內時,打印結果如下:
# 使用polygraphy debug precision工具搜索Layer精度設置,判斷FP16的engine運行結果與onnx結果的誤差是否在誤差范圍內,不移除運行中生成的engine文件
polygraphy debug precision net_bs8.onnx --fp16 --tactic-sources cublas --check polygraphy run polygraphy_debug.engine --trt --load-inputs net_input.json --load-outputs onnx_res.json --abs 1e-1 --no-remove-intermediate# POLYGRAPHY_ARRAY_SWAP_THRESHOLD_MB=0表示結果交換到硬盤上,不放在內存中,mark all 表示對比所有節點結果
POLYGRAPHY_ARRAY_SWAP_THRESHOLD_MB=0 polygraphy run net_bs8.onnx --trt --onnxrt --tactic-sources CUBLAS --fp16 --rtol 1e-03 --atol 1e-03 --trt-outputs mark all --onnx-outputs mark all# 比較單個或者多個Tensor的結果
polygraphy run net_bs8.onnx --onnxrt --trt --tactic-sources CUBLAS --fp16 --rtol 1e-03 --atol 1e-03 --trt-outputs 151 --onnx-outputs 151polygraphy debug run net_bs8.onnx --onnxrt --check polygraphy run net_bs8.engine --trt --tactic-sources CUBLAS --fp16 --rtol 1e-03 --atol 1e-03 --trt-outputs 153 197 --onnx-outputs 153 197# 檢查模型
polygraphy inspect model net_bs8.engine --mode=basic --display-as=trt
polygraphy inspect model net_bs8.onnx --mode=full --display-as=trt
參考: https://blog.csdn.net/tracelessle/article/details/120656484