欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-13 13:32:00
...

    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

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

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

$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

下载完成后,解压得到一个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!
期间遇到了很多问题都没写出来,如果你遇到问题需要沟通可以在线留言或者给我发邮件,邮箱为aaa@qq.com