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
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 -j4(4表示採用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
修改如下:
將:
#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 function ‘void* __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 install
sudo 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系統庫。
解決方案:剛開始我是直接在終端輸入:
- export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/cuda-8.0/lib64
- 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
- ---下面去掉的是因為導致之後make 命令不能用了
首先終端輸入:
sudo gedit ~/.bashrc
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/cuda-8.0/lib64exportLD_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