NVIDIA 显卡配置

驱动、CUDA、cuDNN、TensorFlow 安装详细记录

Posted by Tian on July 4, 2018

一、安装驱动、CUDA

1、 确保机器有支持 CUDA 的 GPU

1
2
3
4
lspci | grep -i nvidia
## output
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1c03 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 10f1 (rev a1)

如果没有输出,执行下面命令更新 PCI 硬件 database,再执行上面命令。

1
update-pciids

支持 CUDA 的 GPU 列表见这个 链接

2、确保机器有支持的 Linux 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uname -m && cat /etc/*release
## output
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

根据输出选择 CUDA。

3、确保机器安装了 GCC

1
2
3
4
5
6
gcc --version
## output
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

报错的话说明没装 GCC,安装 GCC 就好。

4、确保机器有正确的 Kernel Headers 并安装了 Development Packages

安装驱动的时候需要正确的 Kernel Headers 和 Development Packages。

Runfile 安装文件不会去验证 Package;Deb 安装文件会验证,如果没有安装的话 Deb 会尝试安装。然而,它会安装最新的 Packages,可能和你正在使用的 Kernel 不符。因此,最好在安装 CUDA 驱动,或者任何时候改变 Kernel 版本之前,手动确保正确版本的 Kernel Header 和 Development Package。

查看当前 Kernel 版本:

1
2
3
uname -r
## output
4.13.0-45-generic

如果系统更新了 Kernel 版本,执行下面的命令确保正确的 Kernel Header 和 Development Package 被安装,否则,驱动可能不工作

1
sudo apt-get install linux-headers-$(uname -r)

5、选择安装方式

官方有两种安装 CUDA 的方式,一种是用对应系统的包管理器(对 Ubuntu 系统来讲就是 Deb 包),另一种是用 Runfile 包,可能的话推荐用包管理器安装,这样方便管理和安装依赖。

6、下载 NVIDIA CUDA Toolkit

Nvidia 官网 下载 CUDA。

因为 TensorFlow1.8 指定了 CUDA 版本为 9.0,cuDNN 版本为 v7.0,否则要自己编译安装,为了方便,我们用 TF1.8 指定的版本。

MD5 认证

1
md5sum <file>

MD5 checksum 在 这里

7、解决冲突

在安装 CUDA 之前,应该卸载掉之前安装的 CUDA。

卸载 Toolkit runfile installation:

1
sudo /usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl

卸载 Driver runfile installation:

1
sudo /usr/bin/nvidia-uninstall

卸载 Deb installation:

1
2
3
4
sudo yum remove <package_name>                      # Redhat/CentOS
sudo dnf remove <package_name>                      # Fedora
sudo zypper remove <package_name>                   # OpenSUSE/SLES
sudo apt-get --purge remove <package_name>          # Ubuntu

8、安装驱动、CUDA

1
2
3
4
sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb # Install repository meta-data
sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub # Installing the CUDA public GPG key
sudo apt-get update # Update the Apt repository cache
sudo apt-get install cuda # Install CUDA

下载页面也有提示,按照提示做就行了。

9、安装后步骤

(1)必做

1
2
3
4
5
6
7
8
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}} # 添加环境变量到 .bashrc
# 如果用 runfile 安装,还需要添加 LD_LIBRARY_PATH
## 64 位系统
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
## 32 位系统
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

(2)建议

1
2
3
4
5
6
cuda-install-samples-9.0.sh <dir> # Install Writable Samples
cat /proc/driver/nvidia/version # Verify the Driver Version
cd <dir> && make -j8#  Compiling the Examples
./deviceQuery # Running the Binaries
./bandwidthTest 
## output 显卡信息和最后 'Result = PASS' 说明测试通过

(3)其他

1
2
3
4
## 如果安装出现循环登录或者黑屏,可以尝试 CTRL+ALT+F1 下卸载 Nvidia 驱动
sudo apt-get remove --purge nvidia-*
sudo apt-get autoremove
echo "nouveau" | sudo tee -a /etc/modules

10、参考

二、安装 cuDNN

(1)下载 cuDNN7.0

下载地址:cuDNN 下载官网

(2)安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 方法一:(推荐)
tar -xzvf cudnn-9.0-linux-x64-v7.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

## 若 sudo ldconfig 提示不是符号链接,可用以下示例方法解决
sudo ldconfig -v | grep cudnn
sudo ln -sf /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudnn.so.7 /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudnn.so
sudo ln -sf /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudnn.so.7.0.5 /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudnn.so.7


# 方法二:
sudo dpkg -i libcudnn7_7.0.3.11-1+cuda9.0_amd64.deb # Install the runtime library
sudo dpkg -i libcudnn7-dev_7.0.3.11-1+cuda9.0_amd64.deb # Install the developer library
sudo dpkg -i libcudnn7-doc_7.0.3.11-1+cuda9.0_amd64.deb # Install the code samples and the cuDNN Library User Guide
# Verifying
cp -r /usr/src/cudnn_samples_v7/ $HOME
cd  $HOME/cudnn_samples_v7/mnistCUDNN
make clean && make
./mnistCUDNN
# output Test passed!

(3)参考

三、安装 TensorFlow

(1)Miniconda

下载地址:Conda官网

(2)libcupti-dev 库

1
2
sudo apt-get install cuda-command-line-tools
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}/usr/local/cuda/extras/CUPTI/lib64

(3)NVIDIA TensorRT 3.0(可选)

1
2
3
4
wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1404/x86_64/nvinfer-runtime-trt-repo-ubuntu1404-3.0.4-ga-cuda9.0_1.0-1_amd64.deb
sudo dpkg -i nvinfer-runtime-trt-repo-ubuntu1404-3.0.4-ga-cuda9.0_1.0-1_amd64.deb
sudo apt-get update
sudo apt-get install -y --allow-downgrades libnvinfer-dev libcudnn7-dev=7.0.5.15-1+cuda9.0 libcudnn7=7.0.5.15-1+cuda9.0

重要提示:为了兼容预编译的 tensorflow-gpu 软件包,请使用 TensorRT 的 Ubuntu 14.04 软件包(如上所示),即使要安装到 Ubuntu 16.04 系统中也不例外。

要从源代码编译 TensorFlow-TensorRT 集成模块(而不是使用预编译的二进制文件),请参阅 模块文档。要详细了解 TensorRT 安装说明,请参阅 NVIDIA 的 TensorRT 文档

为避免在以后的系统升级过程中出现 cuDNN 版本冲突,您可以将 cuDNN 版本保持为 7.0.5:

1
sudo apt-mark hold libcudnn7 libcudnn7-dev

日后要允许进行升级,您可以取消这一保持行为:

1
sudo apt-mark unhold libcudnn7 libcudnn7-dev

如果您已安装前述软件包的旧版本,请升级到指定版本。如果升级不可行,您仍然可以运行支持 GPU 的 TensorFlow,但前提是您 从源代码安装 TensorFlow

(4)TensorFlow

1
2
3
4
conda create -n tensorflow pip python=2.7 # or python=3.3, etc.
source activate tensorflow
 (tensorflow)$  # Your prompt should change 
 (tensorflow)$ pip install --ignore-installed --upgrade tfBinaryURL

其中 tfBinaryURLTensorFlow Python 软件包的网址。例如,以下命令将针对 Python 3.4 安装仅支持 CPU 的 TensorFlow 版本:

1
 (tensorflow)$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.8.0-cp34-cp34m-linux_x86_64.whl

(5)验证

1
2
3
4
5
# Python
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

如果系统输出以下内容,说明您可以开始编写 TensorFlow 程序了:

1
Hello, TensorFlow!

如果系统输出一条错误消息而不是问候语,请参阅 常见的安装问题

(6)参考