如何验证CuDNN安装是否成功?

251

我已经在很多地方搜索了,但是所有的结果都只是如何安装,而没有关于如何验证已经安装的信息。我可以验证我的NVIDIA驱动已经安装,并且CUDA也已经安装好了,但是我不知道如何验证CuDNN是否已经安装。非常感谢您的帮助!

PS.
这是用于caffe实现的。目前一切正常,没有启用CuDNN。


1
你尝试过在启用和禁用USE_CUDNN的情况下运行一些示例吗? - pQB
你如何验证你的NVIDIA和CUDA驱动程序是否已安装? - Charlie Parker
@CharlieParker 要验证CUDA只需输入 nvcc -V - KansaiRobot
4
他们要求与CUDNN相关的人:)) 请仔细阅读!!! - Thư Sinh
13个回答

243
安装CuDNN只需要复制一些文件。因此,要检查是否安装了CuDNN(以及安装的版本),您只需要检查这些文件即可。
安装CuDNN
步骤1:注册NVIDIA开发人员帐户并在此处下载cudnn(大约80 MB)。您可能需要 nvcc --version 来获取您的cuda版本。
步骤2:检查您的cuda安装位置。对于大多数人来说,它将是 /usr/local/cuda/ 。您可以使用 which nvcc 进行检查。
步骤3:复制文件:
$ cd folder/extracted/contents
$ sudo cp include/cudnn.h /usr/local/cuda/include
$ sudo cp lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

检查版本

您可能需要调整路径。请参考安装步骤2。

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

编辑:在后续版本中,可能会是以下内容(感谢Aris

$ cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

笔记

当你遇到像这样的错误时

F tensorflow/stream_executor/cuda/cuda_dnn.cc:427] could not set cudnn filter descriptor: CUDNN_STATUS_BAD_PARAM

使用TensorFlow时,您可能考虑使用CuDNN v4而不是v5。
通过apt安装的Ubuntu用户:https://askubuntu.com/a/767270/10425

2
这些 CuDNN 步骤很好。如果复制保留符号链接 (-av标志),你认为它们可以稍微改进一下吗? - auro
14
轻微修改路径可使我的安装成功。cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2 - Micah Stubbs
1
最近,获取版本的方法如下。cat /usr/include/x86_64-linux-gnu/cudnn_v7.h | grep CUDNN_MAJOR -A 2 - auro
4
对于我来说,“CUDNN_MAJOR”变量包含在“/usr/local/cuda/include/cudnn_version.h”文件中。 我正在使用CuDNN 8.0.5。 - spurra
2
我支持@spurra的评论,新版本的cudnn有一个cudnn_version.h文件。因此整个命令看起来应该是这样的:cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 - Ari
显示剩余7条评论

164

我的答案展示了如何检查已安装的CuDNN版本,通常这也是您想要验证的内容。首先,您需要找到已安装的cudnn文件,然后解析此文件。为了找到文件,您可以使用:

whereis cudnn.h
CUDNN_H_PATH=$(whereis cudnn.h)

如果那行不通,查看下面的“Redhat发行版”。

一旦您找到此位置,然后可以执行以下操作(将${ CUDNN_H_PATH }替换为路径):

cat ${CUDNN_H_PATH} | grep CUDNN_MAJOR -A 2

结果应该类似于这样:

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 5
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

这意味着版本号是7.5.0。

Ubuntu 18.04(通过sudo apt install nvidia-cuda-toolkit安装)

此安装方法会在/usr/include和/usr/lib/cuda/lib64中安装cuda,因此您需要查看的文件位于/usr/include/cudnn.h中。

CUDNN_H_PATH=/usr/include/cudnn.h
cat ${CUDNN_H_PATH} | grep CUDNN_MAJOR -A 2

Debian和Ubuntu

从CuDNN v5开始(至少在通过sudo dpkg -i <library_name>.deb安装包安装时),似乎你需要使用以下命令:










