1. 程式人生 > >32bit/64bit-Ubuntu14.04+anaconda+CPU版本的Caffe安裝教程

32bit/64bit-Ubuntu14.04+anaconda+CPU版本的Caffe安裝教程

【前言】

      關於深度學習,我想朋友們多有了解,這裡就不介紹了。關於深度學習的框架來說,有最近比較流行的Tensorflow,它是由大牛賈揚清2015年聯合谷歌團隊開發的新型框架,安裝比較簡單,不過可惜了,由於小編的電腦是32位作業系統,對於Tensorflow來說,就有點無能為力了。所以,最終還是決定用經典框架——Caffe搭建。                廢話少說,下面就開始我的艱難搭建之旅吧,在這之前還是要特別感謝實驗室的吳學長,小大牛一個,反應靈敏,思路清晰,有很強的知識底蘊,小生佩服啊!

一,安裝開發所依賴的安裝包

 開啟Ubuntu的終端,輸入命令。

sudo apt-get install build-essential
sudo apt-get install vim cmake git
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev</span>

二,升級g++。

終端輸入命令

g++ --version</span>
檢視g++版本,由於編譯需要至少4.8版本的g++,一般來說,自帶版本應該時4.8。如果想要升級g++,這裡也提供以下下載方式,並且設定預設編譯的g++為最新版本。
sudo add-apt-repository ppa:ubuntu-toolchain-r/test #用來新增庫資訊的幫助指令碼。
sudo apt-get update                                 #更新
sudo apt-get install gcc-4.9                      
sudo apt-get install g++-4.9                        #更新g++,gcc
sudo ln -sf /usr/bin/gcc-4.9 /usr/bin/gcc           #在呼叫的gcc庫上做一個與最新版本的軟連線,更改g++的預設版本。
sudo ln -sf /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -sf /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib

三:安裝anaconda,建議安裝。

anaconda面集成了很多包,如ipython,mkl,numpy等都預裝了, 省去了很多麻煩。如果有 edu 郵箱的話,還可以獲得 anaconda accelerate,在矩陣運算的時候,可以啟用平行計算,速度快很多,這裡需要注意加速版本,前提也是需要64位,可憐的32位,無形中增加了不少限制。

2,開啟終端,輸入

bash ~/Downloads/Anaconda3-4.0.0-Linux-x86_64.sh   #注意這裡的名字要換成自己對應版本的sh。
安裝過程中記得一直選擇預設的就行,傻瓜式安裝。

3,是否在bashrc中新增路徑,這裡選擇“yes”就可以,否則後面報錯的話,你需要將以下程式碼天價到你的bash shell環境變數中,記得

cd ~  #轉到主目錄,準備執行shell,注意其他目錄不行。
vim  .bashrc
export PATH="/home/username/anaconda/bin:$PATH" #最下面一行新增就行,:wq儲存退出。記得對應更改自己的使用者名稱和anaconda名字,我的後面加了一個2.
source .bashrc      #更新
關掉終端,完成安裝。

四,安裝OpenCV2.4。(必做)

建議下載2.4.12穩定版本,由於新版3.0還有些檔案缺失,有時候用起來反而不方便。

2,新增必要的庫。

開啟終端,新增程式碼。

sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev
3,解壓,使用unzip或者tar命令,解壓後,將執行目錄chang directory your 解壓目錄。
mkdir build
cd build
cmake ..
make                                    #編譯
sudo make install                       #安裝
小編提示,這裡花費時間較長,大約20+分鐘,你可以愉快的看下《歡樂喜劇人》了。

五,安裝MKL(可選)和atlas(必選),主要是為了編譯時用的。

1 atlas

sudo apt-get install libatlas-base-dev                #安裝atlas簡單易行。
2 ,mkl

      2  ,解壓安裝包,cd命令,轉到該目錄下,有個readme的檔案,裡面提供了多種安裝方式,其中一個比較簡單。

下面有一個install_GUI.sh檔案,會出現圖形安裝介面,根據說明一步一步執行即可。

       3,新增路徑。
注意: 安裝完成後需要新增library路徑, 建立/etc/ld.so.conf.d/intel_mkl.conf檔案, 在檔案中新增內容

sudo vim /etc/ld.so.conf.d/intel_mkl.conf

/opt/intel/lib 
/opt/intel/mkl/lib/intel64       #注意這裡把對應的檔名換成自己的。
 sudo ldconfig                        #更新路徑。

六 安裝其他的依賴庫

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
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install python-dev python-pip

開啟新的終端, 用which pythonwhich pip確定使用的是anaconda提供的python環境,然後進入caffe_root/python, 執行下列命令,

for req in $(cat requirements.txt); do pip install $req; done  #python執行需要的庫。

