Install TensorFlow and MXNet on an Ubuntu

Abstract: The blog will introduce the whole process of how to install CUDA, TensorFlow, and MXNet environment on a Ubuntu computer. Demos of testing if the installations are successfull will also be showed. The edition of the software are CUDA 9.0, TensorFlow 1.5, MXNet-cu90 1.2 and Ubuntu 17.10.

工欲善其事,必先利其器。为了更便捷地搭建人工神经网络,选择一个深度学习框架还是十分必要的。经历了数次的重装系统和各个版本不兼容的问题,终于成功让CUDA、TensorFlow和MXNet运行在了我的Ubuntu操作系统之上。

数次重装的经历也让我明白了一个小道理。其实我一直的习惯就是啥软件都用最新的,所以截止2018年6月,Ubuntu的最新版本是18.04,CUDA的最新版本是9.2,所以我就毫不犹豫的安装上了,然后就开始了TensorFlow和MXNet的安装,结果安装了一天,都有问题,程序都无法运行。最后各种查阅确认了问题的原因是,Ubuntu版本太新,CUDA不支持,CUDA版本太新,俩框架TensorFlow和MXNet也都支持的不好。所以人生经验get:

最新的不一定是最好的。

经过以上的折腾,最后选定了如下的各个软件版本:

Ubuntu 17.10
CUDA 9.0
TensorFlow 1.5
MXNet 1.2

经过测试,这个版本组合是可以的,所以推荐。

怎么安装Ubuntu操作系统这里就不再赘述了,这不是本文的重点,所以接下来的叙述我们就默认我们已经拥有一台安装有Ubuntu 17.10操作系统的电脑。

1 安装NVIDIA显卡驱动

安装好的Ubuntu系统自带X server驱动,而我们要想安装CUDA以及后续的一些软件,我们需要有NVIDIA显卡驱动。

我们先看看我们看看我们的显卡是什么型号,以及推荐的显卡驱动:

1
ubuntu-drivers devices

我的计算机显示如下:

1
2
3
4
5
6
modalias : pci:v000010DEd00001380sv000010DEsd00001380bc03sc00i00
vendor : NVIDIA Corporation
model : GM107 [GeForce GTX 750 Ti]
driver : nvidia-384 - distro non-free recommended
driver : nvidia-340 - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin

我们看到,系统推荐了三款驱动,我们可以使用以下命令自动安装推荐的驱动:

1
sudo ubuntu-drivers autoinstall

你也可以选择只安装其中一个驱动,命令如下

1
sudo apt install nvidia-384

经过一段时间后,显卡驱动就安装好了。打开Software&Updates就可以看到,驱动已经由原来的X server变为了 NVIDIA 384.
3-4.jpg

2 安装CUDA与cuDNN

我们去NVIDIA官网,找到CUDA9.0的下载链接

由于我们的操作系统是Ubuntu17.10,所以我们很容易找对对用的CUDA版本,如下图。我们需要下载runfile(local)和三个补丁(Patch1-3)。

3-1.jpg

下载完成后,我们再找到cuDNN的下载链接,需要注册后再能下载。注册后我们便可以进入到下载页面,找到cuDNN的v7.1.4 for CUDA9.0进行下载即可。下载完毕后,切到默认的Downloads文件夹,可以看到 cudnn-9.0-linux-x64-v7.tgz压缩包。接下来就可以对他们进行安装了。
3-2.jpg

2.1 gcc降级

由于CUDA 9.0仅支持GCC 6.0及以下版本,而现在的最新版本是7.0版本,所以我们需要对gcc进行降级。

我们可以先在命令行输入gcc命令,以确定系统是否已经安装好gcc,如果安装了,则需要降级,如果未安装,我们可以直接安装低版本。假设我们的系统已经安装有gcc-7.3版本,我们现在演示降级方法。我们需要安装6.0版本。

1
2
sudo apt-get install gcc-6
sudo apt-get install g++-6

装完后进入到/usr/bin目录下

1
ls -l gcc*

会显示以下结果

1
lrwxrwxrwx 1 root root 7th May 16 18:16 /usr/bin/gcc -> gcc-7

发现gcc链接到gcc-7.0, 需要将它改为链接到gcc-6.0,方法如下:

1
2
sudo mv gcc gcc.bak #备份 
sudo ln -s gcc-6 gcc #重新链接

同理,对g++也做同样的修改(如果没安装g++,需要先安装g++):

1
ls -l g++*

会显示以下结果

