ChatGPT解决这个技术问题 Extra ChatGPT

无法在仅 tensorflow CPU 安装上加载动态库“cudart64_101.dll”

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

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

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


C
Community

张量流 2.1+

这是怎么回事?

使用 new Tensorflow 2.1 release,默认的 tensorflow pip 包包含 TF 的 CPU 和 GPU 版本。在以前的 TF 版本中,找不到 CUDA 库会发出错误并引发异常,而现在库会动态搜索正确的 CUDA 版本,如果找不到,则会发出警告(W< /strong> 开头代表警告,错误有一个 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 not found 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
我卸载了 CUDA 的每个组件,但仍然出现与 CUDA 仍然存在一样的错误
@pete 如果找不到正确的 CUDA 版本,则会出现错误。既然你卸载了它,它当然不会找到它并打印错误......这是正常行为。
@brainslugs83 CUDA 次要版本不可互换,这是来自 CUDA 本身的限制
N
Ninjakannon

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

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


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

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。尽管如此,这是唯一有效的解决方案
d
darclander

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

我选择了安装程序类型:exe(local)(适用于 Windows)并以自定义模式安装了 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 文件。
M
Malcolm Swaine

在我的情况下,张量流安装正在寻找 cudart64_101.dll

https://i.stack.imgur.com/99IEu.png

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

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

https://i.stack.imgur.com/QNzGY.png

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

解决方案

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

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

https://i.stack.imgur.com/vxgQf.png

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

https://i.stack.imgur.com/WWEGf.png

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

https://i.stack.imgur.com/jdTpl.png

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

https://i.stack.imgur.com/Wcpkt.png


确认安装 CUDA 11.0 后需要重新启动才能让 tensorflow 找到它(cudart64_xyz.DLL 需要 CUDA 版本 xy.z,在我的情况下,xyz=110,而不是 101)
N
Nicolas Gervais

conda 环境中,这解决了我的问题(我缺少 cudart64-100.dll

从 dll-files.com/CUDART64_100.DLL 下载它 将它放在我的 conda 环境中 C:\Users\\Anaconda3\envs\\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
S
Scott

如果您看到上述错误但实际上您安装了 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

这对我来说是解决方案。


N
Nerxis

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

[名称:“/设备:CPU:0”设备类型:“CPU”内存限制:268435456位置{}化身:6812190123916921346,名称:“/设备:GPU:0”设备类型:“GPU”内存限制:13429637120位置{总线ID:1链接{ } } 化身:18025633343883307728 physical_device_desc:“设备:0,名称:Quadro P5000,pci 总线 ID:0000:02:00.0,计算能力:6.1”]


谢谢,在那里复制 dll 文件效果很好:tensorflow/stream_executor/platform/default/dso_loader.cc:49] 成功打开动态库 cudart64_110.dll
N
Nicolas Gervais

Tensorflow 2.1 与 Cuda 10.1 一起使用。

如果你想快速破解:

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

别的:

安装 Cuda 10.1


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

这个 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 文件夹中


C
Community

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)。


徐宗威

下载 CUDA 工具包 11.0 RC

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


r
razmik

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


u
user3731622

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

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

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

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


C
Cash Lo

这也可能是由于您正在运行的 python 版本引起的,我使用的是 microsoft store 中的 python 3.7,我遇到了这个错误,切换到 python 3.10 修复了它。


我怀疑问题在于您使用了 Microsoft Store python。我隐约记得它有一些问题
是的,我刚刚回答了这个问题stackoverflow.com/questions/60636785/…,但我记得来自官方网站的另一个版本的 python 有问题,这是由于 3.8 中加载 dll 的方式发生了变化
2
2 revs, 2 users 67%

一种更简单的方法是创建一个名为 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 没有必要”:再次阅读问题标题。