ubantu16.04+mxnet +opencv+cuda8.0 环境搭建#

建议:环境搭建完成之后,不要更新系统(内核)

转载请注明出处: 微微苏荷

一 我的安装环境

系统:ubuntu16.04

显卡:gt940m

python: 2.7.12

GCC:5.3.0 (ubuntu 默认是5.4, 关于降级,后边有叙述)

二 安装步骤##

(一) gcc降级 (可选/安装opencv2.4.13则必选)###

根据需要,opencv安装时提示,gcc 不支持5.3以上版本,所以降级。

方法1:5.4 =》5.3 (不太建议)####

1.下载GCC源码:####

wget ftp://mirrors.kernel.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz

2.解压:####

tar -zxvf gcc-5.3.0.tar.gz

3.下载编译所需依赖项:####

cd gcc-5.3.0 //进入解包后的gcc文件夹
./contrib/download_prerequisites //下载依赖项
cd .. //返回上层目录

4.建立编译输出目录:####

mkdir gcc-build-5.3.0

5.进入输出目录,执行以下命令,并生成makefile文件:

cd gcc-build-5.3.0
../gcc-5.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

6.编译:

make -j4

接下来就是等待了,整个过程大约40分钟左右。PS:最好不要在编译过程中再去做别的什么事,整个过程CPU都是满载的,要是莫名终止了,后面麻烦事也不少。

7.安装:

编译结束以后,我们就可以执行安装了:

make install

8.检查版本:

gcc --version
g++ --version

降级结束

方法2:gcc 4和gcc 5共存(推荐)###

1.安装gcc g++ 4.8####

sudo apt-get install gcc-4.8 gcc-4.8-multilib g++-4.8 g++-4.8-multilib
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

2. 切换gcc g++版本####

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

(二)安装cuda 8.0rc####

1.从nviDIA官网下载安装包####

2.切换到 安装包目录,执行以下命令:####

sudo dpkg -i cuda-repo-ubuntu1604-8-0-rc_8.0.27-1_amd64.deb
sudo apt-get update
sudo apt-get install -y cuda

3.cuda的环境设置:####

新建cuda.conf

sudo gedit /etc/ld.so.conf.d/cuda.conf

并编辑,添加内容:

/usr/local/cuda/lib64
/lib

然后执行链接命令:

sudo ldconfig -v

然后设置环境变量:

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

将这两行添加到~/.bashrc

4.编译运行cuda例子####

cd /usr/local/cuda/samples
sudo make all -j4
cd /usr/local/cuda/samples/bin/x86_64/linux/release
sudo ./deviceQuery

运行成功,最后一行显示信息是 :

Result = PASS

这表示安装成功。

5. 关于异常情况:####

一) ubutn14.04+cuda7.5 安装时,本机遇到了重启黑屏现象,主要是驱动问题。解决方法是如下:#####

(方法1,在我尝试种没什么卵用,但有人成功了,真不幸遇到了,可以尝试一下)

(1)ctrl+alt+f1 进入命令行

(2)停掉lightdm 安装gdm

sudo stop lightdm
sudo apt-get install gdm

然后做一些清理工作:

sudo rm -rf .gconf
sudo rm -rf .gconfd
sudo rm -rf ~/.Xauthority

重启:

sudo shutdown -r now

如果还是不行,可以做接下来一步:

sudo apt-get update
sudo apt-get install nvidia-current-updates
sudo nvidia-xconfing
sudo reboot

另一种解决方案是,下载安装最新驱动(不黑屏的支持cuda的闭源驱动),然后安装cuda的run包,选择不安装显卡驱动即可。

安装显卡驱动:

sudo apt-get update
sudo apt-get install nvidia-367
sudo apt-get install mesa-common-dev
sudo apt-get install freeglut3-dev

安装cuda:

进入命令行界面

Ctrl+Alt+F1

关闭界面显示

sudo service lightdm
chmod +x <cuda安装包名字>.run (给予权限)
sudo ./ <cuda安装包名字>.run (安装)

注意:在选择是否安装选择显卡驱动时选择否。

然后关于环境变量设置,跟deb 安装方法中环境变量设置方法一致

二)mxnet 运行找不到cuda库:#####

ImportError: libcudart.so.7.5: cannot open shared object file: No such file

