PaddleDetection 运行时报错解决方案

报错信息

Traceback (most recent call last):
  File "/PaddleDetection/deploy/pipeline/pipeline.py", line 1103, in <module>
    main()
  File "/PaddleDetection/deploy/pipeline/pipeline.py", line 1090, in main
    pipeline.run_multithreads()
  File "/PaddleDetection/deploy/pipeline/pipeline.py", line 170, in run_multithreads
    self.predictor.run(self.input)
  File "/PaddleDetection/deploy/pipeline/pipeline.py", line 488, in run
    self.predict_video(input, thread_idx=thread_idx)
  File "/PaddleDetection/deploy/pipeline/pipeline.py", line 668, in predict_video
    res = self.mot_predictor.predict_image(
  File "/PaddleDetection/deploy/pptracking/python/mot_sde_infer.py", line 478, in predict_image
    inputs = self.preprocess(batch_image_list)
  File "/PaddleDetection/deploy/pptracking/python/det_infer.py", line 140, in preprocess
    input_tensor.copy_from_cpu(inputs[input_names[i]])
  File "/root/.pyenv/versions/3.9.16/lib/python3.9/site-packages/paddle/fluid/inference/wrapper.py", line 38, in tensor_copy_from_cpu
    self.copy_from_cpu_bind(data)
RuntimeError: (PreconditionNotMet) Cannot load cudnn shared library. Cannot invoke method cudnnGetVersion.
  [Hint: cudnn_dso_handle should not be null.] (at /paddle/paddle/phi/backends/dynload/cudnn.cc:60)

可能的原因

在 Nvidia 驱动正常安装,nvidia-smi 正常显示的情况下,在 Anaconda 环境下跑常规的深度学习框架(如 TensorFlow, PyTorch, PaddlePaddle 等)时,一般不需要额外安装 CUDA 或 cuDNN 工具,而是直接通过 conda 安装 cudatoolkit 即可。具体的 cudatoolkit 版本选择,一般按照 nvidia-smi 的显示,选择与其一致的 cudatoolkit 版本即可。有些时候特殊的包需要特殊版本的 cudatoolkit(比如 PaddlePaddle),那么按包的要求来即可。

解决方法

第一步:检查共享库中是否有 libcudnn.so 和 libcublas.so

在终端中输入以下命令:

ls /usr/lib | grep lib

如果没有 libcudnn.solibcublas.so 文件,您需要通过以下命令找到它们的位置:

locate libcudnn.so
locate libcublas.so

在我的例子中,libcudnn.so 位于 /usr/local/cuda-12.1/targets/x86_64-linux/include/libcudnn.so.8.9.1,而 libcublas.so 位于 /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcublas.so.12.1.3.1

第二步:将它们添加到共享库中

  1. 进入 /usr/lib 文件夹:

    cd /usr/lib
    
  2. 创建 libcudnn.solibcublas.so 的符号链接:

    sudo ln -s /usr/local/cuda-12.1/targets/x86_64-linux/include/libcudnn.so.8.9.1 libcudnn.so
    sudo ln -s /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcublas.so.12.1.3.1 libcublas.so
    
  3. 检查它们是否已添加到共享库中:

    ls /usr/lib | grep lib
    

如果可以使用上述命令找到 libcudnn.solibcublas.so,那么您就不会再遇到此问题。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