Windows 上的 TensorFlow:“无法打开 CUDA 库 cudnn64_5.dll”

Posted

技术标签:

【中文标题】Windows 上的 TensorFlow:“无法打开 CUDA 库 cudnn64_5.dll”【英文标题】:TensorFlow on Windows: "Couldn't open CUDA library cudnn64_5.dll" 【发布时间】:2017-04-21 19:05:31 【问题描述】:

Tensorflow 刚刚发布了 windows 支持。我安装了 gpu 版本和 CUDA 8.0 和 python 3.5。但是,在我导入 tensorflow 后,出现以下错误:

>>> import tensorflow
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cublas64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:119] Couldn't open CUDA library cudnn64_5.dll
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:3459] Unable to load cuDNN DSO
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cufft64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library nvcuda.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library curand64_80.dll locally

有人可以帮忙吗?谢谢!

【问题讨论】:

【参考方案1】:

TL;DR:要将 cuDNN 与 TensorFlow 结合使用,文件 cudnn64_5.dll 必须位于 %PATH% 环境变量中的目录中。请注意,cuDNN 是从 CUDA 单独下载的,您必须下载 cuDNN 5.1 版。

首先,请注意 cuDNN 不与 CUDA 工具包的其余部分一起分发,因此您需要从 the NVIDIA website 单独下载它。在 Windows 上,它以 ZIP 存档的形式分发,因此您必须将其解压缩并找到包含 cudnn64_5.dll 的目录。例如,如果您将其解压到C:\tools\cuda,则该DLL 将位于C:\tools\cuda\bin\cudnn64_5.dll。最后,您可以通过在命令提示符处键入以下内容将其添加到您的路径中:

C:\> set PATH=%PATH%;C:\tools\cuda\bin
C:\> python
...
>>> import tensorflow as tf

【讨论】:

谢谢先生!我认为它可以按照您的步骤进行。它成功加载了所有内容,这是否意味着我正在使用我的 GPU 来计算张量流? 你应该是,是的!您可以使用nvidia-smi 工具监控 GPU 利用率并了解 TensorFlow 是如何使用它的。 win10上好像没有nvidia-smi命令。从网站上,他们说“NVIDIA-smi 在 Linux 上附带 NVIDIA GPU 显示驱动程序,以及 64 位 Windows Server 2008 R2 和 Windows 7。”有什么办法可以解决这个问题吗? 确切位置可能会有所不同,但在我的 Windows 10 计算机上,它安装在 C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe 我按照这些说明进行操作,但仍然出现同样的错误?我注意到 Windows 10 有助于阻止来自网络的外部文件。我现在解封了,还是没有解决?【参考方案2】:

tensorflow-gpu 之后尝试了pip3 install --upgrade tensorflow,效果很好。

我认为只有在直接尝试pip3 install --upgrade tensorflow-gpu 时才会出现问题。

【讨论】:

这是我的解决方案 :) 原来只是在tensorflow-gpu之上安装了tensorflow(CPU) 是的,只是 GPU 上的 CPU【参考方案3】:

除了上述答案外,请确保您已下载受支持的 cuDNN 版本。 目前 TensorFlow 支持较旧的 cuDNN v.5.1,而 Nvidia 网站上提供了较新的 cuDNN 6.0。我在 6.0 中遇到了这样的错误。当我回滚到 5.1 时,一切正常。

在此处检查 TensorFlow 要求:https://www.tensorflow.org/install/install_windows 从这里下载支持的 cuDNN 版本:https://developer.nvidia.com/rdp/cudnn-download

【讨论】:

【参考方案4】:

我遇到了这个问题,我尝试了几次来解决它。 此答案适用于 Windows 64 上的 Python 64 我还安装了 VS2017 和 Python 3.6

来自干​​净的 Windows 64 机器 安装 Visual Studio 2015(注意:不是 vs2017——至少现在还没有)。社区版是免费的。确保安装 C++ 编译器。您将需要它来编译未来的 python 库。

