如何验证 CuDNN 安装?

How to verify CuDNN installation?

我搜索了很多地方,但我得到的只是如何安装它,而不是如何验证它是否已安装。我可以验证我的 NVIDIA 驱动程序是否已安装,以及 CUDA 是否已安装,但我不知道如何验证 CuDNN 是否已安装。非常感谢您的帮助,谢谢!

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

安装 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。

CuDNN的安装只是复制一些文件。因此,要检查是否安装了 CuDNN(以及您的版本),您只需检查这些文件。

安装 CuDNN

第 1 步:注册一个 nvidia 开发者帐户和 download cudnn here(大约 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。

Ubuntu 通过 apt 安装的用户:https://askubuntu.com/a/767270/10425

我的回答显示了如何检查安装的 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.[=20=中]

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

要检查 CUDA 的安装,运行 下面的命令 ,如果安装正确,下面的命令将不会抛出任何错误,并且会打印正确版本的库。

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

运行 ./mnistCUDNN/usr/src/cudnn_samples_v7/mnistCUDNN

这是一个例子:

cudnnGetVersion() : 7005 , CUDNN_VERSION from cudnn.h : 7005 (7.0.5)
Host compiler version : GCC 5.4.0
There are 1 CUDA capable devices on your machine :
device 0 : sms 30  Capabilities 6.1, SmClock 1645.0 Mhz, MemSize (Mb) 24446, MemClock 4513.0 Mhz, Ecc=0,    boardGroupID=0
Using device 0

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

正在获取 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

如何使用 python 代码进行检查:

from tensorflow.python.platform import build_info as tf_build_info

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

我有 cuDNN 8.0,none 以上建议对我有用。所需信息位于 /usr/include/cudnn_version.h,因此

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

成功了。

在 Ubuntu 20.04LTS:

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR

返回了预期的结果

对于 CUDnn 8.1 及更高版本,请使用以下命令:

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

torch.backends.cudnn.version()

应该可以解决问题