cat /usr/include/x86_64-linux-gnu/cudnn_v*.h | grep CUDNN_MAJOR -A 2
例如:
$ cat /usr/include/x86_64-linux-gnu/cudnn_v*.h | grep CUDNN_MAJOR -A 2                                                         
#define CUDNN_MAJOR      6
#define CUDNN_MINOR      0
#define CUDNN_PATCHLEVEL 21
--
#define CUDNN_VERSION    (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"
                      

表明已安装CuDNN版本6.0.21。

Redhat分发版

在CentOS上,我使用以下命令找到CUDA位置:

$ whereis cuda
cuda: /usr/local/cuda

然后我按照以下位置找到的有关cudnn.h文件的步骤进行了操作:

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

4
不再; 现在可以在 cudnn_version.h 中找到。 - DragonLord

58

要检查CUDA的安装情况,请运行以下命令,如果已经正确地安装,则下面的命令不会抛出任何错误,并将打印出正确的库版本。

function lib_installed() { /sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep $1; }
function check() { lib_installed $1 && echo "$1 is installed" || echo "ERROR: $1 is NOT installed"; }
check libcuda
check libcudart

检查CuDNN的安装情况,请运行以下命令,如果CuDNN被正确安装,则不会出现任何错误。

function lib_installed() { /sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep $1; }
function check() { lib_installed $1 && echo "$1 is installed" || echo "ERROR: $1 is NOT installed"; }
check libcudnn 

您可以从任何目录运行以下命令

nvcc -V

它应该输出类似这样的内容

 nvcc: NVIDIA (R) Cuda compiler driver
 Copyright (c) 2005-2016 NVIDIA Corporation
 Built on Tue_Jan_10_13:22:03_CST_2017
 Cuda compilation tools, release 8.0, V8.0.61

我运行了 nvcc -V 命令,但它抛出了错误。提示找不到该命令。 - Infinite Loops
@InfiniteLoops 你安装了NVIDIA CUDA工具包吗? - Sherlock
@Sherlock 我直接按照TensorFlow的安装指南运行了cmd,我假设安装了Cuda和cudnn。它说它会添加Nvidia软件包仓库并安装cuda和工具。但是你之前提到的函数也可以使用。它会显示类似于libcudnn.so.7 -> libcudnn.so.7.2.1的内容。 - Infinite Loops
@InfiniteLoops 如果你收到“找不到此命令”的错误提示,那么这意味着未安装Nvidia工具包。请尝试运行nvcc命令并检查输出。 同时,请参考以下链接: https://devtalk.nvidia.com/default/topic/457664/nvcc-quot-no-command-39-nvcc-39-found-quot-/ - Sherlock
3
运行 nvcc -V 和 cudnn 有什么关系?就像你的例子一样,它似乎没有显示 cudnn 的版本... - Redoman

50

安装CuDNN仅涉及将文件放置在CUDA目录中。如果您在安装caffe时正确指定了路由和CuDNN选项,则会使用CuDNN编译它。

您可以使用 cmake 进行检查。创建一个目录 caffe / build 并从那里运行 cmake .. 。如果配置正确,您将看到这些行:

-- Found cuDNN (include: /usr/local/cuda-7.0/include, library: /usr/local/cuda-7.0/lib64/libcudnn.so)

-- NVIDIA CUDA:
--   Target GPU(s)     :   Auto
--   GPU arch(s)       :   sm_30
--   cuDNN             :   Yes
如果一切正确,请执行make命令以从那里安装caffe。