这是因为没有把CUDA的动态链接库加入PATH里,解决方法是,可以在./bashrc里面加入:

export LD_LIBRARY_PATH=/usr/local/cuda/targets/x86_64-linux/lib/:$LD_LIBRARY_PATH

或者是在编译MXnet的时候,在config.mk里的

ADD_LDFLAGS = -I/usr/local/cuda/targets/x86_64-linux/lib/
ADD_CFLAGS =-I/usr/local/cuda/targets/x86_64-linux/lib/

如果,在编译例子中有找不到×××.so 或某命令找不到,可以到/usr下搜索文件,添加文件路径到环境变量

注:关于黑屏和***.so找不到的情况只在14.04+cuda7.5时遇到过,16.04+cuda8.0没有遇到。

(三)安装cudnn###

本文安装的是cudnn-8.0-linux-x64-v5.0-ga,请下载和你显卡匹配的版本

1.去nvidia官网下载合适的cudnn安装包,解压####

注:cudnn-8.0-linux-x64-v5.0-ga下载下来后缀名是.solitairetheme8,在ubuntu默认环境不能直接打开,我选择的是在window上解压。

2.安装:拷贝库和头文件####

切换到cudnn安装包文件夹下cuda/lib 目录下,执行:

sudo cp lib* /usr/local/cuda/lib64/

再切换到cudnn安装包文件夹下cuda/include 目录下:执行:

sudo cp cudnn.h /usr/local/cuda/include/

3.更改文件权限,重新建立软连接####

cd /usr/local/cuda/lib64/
sudo chmod u=rwx,g=rx,o=rx libcudnn.so.5.0.5
sudo rm -rf libcudnn.so.5 libcudnn.so
sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so

(四)安装opencv###

本文安装的是opencv2.4.13

注意,gcc版本不能超过5.3,否则请降级gcc(opencv3.10则不需要)

1.安装依赖####

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev cmake libswscale-dev libjasper-dev

2.去opencv官网下载源码,解压进入源码文件夹。执行:####

// 下列命令 opencv2.4和opencv3.10通用,cmake 时关闭了一些mxnet不需要的部分
mkdir build
cd build
cmake -D BUILD_opencv_gpu=OFF -D WITH_CUDA=OFF -D WITH_1394=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DINSTALL_CREATE_DISTRIB=OFF ..
make -j4
sudo make install

然后,把3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64(不是build/3rdparty)目录下的libippicv.a 拷贝到 /usr/local/lib目录下

3.环境配置####

sudo gedit /etc/ld.so.conf.d/opencv.conf

在末尾加上:

/usr/local/lib

然后执行:

sudo ldconfig

打开/etc/bash.bashrc,加入:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

(五)安装mxnet###

1.安装依赖####

sudo apt-get update
sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev

2.下载mxnet####

git clone --recursive https://github.com/dmlc/mxnet

3.配置和编译####

cd mxnet  //如果需要编译指定版本,请先 checkout
sudo cp make/config.mk

修改config.mk文件中的设置来自定义build:

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

(可选 :选择安装atlas或者openblas等其他BLAS的实现,需要额外的修改。如果ubuntu的atlas实现(sudo apt-get install libatlas-base-dev或者sudo apt-get install libopenblas-dev))

然后编译

make -j4

4.安装Python支持####

sudo apt-get install python-setuptools python-numpy
cd python
sudo python setup.py install

建议使用python 2.7版本

/////////////////////////////////////////////////////////////////

没有找到cblas库问题:

解决方法:如果已经安装了openblas, 就从openblas中把cblas.h复制到/usr/include/中。

ps:我还遇到过另外一个问题,是因为没有安装cblas库。下载编译cblas, 然后 把 libcblas.so copy到/usr/lib目录下就行了

(六)运行mnist手写识别例子###

注:有可能会遇到下载数据失败的情况,可将提前下载好的mnist数据放在例子运行目录下边

运行一下命令:

cd mxnet/example/image-classification
python train_minst.py

默认是使用cpu,使用GPU使用下边命令:

python train_mnist.py --network lenet --gpus 0

(七)制作自己的数据集( im2rec工具的使用)###

先使用im2rec 制作出lst文件(保存图片和标签信息的文本的名字)

再使用im2rec 制作出rec文件 (mxnet可使用)

