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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM