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 python
和which
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搜尋真的特別給力,不過得加強小編的英語學習啊,總之這幾天還是收穫不小的。
一些問題,能自己解決就自己解決,不能解決的再和他人商量,這是學長給我的建議,也是送給親愛的讀者啊!