TensorRT 推理AttributeError: ‘NoneType’ object has no attribute 'create_execution_context’出错原因与解决
1.问题描述
出错代码段如下所示:
def load_model(engine_path):
f = open(engine_path, "rb")
runtime = trt.Runtime(trt.Logger(trt.Logger.WARNING))
engine = runtime.deserialize_cuda_engine(f.read())
context = engine.create_execution_context()
return engine, context
当执行到context = engine.create_execution_context()
这一行时,出现AttributeError: 'NoneType' object has no attribute 'create_execution_context'
错误
2.出错原因及解决
在出错的这一行打个断点,发现engine = runtime.deserialize_cuda_engine(f.read())
这一行在执行完之后,engine
是None
,如下图所示,说明此时就已经出问题了,程序并没有能够成功的从engine文件反序列化出模型。因此执行到engine.create_execution_context()
时,自然就找不到这个接口了。
由于我印象中的这个engine
文件之前是可以正常使用的,因此我首先怀疑的是环境问题,检查一下tensorrt
安装的没有问题;然后就考虑是不是我生成的engine
文件的问题,然后重新生成了个engine文件就正常了。如下图所示,总之engine
不能是None
:
结论:重新生成或更换个engine/trt
文件,检查环境
3.相似问题
以下两个链接与本文问题比较相似,但解决方法不同