1. 程式人生 > >Ubuntu16.04+caffe+CUDA8.0+cuDNN v5+opencv3.1.0+matcaffe編譯

Ubuntu16.04+caffe+CUDA8.0+cuDNN v5+opencv3.1.0+matcaffe編譯

Ubuntu16.04+caffe+CUDA8.0+cuDNN v5+opencv3.1.0編譯

這篇caffe安裝非常不錯,但是裡面因為時間的原因,有些操作已經不能用了而且原文涉及到一些小問題,小編我是生怕之後自己的ubunutu崩掉,就將其錯誤改正,重新寫了寫。還有就是看得多了,容易只看程式碼,將程式碼上下的操作老師忘記,所以特此將重點紅色標註。並將自己的makefile檔案和makefile.config以及ippicv_linux_20151201.tgz連結良心附上: 連結:  連結: https://pan.baidu.com/s/13qKQLY6E9iawpMkHRZVNyg 密碼: xr2v

1.安裝Ubuntu16.04

 Win10下UEFI環境安裝Ubuntu 16.04雙系統教程,親測有效 安裝ubuntu雙系統。
在安裝完之後,搜尋-軟體和更新,更新服務源,我選的阿里的伺服器。
 如果你是初次接觸linux系統或ubuntu系統,建議你在裝好Ubuntu系統後不要急著進行下一步,可以瞭解學習一下linux系統基礎和基本指令 linux基礎和命令

2.安裝NVIDIA顯示卡驅動

    (1) 安裝NVIDIA

     如果是普通桌上型電腦這一步完全可以按照,在軟體更新下面,直接切換驅動,然後重啟電腦,直接生效。

     如果你是ASUS筆記本,那就要進行下面的操作。

     直接終端下輸出以下命令,不需要禁用開源驅動和關閉lightdm。

    如果你選擇安裝CUDA(本人主要是用於caffe),可以選擇直接安裝CUDA,不需要安裝NVIDIA驅動(CUDA中自帶NVIDIA驅動)。但是要選擇直接deb安裝,不要選擇run安裝,否則會出現無限登陸的問題。之後重啟電腦,使驅動生效。

sudo add-apt-repository ppa:graphics-drivers/ppa     
sudo apt-get update     
sudo apt-get upgrade  
sudo apt-get install nvidia-384

     (2) 關閉安全模式

    開機長按ESC,之後進bios選項,選擇secure裡面的securty boot修改為disable。 然後選擇ubuntu系統進入之後,在終端下輸出:nvidia-smi

會顯示你的顯示卡相關資訊,證明你的NVIDIA驅動已經安裝好了。也可以下搜尋下搜尋 詳細資訊,可以看到 圖形下會顯示你的NVIDIA的顯示卡型號,我的是GeoForce 940MX。

    

    

3.安裝CUDA8.0

下載的是離線.deb包進行安裝 CUDA8.0下載, 官網總是下一半,就失敗了,簡直“屢試不爽”。這裡附上我的連結cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb 下載連結: https://pan.baidu.com/s/18AXEM3CouQKrc-lnIwYYXQ 密碼: qevs

下載完成之後,開啟命令列終端,進入到.deb包的下載目錄下,依次執行以下命令,其中第一個指令中的.deb包就是自己下載的.deb包名。

sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda

安裝完cuda後必須重啟電腦,才能讓顯示卡配置生效!

4.安裝cuDNN v5

先說明一下,cuDNN v4是不支援ssd的,並且用v4編譯faster r-cnn後測試score時結果不對,faster r-cnn預設是v3,通過替換和修改少量檔案即可使用v5,因此在這裡強烈建議大家使用v5版本。到NVIDIA官網下載cuDNN,進去要先用郵箱註冊一下,填個問卷,很快的。選擇cuDNN v5(May 27,2016),for CUDA 8.0下載,官網下載地址: cuDNN v5下載

這裡寫圖片描述

下載之後進入到下載檔案所在資料夾,解壓,進入cuda資料夾下,並執行相關檔案的拷貝:

