ubuntu16.04 cuda8.0源码编译安装mxnet

    4月份开始研究生生活。导师给安排的方向是基于深度学习的人脸识别。经过调研学习了face++、deepface、facenet之后,最后在Github上找了一个2018年的很新的开源项目——洞见实验室的InsightFace(论文、代码、数据集一整套全部公开)。附上知乎链接。环境要求是Linux和Python2.7。第一步就是安装MXNet,无奈服务器上只有TensorFlow,怎么办呢?慢慢摸索安装呗!总体来说有2种安装方式:(1)通过pip进行安装,优点是简单快捷,缺点是无法更改源文件中的设置,例如cuda、cudnn、openblas等。(2)通过源码编译安装,特点是好使但是麻烦。以下附上本人通过源码进行MXNet安装的血泪史:

1、安装NVIDIA驱动

    这一步很简单,网上有很多教程,一句话总结就是到官网下载你机器对应的驱动并安装。由于我这台服务器本身就下载好了驱动,只需输入以下代码查看即可:

$nvidia-settings

ubuntu16.04 cuda8.0源码编译安装mxnet_第1张图片

2、安装Cuda

    到CUDA官网下载适合你自己机器的runfile文件!这里我用cuda8.0。官方建议用cuda9.0和对应的cudnn7.0,我都懒得说,坑死个人。反正用cuda9.0最后的MXNet我是没编译成功。文件下载完成后,到下载目录下执行如下语句:

$sudo sh cuda_8.0.44_linux.run
会弹出如下窗口,按q键直接进入安装界面,除了那个driver驱动不安装输入n,其余全部y或者默认。
ubuntu16.04 cuda8.0源码编译安装mxnet_第2张图片

安装成功后,修改环境变量,执行如下语句:

$sudo gedit ~/.bashrc

在打开的文本最后加上以下两行并保存:

export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后重启电脑。重启之后测试cuda自带的samples,执行如下语句:

$cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
$sudo make
$./deviceQuery

显示的信息中有一句 Result = Pass,那么你就成功了!

会在/usr/local/目录下生成2个文件夹,cuda-8.0和对应的连接文件夹cuda。因为他们是连接关系,里面的内容都是一样的。

3、安装Cudnn

    这里我安装的是与cuda8.0对应的cudnn6.0。到cudnn下载页面进行下载。这个需要注册NVIDIA账号才可以下载。

ubuntu16.04 cuda8.0源码编译安装mxnet_第3张图片

下载完成后,解压得到一个cuda的文件夹,然后在cuda目录下执行如下语句:

$sudo cp lib64/lib* /usr/local/cuda/lib64/
$sudo cp include/cudnn.h /usr/local/cuda/include/
可以到后面这个目录下,查看验证是否将文件复制过去。

4、安装MXNet

    这一步按照MXNet官网的步骤以及要求慢慢来,安装或者更新依赖包,看懂再操作。可是啊可是,这一步最坑,我都是按照要求来的,结果编译的时候各种报错,都让我开始怀疑人生!cuda9.0时各种文件缺失,比如编译时cannot find -lXXXX。最后我利用cuda8.0和cudnn6.0以及从mxnet下载链接中下载的mxnet1.0.0才搞好。(因为这台服务器上网有些问题,不能通过简单的git clone --recursive https://github.com/apache/incubator-mxnet进行下载)下载好mxnet源码并解压之后,进入mxnet目录下的make文件夹,打开终端执行如下语句:

$cp config.mk ..

然后修改mxnet目录下的config.mk文件中的几行代码:

USE_CUDA = 1
USE_CUDA_PATH = /usr/local/cuda
USE_CUDNN = 1
USE_BLAS = openblas

差不多就修改这些,改完之后保存。然后在mxnet/目录下执行如下语句:

$make -j8

8是8线程同时编译,也可以直接make或者make -j4。

如果不出意外,等个半个小时编译完后会显示mxnet installed successfully。如果编译过程报错,那么这期间可能要省略一万字了。最后再按照官网的步骤,进行 Python binding,也就是与python进行绑定。这一步很简单,略过。

5、验证MXNet

在终端中执行如下语句:

$python
>>> import mxnet as mx
>>> a = mx.nd.ones((2, 3), mx.gpu())
>>> b = a * 2 + 1
>>> b.asnumpy()
如果第一步import mxnet不报错,最后结果输出array([[3., 3., 3.], [3., 3., 3.]], dtype=float32),那么恭喜你,成功地通过源码编译安装好了MXNet!
期间遇到了很多问题都没写出来,如果你遇到问题需要沟通可以在线留言或者给我发邮件,邮箱为[email protected]

你可能感兴趣的:(ubuntu16.04 cuda8.0源码编译安装mxnet)