Ubuntu 16.04系統下CUDA8.0配置Caffe教程

因爲最近安裝了Ubuntu 16.04,本文教程的特色是不須要降級gcc的版本,畢竟cuda8.0已經支持gcc5以上(默認不支持,實際支持)。html

本文是在參考caffe官網教程以及http://www.linuxidc.com/Linux/2015-07/120449.htm結合本身總結經驗而來,對此表示感謝。python

Ubuntu 14.04安裝Nvidia CUDA7.5並搭建Python Theano深度學習開發環境http://www.linuxidc.com/Linux/2015-09/123562.htmlinux

Ubuntu下CUDA(含GPU卡驅動)安裝過程http://www.linuxidc.com/Linux/2015-07/120456.htmgit

Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置說明  http://www.linuxidc.com/Linux/2015-04/116444.htmgithub

Ubuntu 14.04 安裝配置CUDA  http://www.linuxidc.com/Linux/2014-10/107501.htmubuntu

Ubuntu 12.04配置NVIDIA CUDA5.5實錄  http://www.linuxidc.com/Linux/2014-10/107502.htmvim

Ubuntu安裝Theano+CUDA  http://www.linuxidc.com/Linux/2014-10/107503.htmwindows

關於Ubuntu 12.04 下 CUDA5.5 的安裝請參看以下連接 Ubuntu 12.04 安裝 CUDA-5.5服務器

Ubuntu 16.04系統下CUDA7.5配置Caffe教程 http://www.linuxidc.com/Linux/2016-07/132859.htmapp

1. 所需文件下載

1.1 Ubuntu16.04在官網下載,而後在windows下用UltraISO製做,相關文章搜索有一大片,此處再也不贅述。 

1.2 cuda8.0下載,下載的版本是ubuntu15.04的run文件,我的感受比較方便。 

1.3 cudnn5.1下載,進去以後若是有註冊過nvidia的帳戶直接點擊download,不然須要註冊一個帳戶,註冊完以後有一個調查,隨便選幾個鉤就能夠,而後下一步是接受條款開始就能夠下載了。 

1.4 caffe下載就在官方的github下載就能夠了 

2. 顯卡驅動安裝 

2.1 第一種方法是直接在ubuntu系統設置,軟件和更新裏面,選擇中國的服務器源刷新以後,點擊附加驅動選項,在Nvidia Corporation選擇最新版本,而後點擊應用更改,下載安裝完以後重啓。 

2.2 第二種方法是去官方下載好驅動的run文件,選擇對應顯卡型號下載。而後關機把顯示器插到集成顯卡接口上,或者終端下 

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

輸入密碼後在最後一行編輯上 

blacklist nouveau 

Ctrl +C保存後終端輸入 

sudo update-initramfs -u 

重啓以後在界面按Ctrl+Alt+F2,輸入root以及密碼,而後 

service lightdm stop 

sh 你本身的驅動文件的完整路徑,默認選項就能夠安裝了,安裝後重啓

3. Cuda8.0安裝 

3.1 以文件名爲cuda.run爲例,終端下輸入 

sh cuda.run --override 啓動安裝程序,此處有大量的條款,一路空格到最後 輸入accept,依次輸入n(不安裝顯卡驅動),而後一路y回車,有一個地方須要輸入密碼,還有兩個地方確認安裝路徑,直接回車便可,完成安裝,默認安裝路徑是/usr/local 

3.2 cudnn安裝

將下載下來(注:請使用linux系統下載,否則會是其餘文件, nvidia也是夠了)的cudnn-5.1-linux-x64-v4.0-prod.tgz 解壓以後,解壓後的cuda文件夾先打開裏面的include文件夾,空白右鍵在終端打開輸入:

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

cd ~/cuda/lib64 

sudo cp lib* /usr/local/cuda/lib64/ 

繼續更新文件連接

cd /usr/local/cuda/lib64/ 

sudo rm -rf libcudnn.so libcudnn.so.4 

sudo ln -s libcudnn.so.4.0.7 libcudnn.so.4 

sudo ln -s libcudnn.so.4 libcudnn.so 

而後設置環境變量 

sudo gedit /etc/profile 

在末尾加入 

PATH=/usr/local/cuda/bin:$PATH 

export PATH 

保存以後建立連接文件 

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

鍵盤按a進入編輯狀態,添加文字 

/usr/local/cuda/lib64 

而後按esc,輸入:wq保存退出。 

終端下接着輸入 

sudo ldconfig

使連接生效

4. 生成Cuda Sample測試 

首先在此以前先把須要的依賴包都安裝好,爲接下來make caffe作準備 (其中包括ATLAS 也能夠選擇裝MKL或者OpenBLAS)

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 libatlas-base-dev 

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

而後開始make samples ,終端下 

cd /home/gomee/NVIDIA_CUDA-7.5_Samples 

sudo make all -j4 