imrec 参数如下:

通用选项:

prefix :LST或REC文件的前缀

root :包含图片文件的文件夹路径

用于创建lst数据的选项

--list:true制作lst,false 制作rec数据 ,默认false

--exts:可接受的图像后缀列表,type=list(可输入多个类型) 比如可输入:.jpeg

--chunks:计算块的大小 ,int 默认 1

--train-ratio:图像用于训练的比例

--test-ratio:图像用于测试的比例 (注:train和test比例之和不为1时,剩余比例为val)

--recursive:如果为true递归穿行子目录并为其分配一个唯一的标签

用于创建数据库(rec)的选项:

--resize:调整图片到指定大小,默认0不调整

--center-crop:是否指定裁剪中心,把图片裁剪为矩形

--quality:图片质量 ,JPEG质量编码,1-100;或PNG压缩编码,1-9

--num-thread:使用制作数据编码时的线程数,线程数大于1,可能会导致数据集的顺序不一样(多线程并行)

--color:指定加载的图像的彩色模式。

1:加载彩色图像。图像的任何透明度将被忽略。默认为1。

0:灰度模式加载图像。

-1:加载图像,例如包括Alpha通道

--encoding:指定图像的编码 type=str, 默认.jpg

--shuffle:如果设置为true,im2rec将在制作lst数据时,随机图像顺序

--pack-label:是否为多维标签

根据需要选择参数即可。

注意:我在2016-08-29 clone的mxnet im2rec.py (0.7版也有)有两处bug:

opencv 图片大小变换错误,第93h行 和96行(两者交换) :

#            newsize = (args.resize, img.shape[0] * args.resize / img.shape[1])
newsize = (img.shape[1] * args.resize / img.shape[0], args.resize)
else:
# newsize = (img.shape[1] * args.resize / img.shape[0], args.resize)
newsize = (args.resize, img.shape[0] * args.resize / img.shape[1])

命令行参数解析,第156行修改可用:

#    cgroup.add_argument('--exts', type=list, default=['.jpeg', '.jpg'],
cgroup.add_argument('--exts', type=str, nargs='+', default=['.jpeg', '.jpg'],

举例:

数据放在了目录:/home/ecarx/English/Hnd/Img

制作list 命令:

python im2rec.py 0829 ~/English/Hnd/Img/ --list=true --exts=.png --chunks=1 --train-ratio=0.6 --test-ratio=0.4 –recursive=true

制作rec 命令(lst文件在当前目录):

python im2rec.py  0829 ~/English/Hnd/Img/   --resize=28 --encoding=.png

制作完数据集,可根据 train_imagenet.py 写数据迭代器,进行训练

注:mxnet v0.7 制作是先执行 make_lst.py,再进入 mxnet/bin 下执行 使用 im2rec(C++) 和之后新版稍有不同

(八)mxnet优缺点分析###

优点:

1.ndarray编程接口,类似matlab/numpy.ndarray/torch.tensor。独有优势在于通过背后的engine可以在性能上和内存使用上更优,(声明式)

2.symbolic接口。这个可以使得快速构建一个神经网络,和自动求导。(命令式)

3.更多binding 目前支持比较好的是python,也支持julia和R

4.更加方便的多卡和多机运行

5.性能上更优。目前mxnet比cxxnet快40%,而且gpu内存使用少了一半。

6.依赖很少,通过mshadow的模板化使得gpu和cpu代码只用写一份,分布式接口也很干净

7.移动端支持较好,已经推出了手机上图片识别的demo

8.社区活跃,提Issuse 回复很快

缺点:

1.文档少,外界相关资料也较少,大部分只能代码当文档快(现在补齐)

2.没有大公司力推(亚马逊,已经支持mxnet 11.26)

可参考文档:

http://www.cnblogs.com/zhizhan/p/5118185.html

http://blog.csdn.net/myarrow/article/details/52064608

http://chenrudan.github.io/blog/2015/11/18/comparethreeopenlib.html#0-tsina-1-2654-397232819ff9a47a7b7e80a40613cfe1?utm_source=tuicool&utm_medium=referral

http://f.dataguru.cn/thread-679134-1-1.html

ubantu16.04+mxnet +opencv+cuda8.0 环境搭建的更多相关文章

  1. 深度学习环境搭建:Tensorflow1.4.0+Ubuntu16.04+Python3.5+Cuda8.0+Cudnn6.0

    目录 深度学习环境搭建:Tensorflow1.4.0+Ubuntu16.04+Python3.5+Cuda8.0+Cudnn6.0 Reference 硬件说明: 软件准备: 1. 安装Ubuntu ...

  2. (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功

    (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功 1.下载opencv 官网http://opencv.org/下载windows版Op ...

  3. 菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven)

    菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven) 2012-02-04 13:11 by 虫师, 11419 阅读, 5 评论, 收藏, 编辑 之前我就讲过一种方试来搭 ...

  4. XNA 4.0 环境搭建和 Hello World,Windows Phone 游戏开发

    XNA 4.0 环境搭建和 Hello World,Windows Phone 游戏开发 使用 Scene 类在 XNA 中创建不同的场景(八) 摘要: 平方已经开发了一些 Windows Phone ...

  5. [转]OPENCV3.3+CUDA9.0 环境搭建若干错误总结

    编译OpenCV设计启用OpenGL三维可视化支持和启用GPU CUDA并行加速处理的基本知识: 1.从2.4.2版本开始,OpenCV在可视化窗口中支持OpenGL,这就意味着在OpenCV中可以轻 ...

  6. OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建

    /******************************************************************************************** * OK33 ...

  7. 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建)

    黑马eesy_15 Vue:02.常用语法 黑马eesy_15 Vue:03.生命周期 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建) 黑马eesy_15 Vue:04.综合案例(前端 ...

  8. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  9. Ubuntu16.04+CUDA8.0+cuDNN5.1+Python2.7+TensorFlow1.2.0环境搭建

    软件版本说明:我选的Linux系统是Ubuntu16.04,CUDA用的8.0,Ubuntu16.04+CUDA8.0+cuDNN5.1+Python2.7只支持TensorFlow1.3.0以下的版 ...

随机推荐

  1. python 静态方法、类方法(二)

    <Python静态方法.类方法>一文中曾用在类之外生成函数的方式,来计算类的实例的个数.本文将探讨用静态方法和类方法来实现此功能. 一使用静态方法统计实例 例1.static.py # - ...

  2. Python Day13

    堡垒机 权限管理 当你公司的服务器变的越来越多后,需要操作这些服务器的人就肯定不只是一个运维人员,同时也可能包括多个开发人员,那么这么多的人操作业务系统,如果权限分配不当就会存在很大的安全风险,举几个 ...

  3. IRequiresSessionState接口控制

    刚刚接触.net web端的朋友都会被Session坑过,莫名其妙的不能读取Session数据,后来知道原来有IRequiresSessionState这个接口,不继承的就不能读取Session里面的 ...

  4. Sed、Awk单行脚本快速参考

    文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...

  5. Linux系统资源查看

    以下Linux系统资源查看命令中,较常用的为vmstat 与 lsof vmstat [刷新延时 刷新次数] ucm@ucm-Aspire-TC-:~$ vmstat procs ---------- ...

  6. js自动轮播图片的两种循环方法(原创)

    用5个div,布局从左到右5张图片,从左到右5个div分别指定ID为img1,img2,img3,img4,img5.(背景是relative,5个div是相对于背景absolute定位) 显示如下: ...

  7. JavaScript原型

    prototype与_proto_ 对象的 prototype 属性的方法.属性为对象所属的那一"类"所共有.对象原型链通过 proto 属性向上寻找. 为 proto 指定 nu ...

  8. 静态界面传值javascript

    一:JavaScript静态页面值传递之URL篇能过URL进行传值.把要传递的信息接在URL上.Post.htm 复制代码代码如下: <input type="text" n ...

  9. IE浏览器下异步请求的缓存问题

    问题: 在做即时通讯时,需要提示用户有几条未读的提醒,这个是(如果有新的提示消息立马在浏览器无刷新提示)即时获取的.但我们的做法是,当用户点击未读信息进入到信息显示页面时重新获取下未读的提醒:但是在I ...

  10. JSON 的标准:双引号而非单引号!

    刚刚测试发现一段很简单的.看似正确的代码却是错误的: <?php $json_str = "{'name':'Eric', 'age':23}"; var_dump(json ...