Google Code Prettify

2015年8月28日 星期五

Caffe + Ubuntu 15.04 + CUDA 7.0 編譯安裝

  花費近一週的時間,總算是把Caffe成功編譯安裝在Ubuntu15.04的伺服器主機上面了... 因故在此紀錄下整個安裝過程的筆記!
然而時間過太久,較前面的步驟遇到的問題已記不得了,在照著流程走的過程中遇到沒提到的問題再自行Google解決吧。

整個流程大致上是按照以下二篇參考教學的指示:
Caffe + Ubuntu 15.04 + CUDA 7.0 新手安裝配置指南
caffe+cuda7.0+opencv3.0.0+mkl ubuntu14.04配置

接著紀錄下我的安裝過程。

第一部分 Ubuntu安裝


 這部分採用Caffe + Ubuntu 15.04 + CUDA 7.0 新手安裝配置指南的說法,分配比較多的空間給整個Ubuntu系統。

根分區: / 約50G。

Swap交換分區:記不太得了,可能是8G或16G。


Home分區:剩餘的空間,鑑於Imagenet,PASCAL VOC之類的大客戶,建議500G,至少300G以上。


第二部分:NVIDIA CUDA Toolkit安裝及配置


一、確認你的GPU可支援CUDA

執行下面的操作,確認硬體支援GPU CUDA,只要型號存在於https://developer.nvidia.com/cuda-gpus,就沒問題了

$ lspci | grep -i nvidia

二、CUDA Repository

獲取CUDA安裝包,安裝包請至NVIDIA官網下載。

(請下載Linux x86->Ubuntu 14.10 的 Local Package Installer DEB檔)

$ sudo dpkg -i cuda-repo-ubuntu1410-7-0-local_7.0-28_amd64.deb

$ sudo apt-get update

三、CUDA Toolkit

$ sudo apt-get install -y cuda

四、Environment Variables

$ export CUDA_HOME=/usr/local/cuda-7.0

$ export LD_LIBRARY_PATH=${CUDA_HOME}/lib64

$ PATH=${CUDA_HOME}/bin:${PATH}

$ export PATH 

第三部分 Python安裝及配置


這部分我覺得不是那麼重要,不過還是姑且放一下。

一、iPython NoteBook 安裝

選擇一個適合你的IDE運行環境,Caffe有不少程式是基於 iPython 環境完成的。個人使用iPython NoteBook(基於瀏覽器的Python IDE),可以直接導出.py, .ipynb, html格式。安裝步驟如下:

$ sudo apt-get install -y ipython-notebook pandoc

二、配置和編譯pycaffe(見第五部分)

第四部分 Matlab安裝及配置


一、下載並安裝

由於該軟件為商業軟件,請大家自行尋找,安裝學習,並確保不使用做商業目的,下載24小時刪除......
這邊提供一個安裝教學及下載關鍵字:遠程 Linux MATLAB

二、解決編譯器gcc/g++版本問題

因為Ubuntu 15.04的gcc/g++版本是4.9.2,而Matlab 2014a或b的版本是4.7.x,所以在使用matlab調用mex文件的時候,基本上都會報錯,這裡我採用降級安裝gcc/g++版本為4.7.x的解法。

1. 下載gcc/g++ 4.7.x

$ sudo apt-get install -y gcc-4.7

$ sudo apt-get install -y g++-4.7

2. 連結gcc/g++實現降級

$ cd /usr/bin

$ sudo rm gcc

$ sudo ln -s gcc-4.7 gcc

$ sudo rm g++

$ sudo ln -s g++-4.7 g++

三、編譯Matlab用到的caffe文件(見第五部分)

第五部分 Caffe安裝及測試


對於Caffe的安裝嚴格遵照官網的要求來:http://caffe.berkeleyvision.org/installation.html

一、安裝BLAS

這裡可以選擇(ATLAS,MKL或者OpenBLAS),我這裡使用OpenBLAS,簡單安裝教學:Building caffe with OpenBlas on Ubuntu 12.04

這裡只進行文章中步驟一的安裝指令。
(注意要先安裝git~ $ sudo apt-get install git )

