因爲最近安裝了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的教程就結束了