问题描述
在python下使用TensorRT将onnx模型转化为序列化engine模型时输出如下错误:
[TRT] [E] 10: [optimizer.cpp::computeCosts::2011] Error Code 10: Internal Error (Could not find any implementation for node MaxPool_73.)
解决思路1
按照网上的其他帖子的解决思路–增大工作空间 (不适用于本案例)
# python脚本
import tensorrt as trt
trt_logger = trt.Logger(trt.Logger.INFO)
builder = trt.Builder(trt_logger)
config = builder.create_builder_config()
config.max_workspace_size = 2 << 30 # 就是增大这个数 比如更改为: 4 * (2 << 30)
# ...TensorRT/bin/trtexec 可执行文件
trtexec --onnx=/path/to/load/.onnx --saveEngine=/path/to/save/.engine --workspace=1024
## 通过更改 --workspace 增大工作空间,例如:--workspace=4096
解决思路2
python脚本中显示enable了TacticSource(策略源)导致含有node MaxPool_73实现的策略源没有enable
# python脚本
## 原本为:
config.set_tactic_sources(1 << int(trt.TacticSource.CUBLAS))
## 将其注释掉,因为默认TensorRT中默认enable所有策略源
# config.set_tactic_sources(1 << int(trt.TacticSource.CUBLAS))
更多关于TensorRT的TacticSource介绍请参考官方文档:
tensorrt.TacticSource
tensorrt.IBuilderConfig.set_tactic_sources