深度学习环境配置综述——CUDA/cudnn/tensorflow三剑客

深度学习平常有所涉及,自己要捣鼓明白,有必要先从环境配置开始捣鼓,GPU加速训练是必不可少的,GPU加速的环境就是CUDA/cudnn/tensorflow这三样,本文试图将这一环境的众多细节介绍清楚。基于TF的Keras也差不多。要玩Pytorch就不在本文范围内了。

有必要叙述一下我的操作系统: CentOS ,想必Linux系统下都差不多?至少Ubuntu是差不多的。Windows系统怎么做有能力再写,不建议玩深度学习还用Windows的 ^.^

一. 前言

首先说明,深度学习这环境,不把许多细节弄清楚,可能在安装中/后,出现一大堆错误提示,不知所措。所以在自己捣鼓的时候也建议认真从头看。所以,前言部分是坠重要的。

1. 说明一下最重要的版本问题。最重要的放在前面说,简单一句话就是 CUDA、cudnn、tf 三者的版本是要一致的,而且一般不具有向下兼容的优点。下面列出版本对应的情况:

可以看到,CUDA 最新出了9.2,cudnn也各种版本跟随,到了7.1.4。简单来说,CUDA 9 对应 cudnn 7 ; CUDA 8 对应 cudnn 6。更低的版本可以不考虑了吧。

再了解一下 ,tensorflow的发展,目前最新似乎是1.9.0,但是即使是1.9.0 也仍然只是资词 CUDA 9.0。总结一下支持的版本是酱紫的

CUDA 9.0以上的先不要用,因为tf 没有资词的版本;

第一种推荐的组合是 CUDA 9.0 + cudnn 7.0 + Tensorflow 1.5 以上(查了一下,应该是1.5以上的都用CUDA 9.0,如果嫩们用这个组合的话,建议再了解一下tf 的版本问题);

第二种推荐的组合很稳定,也是鄙人安装的版本,CUDA 8.0 + cudnn 6.0 + Tensorflow 1.4 。

PS: 当初服务器上前人安装的 CUDA 9.1,没有对应的tf 版本,查了各种教程,github上找到了有人改写了现有的 Tensorflow 1.6可以支持CUDA9.1,然而装上还是有错误,好久解决不了,愤而改了组合二。

2.  明白了1以后,给大家提供几个鄙人参考的博客和官方文档、网站,嫩们看这些不往下看我都博客也可以。

 官方安装文档 NVIDIA CUDA Installation Guide for Linux, 为了捣鼓明白,鄙人确实认真的看了一部分;有篇博客算是翻译了一下:  Ubuntu16.04超低配版显卡GTX730配置pytorch-gpu+cuda9.0+cudnn, 步骤介绍很简洁实用;

下面两个差不多,可以参考:

Ubuntu16.04安装tensorflow_gpu教程

CentOS 7 卸载CUDA 9.1 安装CUDA8.0 并安装Tensorflow GPU版  (本地查看远程服务器Tensorboard 也可以了解一下)

关于版本啊,各种细节,以及在win系统的一下情况,可以参考下面博客及其相关文章:

我的AI之路(5)--如何选择和正确安装跟Tensorflow版本对应的CUDA和cuDNN版本。关于安装那些事博主写了十余篇,十分佩服。

二. CUDA及cudnn安装

废话说完了,终于可以开始安装了~