七:編譯Caffe

前期的工作做完了,終於等到這令人愉快的一步了。

1 下載caffe

cd ~
git clone https://github.com/BVLC/caffe.git
2,更新安裝依賴。
cd caffe
cat python/requirements.txt | xargs -L 1 sudo pip install
3,修改Makefile,這是非常重要的一步。
cp Makefile.config.example Makefile.config
vi Makefile.config              #我個人比較喜歡gedit Makefile.config,用起來方便。
接下來,我就把修改的片段進行貼上註解。主要採用的還是整合工具anaconda,atlas,CPU版本的。
 style="font-size:14px;"># CPU-only switch (uncomment to build without GPU support).
 CPU_ONLY := 1        #一定需要開啟。
# Uncomment if you're using OpenCV 3
# OPENCV_VERSION := 3                    #用的是2.4版本不需要開啟。

# To customize your choice of compiler, uncomment and set the following.
# N.B. the default for Linux is g++ and the default for OSX is clang++
# CUSTOM_CXX := g++                                               #已經更新到至少4.8,選擇預設的就好。

# CUDA directory contains bin/ and lib/ directories that we need.    #這是GPU用到的,註釋掉就可以。
#CUDA_DIR := /usr/local/cuda
# On Ubuntu 14.04, if cuda tools are installed via
# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
# CUDA_DIR := /usr

# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 lines for compatibility.        #這些部分全部註釋,和我們cpu家族沒有關係。
#CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
##		-gencode arch=compute_20,code=sm_21 \
#		-gencode arch=compute_30,code=sm_30 \
#		-gencode arch=compute_35,code=sm_35 \
#		-gencode arch=compute_50,code=sm_50 \
#		-gencode arch=compute_50,code=compute_50

# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := atlas                      #如果安裝mkl並且設定好路徑的可以試一下mkl,不過一般會出錯,找不到lmkl檔案,建議採用atlas,簡單易行。
# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
# Leave commented to accept the defaults for your choice of BLAS
# (which should work)!
# BLAS_INCLUDE := /path/to/your/blas
# BLAS_LIB := /path/to/your/blas

# Homebrew puts openblas in a directory that is not on the standard search path
# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
# BLAS_LIB := $(shell brew --prefix openblas)/lib

# This is required only if you will compile the matlab interface.     #python很流行,matlab暫時沒安裝,也就用不到了。
# MATLAB directory should contain the mex binary in /bin.
# MATLAB_DIR := /usr/local
# MATLAB_DIR := /Applications/MATLAB_R2012b.app

# NOTE: this is required only if you will compile the python interface.#註釋掉,我們採用的時anaconda裡面的python安裝包。
# We need to be able to find Python.h and numpy/arrayobject.h.
#PYTHON_INCLUDE := /usr/include/python2.7 \
#		/usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
 ANACONDA_HOME := $(HOME)/anaconda2                              #我們的檔名一定得對應好了,看這些路徑都存在不。
 PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
		 $(ANACONDA_HOME)/include/python2.7 \            #因為下載的時候採用的時2.7版本的,所以這裡開啟2.7版本的python。
		 $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \

# Uncomment to use Python 3 (default is Python 2)
# PYTHON_LIBRARIES := boost_python3 python3.5m
# PYTHON_INCLUDE := /usr/include/python3.5m \
#                 /usr/lib/python3.5/dist-packages/numpy/core/include

# We need to be able to find libpythonX.X.so or .dylib.
#PYTHON_LIB := /usr/lib
 PYTHON_LIB := $(ANACONDA_HOME)/lib                                  #更改了python的預設版本,自然需要更改lib。

# Homebrew installs numpy in a non standard path (keg only)
# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
# PYTHON_LIB += $(shell brew --prefix numpy)/lib

# Uncomment to support layers written in Python (will link against Python libs)
# WITH_PYTHON_LAYER := 1

# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include                  #python路徑已經設定好,所以這裡開啟就行。
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

# If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies
# INCLUDE_DIRS += $(shell brew --prefix)/include
# LIBRARY_DIRS += $(shell brew --prefix)/lib

# Uncomment to use `pkg-config` to specify OpenCV library paths.
# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
# USE_PKG_CONFIG := 1

BUILD_DIR := build                            #編譯分配用到的路徑,開啟即可。
DISTRIBUTE_DIR := distribute

# Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171
# DEBUG := 1                       #挑錯模式,喜歡debug的朋友不妨試試。
4,接下來,我們就可以愉快的進行編譯了。
make pycaffe -jX                  #為了提高編譯速度,這裡的x設成自己的cpu核數
make all -jX
make test -jX 
make  runtest -jX                 #注意,這裡也可直接執行,make runtest
小編在編譯時主要遇到兩類問題。