$ git clone git://github.com/xianyi/OpenBLAS

$ cd OpenBLAS && make FC=gfortran

$ sudo make PREFIX=/opt/OpenBLAS install

$ sudo ldconfig

二、OpenBLAS與CUDA的環境設置

1. 新建openblas.conf, 並編輯之:

$ sudo gedit /etc/ld.so.conf.d/openblas.conf

/opt/OpenBLAS/lib

2. 新建cuda.conf,並編輯之:

$ sudo gedit /etc/ld.so.conf.d/cuda.conf

/usr/local/cuda/lib64

/lib

3. 完成lib文件的鏈接操作,執行:

$ sudo ldconfig -v

三、安裝OpenCV 3.0.0

根據caffe+cuda7.0+opencv3.0.0+mkl ubuntu14.04配置的說法,網上大部分教學是cuda6.5+opencv2.4.10,但近期如果下載cuda的話,只有cuda7.0,如果用openc2.4.10的話,編譯opencv的時候就會報錯,所以只能現在opencv3.0.用cuda7.0+opencv3.0配置完,編譯caffe的時候又會出錯,因為opencv3.0有些變動,需要改一下caffe裡的makefile文件(具體見下文)。
又因為大部分教學是下載編譯好的安裝包,安裝後問題很多,不如自己下載編譯,步驟算是十分簡單。

下載官網原版OpenCV
後解壓縮,執行以下指令:

$ cd ~/opencv

$ mkdir release

$ cd release

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. (注意後面有兩個點)

Enter the created temporary directory (<cmake_binary_dir>) and proceed with:

$ make

$ sudo make install

配置openCV參數設置

$ sudo gedit /etc/ld.so.conf.d/opencv.conf

/usr/local/lib

執行以下指令:

$ sudo ldconfig

$ sudo gedit /etc/bash.bashrc

加入:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

export PKG_CONFIG_PATH


至此,OpenCV安裝配置完畢。

四、安裝其他依賴項

1. Google Logging Library(glog),下載地址:https://code.google.com/p/google-glog/,然後解壓安裝:

$ tar zxvf glog-0.3.3.tar.gz

$ ./configure

$ make

$ sudo make install

如果沒有權限就 chmod a+x glog-0.3.3 -R,或者索性 chmod 777 glog-0.3.3 -R,裝完之後,這個文件夾就可以kill了。

2. 其他依賴項,確保都成功

$ sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev

$ sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

以上軟體及套件都確保全部安裝成功後,就可以開始安裝Caffe了。

五、安裝Caffe並測試

1. 安裝pycaffe必須的一些依賴項:

$ sudo apt-get install -y python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags Cython ipython

$ sudo apt-get install -y protobuf-c-compiler protobuf-compiler

2. 安裝配置NVIDIA cuDNN加速Caffe模型運算

a. 安裝cuDNN

新版本的caffe-master支援cudnn-6.5-linux-x64-v2,請至官網下載最新的cuDNN,從註冊帳號到申請開通成功可能要一兩天。

$ sudo cp cudnn.h /usr/local/include

$ sudo cp libcudnn.so /usr/local/lib

$ sudo cp libcudnn.so.6.5 /usr/local/lib

$ sudo cp libcudnn.so.6.5.48 /usr/local/lib

b. 連結cuDNN的lib文件

$ sudo ln -sf /usr/local/lib/libcudnn.so.6.5.48 /usr/local/lib/libcudnn.so.6.5

$ sudo ln -sf /usr/local/lib/libcudnn.so.6.5 /usr/local/lib/libcudnn.so

$ sudo ldconfig -v

3. 切換到Caffe-master的文件夾,生成Makefile.config配置文件,執行:

$ cp Makefile.config.example Makefile.config

4. 配置Makefile.config文件(僅列出修改部分)

a. 啟用CUDNN,去掉"#"

USE_CUDNN := 1

b. 啟用GPU,將CPU_ONLY開頭加上"#"

# CPU_ONLY := 1

c. 配置一些引用文件(增加部分主要是解決新版本下,HDF5的路徑問題)

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

