【问题标题】:Could not load dynamic library 'libcudart.so.11.0';无法加载动态库“libcudart.so.11.0”;
【发布时间】:2022-06-27 21:14:39
【问题描述】:

我正在尝试将 Tensorflow 2.7.0 与 GPU 一起使用,但我经常遇到同样的问题:

2022-02-03 08:32:31.822484: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /home/username/.cache/pypoetry/virtualenvs/poetry_env/lib/python3.7/site-packages/cv2/../../lib64:/home/username/miniconda3/envs/project/lib/
2022-02-03 08:32:31.822528: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.

此问题已在此处和 github 上多次出现。但是,通常建议的解决方案是 a) 下载丢失的 CUDA 文件,b) 降级/升级到正确的 CUDA 版本,c) 设置正确的LD_LIBRARY_PATH

我已经在我的 PC 上使用了支持 CUDA 的 PyTorch,我没有遇到任何问题。我的nvidia-smi 返回 11.0 版本,这正是我想要的唯一版本。另外,如果我尝试运行:

import os
LD_LIBRARY_PATH = '/home/username/miniconda3/envs/project/lib/'
print(os.path.exists(os.path.join(LD_LIBRARY_PATH, "libcudart.so.11.0")))

它返回True。这正是错误消息中LD_LIBRARY_PATH 的一部分,显然,Tensorflow 看不到libcudart.so.11.0(在那里)。

有什么东西很明显是我遗漏的吗?

nvidia-smi 输出:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.156.00   Driver Version: 450.156.00   CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+

nvcc:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    首先: 你能找出“libcudart.so.11.0”在哪里吗 如果您在错误堆栈中丢失了它,您可以在下面用您的单词替换“libcudart.so.11.0”:

    sudo find / -name 'libcudart.so.11.0'
    

    我系统中的输出。此结果显示“libcudart.so.11.0”在系统中的位置:

    /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudart.so.11.0
    

    如果结果什么都没有,请确保你已经安装了cuda或者其他必须安装在你系统中的人员。

    其次,添加环境文件的路径。

    edit /etc/profile
    sudo vim /etc/profile
    append path to "LD_LIBRARY_PATH" in profile file
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.1/targets/x86_64-linux/lib
    make environment file work
    source /etc/profile
    

    你也可以参考这个link

    您可以尝试的第三件事是:

    conda install cudatoolkit
    

    【讨论】:

      【解决方案2】:

      为 tf2.8 安装正确版本的 cuda 11.3 和 cudnn 8.2.1。基于此博客https://www.tensorflow.org/install/source#gpu 使用以下命令。

      • conda 卸载 cudatoolkit
      • conda 安装 cudnn

      然后导出 LD 路径 - 找到位置后的动态链接加载器路径 这个sudo find / -name 'libcudnn' 系统能够找到所需的库并使用 GPU 进行训练。

      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/usr/miniconda3/envs/tf2/lib/

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        在带有 2 个 nvidia gpus (1080ti / titan rtx) 的 arch linux x86_64 上遇到 tensorflow 2.9 和 cuda 11.7 的相同问题并解决了:

        尊重兼容性矩阵并不是绝对必要的(cuda 11.7 vs 11.2 所以次要的高级版本)。但是python 3版本根据tensorflow comp matrix(3.10到3.7)降级了。 请注意,您可以安装多个 cuda 版本并通过 linux 上的符号链接对其进行管理。 (win应该有点不同)

        使用 conda 和 python 3.7

        进行设置
        • sudo pacman -S base-devel cudnn
        • conda activate tf-2.9
        • conda uninstall cudatoolkit && conda install cudnn

        我还必须为另一个库更新 gcc(超出主题)

        • conda install -c conda-forge gcc=12.1.0

        根据 tf-gpu 文档添加了用于调试的 sn-p

        import tensorflow as tf
        tf.config.list_physical_devices('GPU')
        print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
        

        我现在看到检测到 2 个 gpu 而不是 0,训练时间除以 10。 nvidia-smi 报告 ram 使用率已达到最大值,并且功率级别从 9W 提高到 150W,以验证 gpu 的使用情况(另一个处于空闲状态)。

        根本原因:cudnn 未在系统范围内安装。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-04
          • 1970-01-01
          • 2021-05-02
          • 2012-01-26
          • 2019-04-03
          • 2016-08-25
          • 2017-03-03
          • 2017-07-29
          相关资源
          最近更新 更多