Ubuntu 16.04 LTS+GTX1070环境下安装tensorflow GPU详细流程

Contents
[隐藏]

1.环境

  • 系统:Ubuntu 16.04LTS
  • 显卡:GTX 1070

2.安装过程概述

  1. 安装NVIDIA显卡驱动
  2. 准备后续安装文件
  3. 安装CUDA8.0
  4. 安装cudnn6.0
  5. 安装anaconda2
  6. 安装tensorflow1.4.0
  7. 在pycharm中使用tensorflow

3.安装NVIDIA显卡驱动

首先说一下我走过的坑:我安装完Ubuntu系统之后是没有安装NVIDIA显卡驱动的,后来在System Settings->Software & Updates->Additional Drivers里查到是一个X开头的驱动,只可惜没有记下来,因为安装上NVIDIA的驱动之后就不见了。由于是第一次搭建整个环境,上来就直接安装CUDA8.0的deb文件,而且没有注意到里面有NVIDIA显卡的驱动,就稀里糊涂的全部同意,安装完之后重启电脑就傻眼了,系统一直在登陆界面循环,就是进不了系统,而且CTRL+ALT+F1~F6也进不了字符界面,屏幕上只有一个光标,其他什么东西也没有,而且无法输入任何字符或命令。解决这个问题办法见本节的最后。后来我从官网单独下载了显卡.run驱动文件,安装完之后,也遇到了循环登陆的问题。后来尝试了好多办法,最后用下面的办法成功安装上了驱动。另外,网上有人说需要退出图形界面才能成功安装NVIDIA驱动,但是我没有退出也成功安装了,不知为何。说完我走过的坑,下面就介绍我成功安装NVIDIA显卡驱动的方法。

首先卸载驱动(不管有没有安装NVIDIA的驱动,先卸载一下再说):
sudo nvidia-uninstall

在线安装:
sudo apt-add-repository ppa:graphics
sudo apt-get update
sudo apt-get install nvidia-384 #我用的是这个驱动

安装完之后,在终端输入nvidia-smi,出现下面的信息,说明显卡驱动安装成功

如果找不到nvidia-smi命令,重启电脑就可以,我就是重启电脑才能成功运行nvidia-smi命令。

3.1.解决桌面循环登陆问题

重启电脑,在启动的时候不选择Ubuntu,而选择第二项:Advanced Options for Ubuntu,然后在接下来的界面中使用方向键选择root,会进入黑色的命令行,且以root身份登陆。这时如果进入/home,使用ll查看文件夹信息,会发现没有任何用户文件夹,这需要等一会儿,可以多运行几个cdll等不会改变文件的命令。过一会儿会发生变化,一直按Enter键,等正常之后,再次进入/home,并使用ll查看,这时就可以看到用户文件夹了。此刻才可以正常执行卸载显卡的命令。如果你们的电脑没有上面这个问题,就直接执行卸载显卡驱动的命令就行,可能是我的电脑有点儿奇葩。

执行以下命令卸载NVIDA显卡驱动
sudo apt-get remove --purge nvidia-*
中间有一个确认提示,输入y,并Enter就行了
最后reboot,重启之后就可以正常登陆了。

4.准备后续安装文件

4.1.下载CUDA 8.0

这里选择CUDA Toolkit 8.0 GA2 (Feb 2017),并在后续步骤中依次选择Linux->x86_64->Ubuntu->16.04->runfile (local)下载。注意,一定要选择runfile,不要选择deb,因为deb文件自带显卡驱动,会把之前安装好的显卡驱动覆盖掉。下载后的文件名是cuda_8.0.61_375.26_linux.run

4.2.下载cudnn 6.0

下载cudnn之前需要注册并填写调查问卷,请认真填写这个调查问卷。

这里下载,依次选择 “Download cuDNN v6.0 (April 27, 2017), for CUDA 8.0”->cuDNN v6.0 Library for Linux。下载下来是一个.tgz的压缩包,文件名是cudnn-8.0-linux-x64-v6.0.tgz