注意這邊後來會遇到hdf5.h not found when building on ubuntu 15.04的問題,解決辦法如下:

Specifically on Ubuntu 15, the HDF5 libraries and headers were installed in buried folders: respectively /usr/lib/x86_64-linux-gnu/hdf5/serial/ and /usr/include/hdf5/serial/
Create the following sym links:

$ sudo ln -s /usr/lib/x86_64-linux-gnu/hdf5/serial/hdf5_hl.so /usr/lib/x86_64-linux-gnu/hdf5_hl.so
$ sudo ln -s /usr/lib/x86_64-linux-gnu/hdf5/serial/hdf5_hl.a /usr/lib/x86_64-linux-gnu/hdf5_hl.a
$ sudo ln -s /usr/lib/x86_64-linux-gnu/hdf5/serial/hdf5.so /usr/lib/x86_64-linux-gnu/hdf5.so
$ sudo ln -s /usr/lib/x86_64-linux-gnu/hdf5/serial/hdf5.a /usr/lib/x86_64-linux-gnu/hdf5.a

d. 啟用OpenBLAS

BLAS := open
BLAS_INCLUDE := /opt/OpenBLAS/include
BLAS_LIB := /opt/OpenBLAS/lib

e. 配置路徑,實現caffe對Python和Matlab的支援

PYTHON_LIB := /usr/local/lib

MATLAB_DIR := /usr/local/MATLAB/R2014b

5. 配置Makefile文件(實現對OpenCV 3.x的支持)

查找「Derive include and lib directories」一節,修改「LIBRARIES +=」的最後一行,增加opencv_imgcodecs

opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

這一步非常重要,否則編譯後會出現錯誤如下:

CXX/LD -o .build_release/tools/convert_imageset.bin
.build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int)'.build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)'

原因是opencv3.0.0把imread相關函數放到imgcodecs.lib中了,而非原來的imgproc.lib

p.s. 之後的編譯動作若有出現錯誤,可先檢查Makefile及Makefile.config文件內的路徑設定是否有誤。

6. 編譯caffe-master!!! "-j12"是使用CPU的多核進行編譯,12是CPU核心數,可以極大地加速編譯的速度,建議使用。

$ make all -j12

$ make test -j12

$ make runtest -j12

編譯Python和Matlab用到的caffe文件

$ make pycaffe -j12

$ make matcaffe -j12

至此都沒問題的話,Caffe的安裝就算大功告成了!!!

六、使用MNIST dataset進行測試

Caffe默認情況會安裝在$CAFFE_ROOT,就是解壓到那個目錄,例如:/home/username/caffe-master,所以下面的工作,默認已經切換到了該工作目錄。
下面的工作主要是用於測試Caffe是否正常運作,不做詳細評估。具體設置請參考官網:http://caffe.berkeleyvision.org/gathered/examples/mnist.html

1. 數據預處理

$ sh data/mnist/get_mnist.sh

2. 重建lmdb文件。Caffe支持三種數據格式輸入網絡,包括Image(.jpg, .png等),leveldb,lmdb,根據自己需要選擇不同輸入吧。

$ sh examples/mnist/create_mnist.sh

生成mnist-train-lmdb 和 mnist-train-lmdb文件夾,這裡包含了lmdb格式的數據集

3. 訓練mnist

$ sh examples/mnist/train_lenet.sh

這時會在終端機畫面中看到caffe的訓練過程

以上就是整個Caffe + Ubuntu 15.04 + CUDA 7.0的安裝流程。

2 則留言:

  1. 你好!
    最近我也在研究 caffe 這塊
    可是官方那邊看不是很懂
    我是用C++, caffe, cuda, opencv
    跑 mnist 一直出錯
    請問有沒有影片教學這範例呢?

    回覆刪除
    回覆
    1. hi,
      我跑MNIST是沒有問題的
      如果你有確認過前面安裝編譯的過程沒有任何錯誤
      可能只好砍掉重練了..

      目前應該是不會有影片教學
      個人也只是初學,遇到問題還是google會比較快解決~

      刪除