ubuntu 安裝caffe 教程

轉載 https://blog.csdn.net/u010821666/article/details/79211546

小編在進行深度學習時需要用到相應的框架,在有gpu的前提下,前面八步都是安裝所必須的。

 但先如今caffe框架沒有以前那麼實用,推薦各位讀者安裝keras tensorflow和pytorch,同樣是一樣好的深度學習框架,可供大家使用gpu加速,同樣的安裝cuda和cudnn是必須的。下列僅供參考:

安裝硬件: intel i5 + NVIDIA 740 M

安裝流程細分爲如下10個步驟,細化步驟粒度更易避免出錯:

1、安裝依賴包
2、禁用 nouveau
3、配置環境變量
4、下載 CUDA 8.0
5、安裝 CUDA 8.0
6、驗證 CUDA 8.0 是否安裝成功
7、安裝 cudnn
8、安裝 opencv3.1
9、安裝 caffe
10、安裝 pycaffe notebook 接口環境

第1步 安裝依賴包

安裝後續步驟或環境必需的依賴包,依次輸入以下命令:

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler

sudo apt-get install --no-install-recommends libboost-all-dev

sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

sudo apt-get install git cmake build-essential

有一定機率安裝失敗而導致後續步驟出現問題,所以要確保以上依賴包都已安裝成功,驗證方法就是重新運行安裝命令,如驗證 git cmake build-essential是否安裝成功共則再次運行以下命令:

 sudo apt-get install git cmake build-essential 

界面提示如下則說明已成功安裝依賴包,否則繼續安裝直到安裝成功。

yhao@yhao-X550VB:~$ sudo apt-get install git cmake build-essential
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關係樹       
正在讀取狀態信息... 完成       
build-essential 已經是最新版 (12.1ubuntu2)。
cmake 已經是最新版 (3.5.1-1ubuntu3)。
git 已經是最新版 (1:2.7.4-0ubuntu1.1)。
下列軟件包是自動安裝的並且現在不需要了:
  lib32gcc1 libc6-i386
使用'sudo apt autoremove'來卸載它(它們)。
升級了 0 個軟件包,新安裝了 0 個軟件包,要卸載 0 個軟件包,有 94 個軟件包未被升級。

第2步 禁用 nouveau

安裝好依賴包後需要禁用 nouveau,只有在禁用掉 nouveau 後才能順利安裝 NVIDIA 顯卡驅動,禁用方法就是在 /etc/modprobe.d/blacklist-nouveau.conf 文件中添加一條禁用命令,首先需要打開該文件,通過以下命令打開:

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

打開後發現該文件中沒有任何內容,寫入:

blacklist nouveau option nouveau modeset=0 

保存時命令窗口可能會出現以下提示:

** (gedit:4243): WARNING **: Set document metadata failed: 不支持設置屬性 metadata::gedit-position

無視此提示~,保存後關閉文件,注意此時還需執行以下命令使禁用 nouveau 真正生效:

sudo update-initramfs -u

第3步 配置環境變量

同樣使用 gedit 命令打開配置文件:

sudo gedit ~/.bashrc

打開後在文件最後加入以下兩行內容:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH 

保存退出。

第4步 下載 CUDA 8.0

進入 https://developer.nvidia.com/cuda-downloads ,依次選擇 CUDA 類型然後下載即可。
這裏寫圖片描述

第5步 安裝 CUDA 8.0

第四步下載的1.4G的 CUDA中包含有 nvidia 顯卡驅動,故此步驟 CUDA 的安裝包括了 nvidia 顯卡驅動的安裝,此時注意你是否已經安裝過 nvidia 顯卡驅動,若無法保證已安裝的 nvidia 顯卡驅動一定正確,那就卸載掉之前安裝的 nvidia 顯卡驅動(卸載方法鏈接),然後開始安裝 CUDA 8.0;若可以保證已安裝正確的 nvidia 顯卡驅動,則直接開始安裝 CUDA 8.0,在安裝過程中選擇不再安裝 nvidia 顯卡驅動。

爲了方便開始安裝過程的路徑查找,把下載的 CUDA 安裝文件移動到 HOME 路徑下,然後通過 Ctrl + Alt + F1 進入文本模式,輸入帳號密碼登錄,通過 Ctrl + Alt + F7 可返回圖形化模式,在文本模式登錄後首先關閉桌面服務:

sudo service lightdm stop

然後通過 Ctrl + Alt + F7 發現已無法成功返回圖形化模式,說明桌面服務已成功關閉,注意此步對接下來的 nvidia 驅動安裝尤爲重要,必需確保桌面服務已關閉。

Ctrl + Alt + F1 進入文本模式,然後運行 CUDA 安裝文件進行安裝,之前我們已經把 CUDA 安裝文件移動至 HOME,直接通過 sh 命令運行安裝文件即可:

sudo sh cuda_8.0.61_375.26_linux.run --no-opengl-libs

其中 cuda_8.0.61_375.26_linux.run 是我的 CUDA 安裝文件名,而你需替換爲自己的 CUDA 安裝文件名,若此時忘記可直接通過 ls 文件查看文件名,這也是我建議把 CUDA 安裝文件移動到 HOME 下的另一個原因。

