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 | modalias : pci:v000010DEd00001380sv000010DEsd00001380bc03sc00i00 |
我们看到,系统推荐了三款驱动,我们可以使用以下命令自动安装推荐的驱动:
1 | sudo ubuntu-drivers autoinstall |
你也可以选择只安装其中一个驱动,命令如下
1 | sudo apt install nvidia-384 |
经过一段时间后,显卡驱动就安装好了。打开Software&Updates就可以看到,驱动已经由原来的X server变为了 NVIDIA 384.
2 安装CUDA与cuDNN
我们去NVIDIA官网,找到CUDA9.0的下载链接
由于我们的操作系统是Ubuntu17.10,所以我们很容易找对对用的CUDA版本,如下图。我们需要下载runfile(local)和三个补丁(Patch1-3)。
下载完成后,我们再找到cuDNN的下载链接,需要注册后再能下载。注册后我们便可以进入到下载页面,找到cuDNN的v7.1.4 for CUDA9.0进行下载即可。下载完毕后,切到默认的Downloads文件夹,可以看到 cudnn-9.0-linux-x64-v7.tgz压缩包。接下来就可以对他们进行安装了。
2.1 gcc降级
由于CUDA 9.0仅支持GCC 6.0及以下版本,而现在的最新版本是7.0版本,所以我们需要对gcc进行降级。
我们可以先在命令行输入gcc
命令,以确定系统是否已经安装好gcc,如果安装了,则需要降级,如果未安装,我们可以直接安装低版本。假设我们的系统已经安装有gcc-7.3版本,我们现在演示降级方法。我们需要安装6.0版本。
1 | sudo apt-get install gcc-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 | sudo mv gcc gcc.bak #备份 |
同理,对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 | sudo mv g++ g++.bak |
再查看gcc和g++版本号:
1 | gcc -v |
均显示gcc version 6.0 ,说明gcc 6.0安装成功。
1 | COLLECT_GCC=gcc |
2.2 安装CUDA
输入命令安装
1 | sudo sh cuda_9.0.176_384.81_linux.run |
需要注意的是,之前已经安装过显卡驱动程序,故在提问是否安装显卡驱动时选择no,其他 选择默认路径或者yes即可。
然后,继续执行以下操作安装3个 patch :
1 | sudo sh cuda_9.0.176.1_linux.run |
安装完毕之后,将以下两条加入.bashrc文件中:
1 | gedit ~/.bashrc |
在文件最后加入如下语句:
1 | export PATH=/usr/local/cuda-9.0/bin${PATH:+:$PATH}} #注意,根据自己的版本,修改cuda-9.2/8.0... |
运行命令使其生效
1 | source ~/.bashrc |
那么,到这一步,cuda 就安装完成了,可以在终端输入nvcc -V
,看看是否显示正确信息。
1 | nvcc: NVIDIA (R) Cuda compiler driver |
2.3 安装cuDNN
cuDNN的安装,就是将cuDNN包内的文件,拷贝到cuda文件夹中即可。下载完毕后,切到默认的Downloads文件夹,可以看到cudnn-9.0-linux-x64-v7.1.tgz压缩包。先解压,然后将其中的内容复制到CUDA安装文件夹里面。
1 | sudo cp cuda/include/cudnn.h /usr/local/cuda/include |
到此处,所有的安装就完成了。
一些提示:
由于安装过程比较容易出现问题,所以最好将文件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 | sudo apt install pip |
我安装的是python3,所以以下我选用的都是pip3安装方式。
3.2 安装tensorflow
根据自己的情况选择以下命令之一进行安装:
1 | pip install tensorflow # Python 2.7; 仅支持CPU |
该步骤为可选步骤,如果上一步失败了,可以通过以下命令来安装:
1 | sudo pip install --upgrade TF_PYTHON_URL # Python 2.7 |
其中,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 | import tensorflow as tf |
如果输出Hello, TensorFlow!
则代表安装成功。
4 安装MXNet(Gluon)
4.1 安装Miniconda
根据操作系统下载并安装Miniconda(网址:https://conda.io/miniconda.html )。
安装时需要回答问题,均回答yes即可。
安装完成后,我们需要让conda生效。需要运行一次source ~/.bashrc
或重启命令行。
4.2 安装MXNet(Gluon)
下载包含本书全部代码的包,解压后进入文件夹。运行如下命令。
1 | mkdir gluon_tutorials_zh-1.0 && cd gluon_tutorials_zh-1.0 |
但是,这个下载的特别慢,所以直接用下载软件对下载链接进行下载:https://zh.gluon.ai/gluon_tutorials_zh.tar.gz ,然后解压缩,并进入文件夹。此链接也可以用于将来代码的更新。
安装运行所需的依赖包并激活该运行环境。我们可以先通过运行下面命令来配置下载源,从而使用国内镜像加速下载:
1 | 优先使用清华 conda 镜像。 |
使用文本编辑器打开之前解压得到的代码包里的文件“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 | conda env create -f environment.yml |
打开Juputer notebook。运行下面命令。
1 | jupyter notebook |
这时在浏览器打开 http://localhost:8888 (通常会自动打开)就可以查看和运行本书中每一节的代码了。
如需退出激活环境,运行以下命令。
1 | source deactivate |
4.3 验证MXNet(Gluon)是否安装成功
终端输入命令:
1 | nvidia-smi |
看看是否显示正确信息
1 | Mon Jul 9 16:16:28 2018 |
启动终端,输入python3
,输入以下代码:
1 | import mxnet as mx |
如果输出
1 | [ 1. 2. 3.] |
则安装成功。
Tip:安装依赖库的时候如果直接应用(以安装opencv为例)pip install python-opencv
语句安装太慢的时候,可以尝试清华源镜像pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-opencv
。