【问题标题】:Could not load dynamic library 'cudart64_101.dll' on tensorflow CPU-only installation无法在仅 tensorflow CPU 安装上加载动态库“cudart64_101.dll”
【发布时间】:2020-05-06 11:05:51
【问题描述】:

我刚刚通过pip install tensorflow 安装了最新版本的 Tensorflow,每当我运行程序时,我都会收到日志消息:

W tensorflow/stream_executor/platform/default/dso_loader.cc:55] 无法加载动态库 'cudart64_101.dll'; dlerror: 找不到 cudart64_101.dll

这很糟糕吗?如何修复错误?

【问题讨论】:

    标签: python python-3.x tensorflow keras tensorflow2.0


    【解决方案1】:

    张量流 2.1+

    发生了什么事?

    使用new Tensorflow 2.1 release,默认的tensorflow pip 包包含CPU 和GPU 版本的TF。在以前的 TF 版本中,找不到 CUDA 库会发出错误并引发异常,而现在库会动态搜索正确的 CUDA 版本,如果找不到,则会发出警告(W 开头代表警告,错误有一个 E(或 F 代表致命错误)并回退到 CPU-only 模式。实际上,这也是在警告之后立即作为信息消息写入日志(请注意,如果您的最低日志级别高于默认值,您可能看不到信息消息)。完整的日志是(强调我的):

    2020-01-20 12:27:44.554767:W tensorflow/stream_executor/platform/default/dso_loader.cc:55] 无法加载动态库“cudart64_101.dll”; dlerror: 找不到 cudart64_101.dll

    2020-01-20 12:27:44.554964: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] 如果您的机器上没有设置 GPU,请忽略上面的 cudart dlerror。

    我应该担心吗?我该如何解决?

    如果您的机器上没有支持 CUDA 的 GPU,或者如果您不关心没有 GPU 加速,则无需担心。另一方面,如果您安装了 tensorflow 并想要 GPU 加速,请检查您的 CUDA 安装(TF 2.1 需要 CUDA 10.1不是 10.2 或 10.0)。

    如果你只是想摆脱警告,你可以adapt TF's logging level 来抑制警告,但这可能有点矫枉过正,因为它会使所有警告静音。


    Tensorflow 1.X 或 2.0:

    您的 CUDA 设置已损坏,请确保您安装了正确的版本。

    【讨论】:

    • 谢谢。但我要补充一点:如果您从 Microsoft Store 安装了 python,即使您已经完成了所需的步骤,您仍然可能会看到这个问题!见my answer here
    【解决方案2】:

    要在 TensorFlow 2.1 中安装 GPU 支持的先决条件:

    1. 安装最新的 GPU 驱动程序。
    2. 安装CUDA 10.1
      • 如果 CUDA 安装程序报告“您正在安装较旧的驱动程序版本”,您可能希望选择自定义安装并取消选择某些组件。实际上,请注意,TensorFlow 不需要与 CUDA 捆绑的软件,包括 GeForce Experience、PhysX、显示驱动程序和 Visual Studio 集成。
      • 另请注意,TensorFlow 需要特定版本的 CUDA 工具包,除非您从源代码构建;对于 TensorFlow 2.1 和 2.2,当前版本为 10.1。
    3. 安装 cuDNN。
      1. Download cuDNN CUDA 10.1 的 v7.6.4。这将要求您注册 NVIDIA 开发者计划。
      2. 解压到合适的位置,并将 bin 目录添加到您的 PATH 中。
    4. 通过pip install tensorflow安装tensorflow。
    5. may need to restart your PC

    【讨论】:

    • 谢谢。但我要补充一点:如果您从 Microsoft Store 安装了 python,即使您已经完成了所需的步骤,您仍然可能会看到这个问题!见my answer here
    • 6.修改 PATH 变量后重新启动 IDE。
    • 注意:我有点困惑,在安装最新的 GPU 驱动程序后,nvidia-smi 向我展示了CUDA Version: 11.2(TF 2.4 需要 CUDA 11),但我真正安装和使用的 CUDA 版本TF 为 10.1。因此,切勿跳过 CUDA 安装步骤,并始终确保您的 PATH 设置正确。
    • 哇,重新启动我的电脑本可以为我节省 2 小时。谢谢:)
    【解决方案3】:

    TensorFlow 2.3.0 在 CUDA 11 上运行良好。但您必须安装 tf-nightly-gpu(在安装 tensorflow 和 CUDA 11 之后): https://pypi.org/project/tf-nightly-gpu/

    试试:

    pip install tf-nightly-gpu
    

    之后,您将在控制台中收到消息:

    I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cudart64_110.dll
    

    【讨论】:

    • 谢谢!我以为我将不得不回滚到 10.1。
    • 谢谢! “pip install tf-nightly”对我有用。
    • 谢谢!这是我尝试超过 15 小时后唯一的解决方案。
    • 必须做四个步骤:1)安装tf-nightly-gpu,2)使用自定义安装安装最新的nvidia cuda工具包(11.2+),但不要覆盖较新的驱动程序(取消选择),3)重启终端. 4) 如果上述步骤失败,请重新安装 Nvidia 驱动程序。例如nvidia-smi 结果为Failed to initialize NVML: GPU access blocked by the operating system
    • 2021 年 3 月,tensorflow 新版本号称与 cuda 11 兼容,我觉得用 nightly tensorflow-gpu 版本不太好,听起来像是 hack。尽管如此,这是唯一有效的解决方案
    【解决方案4】:

    我用另一种方式解决了这个问题。 首先,我从link 安装了 cuda 10.1 工具包

    我选择安装程序类型(exe(本地))并以自定义模式安装 10.1 意味着(没有 Visual Studio 集成,NVIDIA PhysX,因为之前我安装了 CUDA 10.2,所以自动安装了所需的依赖项)

    安装后,从以下路径 (C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin) ,就我而言,我复制了“cudart64_101.dll”文件并粘贴到 (C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin)。

    然后导入 Tensorflow 就很顺利了。

    注意抱歉英语不好

    【讨论】:

    • 我在使用 Conda env 时遇到了同样的问题。解决方案是相同的:将警告中提到的 Dll 从“...\Anaconda\Envs\\Library\bin”复制到“...\Anaconda3\Library\bin” 所需的 Dll 应该在os 知道的路径。
    • 请注意:将文件夹 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin 添加到 PATH 也可以(并且是推荐的方法,以避免弄乱 CUDA 安装)
    • developer.nvidia.com/… 最好使用 NVIDIA 网站下载 .dll 文件。
    【解决方案5】:

    在我的例子中,tensorflow 安装正在寻找 cudart64_101.dll

    cudart64_101 的 101 部分是 Cuda 版本 - 这里 101 = 10.1

    我下载的是11.x,所以我系统上的cudart64版本是cudart64_110.dll

    这是错误的文件!! cudart64_101.dll ≠ cudart64_110.dll

    解决方案

    https://developer.nvidia.com/下载Cuda 10.1

    安装(我的 NSight Visual Studio 集成崩溃了,所以我把它关掉了)

    安装完成后,您应该有一个 Cuda 10.1 文件夹,并且在 bin 中系统抱怨缺少 dll

    检查10.1的bin文件夹的路径是否注册为系统环境变量,所以加载库的时候会检查

    如果系统没有立即拾取路径,您可能需要重新启动

    【讨论】:

    • 确认安装 CUDA 11.0 后需要重新启动才能让 tensorflow 找到它(cudart64_xyz.DLL 需要 CUDA 版本 xy.z,在我的情况下,xyz=110,而不是 101)
    【解决方案6】:

    conda 环境中,这就是解决我的问题的方法(我错过了cudart64-100.dll

    1. 下载自 dll-files.com/CUDART64_100.DLL

    2. 把它放在我的 conda 环境中 C:\Users\<user>\Anaconda3\envs\<env name>\Library\bin

    这就是全部!您可以仔细检查它是否正常工作:

    import tensorflow as tf
    tf.config.experimental.list_physical_devices('GPU')
    

    【讨论】:

    • 例如,如果您安装了 CUDA 10.1,您可能已经在“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cudart64_101.dll”中拥有 DLL。我个人反对从二级来源下载 DLL。
    • 对我来说,目录位置是 C:\Users\\.conda\envs\\Library\bin
    【解决方案7】:

    如果您看到上述错误但实际上您安装了 CUDA 10,此答案可能会有所帮助:

    pip install tensorflow-gpu==2.0.0
    

    输出:

    I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
    

    这对我来说是解决方案。

    【讨论】:

      【解决方案8】:

      Tensorflow 2.1 可与 Cuda 10.1 一起使用。

      如果你想快速破解:

      • 只需从here 下载cudart64_101.dll。解压 zip 文件并将 cudart64_101.dll 复制到您的 CUDA bin 目录

      其他:

      • 安装 Cuda 10.1

      【讨论】:

      • cuda bin 目录在哪里?
      • 建议人们从非官方来源安装可执行文件并不是一个好的解决方案。
      【解决方案9】:

      这个solution 为我工作:

      我用anaconda预装了环境(这里是代码)

      conda create -n YOURENVNAME python=3.6 // 3.6> incompatible with keras
      conda activate YOURENVNAME
      conda install tensorflow-gpu
      conda install -c anaconda keras
      conda install -c anaconda scikit-learn
      conda install matplotlib
      

      但是在我仍然有这些警告之后

      2020-02-23 13:31:44.910213: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
      
      2020-02-23 13:31:44.925815: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
      
      2020-02-23 13:31:44.941384: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
      
      2020-02-23 13:31:44.947427: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
      
      2020-02-23 13:31:44.965893: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
      
      2020-02-23 13:31:44.982990: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
      
      2020-02-23 13:31:44.990036: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudnn64_7.dll'; dlerror: cudnn64_7.dll not found
      

      我如何解决第一个警告: 我只是在这里下载了一个包含所有 cudnn 文件(dll 等)的 zip 文件:https://developer.nvidia.com/cudnn

      我如何解决第二个警告: 我在 conda 创建的虚拟环境中查看了最后一个丢失的文件(cudart64_101.dll),我只是将它复制/粘贴到与 .dll cudnn 相同的 lib 文件夹中

      【讨论】:

        【解决方案10】:

        我安装了 cudatoolkit 11 并复制了 dll C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\binC:\Windows\System32。 它为 PyCharm 修复,但不适用于 Anaconda jupyter:

        [名称:“/设备:CPU:0”设备类型:“CPU”内存限制:268435456 locality {}化身:6812190123916921346,名称:“/device:GPU:0” device_type: "GPU" memory_limit: 13429637120 locality { bus_id: 1
        链接 { } } 化身:18025633343883307728 物理设备描述: “设备:0,名称:Quadro P5000,pci 总线 ID:0000:02:00.0,计算 能力:6.1"]

        【讨论】:

        • 谢谢,复制dll文件效果很好:tensorflow/stream_executor/platform/default/dso_loader.cc:49] 成功打开动态库cudart64_110.dll
        【解决方案11】:

        Tensorflow gpu 2.2 和 2.3 每晚

        (沿 CUDA Toolkit 11.0 RC)

        要解决与 OP 相同的问题,我只需要在我的磁盘上找到 cudart64_101.dll(在我的情况下为 C:\Program Files\NVIDIA Corporation\NvStreamSrv ) 并将其添加为变量环境(即将值 C:\Program Files\NVIDIA\Corporation\NvStreamSrv)cudart64_101.dll 添加到用户的环境变量 Path)。 p>

        【讨论】:

          【解决方案12】:

          下载 CUDA Toolkit 11.0 RC

          为了解决这个问题, 我只是在我的磁盘上找到 cudart64_101.dll ( C:\Program Files\NVIDIA Corporation\NvStreamSrv) 并将其添加为变量环境,将值 (C:\Program Files\NVIDIA\Corporation\NvStreamSrv)cudart64_101.dll 添加到用户的环境变量路径中。

          【讨论】:

            【解决方案13】:

            能够通过将 NVIDIA 设备驱动程序更新到最新版本 (v446.14) 来解决此问题。 NVIDIA驱动下载link here

            【讨论】:

              【解决方案14】:

              我在混合 pip 和 conda 以安装 tensorflow 2.3 时遇到了这个问题。 (在 conda 安装 tensorflow 2.3 时,我使用 pip 安装 tensorflow 2.3 b/c。)

              我最终安装了错误版本的 cudatoolkit 和 cudnn。

              为了解决这个问题,我只是在conda install 中指定了特定版本的 cudatoolkit 和 cuda。

              查看 https://www.tensorflow.org/install/source_windows?force_isolation=true#tested_build_configurations 了解有关 tensorflow、cudatoolkit 和应该协同工作的 cuda 版本的信息。

              【讨论】:

                【解决方案15】:

                更简单的方法是创建一个名为cudart64_101.dll 的链接以指向cudart64_102.dll。这不是很正统,但由于 TensorFlow 正在寻找 cudart64_101.dll 导出的符号,而 nvidia 的人不是业余爱好者,他们很可能不会从 101 到 102 删除符号。基于这个假设(里程可能会有所不同),它是有效的。

                【讨论】:

                • 这是一个糟糕的想法,CUDA 次要版本(即 10.1、10.2 等)彼此不兼容。链接到 10.2“好像”它是 10.1 会导致随机崩溃(假设 DLL 完全加载)。此外,这意味着您在计算机上安装了 cuda 10.2,对于仅 CPU 的安装,这不是必需的
                • 当然不是只有cpu才有必要。至于 10.2 与 10.1 和随机崩溃完全不同,我建议您了解动态链接和导出符号
                • dll 加载和工作正常(供您参考)
                • 但最终用户应该安装规定的动态库,特别是如果他们不确定这是怎么回事
                • “当然,仅 CPU 不需要”:再次阅读问题标题。
                猜你喜欢
                • 1970-01-01
                • 2020-11-23
                • 2020-12-22
                • 2020-06-23
                • 2022-10-18
                • 2021-11-14
                • 2021-04-12
                • 1970-01-01
                相关资源
                最近更新 更多