4.3.下载anaconda 2

官网下载比较慢,可以在byrbt上下载(针对在校生),也可以在清华大学开源软件镜像站里下载,选择Anaconda2-4.4.0-Linux-x86_64.sh下载。等安装完CUDA 8.0、cudnn 6.0和anaconda 2之后再下载tensorflow 1.4.0,所以在此先不下载。

把下载好的3个文件拷贝的一个比较容易访问的目录,我把文件放到了~/Downloads下面。

5.安装CUDA 8.0

5.1.安装步骤

首先进入~/Downloads目录,在终端执行命令
sudo sh ./cuda_8.0.44_linux.run

首先是一大堆条款,可以直接回车到底
输入accept接受条款,即下面

Do you accept the previously read EULA?
accept/decline/quit: accept

接下来是询问是否安装驱动,此处一定要选择no,此处一定要选择no,此处一定要选择no,不然之前安装的驱动就被覆盖了,还可能导致循环登陆的问题。输入n,不安装NVIDIA驱动。
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26?
(y)es/(n)o/(q)uit: n

输入y,安装CUDA Toolkit
Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: y

回车,使用默认安装路径/usr/local/cuda-8.0
Enter Toolkit Location
[ default is /usr/local/cuda-8.0 ]:

输入y。安装指向/usr/local/cuda的符号链接
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y

输入y。安装Samples。
Install the CUDA 8.0 Samples?
(y)es/(n)o/(q)uit: y

回车。 使用Samples默认安装路径/home/xxxx此处的xxxx指的是你的用户名
Enter CUDA Samples Location
[ default is /home/xxxx ]:

接下来就是安装,并显示一些信息。安装完之后会显示如下信息:

5.2.设置环境变量

在终端中执行

sudo vim ~/.bashrc
在末尾添加
export CUDA_HOME=/usr/local/cuda-8.0
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64/${LD_LIBRARY_PATH:+: ${LD_LIBRARY_PATH}}
export LPATH=/usr/lib/nvidia-384:$LPATH
export LIBRARY_PATH=/usr/lib/nvidia-384:$LIBRARY_PATH
注意:LPATHLIBRARY_PATH要输入自己的显卡驱动路径,我的是384。

保存退出,然后使用下面代码刷新使环境变量生效
source ~/.bashrc

注意到上面信息中提示缺少一些库文件,比如libGLU.so, libX11.so, libXi.so, libXmu.so,使用下面命令添加缺少的库文件:
sudo apt-get install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev

如果现在输入nvcc -V的话,可能会提示命令nvcc找不到,需要重启电脑。在终端里执行
sudo reboot

重启完之后,输入
nvcc -V
可以看到CUDA的版本信息,如下所示

5.3.测试CUDA是否安装成功

然后进入CUDA Samples目录(如果没有更改Samples的安装目录的话,应该是在/home/username目录下,有一个NVIDA_CUDA-x.x_Samples的文件,其中x.x是版本号),在目录里执行make命令,编译NVIDIA给的例子。(有可能会因为gcc的版本太高而编译出错,可以到网上搜索降级gcc的办法,把gcc降到4.8版本,我用的是4.8.5版本。查看gcc版本的方法是gcc --version)。

5.4.安装缺失的库

在编译的过程中,我遇到了下面的问题,找不到lglut库,错误提示如下:

然后用关键词lglut搜索,找到如下解决方案:
sudo apt-get install freeglut3 freeglut3-dev
通过上面命令就可以把缺失的库安装上。

然后执行make clean,把编译错误的文件删掉,重新执行make命令编译。编译时间比较长,耐心等待。编译完之后,会在对应的文件夹中生成编译好的可执行文件。比如进入5_Simulation/nbody文件夹,在终端中执行./nbody,会看到如下效果。

到此,CUDA 8.0安装成功。

6.安装cuDNN 6.0