1
lrwxrwxrwx 1 root root 7th May 16 18:16 /usr/bin/g++ -> g++-7

需要将g++链接改为g++-6.0:

1
2
sudo mv g++ g++.bak 
sudo ln -s g++-6 g++

再查看gcc和g++版本号:

1
2
gcc -v
g++ -v

均显示gcc version 6.0 ,说明gcc 6.0安装成功。

1
2
3
4
COLLECT_GCC=gcc
gcc version 6.4.0 20171010 (Ubuntu 6.4.0-8ubuntu1)
COLLECT_GCC=g++
gcc version 6.4.0 20171010 (Ubuntu 6.4.0-8ubuntu1)

2.2 安装CUDA

输入命令安装

1
sudo sh cuda_9.0.176_384.81_linux.run

需要注意的是,之前已经安装过显卡驱动程序,故在提问是否安装显卡驱动时选择no,其他 选择默认路径或者yes即可。
然后,继续执行以下操作安装3个 patch :

1
2
3
sudo sh cuda_9.0.176.1_linux.run
sudo sh cuda_9.0.176.2_linux.run
sudo sh cuda_9.0.176.3_linux.run

安装完毕之后,将以下两条加入.bashrc文件中:

1
gedit ~/.bashrc

在文件最后加入如下语句:

1
2
export PATH=/usr/local/cuda-9.0/bin${PATH:+:$PATH}} #注意,根据自己的版本,修改cuda-9.2/8.0...
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} #注意,根据自己的版本,修改cuda-9.2/8.0...

运行命令使其生效

1
source ~/.bashrc

那么,到这一步,cuda 就安装完成了,可以在终端输入nvcc -V,看看是否显示正确信息。

1
2
3
4
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

2.3 安装cuDNN

cuDNN的安装,就是将cuDNN包内的文件,拷贝到cuda文件夹中即可。下载完毕后,切到默认的Downloads文件夹,可以看到cudnn-9.0-linux-x64-v7.1.tgz压缩包。先解压,然后将其中的内容复制到CUDA安装文件夹里面。

1
2
3
4
5
sudo cp cuda/include/cudnn.h    /usr/local/cuda/include 
#注意,解压后的文件夹名称为cuda,将对应文件复制到 /usr/local中的cuda内
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*

到此处,所有的安装就完成了。

一些提示:
由于安装过程比较容易出现问题,所以最好将文件cuda_9.0.176_384.81_linux.run,cuda_9.0.176.1_linux.run,
cuda_9.0.176.2_linux.run,cuda_9.0.176.3_linux.run,cudnn-9.0-linux-x64-v7.1.tgz拷到优盘或其他移动存储设备,当需要重装系统的时候,可以省去重新下载的时间耗费。

3 安装TensorFlow

官网参考文档地址:https://www.tensorflow.org/install/ ,安装的方式也有好几种,通过pip, docker, Anacodnda等,这里给出的是pip的安装方式。

3.1 确定python及pip的版本

输入命令python -V确认python的版本,需要2.7或者是3.3+。

输入命令pip -V或pip3 -V确认pip的版本,建议pip和pip3在8.1以上,如果不是则使用sudo apt-get install python-pip python-dev进行更新。如果系统里还没有安装pip或者pip3,则用以下命令安装:

1
2
sudo apt install pip
sudo apt install pip3

我安装的是python3,所以以下我选用的都是pip3安装方式。

3.2 安装tensorflow

根据自己的情况选择以下命令之一进行安装:

1
2
3
4
pip install tensorflow      # Python 2.7; 仅支持CPU
pip3 install tensorflow # Python 3.n; 仅支持CPU
pip install tensorflow-gpu # Python 2.7; 支持GPU
pip3 install tensorflow-gpu # Python 3.n; 支持GPU

该步骤为可选步骤,如果上一步失败了,可以通过以下命令来安装:

1
2
sudo pip  install --upgrade TF_PYTHON_URL   # Python 2.7
sudo pip3 install --upgrade TF_PYTHON_URL # Python 3.N

其中,TF_PYTHON_URL为TensrorFlow的python包,不同的操作系统、python版本、GPU支持状况需要选择不同的包,例如OS为Linux,python版本为3.4,仅支持CPU的情况下,TF_PYTHON_URL应当替换为 https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp34-cp34m-linux_x86_64.whl

但是,storage.googleapis.com的链接下载还是非常慢,所以我们这里采用从清华镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/help/tensorflow/ ,目前GPU版本的TensorFlow清华镜像站只提供到1.5版本(官方是1.8版本),所有我们这里安装1.5版本。