太棒了,感谢您的回答。我在启用make文件中的cuDNN后重新编译它就可以工作了:D。 - alfredox
92
有没有一种方法可以在不使用Caffe的情况下找出是否安装了cuDNN?类似于使用CUDA时获取的示例? - gokul_uf
7
根据Martin的回答,您可以使用以下命令(假设您已经将/usr/local/cuda链接到/usr/local/cuda-#.#):cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 - matt
2
@Boooooooooms 他只是获取了C语言中的“头文件”内容,并使用程序“grep”来读取特定变量。 - Greg Hilston
我没有Caffe。 - rjurney
1
grep不再起作用了,因为版本已从cudnn.h中删除并放入cudnn_version.h中。但是您仍然可以使用cat命令验证文件是否存在,只需省略| grep管道之后的所有内容即可。 - DragonLord

42

获取cuDNN版本[Linux]

使用以下命令查找cuDNN路径:

cat $(whereis cudnn.h) | grep CUDNN_MAJOR -A 2

如果上述方法不起作用,请尝试以下方法:

cat $(whereis cuda)/include/cudnn.h | grep CUDNN_MAJOR -A 2

获取 cuDNN 版本 [Windows]

使用以下命令查找 cuDNN 的路径:

C:\>where cudnn*
C:\Program Files\cuDNN6\cuda\bin\cudnn64_6.dll

然后使用此方法从头文件中转储版本信息:

type "%PROGRAMFILES%\cuDNN6\cuda\include\cudnn.h" | findstr "CUDNN_MAJOR CUDNN_MINOR CUDNN_PATCHLEVEL"

获取CUDA版本

以下方法适用于Linux和Windows操作系统:

nvcc --version

1
只是补充一个用户案例:我在我的cuda安装中找不到cudnn.h文件,我以为我没有安装cudnn。但后来我运行了从官方网站下载的cuda示例代码,它通过了... - yuqli
3
我用来查找完整版本号的完整命令是: type "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include\cudnn.h" | findstr "CUDNN_MAJOR CUDNN_MINOR CUDNN_PATCHLEVEL" - Taran
太棒了!我更新了答案,现在它会打印这些细节。 - Shital Shah

23

在Ubuntu上通过.deb安装时,您可以使用sudo apt search cudnn | grep installed命令。


它显示我安装了第一个,那么我是否成功安装了它? - yode

18

我有cuDNN 8.0,但上述建议都没有帮助我解决问题。所需信息在/usr/include/cudnn_version.h中。

cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

事情成功解决了。


2
对于我来说,在Ubuntu 20.04.1 LTS上,使用cuDNN 8的路径是这样的:/usr/local/cuda/include/cudnn_version.h 希望能帮到其他人。 - b00r00x0
评论对我有用! - undefined

18
在Ubuntu 20.04LTS上:
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR

返回了预期的结果


3
非常棒的答案。这是测试CuDNN最简单的方法。 - wbadry
适用于Ubuntu 18.04 LTS。 - WaterRocket8236
对于cuDNN 8.3,这就是答案,因为在某个时候Nvidia更改了cudnn.h上的内容,以删除我们正在寻找的CUDNN_MAJOR字符串。 - dmmd

13
torch.backends.cudnn.version()

应该就能解决问题了


7
请记住,这可能显示在PyTorch中包含的cuDNN版本,而不是您可能已经按照NVIDIA指南手动安装的系统范围的cuDNN版本。 您可以选择安装包含在PyTorch中的CUDA/cuDNN或由NVIDIA提供的独立版本的CUDA/cuDNN,这一事实造成了很多混淆,但是这个答案可以澄清一切:https://superuser.com/a/1572762/105024 - Redoman
@redoman 的观点很好 - 这个答案只适用于 PyTorch:torch cuDNN 绑定并不能说明,比如对于 tensorflow 用户(或者 OP 所使用的 caffe 用户),因为 Python torch 包可以随附其自己的 cuDNN 库,可以通过运行 $ cd / && find | grep site-packages | grep libcudnn 查看。 - mirekphd

9

您可以通过以下 Python 代码来检查:

from tensorflow.python.platform import build_info as tf_build_info

print(tf_build_info.cudnn_version_number)
# 7 in v1.10.0

5
可能是这样的:print(tf_build_info.build_info) - hafiz031
print(tf_build_info.build_info['cudnn_version']) - smartsl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接