1. 程式人生 > >CAFFE環境拾建 除錯成功+opencv3.4.2

CAFFE環境拾建 除錯成功+opencv3.4.2

轉載:ubuntu16.04+cuda8.0+cudnn5.1+caffe 安裝(基於獨立主機&整合顯示卡&GTX1080Ti)

最近開始配置自己的深度學習主機,由於之前只在筆記本上和單顯示卡主機上安裝過,所以可以說是zero經驗,以至於很多問題不瞭解都當成了bug,故為了方便以後的自己以及大眾,特在此寫下post一篇。(由於可能會有很多的問題我沒有遇到但各位可能遇到,故在文末貼出其他的安裝連結,請自取)

~~~~~~~~~~~~~~~~~~~~華麗麗分割線~~~~~~~~~~~~~~~~~~~~

一、ubuntu16.04安裝

1.首先當然是系統盤的製作,這個不作贅言,一般使用 UltraISO,具體度娘會告訴你;

2.緊接著就是安裝,如何安裝,如何分割槽,度娘也會一一告知,此處就說幾個不同之處:

1)首先,帶有獨立顯示卡的主機,通常有獨顯輸出和集顯輸出兩種埠,而獨顯是需要安裝驅動才可以使用的,所以最初裝系統的時候需要使用集顯輸出的埠,否則你可能完全進不去安裝介面

2)其次,在BOOT介面選擇啟動項的時候,對U盤啟動會出現兩個選項,第一個帶有字首UEFI,另一個這沒有。這是因為現在的主機板驅動一般有 BIOS 和 UEFI 兩種,雖說 UEFI 是BIOS 的繼任者,但 BIOS 才用起來 更加順手。更重要的是在用UEFI模式進行ubuntu16.04安裝的時候,在安裝後期會出現bug中斷,具體什麼不記得了,與grub有關,會導致系統無法啟動,而這與UEFI有莫大的關係,所以安全起見,選後不帶UEFI字首的,也就是BIOS模式進行系統安裝;

3)ubuntu16.04 安裝好之後,啟動可能會出現 grub rescue 故障,找不到 normal.mod,這可以通過我的另一篇 post 解決,附上解救指南:ubuntu系統下grub rescue故障恢復

3.至此,ubuntu16.04 算是安裝完畢,第一次撒花o(∩_∩)o 

注:需要注意的是,目前我們也一直在使用整合顯示卡輸出!且直到安裝好nvidia驅動重啟都要一直使用整合顯示卡輸出!!!

二、各種依賴環境安裝:

sudo apt-get update   sudo apt-get upgrade   sudo apt-get install -y build-essential cmake git pkg-config   sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler   sudo apt-get install -y libatlas-base-dev    sudo apt-get install -y --no-install-recommends libboost-all-dev   sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev   # (Python general) sudo apt-get install -y python-pip   # (Python 2.7 development files) sudo apt-get install -y python-dev sudo apt-get install -y python-numpy python-scipy   # (or, Python 3.5 development files) sudo apt-get install -y python3-dev sudo apt-get install -y python3-numpy python3-scipy   # (OpenCV 2.4) sudo apt-get install -y libopencv-dev   (or, OpenCV 3.X - see other blogs in the end of the post)  

  1. sudo apt-get update

  2. sudo apt-get upgrade

  3. sudo apt-get install -y build-essential cmake git pkg-config

  4. sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler

  5. sudo apt-get install -y libatlas-base-dev

  6. sudo apt-get install -y --no-install-recommends libboost-all-dev

  7. sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev

  8. # (Python general)

  9. sudo apt-get install -y python-pip

  10. # (Python 2.7 development files)

  11. sudo apt-get install -y python-dev

  12. sudo apt-get install -y python-numpy python-scipy

  13. # (or, Python 3.5 development files)

  14. sudo apt-get install -y python3-dev

  15. sudo apt-get install -y python3-numpy python3-scipy

  16. # (OpenCV 2.4)

  17. sudo apt-get install -y libopencv-dev

  18. (or, OpenCV 3.X - see other blogs in the end of the post)

以上是caffe官方安裝指南的內容,親測好用無疑,其實文末的caffe官方安裝指南還是很不多錯的指南,只是在nvidia驅動、cuda、cudnn、open3.x方面很不足(貌似這些都是重點內容,結果都被caffe官方文件遮蔽了,手動滑稽(*^__^*) )

注:在upgrade時,可能會提起缺少fireware,這個不是大問題,直接上網下載相應版本的韌體安裝即可

三、Nvidia驅動+cuda安裝

寫在安裝前:

1)其實在cuda的安裝中會涉及到nvidia驅動的安裝,但是屢次嘗試,總是會出現kernel souce的error,所以,還是提前安裝為好。

2)安裝nvidia驅動需要在命令列模式下,但有時可能會出現無法進入命令列或者進入命令列黑屏及顯示nouveau相關的error提示,這是可通過以下的改動進行修復,重啟後可能會出現螢幕顯示非常延遲卡頓的現象,這正常,因為我們把顯示驅動修改了。不過建議把需要的nvidia驅動、cuda和cudnn都下載好後再進行處理,否則如此卡頓會很憂傷的o(∩_∩)o

  1. sudo gedit /etc/default/grub

  2. # set GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash nomodeset"

  3. sudo update-grub

  4. sudo reboot

1.下載需要的nvidia驅動程式(下載最新的即可),附上飛行連結:NVIDIA驅動程式下載

2.下載需要的cuda程式,下載runfile版本的,同樣附上飛行連結:CUDA下載

2.解除安裝之前安裝的nvidia驅動程式,新安裝的系統不需要的這一步,但依舊寫在此以告後人,因為nvidia驅動重複安裝會出現迴圈登入無法進入系統的問題,或者反過來說,迴圈登入無法進入系統一般都是由於顯示卡驅動出現問題導致的,解除安裝後重新安裝即可(如何解除安裝重灌

sudo apt-get remove –purge nvidia*

3.禁用nouveau,其實這一步可能並不需要,因為在廠商安裝的原始系統中並沒有相關檔案,我想可能是因為我們的整合顯示卡和獨立顯示卡分別有各自的輸出埠,可以自主插拔選擇顯示使用的顯示卡,而在筆記本等上面,兩種顯示卡是同時連線的,故需要進行禁用:

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

  2. # add blacklist nouveau option nouveau modeset=0

  3. sudo update-initramfs -u<span style="font-family:'Microsoft YaHei';font-size:14px;">

  4. </span>

再配置環境

  1. sudo gedit ~/.bashrc

  2. # add the following two lines

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

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

  5. source ~/.bashrc

4.開始正式安裝驅動

1)進入命令列模式(Ctrl+Alt+F1),並關閉桌面

sudo service lightdm stop

2)  進入驅動檔案所在目錄,修改檔案許可權(可選),然後執行檔案

  1. sudo chmod a+x NVIDIA-Linux-x86_64-375.26.run # optional

  2. sudo bash ./NVIDIA-Linux-x86_64-375.26.run

3)安裝過程中開始會提示一個預安裝script安裝失敗,問你要continue 還是abort,點選 continue就行,不用管。

5.進入cuda安裝檔案的資料夾,安裝cuda

sudo sh cuda_8.0.61_375.26_linux.run

1)在選擇是否安裝nvidia驅動時,選‘n’,因為我們已經安裝好了

2)在選擇安裝cuda samples,選 ‘n’,因為不需要

3)其餘選項選擇‘y’,或預設就行了

4)安裝成功後,關機(命令為 shutdown -h now),更換顯示輸出埠為獨立顯示卡的輸出端後再啟動;此處如果直接重啟(sudo reboot)的話,由於未更換顯示輸出埠,而原驅動被禁用等原因,會出現迴圈登入的情況,此時強行關機再更換顯示輸出埠即可。

6.啟動後配置cuda環境變數

1)一般配置此步即可,但有時會出現問題,可以選擇用root使用者進行編輯,也可以嘗試後兩步

  1. gedit ~/.bashrc # if can't edit, add sudo before

  2. # add the two lines following

  3. export PATH=/usr/local/cuda/bin:$PATH

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

  5. # cuda can change as cuda-8.0 specifically

  6. source ~/.bashrc # MUST source

2)

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

  2. # add the two lines following

  3. /usr/local/cuda/lib64

  4. /lib

  5. sudo ldconfig -v

3)

  1. sudo gedit /etc/profile

  2. # add following two lines

  3. PATH=/usr/local/cuda/bin:$PATH # 不能有空格!!

  4. export PATH

  5. source /etc/profile