这也将清除 msvcp140.dll 或 msvcrt*.dlls 的任何问题。或者,您可以安装 VC Redistributable(但我建议安装 VS2015,因为这将允许您编译和安装未来的 python 库)。

接下来,安装 VS2017,这次还要选择 Python 和数据学习(scikit)。这将默认使用 Python 3.6(使用 VS2015 构建)安装 Anaconda。还有一些有用的功能

*还要确保您有兼容的 Nvidia 卡(请参阅之前的答案)

然后确保您的计算机上安装了最新的 Nvidia 驱动程序。

然后确保您已安装 Google 和其他人提到的 Nvidia 库,包括 Cuda bins。

*从 tensorflow 1.2 开始,支持 Python 3.6,因此不再需要创建 Python 3.5 环境的说明

我在使用 tensorflow 1.2 时遇到了一些问题。我还在我的环境中尝试了 tensorflow 1.31rc2

问题 #1 -- 防火墙(适用于防火墙后面的人)

这将阻止通过“pip install”进行安装 要解决此问题,请添加 --trusted-host pypi.python.org

例如

pip install tensorflow-gpu --trusted-host pypi.python.org

问题 #2 -- 升级到 numpy 1.13.1

安装 tensorflow 会升级到不兼容的 numpy 1.13.1 版本(至少在我的 windows 机器上)。要解决此问题,请在 http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 下载***,查找 numpy-1.13.1+mkl-cp36-cp36m-win_amd64.whl

在安装 tensorflow 之前安装这个***。这将阻止 tensorflow 安装不兼容版本的 numpy 1.13.1 包

注意:在其他帖子中查看如何安装***(pip install fullpath_of_wheel)

注意:如果您已经安装了 tensorflow,请确保使用 pip install 的 --upgrade 选项强制升级)

问题 #3 -- Nvidia cuda 软件包位于不同位置

要测试您是否拥有正确的 CU*.DLL 包,请使用“where”命令(来自 C:\ 命令提示符)

cublas64_80.dll 在哪里

cudnn64_5.dll 在哪里

cufft64_80.dll 在哪里

在哪里 nvcuda.dll

curand64_80.dll 在哪里

cusolver64_80.dll 在哪里

如果你的机器和我的一样,你会在多个位置找到这些 dll,有时它们甚至不存在。例如,在我的 c:\system32\windows 中的 c:\program files\Anaconda3 目录 nvcuda.dll 中找到了 cublas64_80.dll,依此类推。如果您安装了 matlab,它将有自己的版本。 CNTK 也有自己的版本。 Nvidia 会将它们放在另一个目录中。这又是一个问题。正如其他人所提到的,您需要的一些 DLL 由 Nvidia 以 zip 文件的形式提供。

我建议不要尝试修复路径,而是先尝试此方法

收集上面提到的6个dll,放在一个目录如c:\tfexperiment

然后 cd 进入 c:\tfexperiment

从此位置运行 python.exe。 Windows 现在将首先在当前路径中查找 dll

现在一旦 python 加载输入

将张量流导入为 tf

它应该对你有用(希望如此)。这是我能够让它在我的机器上工作的唯一方法。如果您走到这一步,您可以简单地将 c:\tfexperiment 添加为路径环境变量中的第一个路径。或者你可以找出正确的路径顺序。

如果仍然无法正常工作,您可以更进一步,从 Microsoft 下载 procmon.exe。运行 procmon.exe。过滤可执行的 python.exe(对不起,我没有时间解释如何使用 procmon)。现在回到你的 python 提示符并再次输入“import tensorflow as tf”。 procmon 应该有很多行信息。您可能想要过滤 loadimage。这将告诉您它正在加载哪些 dll。请注意,.pyd 扩展名也是 DLL。最后一个加载(或加载失败)的 .dll 可能是导致问题的那个。

【讨论】:

【参考方案5】:

您必须下载系统的cudnn,并将其解压缩到CUDA_PATH

我的 CUDA_PATHC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0

【讨论】:

【参考方案6】:

对于那些因为以下原因来到这里的人:

I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:119] Couldn't open CUDA library cublas64_80.dll
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_blas.cc:2294] Unable to load cuBLAS DSO.
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library cudnn64_5.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:119] Couldn't open CUDA library cufft64_80.dll
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_fft.cc:344] Unable to load cuFFT DSO.
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfully opened CUDA library nvcuda.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:119] Couldn't open CUDA library curand64_80.dll
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_rng.cc:338] Unable to load cuRAND DSO.

您需要添加 CUDA 常规路径。我不知道他们为什么不把它们放在一起下载。很傻。

C:\Users\user>set PATH=%PATH%;C:\tools\cuda\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin

【讨论】:

【参考方案7】:

还要确保没有额外的cudnn64_5.dll(错误版本)位于另一条路径中。

因此,如果您过去将 DLL 放在 ...\CUDA\v8.0\bin 中,请记住,您已将新版本放入 ...\CuDNN\v5.1\bin,而不会从另一个目录中删除旧版本。

【讨论】:

【参考方案8】:

我刚刚从这个网站下载了cuda.dll文件:https://developer.nvidia.com/cudnn

然后将解压缩的文件夹移动到我的其他 anaconda 库所在的位置。

我使用 pycharm,因此很容易看到所有外部库在 anaconda 中的存储位置。希望这会有所帮助!

【讨论】:

【参考方案9】:

在我的测试中,我发现TF 1.2支持cudnn 64_5,TF 1.3支持cudnn 64_6。希望这会有所帮助。 :)

【讨论】:

【参考方案10】:

你也可以把cuda64_5.dll放到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin目录下就可以了。

您可以使用文件夹 GUI 并将 .dll 加载到目录中。那么你不需要每次使用Tensorflow时都定义PATH。

【讨论】:

【参考方案11】:

您可以通过这种方式检查您的环境变量:

import os
print("Environmental variable:", os.environ["PATH"])
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;

我的 CUDA_path 是“D:/CUDA/v8.0/bin”,我在这里找不到我的 CUDA_path。您会在这里找到您丢失的文件(例如“cublas64_80.dll”、“cudnn64_5.dll”等)。前提是你已经完成了你的CUDA安装。

如果您在环境变量中找不到您的 CUDA_path,您可以手动添加您的 CUDA_path: (以下代码的顺序很重要。在导入TensorFlow之前添加CUDA_path。)

import os
os.environ["PATH"] += ";D:/CUDA/v8.0/bin;" 
import tensorflow as tf

或者你可以在 CMD 中临时添加你的 CUDA_path

set PATH=%PATH%;"D:/CUDA/v8.0/bin"
python3 tensorflow_model.py

它可以在我的笔记本电脑上运行(Windows10、Python3.6、Tensorflow-gpu==1.5)。 我认为这两种方式都是简单的解决方案。

【讨论】:

【参考方案12】:

Dan Bricklin 花了我很多时间。 我终于按照相同的步骤完成了它。

    从我的 conda 环境中删除了以前的 tensorflow。

    为 Windows 8 安装 CUDA v9.1(使用默认版本的 VisualStudio 进行标准安装)并添加 "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1" 到路径。

    下载并解压 cudnn-9.1-windows-7-x64 ,将其移至“程序文件” 并将其添加到路径“C:\Program Files\cuda\bin”

    在我的 conda 环境中使用 pip 安装了 tensorflow“pip install --ignore-installed --upgrade tensorflow”

【讨论】:

以上是关于Windows 上的 TensorFlow:“无法打开 CUDA 库 cudnn64_5.dll”的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上的 TensorFlow:“pip install tensorflow”失败

Tensorflow 2.1.0 - DLL 加载失败 - windows cpu

tensorflow是否支持Windows上的Python 3.6.4?

python [DEPRECATED] Windows上的TensorFlow自检

如何在 Windows 上的 Python 2.7 上安装 Tensorflow?

Windows 上的 Tensorflow 对象检测 API - 错误“ModuleNotFoundError: No module named 'utils'”