1
sudo pip3 install --upgrade https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/gpu/tensorflow_gpu-1.5.0-cp36-cp36m-linux_x86_64.whl

3.3 验证tensorflow是否安装成功

启动终端,输入python3,输入以下代码:

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

如果输出Hello, TensorFlow!则代表安装成功。

4 安装MXNet(Gluon)

4.1 安装Miniconda

根据操作系统下载并安装Miniconda(网址:https://conda.io/miniconda.html )。
3-3.jpg

安装时需要回答问题,均回答yes即可。

安装完成后,我们需要让conda生效。需要运行一次source ~/.bashrc或重启命令行。

4.2 安装MXNet(Gluon)

下载包含本书全部代码的包,解压后进入文件夹。运行如下命令。

1
2
3
mkdir gluon_tutorials_zh-1.0 && cd gluon_tutorials_zh-1.0
curl https://zh.gluon.ai/gluon_tutorials_zh-1.0.tar.gz -o tutorials.tar.gz
tar -xzvf tutorials.tar.gz && rm tutorials.tar.gz

但是,这个下载的特别慢,所以直接用下载软件对下载链接进行下载:https://zh.gluon.ai/gluon_tutorials_zh.tar.gz ,然后解压缩,并进入文件夹。此链接也可以用于将来代码的更新。

安装运行所需的依赖包并激活该运行环境。我们可以先通过运行下面命令来配置下载源,从而使用国内镜像加速下载:

1
2
3
4
# 优先使用清华 conda 镜像。
conda config --prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
# 或者选用科大 conda 镜像。
conda config --prepend channels http://mirrors.ustc.edu.cn/anaconda/pkgs/free/

使用文本编辑器打开之前解压得到的代码包里的文件“gluon_tutorials_zh-1.0/environment.yml”。如果电脑上装的是9.0版本的CUDA,将该文件中的字符串“mxnet”改为“mxnet-cu90”。如果电脑上安装了其他版本的CUDA(比如7.5、8.0、9.2等),对该文件中的字符串“mxnet”做类似修改(比如改为“mxnet-cu75”、“mxnet-cu80”、“mxnet-cu92”等)。之后安装的便是MXNet的GPU版本。

然后运行以下命令安装运行环境。

1
conda env create -f environment.yml

接下来就会自动安装做需要的环境。其中mxnet-cu80下载的非常慢,所以我们找到豆瓣的镜像源,单独对其进行下载安装:http://pypi.doubanio.com/simple/mxnet-cu90/
选择了mxnet_cu90-1.2.0b20180428-py2.py3-none-manylinux1_x86_64.whl进行下载。
然后安装:

1
sudo pip3 install mxnet_cu90-1.2.0b20180428-py2.py3-none-manylinux1_x86_64.whl

安装完毕后,然后运行以下命令安装还未安装的部分并激活运行环境。

1
2
conda env create -f environment.yml
source activate gluon

打开Juputer notebook。运行下面命令。

1
jupyter notebook

这时在浏览器打开 http://localhost:8888 (通常会自动打开)就可以查看和运行本书中每一节的代码了。

如需退出激活环境,运行以下命令。

1
source deactivate

4.3 验证MXNet(Gluon)是否安装成功

终端输入命令:

1
nvidia-smi

看看是否显示正确信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Mon Jul  9 16:16:28 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130 Driver Version: 384.130 |
|-------------------------------+----------------------+----------------------+
| 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 750 Ti Off | 00000000:01:00.0 On | N/A |
| 31% 41C P8 1W / 38W | 353MiB / 1995MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 842 G /usr/lib/xorg/Xorg 24MiB |
| 0 899 G /usr/bin/gnome-shell 48MiB |
| 0 1099 G /usr/lib/xorg/Xorg 159MiB |
| 0 1243 G /usr/bin/gnome-shell 117MiB |
+-----------------------------------------------------------------------------+

启动终端,输入python3,输入以下代码:

1
2
3
4
5
import mxnet as mx
from mxnet import nd
from mxnet.gluon import nn
a = nd.array([1, 2, 3], ctx=mx.gpu())
a

如果输出

1
2
[ 1.  2.  3.]
<NDArray 3 @gpu(0)>

则安装成功。

Tip:安装依赖库的时候如果直接应用(以安装opencv为例)pip install python-opencv 语句安装太慢的时候,可以尝试清华源镜像pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-opencv