tar -zxvf cudnn-8.0-linux-x64-v5.0-ga.tgz(或你的版本對應的壓縮包)
cd cuda
sudo cp lib64/lib* /usr/local/cuda/lib64/
sudo cp include/cudnn.h /usr/local/cuda/include/

然後更新軟連線:

cd /usr/local/cuda/lib64/
sudo chmod +r libcudnn.so.5.0.5(或你自己的版本對應的)
sudo ln -sf libcudnn.so.5.0.5 libcudnn.so.5  
sudo ln -sf libcudnn.so.5 libcudnn.so  
sudo ldconfig

5.新增環境變數

編輯計算機資料夾下的/etc/profile(可以在終端使用以下命令列開啟):

sudo gedit /etc/profile

在檔案末尾加入CUDA環境變數,儲存。

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

儲存後在終端執行以下命令使其生效:

source /etc/profile

然後,進入到/etc/ld.so.conf.d/資料夾下,執行以下命令,新建了一個cuda.conf檔案

sudo gedit cuda.conf

在檔案中寫入並儲存:

/usr/local/cuda/lib64

儲存後使其生效:

sudo ldconfig

6.Build CUDA Sample

進入usr/local/cuda/samples,然後build samples,命令如下:

sudo make all -j44表示採用4核,當然如果你是8核你也可以用8

繼續進入到samples/bin/x86_64/linux/release目錄下,在終端執行查詢命令:

./deviceQuery

如果返回你電腦顯示卡資訊,結尾有Result=PASS,則安裝成功,否則,建議重啟電腦再嘗試查詢命令。

7.安裝caffe的基本依賴庫

首先安裝以下軟體包括python,不過好像Ubuntu16.04已經自帶了。

sudo apt-get install git
sudo apt-get install build-essential
sudo apt-get install python

然後安裝caffe依賴庫,建議一個一個裝

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler libatlas-base-dev

8.安裝opencv3.1.0

原文的opencv安裝,以前我安裝的時候還能用,現在不行了,特此做更改。

  (1)解壓,建立build目錄

unzip opencv-3.1.0.zip
cd opencv-3.1.0
mkdir build

  (2)修改opencv原始碼,使其相容cuda8.0

vi opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp

修改如下:
修改graphcuts.cpp檔案截圖
將:

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

改為:

#if !defined(HAVE_CUDA)||defined(CUDA_DISABLER)||(CUDART_VERSION>=8000)

    (3)配置opencv,生成Makefile

cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_FFMPEG=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..

如果因為ippicv_linux_20151201.tgz包下載失敗而導致Makefile生成失敗,可通過手動下載ippicv_linux_20151201.tgz安裝包,將其拷貝至 opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e目錄內(這裡的目錄不敢保證,最好使先讓系統自己執行一下,自動生成資料夾後,然後再把壓縮包放進去),重新執行配置命令即可。

    (4)編譯

make -j4

編譯過程中如果出現如下錯誤:

/usr/include/string.h: In functionvoid* __mempcpy_inline(void*, const void*, size_t)’: /usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope return (char *) memcpy (__dest, __src, __n) + __n;

這是因為ubuntu的g++版本過高造成的,只需要在opencv-3.1.0目錄下的CMakeList.txt 檔案的開頭加入:

set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -D_FORCE_INLINES”)

新增之後再次進行編譯即可。

    (5)安裝

sudo make installsudo ldconfig

    (6)檢視版本號

pkg-config --modversion opencv

9.配置caffe的python環境

先下載caffe-master包,下載後解壓,進入caffe-master/python資料夾下,然後在終端執行:caffe-master下載

sudo apt-get install python-pip python-dev build-essential
sudo pip install --upgrade pip
sudo pip install -r requirements.txt

---------------------------------------------------------------------

如果,sudo pip install -r requirements.txt出現***has requirement **,but you'll have ** which is incompatible。比如:

matplotlib 2.2.2 has requirement python-dateutil>=2.1, but you'll have python-dateutil 1.5 which is incompatible.

