Ubuntu 16.04安装tensorflow_gpu 1.9.0的方法

严正声明:本文系作者davidhopper原创,未经许可,不得转载。

说明:本文写作之时(2018年7月25日)tensorflow 1.9.0不支持CUDA 9.1、CUDA 9.2,仅支持CUDA 9.0。

原以为按照TensorFlow官方帮助文档安装TensorFlow GPU版会比较顺利,结果发现自己又想多了。安装过程中踩了无数个坑,最终总算安装成功。现将安装过程记录下来,给有需要的同学参考借鉴。

一、安装配置CUDA

首先到CUDA官网下载CUDA安装包,网页中默认提供的版本就是最新版CUDA 9.2,如果不注意下载并安装了该版本,对不起你入了第一个坑,后面的tensorflow_gpu过程不会报任何错,但当你安装完毕后执行python -c "import tensorflow as tf; print(tf.__version__)"语句时,就会出现找不到动态库的错误(错误界面忘了截屏,反正就是报缺少一个CUDA相关的动态库,究其原因,就是CUDA的版本安装不正确,必须要安装CUDA 9.0才行。但光看那个错误,谁又能想到是CUDA版本不对造成呢?)。
现在的问题有两个:首先,如何才能在官网下载CUDA 9.0安装包;其次,如果已经安装了最新的CUDA 9.2,如何缷载并安装CUDA 9.0?下面分别解答这两个问题:

1.1 下载CUDA 9.0安装包

进入CUDA官网,找到网页右上角的搜索图标(一个放大镜图标),点击该图标,并填写搜索内容:CUDA Toolkit Archive,然后按回车键搜索,如下图所示:
2
在搜索结果页面中,点击第一项,并按下图中的操作下载文件cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb即可:
3
4
5

1.2 缷载以前安装的CUDA版本

tensorflow_gpu 1.9.0只支持CUDA9.0版本,因此需要缷载以前安装的其他CUDA版本。如果以前未安装过CUDA,可直接跳过本步骤。
使用如下命令彻底缷载其他CUDA版本:

sudo apt-get purge cuda  # 也可使用sudo apt-get --purge remove cuda
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get clean

将缓存的CUDA相关的安装包目录删除:

# 假如之前安装的是cuda 9.2,则删除9.2版安装包目录,其他版本照此办理
sudo rm -rf /var/cuda-repo-9-2-local

同时删除CUDA缓存的apt-get安装源配置文件:

cd /etc/apt/sources.list.d/
# 如果有cuda 9.2的安装源配置文件文件,则删除之,其他版本照此办理
sudo rm cuda-9-2-local.list*

当然,还不要忘了修改配置文件~/.bashrc,把与CUDA相关的环境变量设置删除

vi ~/.bashrc

如果在文件尾部发现有类似如下内容,请将其删除:

export PATH=/usr/local/cuda-9.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.2/lib64:/usr/local/cuda-9.2/extras/CUPTI/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

1.3 安装并配置CUDA 9.0

1.3.1 安装CUDA 9.0

进入步骤1.1中下载文件cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb所在目录,执行如下命令安装CUDA 9.0:

cd ~/tools/cuda/cuda9.0_for_ubuntu16.04/
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda

1.3.2 配置CUDA 9.0

修改配置文件~/.bashrc,把与CUDA相关的环境变量设置删除

vi ~/.bashrc

在文件尾部添加如下配置内容:

# Added by CUDA
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:/usr/local/cuda-9.0/extras/CUPTI/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

由于CUDA会更新NVIDIA显卡驱动程序,因此此处必须重启电脑,而不能仅使用source ~/.bashrc命令更新环境变量设置。

1.3.3 验证CUDA 9.0是否安装成功

首先使用命令:

cat /proc/driver/nvidia/version

确认已加载了正确的显卡驱动程序,显示内容类似如下:

NVRM version: NVIDIA UNIX x86_64 Kernel Module  384.130  Wed Mar 21 03:37:26 PDT 2018
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)

接下来,使用命令:

nvcc -V

确认CUDA程序已正常运行,内容类似如下:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

最后,运行命令:

cuda-install-samples-9.0.sh ~

将cuda示例程序复制到当前的用户目录。之后执行如下命令,编译并运行示例程序(编译时间较长),确认CUDA工作正常:

cd ~/NVIDIA_CUDA-9.0_Samples/
make -j 8
cd bin/x86_64/linux/release/
./deviceQuery

6

1.3.4 可能存在的问题:

如果安装时出现无法定位CUDA的错误:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package cuda

或仍然安装CUDA 9.2而不是CUDA 9.0:

Reading state information... Done
The following additional packages will be installed:
  cuda-9-2 cuda-command-line-tools-9-2 cuda-compiler-9-2 cuda-cublas-9-2
  cuda-cublas-dev-9-2 cuda-cudart-9-2 cuda-cudart-dev-9-2 cuda-cufft-9-2
  cuda-cufft-dev-9-2 cuda-cuobjdump-9-2 cuda-cupti-9-2 cuda-curand-9-2
  cuda-curand-dev-9-2 cuda-cusolver-9-2 cuda-cusolver-dev-9-2
  cuda-cusparse-9-2 cuda-cusparse-dev-9-2 cuda-demo-suite-9-2
  cuda-documentation-9-2 cuda-driver-dev-9-2 cuda-drivers cuda-gdb-9-2
  cuda-gpu-library-advisor-9-2 cuda-libraries-9-2 cuda-libraries-dev-9-2
  cuda-license-9-2 cuda-memcheck-9-2 cuda-misc-headers-9-2 cuda-npp-9-2
  cuda-npp-dev-9-2 cuda-nsight-9-2 cuda-nvcc-9-2 cuda-nvdisasm-9-2
  cuda-nvgraph-9-2 cuda-nvgraph-dev-9-2 cuda-nvml-dev-9-2 cuda-nvprof-9-2
  cuda-nvprune-9-2 cuda-nvrtc-9-2 cuda-nvrtc-dev-9-2 cuda-nvtx-9-2
  cuda-nvvp-9-2 cuda-runtime-9-2 cuda-samples-9-2 cuda-toolkit-9-2
  cuda-tools-9-2 cuda-visual-tools-9-2 nvidia-396 nvidia-396-dev
  nvidia-modprobe
The following NEW packages will be installed:
  cuda cuda-9-2 cuda-command-line-tools-9-2 cuda-compiler-9-2 cuda-cublas-9-2
  cuda-cublas-dev-9-2 cuda-cudart-9-2 cuda-cudart-dev-9-2 cuda-cufft-9-2
  cuda-cufft-dev-9-2 cuda-cuobjdump-9-2 cuda-cupti-9-2 cuda-curand-9-2
  cuda-curand-dev-9-2 cuda-cusolver-9-2 cuda-cusolver-dev-9-2
  cuda-cusparse-9-2 cuda-cusparse-dev-9-2 cuda-demo-suite-9-2
  cuda-documentation-9-2 cuda-driver-dev-9-2 cuda-drivers cuda-gdb-9-2
  cuda-gpu-library-advisor-9-2 cuda-libraries-9-2 cuda-libraries-dev-9-2
  cuda-license-9-2 cuda-memcheck-9-2 cuda-misc-headers-9-2 cuda-npp-9-2
  cuda-npp-dev-9-2 cuda-nsight-9-2 cuda-nvcc-9-2 cuda-nvdisasm-9-2
  cuda-nvgraph-9-2 cuda-nvgraph-dev-9-2 cuda-nvml-dev-9-2 cuda-nvprof-9-2
  cuda-nvprune-9-2 cuda-nvrtc-9-2 cuda-nvrtc-dev-9-2 cuda-nvtx-9-2
  cuda-nvvp-9-2 cuda-runtime-9-2 cuda-samples-9-2 cuda-toolkit-9-2
  cuda-tools-9-2 cuda-visual-tools-9-2 nvidia-396-dev nvidia-modprobe
The following packages will be upgraded:
  nvidia-396
1 upgraded, 50 newly installed, 0 to remove and 20 not upgraded.
Need to get 78.0 MB/1,224 MB of archives.
After this operation, 2,643 MB of additional disk space will be used.
Do you want to continue? [Y/n] n
Abort.

则执行下述命令重新配置apt-get的安装源:

cd /etc/apt/sources.list.d/
# 如果有,则删除
sudo rm cuda-9-2-local.list*
# 新增一个配置文件文件
sudo vi cuda-9-0-local.list 

配置文件内容非常简单,如下所示:

deb file:///var/cuda-repo-9-0-local /

保存退出后,执行如下命令,重新安装CUDA 9.0。

cd ~/tools/cuda/cuda9.0_for_ubuntu16.04/
sudo apt-get update
sudo apt-get install cuda

1.4 安装并配置CUDNN 7.1 for CUDA 9.0

1.4.1 下载CUDNN 7.1 for CUDA 9.0

下载CUDNN需要在官网注册一个账号,登录后下载CUDNN 7.1 for CUDA 9.0(共三个文件),如下图所示:
7

1.4.2 安装CUDNN 7.1 for CUDA 9.0

进入CUDNN 7.1 for CUDA 9.0三个文件所在的目录,执行如下命令安装:

cd ~/tools/cudnn/7.1_for_cuda9.0
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

1.4.3 验证CUDNN 7.1 for CUDA 9.0是否安装成功

使用如下命令将示例代码复制到当前用户目录,编译并运行其中的一个示例程序mnistCUDNN

