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

环境

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

安装过程概述

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

安装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,出现下面的信息,说明显卡驱动安装成功

Tue Mar 20 17:23:58 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1070    Off  | 00000000:01:00.0  On |                  N/A |
| 37%   32C    P8    15W / 250W |    304MiB /  8112MiB |     18%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1318      G   /usr/lib/xorg/Xorg                           219MiB |
|    0      2015      G   compiz                                        43MiB |
|    0      2667      G   ...-token=ABCA5882048C240CCA072B2C7142D502    35MiB |
|    0      2951      G   unity-control-center                           3MiB |
+-----------------------------------------------------------------------------+

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

解决桌面循环登陆问题

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

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

准备后续安装文件

下载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

下载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

下载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下面。

安装CUDA 8.0

安装步骤

首先进入~/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 ]:

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

Installing the CUDA Toolkit in /usr/local/cuda-8.0 ...
  Missing recommended library: libGLU.so
  Missing recommended library: libX11.so
  Missing recommended library: libXi.so
  Missing recommended library: libXmu.so

  Installing the CUDA Samples in /home/chengkai ...
  Copying samples to /home/chengkai/NVIDIA_CUDA-8.0_Samples now...
  Finished copying samples.

  ===========
  = Summary =
  ===========

  Driver:   Not Selected
  Toolkit:  Installed in /usr/local/cuda-8.0
  Samples:  Installed in /home/chengkai, but missing recommended libraries

  Please make sure that
   -   PATH includes /usr/local/cuda-8.0/bin
    -   LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add
	/usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root

	To uninstall the CUDA Toolkit, run the uninstall script in
	/usr/local/cuda-8.0/bin

	Please see CUDA_Installation_Guide_Linux.pdf in
	/usr/local/cuda-8.0/doc/pdf for detailed information on setting up CUDA.

	***WARNING: Incomplete installation! This installation did not install
	the CUDA Driver. A driver of version at least 361.00 is required for CUDA
	8.0 functionality to work.
	To install the driver using this installer, run the following command,
	replacing <CudaInstaller> with the name of this run file:
	    sudo <CudaInstaller>.run -silent -driver

		Logfile is /tmp/cuda_install_3662.log

设置环境变量

在终端中执行

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的版本信息,如下所示

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

测试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)。

安装缺失的库

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

/usr/bin/ld: cannot find -lglut
collect2: error: ld returned 1 exit status
Makefile:270: recipe for target 'marchingCubes' failed
make[1]: *** [marchingCubes] Error 1
make[1]: Leaving directory '/home/chengkai/NVIDIA_CUDA-8.0_Samples/2_Graphics/marchingCubes'
Makefile:52: recipe for target '2_Graphics/marchingCubes/Makefile.ph_build' failed
make: *** [2_Graphics/marchingCubes/Makefile.ph_build] Error 2

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

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

到此,CUDA 8.0安装成功。

安装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就安装好了。

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

tar zxvf cudnn-8.0-linux-x64-v5.1.tgz #解压
cd cuda/include #进入include目录
sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
cd ../lib64 #进入lib64目录
sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件
# 以下的两步设置软连接时,
一定要注意自己电脑的/usr/local/cuda/lib64/下的libcudnn.so.5.1.5名字,
有的可能是libcudnn.so.5.0.5等,要依据自己的电脑上的文件来定
sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 #生成软链接
sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接
sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5 #生成软链接
sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接

安装anaconda 2

安装步骤

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

更换国内镜像

参考自: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 免费仓库。

遇到的问题

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

安装tensorflow 1.4.0

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

安装步骤

参考自官方教程: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是否安装好

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

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

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/

在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了。效果如下:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

18 − 12 =

78 − 76 =