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_PATH 是 C:\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'”