cp -r /usr/src/cudnn_samples_v7/ ~
cd ~/cudnn_samples_v7/mnistCUDNN
make clean && make
./mnistCUDNN

如果CUDNN安装成功,则测试结果如下图所示:
8

二、安装tensorflow-gpu 1.9.0

TensorFlow官方帮助文档为Ubuntu 16.04提供五种安装方式,我选择原汁原味的第二种方式:Use pip in your system environment
9
安装指令没有太多值得讲究的地方,但如果你按照帮助文档去安装,由于天朝伟大的墙的杰作,网速慢如蜗牛,我保证你花一年时间也装不上。该怎么办呢?可以使用国外代理服务器,也可以使用国内镜像服务器。我试过使用国外代理服务器,效果很差,网速几乎没有任何改善。为此,我采用借助国内镜像服务器的方法。

2.1 动态选择默认的python版本

ubuntu16.04中默认安装了python 2.7和python 3.5,如何选择并确认当前使用的python版本?
首先使用如下指令确认已同时安装python 2.7和python 3.5:

cd /usr/bin
ls | grep python

10
执行如下指令对python版本动态配置(注意python 3.5赋予的权重要小一些,否则不一定能从高版本切换至低版本):

# 如果以前配置了python,则删除之
sudo update-alternatives --remove-all python
# python2赋予权重80
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 80
# python3赋予权重20
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 20
# 动态切换当前使用的版本,在出现的界面中根据需要选择1或者2,
# 即可动态选择使用python 2.7还是python 3.5。
sudo update-alternatives --config python
# 查看当前python版本
python -V

11

2.2 将pip服务器更换为国内的镜像服务器

修改 ~/.pip/pip.conf (没有就创建一个):

# 如果不存在此文件夹,则创建之
mkdir ~/.pip
vi ~/.pip/pip.conf

内容如下:

[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

2.3 使用python 2.7安装tensorflow-gpu 1.9.0

安装指令如下:

# 如果本机未安装python和pip,则安装之
sudo apt-get install python-pip python-dev
# 更新pip
sudo pip install -U pip
# 安装tensorflow-gpu 1.9.0
sudo pip install tensorflow-gpu==1.9.0

2.4 使用python 3.5安装tensorflow-gpu 1.9.0

如果将默认的python脚本设置成了python3.5,则安装指令与2.3节相同,若未设置,则安装指令如下:

# 如果本机未安装python和pip,则安装之
sudo apt-get install python3-pip python3-dev
# 更新pip
sudo pip3 install -U pip
# 安装tensorflow-gpu 1.9.0
sudo pip3 install tensorflow-gpu==1.9.0

2.5 验证tensorflow-gpu 1.9.0是否安装成功

执行如下命令:

python -c "import tensorflow as tf; print(tf.__version__)"

如果输出结果:

1.9.0

表明安装成功。

2.5 可能遇到的问题

2.5.1 使用python 3.5安装出现numpy版本不一致问题

根据我的实践,使用python 3.5安装tensorflow-gpu 1.9.0时不会报错,但使用语句python -c "import tensorflow as tf; print(tf.__version__)"验证tensorflow-gpu 1.9.0是否安装成功时,会出现如下警告信息:
9_1
这是因为使用pip安装的numpy版本太高造成,使用如下方法安装低版本numpy可以消除此警告:

sudo pip3 uninstall -y numpy
sudo apt-get install python3-numpy

2.5.2 笔记本ThinkPad P50s安装时的问题

我在笔记本ThinkPad P50s上使用命令sudo pip install tensorflow-gpu==1.9.0安装tensorflow_gpu 1.9.0时遇到了两个问题:一是缺少笔记本电脑所需的包launchpadlib,二是电脑中已安装了包markdown,但是通过某个第三方程序安装(说实话,我也忘了是哪个程序安装的),pip命令无法缷载,错误截图如下:
12
第一个错误很好处理,执行如下命令即可:

sudo pip install launchpadlib

第二个错误处理,我首先尝试手工删除markdown包(具体操作如下图所示),但不奏效。
13
改用如下命令强制重新安装markdown后,问题得到解决:

sudo pip install --ignore-installed markdown

三、查看CPU/GPU的使用情况

基于tensorflow-gpu 1.9.0开发深度学习或深度强化学习程序后,在运行过程中要实时监控机器的CPU/GPU的使用情况。

3.1 CPU使用情况

# 比较简单的监控
top
# 更为详细的监控
# 如果第一次使用,首先安装htop
sudo apt-get install htop
htop

3.2 GPU使用情况

# 单次查看
nvidia-smi
# 实时监控,每秒刷新一次
watch -n 1 nvidia-smi

猜你喜欢

转载自blog.csdn.net/davidhopper/article/details/81206673