为了加速神经网络的训练,使用CPU训练速度很慢,所以使用cuda和cudnn对神经网络进行加速,在配置的过程中遇到了很多坑,大概配置了一两天,各种坑,网上也有很多教程但是实现起来各种ERROR,真心觉得累。经过差不多两天的时间终于把环境配置好。现将配置过程记录如下。
显卡:GeForce GTX 1080ti
系统:Ubuntu 18.04
cuda:9.0版本
cuDNN: cuDNN v7.1.4
TensorFlow:1.12版本
Keras:默认安装最新版
PyCharm:PyCharm2018专业版
我使用的是ppa源安装的方式,因为之前也从网上从官网上下载run文件进行安装,但是但是后面出现崩溃,又得重新安装,所以这里只讲解ppa源的安装方式。
首先,确保机器在使用NVIDIA的显卡,而非系统的nouveau驱动。
具体步骤:在软件与更新->附加驱动中,不要选择系统自带的nouveau驱动,我们选择带有NVIDIA字样的驱动选项,然后点击应用更改,重启。
并且我们可以看到显卡驱动的版本,我这里是390版本的驱动,下面我们来更新一下驱动。
在终端输入以下命令,添加PPA下载源,并更新源
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
同样,在终端输入下面命令,检测你的NVIDIA图形卡和推荐的驱动程序的模型。
ubuntu-drivers devices
从图中可以看到,这里有一个设备是GTX 1080Ti ,对应的驱动是NVIDIA -390, 396, 410和415,而推荐是安装415版本的驱动。
这里要说明一下,410和415版本的驱动是支持CUDA10.0以上版本的,而我们要安装的深度学习环境,比如Tensorflow需要CUDA9.0版本,所以根据我们的需求可以选择安装390或396版本的驱动。
通过以下命令安装驱动
sudo apt-get install nvidia-driver-396
安装后重启
sudo reboot
我本机装的是390版本的驱动,,考虑到396是BETA版本,没有更新到396版本的驱动。此处根据个人需求进行安装。
安装完后,通过如下命令检测是否安装成功。
nvidia-smi
nvidia-settings
下载地址:https://developer.nvidia.com/cuda-90-download-archive
我们按照自己机器的配置选择,这里选择的是CUDA9.0版本,如下图所示
从上图中可以看出,对于ubuntu系统cuda9.0支持17.04和16.04版本下载安装,但实际上,有点类似于word一样(高版本word能打开低版本的word文件)18.04版本的系统,能够安装16.04版本对应的CUDA。这里我们选择16.04版本,选择安装类型为runfile(local),可发现有一个基础安装包,和四个补丁包,都下载下来,也可以就下一个基础安装包。
在安装CUDA前,由于CUDA 9.0仅支持GCC 6.0及以下版本,而Ubuntu 18.04预装GCC版本为7.3,若gcc高于6.0版本,强行编译则会出现error: #error – unsupported GNU version! gcc versions later than 6 are not supported!错误。故手动对gcc进行降级,这里安装gcc6版本,gcc-6和g++ -6,大家可以自行决定版本,只要比错误中提到的支持上限小就没问题:
sudo apt-get install gcc-6
sudo apt-get install g++-6
通过命令替换掉之前的版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++ -6 50
最后通过gcc --version命令再次查看版本是否修改成功,如图所示,gcc安装成功。
在我们安装runfile之前,我们需要安装一些依赖关系,否则安装时出现类似Missing recommended library: libGLU.so这样的警告。
运行下面的命令安装缺少的依赖关系。
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
安装后,找到刚才下载的run文件,运行
sudo sh cuda_9.0.176_384.81_linux.run
注意:在安装过程中会提示是否需要安装显卡驱动(Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?),由于之前已经安装过显卡驱动程序,在这里要选择n,其他的选择y或者回车键进行安装,正确安装结果如下图所示:
可以选择继续安装下载的四个补丁文件,也可以不安装,安装命令如下:
sudo sh cuda_9.0.176.1_linux.run.1_linux-run
sudo sh cuda_9.0.176.2_linux.run.2_linux-run
sudo sh cuda_9.0.176.3_linux.run
sudo sh cuda_9.0.176.4_linux.run
完成以上的步骤以后一定要进行环境的配置。按步骤输入一下命令:
sudo gedit ~/.bashrc
会弹出一个可写的配置文件,在末尾把以下配置写入并保存。
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
最后执行
source ~/.bashrc
有时候也需要重启。最好重启一下。
在安装cuda的时候也相应的安装了cuda的一些例子,可以进入例子的文件夹然后使用make命令执行。
从网上找了两个例子,例一:
# 第一步,进入例子文件
cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
# 第二步,执行make命令
sudo make
# 第三步
./deviceQuery
如果结果有GPU的信息,显示Result=pass,则测试通过,说明安装成功。
安装好CUDA9.0后,接下来就安装cuDNN,进入cuDNN下载页面,地址:https://developer.nvidia.com/rdp/cudnn-archive
选择Download cuDNN v7.1.4 (May 16, 2018), for CUDA 9.0 -> cuDNN v7.1.4 Library for Linux下载。下载需要注册一个NIVDIA账号。
此处有两种方法可以安装,分别介绍一下:
将cuDNN v7.1.4 Library for Linux链接的文件下载好后,进入下载的文件夹,解压文件,复制cuDNN内容到CUDA相关文件夹内,具体操作命令如下:
tar -zxvf cudnn-9.0-linux-x64-v7.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*
通过以上步骤就可以安装好cuDNN了。
下载如图所示的三个文件,cuDNN v7.1.4 Runtime Library for Ubuntu16.04 (Deb)、cuDNN v7.1.4 Developer Library for Ubuntu16.04 (Deb)和cuDNN v7.1.4 Code Samples and User Guide for Ubuntu16.04 (Deb)
安装命令如下:
sudo dpkg -i libcudnn7_7.1.4.18-1_cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.1.4.18-1_cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.1.4.18-1+cuda9.0_amd64.deb
以上方法选择其中一个安装就行。
以下测试方法仅限于用上述方法2的安装过程,上述方法1虽然可以安装cudnn,但是却不知道怎么用官方样例代码测试cudnn是否安装成功(感觉可以通过训练的时间对比一下分析出是否安装成功),cuDNN安装成功后会在CUDA加速的基础上再加速1.5倍左右。
安装完以后需要进行测试是否安装成功,测试的过程如下图所示:
运行以下命令
cp -r /usr/src/cudnn_samples_v7/ $HOME
cd $HOME/cudnn_samples_v7/mnistCUDNN
make clean && make
./mnistCUDNN
最终如果有提示信息:“Test passed! ”,则说明安装成功,如图所示:
TensorFlow官方文档会指定每一个TensorFlow GPU版本所依赖的python、cuDNN、GPU显卡驱动和CUDA的版本。在安装的时候一定注意版本的对应关系,若Python、cuDNN、GPU显卡驱动和CUDA的版本有低于TensorFlow GPU 要求的版本,在安装和使用过程中会出现错误。下表是TensorFlow GPU在Linux系统下版本对应表。
TensorFlow GPU | python | cuDNN | CUDA |
---|---|---|---|
1.12 | 2.7、3.3-3.6 | >=7.2 | 9 |
1.11 | 2.7、3.3-3.6 | >=7.2 | 9 |
1.10 | 2.7、3.3-3.6 | 7 | 9 |
1.9.0 | 2.7、3.3-3.6 | 7 | 9 |
1.8.0 | 2.7、3.3-3.6 | 7 | 9 |
1.7.0 | 2.7、3.3-3.6 | 7 | 9 |
1.6.0 | 2.7、3.3-3.6 | 7 | 9 |
1.5.0 | 2.7、3.3-3.6 | 7 | 9 |
1.4.0 | 2.7、3.3-3.6 | 6 | 9 |
1.3.0 | 2.7、3.3-3.6 | 6 | 9 |
1.2.0 | 2.7、3.3-3.6 | 5.1 | 9 |
1.1.0 | 2.7、3.3-3.6 | 5.1 | 9 |
1.0.0 | 2.7、3.3-3.6 | 5.1 | 9 |
这里我们安装的是1.12版本,终端直接用pip3 install tensorflow-gpu命令安装即可。
写一个hello, world,测试一下安装的框架是否可以正常使用
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
运行成功后如图所示:
如果运行发现错误提示:ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
错误原因及解决方法如下:
原因1:cuda9.0以及cudnn7未能安装或正确安装。
解决方案:安装cuda及对应cudnn,已安装情况下检查路径usr/local/cuda-9.0/lib64下是否有 libcublas.so.9.0文件
原因2:tensorflow版本与cuda不对应。
解决方案:检查版本对应,并适当升级。
原因3:路径未加入环境
解决方案:sudo gedit ~/.bashrc 在文档尾部加上
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/local/cuda-9.0/lib64/
如果之前添加过但写法与此不同,仍然报错,请按此格式添加,改成上边的写法就不报错了。
添加完路径之后别忘了执行source ~/.bashrc
通过查阅pytorch官网,根据我们的系统环境,得知安装方法如下图所示
如果你是其他配置,可以进官网进行查看如何安装,这里我们执行以下命令安装PyTorch,
pip3 install torch torchvision
安装好后,我们写个程序测试一下是否安装成功
import torch as t
x = t.rand(5,3)
y = t.rand(5,3)
if t.cuda.is_available():
x = x.cuda()
y = y.cuda()
print(x+y)
运行后如果有下图中的输出,则代表成功调用GPU加速并且pytorch安装成功,否则没有成功调用。
此过程可以参考我之前写的一篇博文:https://blog.csdn.net/IT_xiao_bai/article/details/79171703
在这里就不赘述了。
至此,深度学习的环境配置基本完成,接下来就开始进行深度学习之旅吧~
ps:欢迎大家转载,转载请注明出处https://blog.csdn.net/IT_xiao_bai/article/details/84782311