1)先检查安装的条件

  • lspci | grep -i nvidia 检查GPU是否支持cuda运算
  • uname -m && cat /etc/*release 确保你的系统支持cuda
  • gcc --version 确保你已安装gcc
  • uname -r 确保你的kernel版本满足安装需求(ubuntu16.04要求最低4.4)

2)然后下载CUDA和cudnn

下载也不是那么容易,在官网下载配套的二者,还需要注册账号之类的。CUDA下载  cudnn下载

可能速度也慢,但是提供了官网,有心思的可以去看看上面的东西。鄙人提供了自己的网盘,亲测可用的。而且是和我接下来的安装方法一致的(CUDA好像有两种安装方法)。

CUDA8+cudnn6网盘下载链接:https://pan.baidu.com/s/1IMNJGce6QRkA07KQtr7qsg   密码:v3bh

CUDA9+cudnn7网盘下载: 待添加

3)安装前

如果你跳过坑,安装了CUDA其他版本,可以卸载,如

cd /usr/local/cuda-9.1/bin
sudo ./uninstall_cuda_toolkit_9.1.pl

鄙人没有卸载之前的CUDA9.1,直接安装8,也是可行的。(可能会有一些前提,如果你出错了,我也不知道)因为安装目录在/usr/local/下,cuda有链接指向当前版本,所以你在安装8的时候,有个提示,是否链接,只要链接了已安装的9.1就不起作用了。

Do you want to install a symbolic link at /usr/local/cuda

4)安装CUDA

安装文件为cuda_8.0.61_375.26_linux.run ,执行需要root权限。

chmod +x cuda_8.0.61* # 加上执行权限
./cuda_8.0.61_375.26_linux.run

前面是长长的说明,略过后,选择同意;

第一个问题,是否安装NVIDIA驱动,这可能是一个问题,鄙人也不知其细节。 可供参考的情况是,有一次没安装,后来报错了(一般是指import tensorflow时候,后面会详细说),于是重新安装了驱动;又有一次,选择了安装NVIDIA,结果安装NVIDIA的时候失败,于是选择了不安装。
其他问题自己决定,默认装到/usr/local即可。

最后有一个samples的东东,如下

不打算看的话就不要安装了,想安装的话这样:到Samples目录,先make编译,然后到bin下找到deviceQuery,执行./deviceQuery,如果安装成功应该会显示类似如下信息:

...(省略)
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.1, CUDA Runtime Version = 8.0, NumDevs = 2, Device0 = Tesla K80, Device0 = Tesla K80
Result = PASS

5)安装cudnn

cuDNN的全称为NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络(Deep Neural Networks)中的基础操作而设计基于GPU的加速库。cuDNN为深度神经网络中的标准流程提供了高度优化的实现方式,例如convolution、pooling、normalization以及activation layers的前向以及后向过程。

cuDNN只是NVIDIA深度神经网络软件开发包中的其中一种加速库。想了解NVIDIA深度神经网络加速库中的其他包请戳链接https://developer.nvidia.com/deep-learning-software

基本上所有的深度学习框架都支持cuDNN这一加速工具,例如:Caffe、Caffe2、TensorFlow、Torch、Pytorch、Theano等。

江下载的这个文件cudnn-8.0-linux-x64-v6.0.solitairetheme8 改为 cudnn-8.0-linux-x64-v6.0.tgz (mv命令即可),复制到/usr/local目录下,然后解压即可:

tar -zxvf cudnn-8.0-linux-x64-v6.0.tgz

这就OK了,其实是解压后文件夹内的文件,自动移动到了相应位置,相当于下面的命令

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

6)修改环境变量

环境变量是一个很复杂的问题。我只是按别人写的这么修改,出现什么偏差不负泽:

vim ~/.bashrc
添加:
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-8.0
export PATH=$CUDA_HOME/bin:$PATH

source .bashrc

当然,如果安装的CUDA9, 环境变量里也要换。

7)验证

验证CUDA是否安装成功是个激动人心的时刻。

命令 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

或者是 nvidia-smi,可以查看当前显卡及占用进程(加 -l 可以实时更新):

具体可以看这篇博客,还是针对的win系统,很有借鉴意义: 深度学习配置CUDA8.0/9.0及对应版本cuDNN安装

文中提到了前面安装时说的 SAMPLES,貌似有一些功能,有机会有兴趣的话可以研究一番!

三. 安装Tensorflow-gpu

如果之前安装了其他tensorflow,应该先卸载。

pip uninstall tensorflow

然后安装并钦定版本:

pip install tensorflow-gpu==1.4.0

此时安装Keras也没有问题:

pip install keras

安装成功后可以简单测试一下是否成功:

import tensorflow as tf # 如果import没有出偏差就基本上成功了

sess = tf.Session()
# 出现下面这样的各种gpu字样 表示GPU可用,成功
2018-08-09 17:28:48.342553: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2018-08-09 17:28:48.677355: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: 
name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: 0000:06:00.0
totalMemory: 11.17GiB freeMemory: 11.09GiB
2018-08-09 17:28:48.973653: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 1 with properties: 
name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: 0000:07:00.0
totalMemory: 11.17GiB freeMemory: 370.88MiB
2018-08-09 17:28:48.973962: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1045] Device peer to peer matrix
2018-08-09 17:28:48.974022: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1051] DMA: 0 1 
2018-08-09 17:28:48.974034: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1061] 0:   Y Y 
2018-08-09 17:28:48.974043: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1061] 1:   Y Y 
2018-08-09 17:28:48.974164: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 0000:06:00.0, compute capability: 3.7)
2018-08-09 17:28:48.974184: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:1) -> (device: 1, name: Tesla K80, pci bus id: 0000:07:00.0, compute capability: 3.7)

# 我们也可以跑个运算看一下
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))

运行结果如下的话,说明你的tensorflow-gpu版本成功:

MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0
2018-07-24 10:16:54.250346: I tensorflow/core/common_runtime/placer.cc:874] MatMul: (MatMul)/job:localhost/replica:0/task:0/device:GPU:0
b: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2018-07-24 10:16:54.250413: I tensorflow/core/common_runtime/placer.cc:874] b: (Const)/job:localhost/replica:0/task:0/device:GPU:0
a: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2018-07-24 10:16:54.250437: I tensorflow/core/common_runtime/placer.cc:874] a: (Const)/job:localhost/replica:0/task:0/device:GPU:0
[[ 22.  28.]
 [ 49.  64.]]

如果是下面这样,说明你用的是cpu版本:

MatMul: (MatMul): /job:localhost/replica:0/task:0/device:CPU:0
2018-06-29 15:04:57.366949: I tensorflow/core/common_runtime/placer.cc:874
b: (Const): /job:localhost/replica:0/task:0/device:CPU:0
2018-06-29 15:04:57.367048: I tensorflow/core/common_runtime/placer.cc:874
a: (Const): /job:localhost/replica:0/task:0/device:CPU:0
2018-06-29 15:04:57.367099: I tensorflow/core/common_runtime/placer.cc:874
[[22. 28.]
 [49. 64.]]

如果你不知道你的机器的情况,这一方法也可以用来判断。

四. 结束语

到此就大功告成了,当然前提是验证的时候没有什么报错的信息。结尾处简要提一下一些错误。

ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory

出现这种 .so.8.0(如果安装的CUDA9,就是so.9.0;如果你的tf版本是1.5,而你安装的CUDA是8.0,那么这里也是so.9.0,也就是这是tf在倒入相应的库文件的过程),如果你确认版本对应没问题,那么这很可能是环境变量的问题了。

按照上面的教程设置的环境变量如果出现了这种偏差,建议检查一下,比如是否你安装的CUDA9 却全都照抄了我的= =,或者环境变量没有生效等问题。

最后总结一下,深度学习环境的配置,遵循下面的步骤:一是查看自己的机器配置、安装环境;二是三剑客之间的版本对应关系,选择合适的组合;三是下载及安装,多关注官方文档和官网;四是环境变量的配置;五是验证CUDA及Tensorflow是否成功。

谢谢大家观看,请大佬多多指教~

猜你喜欢

转载自blog.csdn.net/xutiantian1412/article/details/81509095
今日推荐