ubuntu16.04下cuda8.0+cudnn+matlab+opencv+python的caffe安裝與環境搭建
py-faster-rcnn的編譯與測試
網絡上有很多ubuntu上caffe配置環境的文章,本人照着其中的許多進行了參考,都出現了或多或少的錯誤,很多地方也有差異。
于是自己整理了下自己的安裝過程,成功進行了測試,跑通了faster-rcnn。配置環境時間為2017.1.4 系統ubuntu16.04
一:顯示卡驅動的安裝:
由于要使用GPU,是以先要檢視自己顯示卡所比對的顯示卡驅動,網址:http://www.nvidia.com/Download/index.aspx?lang=en-us
選擇電腦比對的顯示卡驅動,本人電腦顯示卡為GTX760,選擇如下圖所示

輸入以下指令執行安裝驅動:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-375 //此處為上圖的驅動版本
sudo apt-get install mesa-common-dev
sudo apt-get install freeglut3-dev
安裝完成後,重新開機電腦後輸入
nvidia-smi
出現你的電腦gpu清單,如下所示,表示驅動安裝成功。
二:安裝配置CUDA8.0
cuda官方下載下傳位址:https://developer.nvidia.com/cuda-downloads,選擇如下:
下載下傳完成後,解壓到目前目錄,切換到該目錄輸入:
sh cuda_8.0.44_linux.run --override
安裝過程中,出現很多選擇的選項,先一直按S滑到百分百,然後根據提示輸入,分别如下:
1 輸入accept接受條款
2 輸入n不安裝nvidia圖像驅動,之前已經安裝過了//此處一定要選擇n
3 輸入y安裝cuda 8.0工具
4 回車确認cuda預設安裝路徑:/usr/local/cuda-8.0
5 輸入y用sudo權限運作安裝,輸入密碼
6 輸入y或者n安裝或者不安裝指向/usr/local/cuda的符号連結
7 輸入y安裝CUDA 8.0 Samples,以便後面測試
8 回車确認CUDA 8.0 Samples預設安裝路徑:
最重要的是确定此處不要再選擇安裝驅動。
添加環境路徑:
sudo vim ~/.bashrc //末尾添加
export CUDA_HOME=/usr/local/cuda-8.0
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-8.0/bin:$PATH
添加完成後source ~/.bashrc 使之生效。
測試cuda的例子,并得到如下輸出:
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
make -j4
sudo ./deviceQuery
表明cuda安裝成功。
三:Cudnnv5的安裝
從官網下載下傳最新的cudnn,網址:https://developer.nvidia.com/rdp/cudnn-download,如下圖選擇适當的cudnn版本
本人下載下傳放在Download目錄下,進入該目錄并解壓,建立軟連接配接,如下所示:
cd ./Download/
tar -xvzf cudnn-8.0-linux-x64-v5.1.tgz
sudo cp ./cuda/include/cudnn.h /usr/local/cuda/include
sudo cp ./cuda/lib64/lib* /usr/local/cuda/lib64
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so
sudo ldconfig
四:matlab的安裝與配置
本人使用的matlab版本位:R2014b_glnxa64_withcrack.iso
1、挂載iso(需建立matlab_iso檔案夾):
mkdir matlab_iso //主目錄
sudo mount -o loop R2014b_glnxa64_withcrack.iso ~/matlab_iso
2、開始安裝:
cd ~/matlab_iso
sudo ./install
3、選擇不聯網安裝
4、密鑰輸入,29797-39064-48306-32452
5、激活:選擇”license.lic”檔案進行激活(在crack檔案夾下面)
6、将libmwservices.so複制到/usr/local/MATLAB/R2014b/bin/glnxa64中:
sudo cp libmwservices.so /usr/local/MATLAB/R2014b/bin/glnxa64/libmwservices.so
啟動matlab後出現問題,可以參考這個文章http://blog.csdn.net/csd_ct/article/details/51837894 。隻需要将/sys/os/glnxa64/下的libstdc++.so.6 重命名位libstdc++.so.6.old.
五:Opencv3.1的安裝
opencv3.1的下載下傳,網址連結:http://opencv.org/downloads.html
安裝必要項:
1 sudo apt-get update
2 sudo apt-get install -y build-essential cmake git pkg-config
3 sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
4 sudo apt-get install -y libatlas-base-dev
5 sudo apt-get install -y --no-install-recommends libboost-all-dev
6 sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
7 sudo apt-get install -y python-pip
8 sudo apt-get install -y python-dev
9 sudo apt-get install -y python-numpy python-scipy
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
解壓opencv并進入該目錄:
cd opencv-3.1.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
期間可能會卡在ippcv的下載下傳中,Ctrl + c中斷後,可以到 ippicv_linux_20151201.tgz 下載下傳。将下載下傳的檔案替換掉 OpenCV-3.1.0/3rdparty/ippicv/downloads/linux-8b449a536a2157bcad08a2b9f266828b下的同名檔案。
make -j4
sudo make install
make過程中,出現了
graphcuts.cpp
的錯誤,進行如下修改:
sudo vim ../modules/cudalegacy/src/graphcuts.cpp
将45行的
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
修改為
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
編譯完成後注意需要運作sudo make install執行安裝
六:Caffe編譯
1 cd ~
2 git clone https://github.com/BVLC/caffe.git //從github上git caffe
如果沒有安裝git,可以先使用sudo apt-get install git執行安裝。
1 cd caffe
2 sudo cp Makefile.config.example Makefile.config
3 sudo vim Makefile.config
此時會修改caffe的編譯配置,需要修改如下地方:
1 # USE_CUDNN := 1 修改成: USE_CUDNN := 1
2 # OPENCV_VERSION := 3 修改為: OPENCV_VERSION := 3
3 # WITH_PYTHON_LAYER := 1 修改為 WITH_PYTHON_LAYER:=1
4 #USE_OPENCV := 0 修改成 USE_OPENCV :=1
5 #USE_LEVELDB := 0 修改為 USE_LEVELDB:=1
6 #USE_LMDB := 0 修改位 USE_LMDB :=1
7 //修改matlab目錄
8 将MATLAB_DIR := /usr/local/MATLAB/R2014b
9 //最終要的修改 # Whatever else you find you need goes here.下面的
10 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
11 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
12 修改為:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
13 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial //這是因為ubuntu16.04的檔案包含位置發生了變化,尤其是需要用到的hdf5的位置,是以需要更改這一路徑
修改Makefile檔案:
sudo vim Makefile
将
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替換為
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
編輯/usr/local/cuda/include/host_config.h 将119行的
#error -- unsupported GNU version! gcc versions later than 5 are not supported! 修改為 //#error -- unsupported GNU version! gcc versions later than 5 are not supported!,即添加了注釋,使之無效
進行編譯:
sudo make all -j8
sudo make runtest -j8
若編譯出現libcudart.so.8.0錯誤,則執行如下指令
sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0
sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0
sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0
sudo ldconfig
此時正确情況如下圖所示:
編譯matcaffe:
執行 make matcaffe -j4
顯示MEX completed successfully,表示編譯matcaffe成功,
執行make mattest -j4 即運作matcaffe的測試程式,結果如下圖:
編譯pycaffe
1 sudo make pycaffe -j4
2 sudo make distribute -j4
3 cd python
4 for req in $(cat requirements.txt); do sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done
5 cd ../
運作make pytest -j4進行測試,出現如下圖:
表明pycaffe編譯成功 在~/.bashrc 末尾添加export PYTHONPATH=/home/zf/caffe/python:$PYTHONPATH //自己對照自己路徑。
打開python導入caffe 可以成功,如下:
七:mnist集測試:
cd ~/caffe
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
./examples/mnist/train_lenet.sh
結果如下圖,正确率為99.08%
八:faster-rcnn配置與測試:
mkdir ~/caffetest
cd caffetest
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git //下載下傳rcnn源碼
cd py-faster-rcnn
cd lib
make
cd ../caffe-fast-rcnn
//用之前編譯的caffe替換rcnn的Makefile.config
sudo cp ~/caffe/Makefile.config ./caffe-fastr-rcnn/
sudo make -j4 && make pycaffe
cd ../
sudo ./data/script/fetch_faster_rcnn_models.sh
此過程中若出現cudnn錯誤,可以做如下方式進行解決:
//在caffe-fast-rcnn目錄下
git remote add caffe https://github.com/BVLC/caffe.git
git fetch caffe
//可能需要github賬号 按照提示輸入git config --global user.email ~~~ 和 git config --global user.name ~~~
git stash save
git merge caffe/master
将caffe-fast-rcnn/include/caffe/layers/python_layer.hpp的29行self_.attr("phase") = static_cast<int>(this->phase_);注釋掉
重新編譯成功後,執行demo,兩種demo為不同的模型架構,
cd ~/caffetest/py-faster-rcnn
./tool/demo.py
./tool/demo.py --net zf
若出現Check failed:error == cudaSuccess(8 vs 0) invalid device function,則将py-faster-rcnn/lib/setup.py 的第135行,将arch改為與你顯示卡相比對的數值,(比如我的GTX 760,計算能力是3.0,就将sm_35改成了sm_30)然後删除utils/bbox.c,nms/cpu_nms.c ,nms/gpu_nms.cpp 重新編譯即可
最終結果部分圖檔如下:
九:總結與體會
之前花費了時間斷斷續續的進行caffe的安裝與配置,但是總會出現大大小小的問題,但是最後才發現是第一步驅動的問題,很多部落格說到的編譯器問題,在我這次安裝過程中都沒有出現。
據說是現在cuda8.0後對此進行了修複。最終能夠完全成功,也是非常令人高興的,也說明了,做一個事情,還是得老老實實專心的做下去。寫這篇部落格,一是為了紀念一下這一路安裝的心酸,也
是想友善以後的人,希望對他們能有幫助,少走一點彎路。加油~
安裝過程中用到的安裝軟體,筆者會稍後上傳到網盤,需要的可以聯系筆者。筆者QQ:476833883。