前言

跑深度学习的任务,在GPU下明显会比CPU下加速很多,本文对Ubuntu下 TensorFlow-gpu 运行环境的安装进行介绍。

环境介绍

操作系统:Ubuntu 16.04
CPU: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
GPU:NVIDIA GeForce GTX 1070
显卡驱动版本: 384.111
CUDA 版本:9.0
cuDNN 版本:7.0.5.15
TensorFlow 版本:tensorflow-gpu 1.9.0
Python 版本:Python 3.5.2

1. 显卡驱动安装

apt 安装

1
2
3
sudo add-apt-repository -y ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install -y nvidia-390

安装结果验证,输入:

1
nvidia-smi

如果返回显卡相关信息,即表示已经安装成功。

手动安装

手动安装比较麻烦,如果apt安装无问题,则不需要手动安装。手动安装流程如下:

下载安装文件

首先需要安装显卡对应的驱动,前往Nvidia官网:https://www.nvidia.cn/Download/index.aspx?lang=cn ,根据自己的操作系统、显卡信息手动选择对应的选项,然后点击搜索,确认无误后点击下载。

此处下载到的安装文件是:NVIDIA-Linux-x86_64-384.111.run

卸载原有驱动

如果原驱动是用apt-get安装的,卸载命令:

1
sudo apt-get remove --purge nvidia*

如果原驱动是用runfile安装的,就用–uninstall命令卸载:

1
2
sudo chmod +x *.run
sudo ./NVIDIA-Linux-x86_64-384.59.run --uninstall

禁用nouveau驱动

执行:

1
lsmod | grep nouveau

如果没有屏幕输出,说明nouveau驱动没有启用,可以忽略以下禁用nouveau步骤。

创建或更新blacklist-nouveau.conf,有的教程中会更新blacklist.conf

1
2
3
sudo vi /etc/modprobe.d/blacklist-nouveau.conf
or
sudo vi /etc/modprobe.d/blacklist.conf

在文本最后添加:

1
2
blacklist nouveau
options nouveau modeset=0

然后执行:

1
sudo update-initramfs -u

重新生成 kernel initramfs

重启后,执行:

1
lsmod | grep nouveau

如果没有屏幕输出,说明禁用nouveau成功。

禁用X-Window服务

执行命令:

1
sudo service lightdm stop

这会关闭图形界面,按Ctrl-Alt+F1进入命令行界面,输入用户名和密码登录即可。

在命令行输入:sudo service lightdm start,然后按Ctrl-Alt+F7即可恢复到图形界面。

安装下载的驱动文件

给驱动run文件赋予执行权限,然后安装:

1
2
sudo chmod +x NVIDIA-Linux-x86_64-384.111.run
sudo ./NVIDIA-Linux-x86_64-384.111.run –no-opengl-files

驱动测试:
1
nvidia-smi

若列出GPU的信息列表,表示驱动安装成功。

2. CUDA 安装

CUDA 官方安装指南见:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

下载安装文件

前往nvidia开发者网站(https://developer.nvidia.com/nvidia-drive-downloads )下载CUDA安装文件,需要用邮箱注册、激活账户后才可以下载。

这里下载的是 cuda_9.0.176_384.81_linux-run ,当然也可以选择其他版本,但是需要保证上一步所安装的驱动满足cuda对应版本的要求,不然会报错,具体要求见:https://github.com/NVIDIA/nvidia-docker/wiki/CUDA#requirements。

执行安装

下载之后执行安装:

1
sudo sh cuda_9.0.176_384.81_linux-run

运行之后会跳出readme文件,然后按住Ctrl + C跳过。然后会出现提示,对于INSTALL NVIDIA Accelerates Graphics Driver for Linux-x86_6 要选择n,因为已经安装过Driver了,此处选择不安装。其他的都接受即可。

CUDA 加入环境变量

打开环境变量配置文件

1
vi ~/.bash_profile

将下列内容追加到文件末尾:

1
2
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda

执行以下命令使得环境变量生效:

1
source ~/.bash_profile

测试

安装完成,进入Samples目录,进入$PATH/NVIDIA_CUDA-9.0_Samples/1_Utilities/deviceQuery/,输入make进行编译,然后./deviceQuery测试安装结果,如果最后输出Result = PASS,表示测试通过,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
./deviceQuery Starting...

CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 1070"
CUDA Driver Version / Runtime Version 9.0 / 9.0
CUDA Capability Major/Minor version number: 6.1
Total amount of global memory: 8114 MBytes (8507752448 bytes)
(15) Multiprocessors, (128) CUDA Cores/MP: 1920 CUDA Cores
GPU Max Clock rate: 1683 MHz (1.68 GHz)
Memory Clock rate: 4004 Mhz
Memory Bus Width: 256-bit
L2 Cache Size: 2097152 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 2 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Supports Cooperative Kernel Launch: Yes
Supports MultiDevice Co-op Kernel Launch: Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.0, CUDA Runtime Version = 9.0, NumDevs = 1
Result = PASS

3. cuDNN 安装

TensorFlow的运行需要cuDNN库的支持, cuDNN 的安装可以参考官方指南:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html

简单来说,cuDNN需要下载两个文件,一个是运行库,一个是开发者库,下载地址:https://developer.nvidia.com/rdp/form/cudnn-download-survey

下载好之后,执行下列命令进行安装:

1
2
sudo dpkg -i libcudnn7_7.0.3.11-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.0.3.11-1+cuda9.0_amd64.deb

4. TensorFlow-GPU 安装

以上环境都配置好之后,TensorFlow的安装就简单多了,官方指南:https://www.tensorflow.org/install/install_linux?hl=zh-cn

这里贴出pip3安装命令:

1
pip3 install tensorflow-gpu

5. 验证安装

1
2
3
4
5
6
7
8
9
10
11
root@desk:/home/# python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'1.9.0'
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello, TensorFlow!'

6. 问题及tips

CUDA driver version is insufficient for CUDA runtime version

不同版本的CUDA对显卡驱动要求不一样,见下表:

CUDA toolkit version Driver version GPU architecture
6.5 >= 340.29 >= 2.0 (Fermi)
7.0 >= 346.46 >= 2.0 (Fermi)
7.5 >= 352.39 >= 2.0 (Fermi)
8.0 == 361.93 or >= 375.51 == 6.0 (P100)
8.0 >= 367.48 >= 2.0 (Fermi)
9.0 >= 384.81 >= 3.0 (Kepler)
9.1 >= 387.26 >= 3.0 (Kepler)

来源:https://github.com/NVIDIA/nvidia-docker/wiki/CUDA#requirements

libcudnn.so.7: cannot open shared object file: No such file or directory

没有安装cudnn,安装cudnn即可。

查看GPU使用情况

nvidia-smi

解除指定进程的GPU占用

kill -9 PID

参考

  1. Tensorflow基础知识—-ubuntu下安装安装CUDA、cuDNN和tensotflow-gpu版本流程和问题总结:https://sthsf.github.io/wiki/Algorithm/DeepLearning/Tensorflow%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/Tensorflow%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86---Tensorflow-gpu%E7%89%88%E6%9C%AC%E5%AE%89%E8%A3%85.html
  2. CUDA 官方安装指南:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
  3. cudnn官方安装指南:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html
  4. tensorflow官方安装指南:https://www.tensorflow.org/install/install_linux?hl=zh-cn
  5. CUDA对驱动版本要求:https://github.com/NVIDIA/nvidia-docker/wiki/CUDA#requirements

最后更新: 2019年04月19日 21:37

原始链接: http://andersjing.com/2018/07/25/tensorflow-gpu/

× 请打赏~
打赏二维码