1,在make all時發現找不到hdf5的庫。

這裡提供兩種解決方案。

【方案一】

安裝過 anaconda 的話,那 libhdf5-serial-dev 可以不裝。如果編譯時提示找不到 hdf5 的庫。就把 anaconda/lib 加到 ld.so.conf 中去。

 sudo vim /etc/ld.so.conf  
  #新增一行,使用者名稱改為你自己的:
 /home/your_username/anaconda/lib   #:wq 關閉並儲存檔案。
$ sudo ldconfig
【方案二】

在同一個目錄下,用cp命令複製一份  /libhdf5_hl.so.7   檔案,記得尾綴改成你所缺少的。比如...10.

用cp命令複製一份usr/lib/i386-linux-gnu/libhdf5.so.7  還是  libhdf5.so.7 。

之後還是要建立與之前的軟連線,已我的...10為例。

程式碼如下。

cd /usr/lib/i386-linux-gnu
cp  libhdf5_hl.so.7  libhdf5_hl.so.10
cp  libhdf5.so.7  libhdf5.so.10
sudo ln -sv   libhdf5_hl.so.10     /usr/lib/ libhdf5_hl.so.10   #注意改掉不同的數字。
sudo ln -sv   libhdf5.so.10     /usr/lib/ libhdf5.so.10
sudo ldconfig<span style="font-size: 14px; 
#由於32位的作業系統,lmdb資料塊沒有足夠的大,需要更改兩個地方。

F0213 10:25:10.921640 9387 db.hpp:109] Check failed: mdb_status == 0 (-30792 vs. 0) MDB_MAP_FULL: Environment mapsize limit reached

需要更改的兩個地方,前面時具體的檔案位置,直接開啟檔案更改就行:

home/yourname/ caffe/src/caffe/util/db_lmdb.cpp:const size_t LMDB_MAP_SIZE = 536870912;  // 1 TB 1099511627776/4
home/yourname/ caffe/examples/mnist/convert_mnist_data.cpp:    CHECK_EQ(mdb_env_set_mapsize(mdb_env, 536870912), MDB_SUCCESS)  // 1TB 1099511627776/4

哈哈,之後就可以看見一系列的”ok“樣式了,小編心裡很高興。

八,輸出caffe,

這是一個另外一個比較重要的步驟,也是多虧了學長給解決的。這個問題一些教程沒有提到,小編這裡詳細說一下,因為上面我們已經設定了python和caffe的介面,也就是pycaffe,caffe編譯成功與否,預示著在python下,能不能輸出caffe,我們很多人用的就是python介面,這裡輸出成功才標誌著我們真正的成功。不過小編告訴你,這裡也不是太難了。

注意一下,如果之前的Makefileconfig你用的時系統自帶的python版本的話,我相信,只要前面的make runtest成功了,這是輸出python絕對不是問題。

但是事情呢,往往沒有那麼簡單,因為之前我們採用的是anaconda版本的python2.7,這裡我們需要把bashrc更新一下,只要新增caffe下的python路徑即可。

具體操作如下:
cd ~ 
vim .bashrc  #最後面進行新增。
# added by Anaconda2 4.0.0 installer
export PATH="/home/tom/anaconda2/bin:$PATH"#這裡時安裝anaconda時系統預設存在的,前面小編提到過的。
#set PYTHONPATH                        設定caffe下的路徑。否則caffe也找不到。
export PYTHONPATH="/home/tom/caffe/python:$PYTHONPATH"

執行以下程式碼,然後就可以見到令你期待已久的結果了。
cd ~
python
import caffe

學長和我用的時一樣的配置,但是他的也有問題,輸出不了caffe,後來他在caffe下,加入了sys的目錄,最終輸出成功,具體見程式碼。

import sys
>>> sys.path.append('/usr/lib/python2.7/dist-packages/')
>>> import caffe

【總結】

講解到此結束,總結一下呢,我是剛接觸linux系統,對系統很陌生,有很多的指令,不是很明白,讓我突然接觸caffe框架的安裝,還是用了不少時間的,在此期間吳學長的幫助毋庸置疑啊,再次謝謝了呢,O(∩_∩)O哈哈~

期間對於congfig,新增路徑,bashrc新增路徑和etc/profile  新增路徑還是有些許的迷茫,可能是跟庫檔案的搜尋呼叫順序有很多的關係吧,對於linux系統下,軟體的安裝也是多渠道的,deb一種,原始碼一種,sudo apt-get install一種等等。還有期間,我用的chrome搜尋真的特別給力,不過得加強小編的英語學習啊,總之這幾天還是收穫不小的。

一些問題,能自己解決就自己解決,不能解決的再和他人商量,這是學長給我的建議,也是送給親愛的讀者啊!