TRT推理AttributeError: ‘NoneType‘ object has no attribute ‘create_execution_context‘出错原因与解决

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())这一行在执行完之后,engineNone,如下图所示,说明此时就已经出问题了,程序并没有能够成功的从engine文件反序列化出模型。因此执行到engine.create_execution_context()时,自然就找不到这个接口了。
在这里插入图片描述
由于我印象中的这个engine文件之前是可以正常使用的,因此我首先怀疑的是环境问题,检查一下tensorrt安装的没有问题;然后就考虑是不是我生成的engine文件的问题,然后重新生成了个engine文件就正常了。如下图所示,总之engine不能是None
在这里插入图片描述
结论:重新生成或更换个engine/trt文件,检查环境

3.相似问题

以下两个链接与本文问题比较相似,但解决方法不同

相似问题1
相似问题2

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 这个报错意味着在创建执行上下文时传递的参数为 None,导致没有成功创建执行上下文。这可能是因为你没有正确地初始化或配置TensorRT上下文环境。你可以检查一下参数输入是否正确,或者重新初始化一个新的TensorRT执行环境来解决问题。同时,也可以尝试查看其它错误信息或者日志以更好地定位问题所在。希望能对你有所帮助。 ### 回答2: 这个错误是因为在编译tensorrt存在某个NoneType对象缺少create_execution_context属性。要解决这个问题,可以考虑以下几个步骤: 首先,检查你使用的TensorRT版本是否正确。确保使用的是最新版本,并且与你正在使用的硬件和驱动程序兼容。 其次,确保你的环境中已正确安装了所有必需的依赖项。在编译和使用TensorRT时,可能需要安装CUDA和cuDNN等库。确保这些库的版本与你使用的TensorRT版本相匹配。 然后,检查你的代码是否正确。可能会有一些错误或遗漏导致了这个问题。请仔细检查你的代码中与创建execution context有关的部分。确保你正确地引入了TensorRT库,并正确地使用了create_execution_context函数。 最后,如果上述方法都没有解决问题,你可以查阅TensorRT的官方文档、论坛或社区以寻求帮助。在这些地方,你可以寻找到关于该错误的更多信息,以及其他用户可能遇到的类似问题的解决方案。 总之,当遇到'NoneType' object has no attribute 'create_execution_context'这个错误时,你需要检查TensorRT版本、安装依赖项、代码的正确性,并寻求相关资源的帮助,以解决该错误。 ### 回答3: 这个错误可能是因为你没有正确地配置TensorRT库或者版本不兼容导致的。 首先,确保你已经正确地安装了TensorRT库并且添加了正确的环境变量。你可以使用以下命令来验证TensorRT是否正确安装: ``` import tensorrt as trt ``` 如果没有报错,则表示TensorRT库正确安装。 另外,这个错误也可能是因为你的TensorRT版本与你的代码不兼容。不同版本的TensorRT有不同的API和功能支持。 你可以尝试更新TensorRT库到最新版本,然后重新编译你的代码。或者,你可以查看你当前使用的TensorRT版本的文档,确认是否有`create_execution_context`这个方法。 如果你确定你的代码和TensorRT版本是兼容的,但仍然遇到这个错误,那可能是因为你的代码逻辑或者引用了不存在的对象。你可以检查你的代码,确保在调用`create_execution_context`之前是否有一个有效的对象被正确地创建。 总之,解决这个错误需要你仔细检查和确保正确配置TensorRT库、兼容版本和代码逻辑的正确性。如果问题仍然存在,你可以参考TensorRT的官方文档、论坛或者向TensorRT的开发者寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值