Ubuntu 16.10安裝caffe
主要依據http://blog.csdn.net/u011272513/article/details/52103453進行安裝,跟據本身實際作了些許修改。
環境:
ubuntu16.10 cuda8.0 gcc5.4 opencv3.1.0 python2.7
CUDA安裝(包括nvidia顯卡驅動和cuda庫文件):
CUDA(Compute Unified Device Architecture),是顯卡廠商NVIDIA 推出的運算平臺CUDA™是一種由NVIDIA推出的通用並行計算 架構,該架構使GPU 可以解決複雜的計算問題。開發人員如今可使用C語言 來爲CUDA™架構編寫程序,C語言是應用最普遍的一種高級編程語言。所編寫出的程序因而就能夠在支持CUDA™的處理器上以超高性能運行。CUDA3.0已經開始支持C++ 和FORTRAN 。
經過英偉達安裝包來分別安裝庫的驅動程序而不是使用apt-get來安裝。若是隻有CPU能夠跳過這步。
主板BIOS裏面要選擇自由選擇顯卡,這樣才能識別nvidia的顯卡並進行驅動更新。
快捷鍵ctrl+alt+T打開命令終端,加入官方ppa源(ppa簡介 )。
$ sudo add-apt-repository ppa:graphics-drivers/ppa
須要輸入密碼並按enter鍵確認。以後刷新軟件庫並安裝最新驅動。
$ sudo apt-get update
$ sudo apt-get install nvidia-367 nvidia-settings nvidia-prime
安裝完成後經過下面命令查看是否安裝成功。
$ nvidia-settings
注意安裝完成後要重啓,有以下效果則安裝完成,不然就說明安裝有問題,嘗試關閉UEFI保護試試。
從官網下載cuda8.0run文件cuda8.0下載 ,進入該頁面選擇相應版本,以下圖
cuda8.0已經支持gcc5以上版本(不包括gcc6),故建議安裝時使用Gcc5以上版本,不,由於Caffe須要使用Gcc5來編譯,否則會出現不少undefined reference 的錯誤。ubuntu16.10系統自帶的是最新的gcc6,致使接下來編譯的時候比較麻煩。
下載完run文件後,cd命令進入該文件所在目錄,進行MD5檢驗,確保安裝包正常。
sudo md5sum cuda_8.0_linux.run 檢驗結果與源文件的md5sum比較。
檢驗正確後,輸入以下代碼安裝(第一行修改文件權限,第二行執行文件安裝):
$ chmod 777 cuda_8.0_linux.run
$ sudo ./cuda_8.0_linux.run --override
執行代碼後會跳出一個信息,左下方出現more|0%這樣,此時直接按enter直到跳到100%結束退出,接下來要求輸入相關配置命令,以下圖,注意別弄錯了,第三行配置詢問是否要安裝nvidia圖形驅動器,必定要選n,由於以前已經安裝過了,若是再安裝則會報錯。仔細看以下配置,別看錯行。
安裝後出現以下則說明安裝正確:
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-7.5
Samples: Installed in /usr/local/cuda-7.5, but missing recommended librarie
接下來安裝cudnn動態庫,能夠得到更快計算速率。cudnn5.0 ,初次進入須要註冊,而後問卷調查,以後進入以下頁面
選擇cuDNN v5 Library for Linux進行下載。下載後名字爲:cudnn-7.5-linux-x64-v5.0-ga.tgz,進入文件所在目錄進行解壓:
$ tar zxvf cudnn-7.5-linux-x64-v5.0-ga.tgz
解壓後有個cuda文件,內有include和lib64兩個文件夾,進入include文件夾,執行以下命令:
$ sudo cp cudnn.h /usr/local/cuda/include/ #複製頭文件
再cd命令切換進lib64文件夾,執行以下命令:
$ sudo cp lib* /usr/local/cuda/lib64/ #複製動態連接庫
而後進入複製後的動態連接庫進行新的連接:
$ cd /usr/local/cuda/lib64/
$ sudo rm -rf libcudnn.so libcudnn.so.5 #刪除原有動態文件
$ sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
$ sudo ln -s libcudnn.so.5 libcudnn.so
而後設置環境變量和動態連接庫:
$ sudo gedit /etc/profile
而後再打開的文件末尾加上(「=」先後不要有空格)
export PATH=/usr/local/cuda/bin:$PATH
保存以後建立連接文件:
$ sudo vim /etc/ld.so.conf.d/cuda.conf
按下鍵盤i進行編輯:
/usr/local/cuda/lib64
按下esc,按下:wq保存退出。並在終端輸入如下命令使該連接生效:
$ sudo ldconfig
使用sample裏面的例子來測試還須要編譯。
而後進入用例文件進行編譯(注意執行第二步命令時候須要較長時間是正常現象):
$ cd /usr/local/cuda/samples
$ sudo make all -j4
$ cd /usr/local/cuda/samples/bin/x86_64/linux/release
$ sudo ./deviceQuery
執行命令後出現以下信息則說明顯卡驅動和cuda安裝成功。
BLAS安裝與配置
BLAS,即基礎線性代數子程序庫,裏面擁有大量已經編寫好的關於線性代數運算的程序,是一個應用程序接口的標準。caffe官網上推薦了三種實現:ATLAS, MKL, or OpenBLAS。其中atlas能夠直接經過命令行安裝.在此直接使用ATLAS,在線安裝便可。
OpenCV3.1.0安裝與配置
首先安裝一些必要的依賴庫:
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 進入該網站下載OpenCV3.1.0並解壓縮,而後進入解壓縮後的文件,建立build文件。
$ unzip opencv-3.1.0.zip
$ cd opencv-3.1.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
生成的文件在bulid中,而生成的CMakeLists.txt文件在上一級文件中。在配置過程會出現– ICV: Downloading ippicv_linux_20151201.tgz…錯誤。能夠到 ippicv_linux_20151201.tgz 下載。
將下載的文件替換掉 opencv-3.1.0/3rdparty/ippicv/downloads/linux-8b449a536a2157bcad08a2b9f266828b下的同名文件,同時在opencv-3.1.0目錄下的CMakeList.txt 文件的開頭加入一行,而後再次cmake便可,以下:
$ cd ~/Downloads/
$ mv ippicv_linux_20151201.tgz opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/
$ vim opencv-3.1.0/CMakeLists.txt
在彈出的文件開頭加入一行(注意裏面的引號要英文狀態下的):
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES")
而後按esc和:wq保存退出。
$ cd opencv-3.1.0/build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make -j4 #四核運算
$ sudo make install
以上最後兩步比較耗時,耐心等待。
Python安裝與配置
選擇的是anaconda linux64 2.7版本python2.7 。下載完成以後,最好也要進行md5sum的檢驗。完成以後,cd進入下載文件所在的目錄,在命令行輸入:
$ bash Anaconda2-4.0.0-Linux-x86_64.sh
安裝完成以後,在~/.bashrc文件末尾添加Anaconda的庫文件(注意「=」兩邊不要有空格),具體以下:
$ sudo gedit ~/.bashrc
export PATH="/home/jeson/anaconda2/bin:$PATH"
export LD_LIBRARY_PATH="/home/jeson/anaconda2/lib:$LD_LIBRARY_PATH"
重啓電腦以後,在命令行輸入:
$ ipython
就能夠看到python的版本。
caffe的安裝和配置
安裝各類依賴包
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install -y libatlas-base-dev
sudo apt-get install -y --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install -y python-pip
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy
sudo apt-get install -y libopencv-dev
下載caffe:
cd ~
git clone https://github.com/BVLC/caffe.git //從github上git caffe
安裝配置caffe:
cd caffe //打開到剛剛git下來的caffe
cp Makefile.config.example Makefile.config //make指令只能make Makefile.config
sudo gedit Makefile.config //打開Makefile.config文件
配置文件修改(看英文提示根據具體修改):
USE_CUDNN := 1
OPENCV_VERSION := 3 #取消註釋符號#,應用opencv3
BLAS := mkl #BLAS庫應用英特爾的mkl
#註釋第66行自帶的python
ANACONDA_HOME := /home/jeson/anaconda2 #將具體anaconda2路徑寫入
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \ #PYTHON_INCLUDE以前的註釋#去掉,以及以後兩行前的#也去掉
PYTHON_LIB := $(ANACONDA_HOME)/lib
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
爲hdf5之類的文件建立新的連接[
\\首先執行下面兩句話:
find . -type f -exec sed -i -e 's^"hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;
cd /usr/lib/x86_64-linux-gnu
\\而後根據狀況執行下面兩句:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
\\注意:這裏的10.1.0和10.0.2根據不一樣的系統可能對應的數字會不一樣,好比在ubuntu16.04中其數字就是10.1.0.
\\具體的數字能夠在輸入命令時候使用tab鍵補全查看
打開makefile文件搜索並替換
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
爲
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
$ sudo gedit ~/.bashrc
在打開的文件末尾加上:
export LD_LIBRARY_PATH="/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH」
在命令行輸入:
sudo ldconfig #編譯當即生效
而後進入caffe目錄:
make all -j4
make test -j4
make runtest
這裏runtest會報錯以下:
解決方法是在~/.bashrc文件末尾添加輸入一行,具體以下:
sudo gedit ~/.bashrc
export MKL_CBWR=AUTO #打開的文件末尾加入該行,而後保存退出。
sudo ldconfig #編譯當即生效
而後再來一遍
make clean
make all -j4
make test -j4
make runtest
正確結果是以下:
若是編譯沒有報錯,則基本沒問題。在運用anaconda和matlab時都須要修改相應的內容。
1.編譯過程當中若出現各類莫名奇妙的undefined reference 錯誤( undefined reference to ‘xxx’),優先考慮是不是編譯器版本問題,使用gcc5進行編譯。
2.若出現protobuf/proto等相關的錯誤,優先考慮是不是protobuf未安裝,能夠 本地編譯protobuf。下載地址爲https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz,按照README文件裏的步驟安裝便可
anaconda須要將caffe頭文件進行連接:
$ sudo gedit ~/.bashrc
輸入
export PYTHONPATH="/home/jeson/caffe/python:$PYTHONPATH"
保存後在命令行輸入:
sudo ldconfig
make pycaffe
make distribute
ipython
import caffe
最後若是沒有跳出錯誤則說明編譯成功,便可調用caffe模塊。
我在導入caffe時出現 /home/lqc/anaconda2/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found ,主要由於/home/lqc/anaconda2/lib/libstdc++.so.6的確沒有此版本(gcc.4.7),但個人系統安裝的是gcc6,因此只要找到gcc6的libstdc++.so.6.0.22, 創建其爲libstdc++.so.6軟連接便可。
(strings libstdc++.so.6.0 |grep GLIBCXX) string命令查看
至此,暫時應該算是安裝完成。
歡迎關注本站公眾號,獲取更多信息