相比CUDA来讲,cuDNN就简单多了。cudNN不是安装文件,而是一个头文件和一些库文件,只需要把这些文件复制到对应的目录上,并修改权限就可以了。安装过程如下:
进入到~/Downloads目录,使用tar进行解压
tar -xvf cudnn-8.0-linux-x64-v6.0.tgz

解压后把相应的文件拷贝到对应的CUDA目录下即可
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
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
这样cudNN 6.0就安装好了。

###################升级的时候可能会用到,暂时不用管################

7.安装anaconda 2

5.1.安装步骤

进入终端,执行如下命令安装
sudo bash Anaconda2-4.4.0-Linux-x86_64.sh
读完license,输入yes
确认安装地址(可保留默认)
确认安装路径(可保留默认)
安装完之后,重新载入.bashrc文件(安装文件会在.bashrc文件末尾添加一行文字),载入方法如下:
source ~/.bashrc

7.2.更换国内镜像

参考自:https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
即可添加 Anaconda Python 免费仓库。

7.3.遇到的问题

  1. 如果开了代理等科学上网工具,使用conda可能会出现错误,只需要把代理关掉就行。
  2. 默认情况下,conda会使用国外的镜像,导致速度比较慢,可以通过上一小节更换成国内镜像。

8.安装tensorflow 1.4.0

终于看到了tensorflow,一步步下来不容易啊。

5.1.安装步骤

参考自官方教程:https://www.tensorflow.org/install/install_linux#installing_with_anaconda

打开终端,创建conda环境,此处将环境命名为tensorflow
conda create -n tensorflow pip python=2.7 # or python=3.3, etc.
激活conda环境
source activate tensorflow
(tensorflow)$ # Your prompt should change
使用如下代码安装tensorflow,由于使用谷歌的镜像速度太慢,我换成了清华镜像,并选择tensorflow 1.4的GPU加速版本。
pip install \
-i https://pypi.tuna.tsinghua.edu.cn/simple/ \
https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/gpu/tensorflow_gpu-1.4.0-cp27-none-linux_x86_64.whl

可以在conda环境中使用如下命令测试tensorflow是否安装好

如果输出了
Hello, TensorFLow!
就代表tensorflow安装好了。

8.2.tensorflow清华镜像网站

https://mirrors.tuna.tsinghua.edu.cn/help/tensorflow/
GPU加速1.4版本python2.7的镜像链接如下
pip install \
-i https://pypi.tuna.tsinghua.edu.cn/simple/ \
https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/gpu/

9.在pycharm中使用tensorflow

如何安装pycharm就不在这里说了,可自行百度。

安装完之后启动pycharm并创建一个空的Python工程。接下来有两步需要做:

第一步:修改Project Interpreter。依次选择File->Settings...->Project: projectName->Project Interpreter。在右边有个小齿轮,单击这个小齿轮,选择Add Local,然后选择在第5步中创建的名为tensorflow的conda环境所在的目录中的python,比如我的路径是~/.conda/envs/tensorflow/bin/python2.7,选完路径之后,会发现在下面的列表中会出现tensorflow-gpu字样,就说明路径选对了,否则请再确认路径。最后点击ApplyOK应用。

完成第一步,在window环境下应该可以使用了,但是在Ubuntu环境下还不可以,否则会出现类似于下面的错误
_mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory

第二步:出现上面错误的原因是由于通过桌面快捷方式启动pycharm或通过在终端中执行pycharm安装路径/bin/pycharm.sh的方式启动pycharm,使得pycharm没有获取到环境变量,具体来说就是没有获取到~/.bashrc中的LD_LIBRARY_PATH变量的值(该变量是在安装CUDA 8.0的时候设置的)。解决这个问题的方法很简单(尽管很简单,但依旧花费了我一上午的时间才解决),就是在终端中执行charm命令就可以启动pycharm并获取环境变量。参考链接https://github.com/tensorflow/tensorflow/issues/9530

完成以上两步之后就可以成功在pycharm中import tensorflow了。效果如下:

分享到:

发表评论