7.驗證是否安裝成功:

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

  2. sudo make

  3. ./deviceQuery

四、安裝cudnn

1.下載對應cuda版本的cudnn,可以去官網下載,需要註冊;不想註冊的可以從網盤下載,網盤有5.1和6.0,建議下載cudnn 6.0(tensorflow要求6.0);也可以用下面的命令列下載:

wget http://developer.download.nvidia.com/compute/redist/cudnn/v6.0/cudnn-8.0-linux-x64-v6.0.tgz

2.下載後解壓,得到cuda資料夾,裡面有include和lib64兩個子資料夾

3.進入include子資料夾

sudo cp cudnn.h /usr/local/cuda/include/  # 複製標頭檔案到之前安裝的cuda目錄

4.進入lib64子資料夾,可以圖形介面進入看清楚版本號,方便後期修改

sudo cp lib* /usr/local/cuda/lib64/  # 複製動態連結庫到之前安裝的cuda目錄,注意檢視

5.重新生成軟連結

  1. cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.x # 刪除原有動態檔案,版本號注意變化,可在cudnn的lib64資料夾中檢視

  2. sudo ln -s libcudnn.so.x.x.x libcudnn.so.x # 生成軟銜接,具體看cudnn的lib64中為什麼版本,注意變化

  3. sudo ln -s libcudnn.so.x libcudnn.so # 生成軟連結

  4. sudo ldconfig -v

6.驗證安裝cudnn後cuda是否依舊可用

nvcc --version  # or nvcc -V

五、安裝caffe

1.下載caffe,此處下載caffe-master原始碼,並解壓至任何地方即可;

2.進入caffe根目錄,進行配置,檔案中對每項設定都有註釋,看看基本能懂

sudo cp Makefile.config.example Makefile.config

sudo gedit ./Makefile.config

配置好後,Makefile.config會包含以下有效內容

  1. USE_CUDNN := 1

  2. CUDA_DIR := /usr/local/cuda # or cuda-8.0

  3. CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \

  4. -gencode arch=compute_20,code=sm_21 \

  5. -gencode arch=compute_30,code=sm_30 \

  6. -gencode arch=compute_35,code=sm_35 \

  7. -gencode arch=compute_50,code=sm_50 \

  8. -gencode arch=compute_52,code=sm_52 \

  9. -gencode arch=compute_60,code=sm_60 \

  10. -gencode arch=compute_61,code=sm_61 \

  11. -gencode arch=compute_61,code=compute_61

  12. BLAS := atlas

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

  14. /usr/lib/python2.7/dist-packages/numpy/core/include \

  15. /usr/local/lib/python2.7/dist-packages/numpy/core/include

  16. PYTHON_LIB := /usr/lib

  17. WITH_PYTHON_LAYER := 1

  18. INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

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

  20. BUILD_DIR := build

  21. DISTRIBUTE_DIR := distribute

  22. TEST_GPUID := 0

  23. Q ?= @

3.進一步更改配置

  1. sudo gedit ./Makefile

  2. # replace this line

  3. NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

  4. # with the following line

  5. NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

並開啟CMakelists.txt新增一下內容

  1. # ---[ Includes

  2. set(${CMAKE_CXX_FLAGS} "-D_FORCE_INLINES ${CMAKE_CXX_FLAGS}")

4.為hdf5新增軟連線,ubuntu16.04的某些升級之後,此步不再需要,但安全起見依然進行

  1. cd /usr/lib/x86_64-linux-gnu

  2. sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so # 原始檔的版本可能有所不同,可進入資料夾進行檢視後再確定

  3. sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so

5.安裝需要的python模組,先進入caffe根目錄(可以以root使用者執行,避免出現一些許可權問題)

  1. cd python

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

如果有任何問題,可以再次執行以下命令

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

6.開始正式編譯caffe

make all -j8

7.編譯成功後,進行驗證,沒有錯誤即安裝成功,大大地撒花o(∩_∩)o 

make runtest -j8

注:有的時候可能會出現找不到cuda相關的檔案,可以直接進入cuda安裝目錄進行確認,一般都是存在的,可能是環境沒有配置好,可以使用root使用者重新配置環境並用root使用者執行runtest,或者重啟,一般都不會有大問題

六、編譯其他結構

可以編譯caffe的matlab和python介面,此處我們只編譯python介面

