如何在Ubuntu 16.04上安装CuDNN?

对于TensorFlow,我想安装cuda和CuDNN。在Ubuntu 16.04上如何操作?

4警告:如果您正在尝试运行TensorFlow并且需要cudnn,请确保目前安装的是5.1版本而不是6.0版本。 - wordsforthewise
@wordsforthewise CuDNN 6.0现在已经得到支持(至少适用于TF 1.4)。 - ComputerScientist
8个回答

第0步:从标准软件源安装CUDA(参见如何在Ubuntu 16.04上安装CUDA?
第1步:注册一个NVIDIA开发者账户并在此处下载cudnn(大约80MB)
第2步:检查您的CUDA安装位置。如果是从软件源安装,则为/usr/lib/.../usr/include。否则,它将位于/usr/local/cuda//usr/local/cuda-<version>。您可以使用which nvccldconfig -p | grep cuda进行检查。
第3步:复制文件:
软件源安装:
$ cd folder/extracted/contents
$ sudo cp -P include/cudnn.h /usr/include
$ sudo cp -P lib64/libcudnn* /usr/lib/x86_64-linux-gnu/
$ sudo chmod a+r /usr/lib/x86_64-linux-gnu/libcudnn*

运行文件安装:
$ 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*

15添加-P选项可以保留符号链接,即sudo cp -P lib64/libcudnn* /usr/lib/x86_64-linux-gnu/,并避免出现以下提示信息:/sbin/ldconfig.real: /usr/lib/x86_64-linux-gnu/libcudnn.so.5 不是一个符号链接 - Max Gordon
1这里更新: "下载cuDNN v4(v5目前是一个候选版本,只有在从源码安装TensorFlow时才支持)"。 - Brent Bradburn
38为了使Tensorflow能找到所有东西,我不得不将include/cudnn.hlib64/目录下的库文件复制到/usr/local/cuda-8.0/include/usr/local/cuda-8.0/lib64目录下(使用CUDA 8.0、Ubuntu 14.04和Tensorflow 0.12.0rc0)- 或许对某些人有帮助。 - David Stutz
@MaxGordon 嗨,如果我使用ubuntu16.04 power8的运行库或者Linux的库有关系吗? - tryingtolearn
版本列表似乎是错误的。这个版本:cuDNN v5.1 Runtime Library for Ubuntu16.04 Power8 (Deb) .....您可能想尝试适用于Ubuntu 14.04的对应版本。至少那样可以让我进入下一步。 - Rafael_Espericueta
只需在@MartinThoma的回答中添加评论。如果您运行sudo chmod a+r /usr/lib/x86_64-linux-gnu/libcudnn*,可能会引起此处描述的问题。 https://github.com/tensorflow/tensorflow/issues/7522 - kangaroo
1另一个提示 - 在安装cudnn之前确保先安装cuda。否则,cuda安装程序将不会覆盖您可能创建的任何/usr/local/cuda目录。 - kevins
@kevins 在没有预先安装CUDA的情况下,你不能安装cuDNN。 - Martin Thoma
@MartinThoma 这可能是正确的,如果通过软件源安装的话。然而,如果用户选择从tarball安装,他可能会犯我犯过的错误,即创建缺失的目录/usr/local/cuda/lib64/等,这将导致后续的cuda安装失败。 - kevins
图书馆现在似乎已经达到了约330MB的大小! - ComputerScientist

从5.1版本开始,无法按照@Martin提到的方式进行安装。 从nvidia site下载libcudnn6_6.0.21-1+cuda8.0_amd64.deb, libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb, libcudnn6-doc_6.0.21-1+cuda8.0_amd64.deb,然后逐个按照以下方式进行安装。
 sudo dpkg -i <library_name>.deb

编辑:您必须先安装运行时库(libcudnn6_6.0.21-1+cuda8.0_amd64.deb),因为开发依赖于该运行时库(感谢 @tinmarino)


1谢谢。我已经多次遇到这个问题了。我们就建立一个原则吧。当事情不顺利时,坚持使用.deb包进行安装。 - Anuraag Vaidya
9在从源代码编译Tensorflow时,了解cuDNN库的安装路径是/usr/lib/x86_64-linux-gnu/是很有帮助的。 - Visionscaper
3你必须先安装“runtime”,因为“dev”依赖于它。 - Tinmarino

  1. 在NVidia的网站上注册。可能需要一天或两天才能获得您的帐户批准。至少在我注册时是这样的。
  2. 从NVidia下载并安装最新的CUDA,或者根据您将要使用的软件来选择适合的最新版本,比如T-Flow的版本。

    请注意,通过点击Ubuntu标准软件包管理器进行安装可能无法正常工作。

    相反,您可能需要按照这些说明在终端中安装.deb软件包。之后,您将不得不将一些代码行添加到.bashrc或其他适当位置,例如,如果您正在配置服务器,那么可能是一个不同的位置,可能是在应用程序自动启动之前的某个地方,因为在这种情况下.bashrc可能不会被执行。

  3. 从NVidia下载CuDNN

    我使用了“Linux库”版本,对.deb软件包运气不太好。

  4. 您可以通过which nvcc找到CUDA的位置。通常,/usr/local/cuda/将是指向您当前安装版本的符号链接。

  5. 打开CuDNN压缩文件,并将适当的内容复制到CUDA安装文件夹的相应位置(cuda/lib64/和cuda/include/)。我通常使用sudo nautilus,从可视化界面进行复制。

快进到2018年,NVIDIA现在提供cuDNN 7.x的下载。安装步骤与@GPrathap所描述的相似。但是,如果您想要将旧版本的cuDNN替换为较新的版本,在安装之前需要先将其删除。
简单回顾一下:
步骤0. 确认您已经安装了CUDA工具包。如果尚未安装,请继续进行CUDA工具包的安装。
步骤1. 前往NVIDIA开发者门户网站https://developer.nvidia.com/cudnn并下载cuDNN。
步骤2. 如果您以前安装过cuDNN,请将其移除。
sudo dpkg -r <old-cudnn-runtime>.deb
sudo dpkg -r <old-cudnn-dev>.deb

第三步。使用dpkg安装cuDNN库(运行时、开发和文档)。
sudo dpkg -i <new-cudnn-runtime>.deb
sudo dpkg -i <new-cudnn-dev>.deb
sudo ldconfig

第四步。如果你想找到图书馆的安装位置,你可以更新定位索引,然后找到图书馆的位置。
sudo updatedb
locate libcudnn

如果您正在针对CUDA工具包9.1安装cuDNN 7.x,本文提供了更详细的说明,可能会有所帮助:http://tech.amikelive.com/node-679/quick-tip-installing-cuda-deep-neural-network-7-cudnn-7-x-library-for-cuda-toolkit-9-1-on-ubuntu-16-04/

谢谢 @Mike,你知道使用deb文件和普通的.tar文件有什么区别吗?哪个是推荐的,为什么呢?(顺便说一下,我自己过去使用runfile安装CUDA,也在Ubuntu上使用.tar包安装cuDNN) - Hossein
根据Nvidia的相关安装文档,你所说的必须删除旧版本的说法是不正确的:cuDNN v7可以与之前的cuDNN版本(如v5或v6)共存。 - n1k31t4
请在回答中提供任何相关的关联信息。注意:https://askubuntu.com/help/promotion - undefined

此外,您可以下载适用于基于Debian的发行版的deb软件包。
从NVIDIA网页上,开发者配置文件可用的文件如下:
  • cuDNN v5.1 Linux运行时库(Deb)
  • cuDNN v5.1 Linux开发库(Deb)
  • cuDNN v5.1代码示例和用户指南Linux(Deb)
我在我的Debian(Stretch)机器上进行了测试,TensorFlow正常工作!

6请注意,截至目前(2016年7月),cuDNN v5.1与TensorFlow不兼容,除非您从源代码进行编译,请参阅https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html。 - mastazi

在@Martin Thoma和@Íhor Mé仍然有效的答案中添加一个重要细节: 将libcudnn文件复制到cuda目录后,您必须更新您的.bashrc文件:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda

你必须将包含目录添加到使用它的任何配置文件中。 例如,Caffe有一个配置文件,在使用make编译之前必须编辑。为此,请编辑caffe/Makefile.config以添加这些配置变量的路径(在路径之间添加空格)。
INCLUDE_DIRS: /usr/local/caffe/cuda/include/ 
LIBRARY_DIRS: /usr/local/cuda/lib64/

每当你希望这些更改在当前终端窗口中生效时,不要忘记执行该文件一次!
. ~/.bashrc

在16.04版本中,如果你正在从Nvidia的官网直接安装CUDA,并且同时从源代码构建Tensorflow,那么你可以指定一个目录作为Cudnn的位置。默认情况下是:
/usr/include/x86_64-linux-gnu

当你在构建Tensorflow时,它会询问你想要指定的Cudnn版本。然后之后它会询问它的位置在哪里。只需指示上面的目录,它就能正常工作。此时应该会创建一个wheel文件,然后你可以使用pip进行安装。

答案是正确的,但对于cuDNN 5.1,一些名称已经更改。因此,如果您在提取cuDNN文件后使用此版本,您将找到两个文件夹:lib和include。将include文件夹中的*.h文件的名称更改为cudnn.h,然后按照https://askubuntu.com/a/767270/641589进行操作。如果您想要在Caffe中使用cuDNN,则需要进行此更改!

请编辑您的回答并添加参考,'上述说明'。 - sudodus