執行此命令約1分鐘後會出現 0%信息,此時長按回車鍵讓此百分比增長,直到100%,然後按照提示操作即可,先輸入 accept ,然後讓選擇是否安裝 nvidia 驅動,這裏的選擇對應第5步開頭,若未安裝則輸入 “y”,若確保已安裝正確驅動則輸入“n”。

剩下的選擇則都輸入“y”確認安裝或確認默認路徑安裝,開始安裝,此時若出現安裝失敗提示則可能爲未關閉桌面服務或在已安裝 nvidia 驅動的情況下重複再次安裝 nvidia 驅動,安裝完成後輸入重啓命令重啓:

reboot

重啓後登錄進入系統,配置 CUDA 環境變量,與第3步相同,使用 gedit 命令打開配置文件:

sudo gedit ~/.bashrc

在該文件最後加入以下兩行並保存:

export PATH=/usr/local/cuda-8.0/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

使該配置生效:

source ~/.bashrc

第6步 驗證 CUDA 8.0 是否安裝成功

分別執行以下命令:

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery

sudo make

./deviceQuery

若看到類似以下信息則說明 cuda 已安裝成功:

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GT 740M"
  CUDA Driver Version / Runtime Version          8.0 / 8.0
  CUDA Capability Major/Minor version number:    3.5
  Total amount of global memory:                 2004 MBytes (2100953088 bytes)
  ( 2) Multiprocessors, (192) CUDA Cores/MP:     384 CUDA Cores
  GPU Max Clock rate:                            1032 MHz (1.03 GHz)
  Memory Clock rate:                             800 Mhz
  Memory Bus Width:                              64-bit
  L2 Cache Size:                                 524288 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GT 740M
Result = PASS

第7步 安裝 cudnn

登錄官網:https://developer.nvidia.com/rdp/cudnn-download ,下載對應 cuda 版本且 linux 系統的 cudnn 壓縮包,注意官網下載 cudnn 需要註冊帳號並登錄,不想註冊的可從我的網盤下載:https://pan.baidu.com/s/1c2xPVzy

這裏寫圖片描述

下載完成後解壓,得到一個 cudn 文件夾,該文件夾下include 和 lib64 兩個文件夾,命令行進入 cudn/include 路徑下,然後進行以下操作:

sudo cp cudnn.h /usr/local/cuda/include/ #複製頭文件

然後命令行進入 cudn/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.1.10 libcudnn.so.5 #生成軟銜接
sudo ln -s libcudnn.so.5 libcudnn.so #生成軟鏈接

這裏需要注意第三行命令,網上有人的第三行命令爲:

sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 #生成軟銜接

起初我執行的也是上條鏈接 libcudnn.so.5.1.5 的命令,但是後面編譯caffe時出錯,報錯內容爲 /usr/bin/ld: 找不到 -lcudnn,所以這裏需要先查看一下自己應該鏈接的是 libcudnn.so.5.1.10 還是 libcudnn.so.5.1.5 ,查看方法爲下:

locate libcudnn.so

我執行完後顯示如下:

yhao@yhao-X550VB:~$ locate libcudnn.so
/home/yhao/.local/share/Trash/files/libcudnn.so
/home/yhao/.local/share/Trash/files/libcudnn.so.5
/home/yhao/.local/share/Trash/files/libcudnn.so.5.1.10
/home/yhao/.local/share/Trash/files/cuda/lib64/libcudnn.so
/home/yhao/.local/share/Trash/files/cuda/lib64/libcudnn.so.5
/home/yhao/.local/share/Trash/files/cuda/lib64/libcudnn.so.5.1.10
/home/yhao/.local/share/Trash/info/libcudnn.so.5.1.10.trashinfo
/home/yhao/.local/share/Trash/info/libcudnn.so.5.trashinfo
/home/yhao/.local/share/Trash/info/libcudnn.so.trashinfo
/home/yhao/cuda/lib64/libcudnn.so
/home/yhao/cuda/lib64/libcudnn.so.5
/home/yhao/cuda/lib64/libcudnn.so.5.1.10
/usr/local/lib/libcudnn.so
/usr/local/lib/libcudnn.so.5

可以看到我的文件是 libcudnn.so.5.1.10 ,並沒有 libcudnn.so.5.1.5,所以第三行命令我鏈接的是 libcudnn.so.5.1.10 ,這裏第三行鏈接命令視你的查看結果而定。

安裝完成後可用 nvcc -V 命令驗證是否安裝成功,若出現以下信息則表示安裝成功:

yhao@yhao-X550VB:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61

第8步 安裝 opencv3.1

進入官網 : http://opencv.org/releases.html , 選擇 3.1.0 版本的 source , 下載 opencv-3.1.0.zip
這裏寫圖片描述

解壓到你要安裝的位置,命令行進入已解壓的文件夾 opencv-3.1.0 目錄下,執行:

mkdir build # 創建編譯的文件目錄

cd build

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

make -j8  #編譯

在執行 make -j8 命令編譯到 92% 時可能會出現以下錯誤:

modules/cudalegacy/src/graphcuts.cpp:120:54: error: 
‘NppiGraphcutState’ has not been declared
typedef NppStatus (*init_func_t)(NppiSize oSize, 
NppiGraphcutState** ppState, Npp8u* pDeviceMem);

這是由於opecv3.1與cuda8.0不兼容導致的。解決辦法:

修改 /opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp 文件內容,如圖:
這裏寫圖片描述

編譯成功後安裝:

sudo make install #安裝

安裝完成後通過查看 opencv 版本驗證是否安裝成功:

pkg-config --modversion opencv  

第9步 安裝 caffe

首先在你要安裝的路徑下 clone :

git clone https://github.com/BVLC/caffe.git

進入 caffe ,將 Makefile.config.example 文件複製一份並更名爲 Makefile.config ,也可以在 caffe 目錄下直接調用以下命令完成複製操作 :

sudo cp Makefile.config.example Makefile.config

複製一份的原因是編譯 caffe 時需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 給出的配置文件例子,不能用來編譯 caffe。

然後修改 Makefile.config 文件,在 caffe 目錄下打開該文件:

sudo gedit Makefile.config

修改 Makefile.config 文件內容:

1.應用 cudnn

#USE_CUDNN := 1
修改成: 
USE_CUDNN := 1

2.應用 opencv 版本

#OPENCV_VERSION := 3 
修改爲: 
OPENCV_VERSION := 3

3.使用 python 接口

#WITH_PYTHON_LAYER := 1 
修改爲 
WITH_PYTHON_LAYER := 1

4.修改 python 路徑

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/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       

這裏貼出 我的Makefile.config文件 方便大家參考

然後修改 caffe 目錄下的 Makefile 文件:

將:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替換爲:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
將:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改爲:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

然後修改 /usr/local/cuda/include/host_config.h 文件 :

將
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改爲
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

OK ,可以開始編譯了,在 caffe 目錄下執行 :

make all -j8

這是如果之前的配置或安裝出錯,那麼編譯就會出現各種各樣的問題,所以前面的步驟一定要細心。

編譯成功後可運行測試:

sudo make runtest -j8

這裏寫圖片描述

如果顯示結果爲上圖所示,則表示 caffe 已經成功安裝。

10、安裝 pycaffe notebook 接口環境

在上一步成功安裝 caffe 之後,就可以通過 caffe 去做訓練數據集或者預測各種相關的事了,只不過需要在命令行下通過 caffe 命令進行操作,而這一步 pycaffe 的安裝以及 notebook 環境配置只是爲了更方便的去使用 caffe ,實際上大多數都是通過 python 來操作 caffe 的,而 notebook 使用瀏覽器作爲界面,可以更方便的編寫和執行 python 代碼。

首先編譯 pycaffe :

cd caffe

sudo make pycaffe -j8

以下是我編譯 pycaffe 時出現的錯誤:

python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: 沒有那個文件或目錄

解決方法:

sudo apt-get install python-numpy

此外也可能是由於 Makefile.config 文件中 python 路徑設置錯誤出現的錯誤,可根據上一步檢查一下,也可能出現別的錯誤,百度谷歌之~

編譯 pycaffe 成功後,驗證一下是否可以在 python 中導入 caffe 包,首先進入 python 環境:

python

然後導入 caffe :

>>> import caffe

若不報錯則表示 caffe 的 python 接口已正確編譯,但是應該不會那麼順利,以下是我導入 caffe 時出現的錯誤:

錯誤1:

File "<stdin>", line 1, in <module>   ImportError: No module named caffe

解決方法:

sudo echo export PYTHONPATH="~/caffe/python" >> ~/.bashrc

source ~/.bashrc

錯誤2:

ImportError: No module named skimage.io

解決方法:

pip install -U scikit-image #若沒有安裝pip: sudo apt install python-pip

ok,最後一步,配置notebook環境

首先要安裝python接口依賴庫,在caffe根目錄的python文件夾下,有一個requirements.txt的清單文件,上面列出了需要的依賴庫,按照這個清單安裝就可以了。

在安裝scipy庫的時候,需要fortran編譯器(gfortran),如果沒有這個編譯器就會報錯,因此,我們可以先安裝一下。

首先進入 caffe/python 目錄下,執行安裝代碼:

sudo apt-get install gfortran

for req in $(cat requirements.txt); do sudo pip install $req; done

安裝完成以後執行:

sudo pip install -r requirements.txt

就會看到,安裝成功的,都會顯示Requirement already satisfied, 沒有安裝成功的,會繼續安裝。

然後安裝 jupyter :

sudo pip install jupyter

安裝完成後運行 notebook :

jupyter notebook

或

ipython notebook

就會在瀏覽器中打開notebook, 點擊右上角的New-python2, 就可以新建一個網頁一樣的文件,擴展名爲ipynb。在這個網頁上,我們就可以像在命令行下面一樣運行python代碼了。輸入代碼後,按shift+enter運行,更多的快捷鍵,可點擊上方的help-Keyboard shortcuts查看,或者先按esc退出編輯狀態,再按h鍵查看。a

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章