1.直接進入caffe根目錄,編譯pycaffe

make pycaffe -j8

2.配置環境

  1. sudo gedit ~/.bashrc

  2. # add the following line

  3. export PYTHONPATH=/path/to/caffe-master/python:$PYTHONPATH

  4. source ~/.bashrc

3.測試pycaffe

  1. python

  2. >>> import caffe # 不報錯即安裝成功

注:如果提示找不到caffe,可以嘗試用root使用者配置環境,並用root使用者執行;或者今後在寫程式碼的時候,每次都直接將caffe的路徑加入即可,只要caffe安裝成功了,其他都是小問題

  1. import sys

  2. sys.path.append('/path/to/caffe-master/python')

  3. import caffe

4.最後,可以安裝jupyter神器

  1. sudo pip install jupyter

  2. # 命令終端輸入以下語句即可使用

  3. jupyter notebook

~~~~~~~~~~~~~~~~~~~~~~華麗麗分割線~~~~~~~~~~~~~~~~~~~~

參考:

PS: 編譯caffe-python介面時報錯:

//home/idc/anaconda3/lib/libpng16.so.16: undefined reference to `[email protected]_1.2.9'

安裝caffe真是歷盡千幸萬苦,我的錯誤資訊為:

//home/idc/anaconda3/lib/libpng16.so.16: undefined reference to `[email protected]_1.2.9'

後面還有幾行,主要是這個。

我的解決方法是在Makefile.config加入下列資訊:

LINKFLAGS := -Wl,-rpath,$(HOME)/anaconda3/lib

這可能是我裝了anaconda的原因。

OK

OPENCV

1.去官網下載opencv,在本教程中選用的時opencv3.4.1,其他版本的配置方法異曲同工。 下載連結http://opencv.org/releases.html,選擇sources版本

2.解壓下載下來的zip包

unzip opencv-3.4.1.zip
  • 1

3.進入到解壓後的檔案包中

4.安裝依賴庫和cmake ,如果提醒需要apt-get update,那就先sudo su進入root許可權,再sudo apt-get update,然後在執行下面命令

sudo apt-get install cmake  
  • 1
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev  
  • 1

5.安裝完cmake之後執行命令 ,建立編譯資料夾,不建立的會提示(如下圖) In-source builds are not allowed.

mkdir my_build_dir
cd my_build_dir
  • 1
  • 2

這裡寫圖片描述

6.cmake一下

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

注意:如果已經在新的資料夾中編譯,但是還會出現之前的報錯,把cmakecache.txt刪了再編譯就可

期間可能會下載一個東西,等待一會兒就OK這裡寫圖片描述

7.執行命令,漫長的編譯過程

sudo make
  • 1

這裡寫圖片描述

8.執行命令

sudo make install
  • 1

這裡寫圖片描述

9.sudo make install 執行完畢後OpenCV編譯過程就結束了,接下來就需要配置一些OpenCV的編譯環境首先將OpenCV的庫新增到路徑,從而可以讓系統找到

sudo gedit /etc/ld.so.conf.d/opencv.conf 
  • 1

執行此命令後開啟的可能是一個空白的檔案,不用管,只需要在檔案末尾新增

/usr/local/lib  
  • 1

這裡寫圖片描述

10.執行如下命令使得剛才的配置路徑生效

sudo ldconfig  
  • 1

這個時候可能會提示錯誤如下圖所示(上部分)這裡寫圖片描述 sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 不是符號連線 /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 不是符號連線 出現這個錯誤可能是由於系統BUG所致

只需要分別輸入上面圖下部分的四行命令就可解決 sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1 sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1

11.配置bash

sudo gedit /etc/bash.bashrc  
  • 1

在最末尾新增

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  
  • 1
  • 2

儲存,執行如下命令使得配置生效

source /etc/bash.bashrc  
  • 1

更新

sudo updatedb  
  • 1

12.至此所有的配置都已經完成 下面用一個小程式測試一下

找到 cd到opencv-3.4.1/samples/cpp/example_cmake目錄下 我們可以看到這個目錄裡官方已經給出了一個cmake的example我們可以拿來測試下 按順序執行

cmake .
make
./opencv_example
  • 1
  • 2
  • 3

即可看到打開了攝像頭,在左上角有一個hello opencv 即表示配置成功