我是4核電腦因此用了j4,若是不是cudnn5.1正常狀況下確定會報錯「unsupported GNU version! gcc versions later than 4.9 are not supported!」,緣由就是這個cuda不支持gcc5.0以上,終端運行 

cd /usr/local/cuda-7.5/include 

cp host_config.h host_config.h.bak 

sudo gedit host_config.h 

Ctrl+F尋找有」4.9」的地方,應該是隻有一處,在其上方的 

#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9)將兩個4改爲5,保存退出,繼續 

cd /home/gomee/NVIDIA_CUDA-7.5_Samples 

sudo make all -j4 

這就應該開始make了,此處大約有五、6分鐘。完成以後 

cd /home/gomee/NVIDIA_CUDA-7.5_Samples/bin/x86_64/linux 

./deviceQuery 

最後會出現相似如下的信息 

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

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 GTX 960

Result = PASS 

這就說明成功了。

5. Python配置 

將以前github下載的caffe壓縮文件解壓縮到任一目錄,而後安裝python 

python的版本安裝有兩種方式: 

第一是直接安裝anaconda,去官網下載 ,選擇linux 64bit 2.7版本下載安裝,anaconda安裝方便可是須要在最後的make配置文件中更改python包含路徑。 

第二種方法就是使用原生的python2.7版本,終端下 

sudo apt-get install python-pip 安裝pip 

這裏咱們用pip安裝一些python須要的依賴包,不過爲了不各類問題,也能夠經過apt-get安裝

sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose 

以caffe默認解壓到/home/user(你的用戶名)/ ,文件夾名名稱caffe爲例 

cd /home/user/caffe/python 

sudo su 

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

這裏用pip安裝可能速度很慢,極可能下載好幾個小時,推薦用清華大學的pip源臨時安裝,因此命令改成以下: 

for req in $(cat requirements.txt); do pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done 

這裏若是第一次有不少紅字錯誤,建議再運行幾遍指導安裝成功,對於黃字提示無需理會,多是pip版本須要更新。

6. Caffe編譯過程

接下來要進入最後的步驟了,終端中 

cd /home/user/caffe 

cp Makefile.config.example Makefile.config 

gedit Makefile.config 

將USE_CUDNN := 1 取消註釋

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include後面打上一個空格 而後添加/usr/include/hdf5/serial 若是沒有這一句可能會報一個找不到hdf5.h的錯誤 

PYTHON_INCLUDE := /usr/include/python2.7 \ 

  /usr/lib/python2.7/dist-packages/numpy/core/include先不作更改。 

若是是須要生成matlab的caffe wrapper 請取消註釋MATLAB_DIR而後替換爲本身的目錄 

說一下提早會出現的問題: 

第一,make過程當中出現好比 string.h ‘memcy’ was not declared in this scope的錯誤是因爲gcc編譯器版本太新,解決方法是打開makefile搜索並替換 

NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) 爲 NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) 保存退出 

第二,在make過程當中還會報一個ld找不到libhdf5 和libhdf5_hl的連接問題,這個緣由可能也是由於hdf5的問題,首先看/usr/lib/x86_64-linux-gnu 目錄下有沒有libhdf5.so和libhdf5_hl.so,若是有的話,查看屬性是否有正確的連接(正常狀況下應該是沒有這兩個文件),而後右鍵在終端中打開 

sudo ln libhdf5_serial.so.10.1.0 libhdf5.so 

sudo ln libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so 

注意,10.1.0和10.0.2可能不一樣電腦安裝版本不一樣,注意看當前目錄下存在的文件而後 

sudo ldconfig 生效 

若是沒有的話

將# Whatever else you find you need goes here.下面的

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

//這是由於ubuntu16.04的文件包含位置發生了變化,尤爲是須要用到的hdf5的位置,因此須要更改這一路徑

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

 

接下來就是直接編譯的過程 

cd /home/user/caffe 

make all -j4 

make test -j4 

make runtest 

make pycaffe 

make matcaffe 

若是編譯沒報錯正常的話,基本就沒問題了。測試python打開 

cd /home/user/caffe/python 

python 

import caffe 

若是不報錯就說明編譯成功 

測試matlab打開./caffe/matlab/+caffe/private,看有沒有生成一個caffe的mex文件,能夠運行+test文件夾裏面的程序測試。 

小問題: 

在使用python接口的時候,可能會報一個什麼錯誤(我給忘記了–!),對了是’Mean shape incompatible with input shape.’的錯誤,處理方法是python/caffe文件夾,編輯io.py文件,將 

if ms != self.inputs[in_][1:]: 

raise ValueError('Mean shape incompatible with input shape.') 

替換爲 

if ms != self.inputs[in_][1:]: 

print(self.inputs[in_]) 

in_shape = self.inputs[in_][1:] 

m_min, m_max = mean.min(), mean.max() 

normal_mean = (mean - m_min) / (m_max - m_min) 

mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min

而後make clean再從新make

7. 總結 

  至此,Ubuntu16.04下編譯Caffe的教程就結束了

相關文章
相關標籤/搜索