根據提示進行升級操作,輸入:

sudo pip install --upgrade python-dateutil

-------------------------------------------------------------------

為了後面能夠使用python繪製caffe的網路模型等視覺化操作,執行:

sudo apt-get install graphviz
sudo pip install pydot

然後

make pycaffe---------------------------“下面這個是為了在任何檔案下,都可以python後import caffe避免spyder下import caffe報錯”vi ~/.bashrc  //末尾加入
export PYTHONPATH=~/caffe-master/python:$PYTHONPATH//找到你的pycaffe路徑
source ~/.bashrc  
-------------------------------

10.編譯caffe(強烈建議直接下載我的makefile先試試,不行再說)

進入到caffe-master資料夾下,複製配置檔案,終端執行:

cp Makefile.config.example Makefile.config

開啟Makefile.config檔案,對以下幾點去掉註釋並修改:

USE_CUDNN := 1
OPENCV_version := 3
USE_OPENCV := 1
USE_LMDB := 1
WITH_PYTHON_LAYER := 1

如果只進行以上修改最後編譯會報關於hdf5的錯,解決方案參照部落格 編譯caffe時hdf5報錯
解決方案如下,首先在Makefile.config檔案大概第85行,找到

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

並修改成

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

修改後儲存,然後再開啟Makefile檔案,找到大概第173行

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5

並修改成

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

修改完儲存,然後在終端caffe目錄下執行編譯:

make all -j4
make test -j4
make runtest -j4

如果沒有報錯,那麼恭喜你成功了,如果沒有成功,請根據報錯內容仔細檢查整個過程是否有遺漏,或者百度谷歌報錯內容來得到解決方案。

11 繪製caffe網路模型

caffe的python目錄下有一個draw_net.py是python繪製caffe網路模型的工具。在終端進入caffe的python目錄下,執行:

python draw_net.py ../models/bvlc_alexnet/train_val.prototxt alexnet.png

就會在caffe的python生成alexnet網路模型視覺化影象alexnet.png。

這裡寫圖片描述

如果出現

importError: libopencv_core.so.3.1: cannot open shared object file: No such file or directory

表明找不到動態連結庫,只需要執行: sudo ldconfig

12 編譯matcaffe

    修改makefile裡面的CXXFLAGS,在CXXFLAGS += -MMD -MP下一行新增CXXFLAGS += -std=c++11後,直接 make matcaffe 。最後編譯成功。

    結果如下:


顯示了一個警告,說是gcc的版本不支援。這個沒有關係,只是警告,不是錯誤,最下面顯示還是MEX成功了

下面的都不用看,一般來說make test不成功,但是也不會有什麼影響,夠用了!!

make test

執行完命令後,又報錯了。大致意思是:Matlab自帶的庫和Ubuntu的系統庫之間發生了衝突,一言不和就廢掉Matlab的自帶庫,使用Ubuntu系統庫。

解決方案:剛開始我是直接在終端輸入:

  1. export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/cuda-8.0/lib64    
  2. export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libfreetype.so.6   
  3. ---下面去掉的是因為導致之後make 命令不能用了
然後再 make mattest 成功,但是關掉終端後再開啟測試還是會有同樣的錯誤,於是我就直接在系統檔案裡面加入路徑。

首先終端輸入:

  1. sudo gedit ~/.bashrc  
然後把如下兩個路徑加到檔案最下面。
  1. export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/cuda-8.0/lib64    
  2. exportLD_PRELOAD=/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libfreetype.so.6    
儲存 退出,重啟電腦。

make mattest 成功,結果如下:


至此 matlab 介面就配置好了。

補充,多gpu訓練,修改makefile.config下面取消註釋USE_NCCL := 1

在home路徑或者隨便都可以

$ git clone https://github.com/NVIDIA/nccl.git
$ cd nccl
$ sudo make install -j8& sudo  ldconfig 
# 該命令不執行會出現錯誤: error while loading shared libraries: libnccl.so.1: cannot open shared object file: No such file or directory

然後重新make ,make py,make matcaffe