ubantu16.04+mxnet +opencv+cuda8.0 環境搭建

ubantu16.04+mxnet +opencv+cuda8.0 環境搭建

建議:環境搭建完成以後,不要更新系統(內核)
轉載請註明出處: 微微蘇荷html

一 個人安裝環境

系統:ubuntu16.04
顯卡:gt940m
python: 2.7.12
GCC:5.3.0 (ubuntu 默認是5.4, 關於降級,後邊有敘述)python

二 安裝步驟

(一) gcc降級 (可選/安裝opencv2.4.13則必選)

根據須要,opencv安裝時提示,gcc 不支持5.3以上版本,因此降級。linux

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

1.下載GCC源碼:

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

2.解壓:

tar -zxvf gcc-5.3.0.tar.gzgit

3.下載編譯所需依賴項:

cd gcc-5.3.0 //進入解包後的gcc文件夾
./contrib/download_prerequisites //下載依賴項
cd ..  //返回上層目錄

4.創建編譯輸出目錄:

mkdir gcc-build-5.3.0github

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 installubuntu

8.檢查版本:bash

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

相關文章
相關標籤/搜索