[TRT] [E] 1: [context.cpp::setStream::121] Error Code 1: Cudnn (CUDNN_STATUS_MAPPING_ERROR)

在使用tensorrt部署yolov5时运行到context.execute_async(batch_size=self.batch_size, bindings=bindings, stream_handle=stream.handle)报错: [TRT] [E] 1: [context.cpp::setStream::121] Error Code 1: Cudnn (CUDNN_STATUS_MAPPING_ERROR)
我的系统是ubuntu20,显卡为rtx3060,tensorrt版本是8.4.3.1,cuda版本是11.6,cudnn采用的是8.4.2。一开始遇到这个错误时以为是cudnn版本不对,按照下载时的推荐更换了好多版本,包括cuda版本也更换了好几次,依然没有解决,想请了解的能指导一二,万分感谢!

小魔女参考了bing和GPT部分内容调写:
这个错误可能是由于tensorrt和cuda、cudnn的版本不兼容引起的,建议你检查一下当前的tensorrt版本是否与cuda和cudnn的版本兼容,可以参考官方文档,查看当前版本是否支持你的显卡。另外,你也可以尝试更换tensorrt版本,以确保tensorrt和cuda、cudnn的版本兼容。
回答不易,记得采纳呀。

“Devil组”引证GPT后的撰写:

  • 这个错误通常是由于使用的cuDNN版本与TensorRT版本不兼容导致的。虽然已经更换了cudnn版本,但是可能还需要检查TensorRT和CUDA版本是否与您使用的cuDNN版本兼容。

该回答引用ChatGPT

这个错误通常是由于TensorRT和CUDNN版本不兼容或者TensorRT没有正确初始化所导致的。以下是一些可能的解决方案:

检查TensorRT和CUDNN的版本兼容性。TensorRT 8.4.3.1需要CUDNN 8.2或8.1。您可以尝试更换CUDNN版本,以确保与TensorRT兼容。

确保您已正确初始化TensorRT引擎和CUDA流。您可以使用以下代码来初始化:



runtime = trt.Runtime(TRT_LOGGER)
engine = load_engine(TRT_LOGGER, plan_file)
context = engine.create_execution_context()
stream = cuda.Stream()

其中load_engine()是您的代码加载TensorRT引擎的函数。

确保您的模型是正确的。您可以尝试在其他环境中运行模型,例如在TensorFlow中,以确保模型本身没有问题。

检查您的硬件是否受损。您可以尝试在其他计算机或GPU上运行代码,以确定是否有硬件故障。

你看下这个参数,batch size是不是太大,可以尝试减少batch size 或者torch.backends.cudnn.enabled = True,可以尝试设置torch.backends.cudnn.enabled = False

引用GPT:这个错误通常是由于CUDA和CuDNN版本之间不兼容或不匹配导致的。在您的情况下,您已经更换了多个版本,但问题仍然存在。以下是一些可能的解决方案:

确认CUDA和CuDNN版本匹配。根据TensorRT的官方文档,您使用的TensorRT版本需要与您的CUDA和CuDNN版本匹配。您已经使用了TensorRT 8.4.3.1和CUDA 11.6,但您的CuDNN版本是8.4.2。建议将您的CuDNN版本更改为8.4.3.1,以确保版本兼容性。

检查CUDA和CuDNN是否正确安装并配置。请确保CUDA和CuDNN正确安装并配置在系统中。建议通过运行CUDA示例代码来验证CUDA是否正确安装。同样,您可以通过在Python中导入CuDNN并执行一些简单的操作来验证CuDNN是否正确安装。

检查您的显卡是否支持所需的CUDA和CuDNN版本。请确保您的显卡支持所需的CUDA和CuDNN版本。建议查看您的显卡规格并确认它们符合TensorRT、CUDA和CuDNN的要求。

尝试重新安装TensorRT、CUDA和CuDNN。如果上述解决方案都无法解决问题,请尝试重新安装TensorRT、CUDA和CuDNN,并确保它们都是最新版本。如果问题仍然存在,请考虑更换您的显卡或与TensorRT的官方支持团队联系,以获取更多帮助。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这个错误一般是由于TensorRT与CUDA或CUDNN版本之间的兼容性问题引起的,可以尝试以下操作:

  1. 确认您的TensorRT版本与CUDA和CUDNN版本兼容。可以在NVIDIA的官方文档中查看版本兼容性。

  2. 检查是否正确安装了CUDA和CUDNN,可以通过nvcc -V和cat /usr/local/cuda/version.txt命令来检查CUDA版本,并通过cat /usr/include/x86_64-linux-gnu/cudnn_v*.h | grep CUDNN_MAJOR -A 2检查CUDNN版本。

  3. 确认您的Yolov5模型是否正确转换为TensorRT格式。如果模型不正确,则您可能会看到类似于"unsupported layer type detection_output_TRT"的错误消息。

  4. 尝试使用更小的batch_size,有时候会因为显存限制而导致出现映射错误。

  5. 如果您的GPU上安装了多个版本的CUDA和CUDNN,建议使用export CUDA_HOME=/usr/local/cuda-和export LD_LIBRARY_PATH=/usr/local/cuda-/lib64:$LD_LIBRARY_PATH来设置CUDA和CUDNN路径,以确保使用正确的库。

  6. 如果上述都没有解决问题,请提供完整的代码以及相关的配置信息,以便更好地帮助您解决问题。
    如果我的回答解决了您的问题,请采纳!