1. 程式人生 > >ubuntu16.04+cuda8.0+cudnn5.1+caffe 安裝(基於獨立主機&整合顯示卡>X1080Ti)

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

最近開始配置自己的深度學習主機,由於之前只在筆記本上和單顯示卡主機上安裝過,所以可以說是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)

以上是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

sudo gedit /etc/default/grub

# set GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash nomodeset"

sudo update-grub

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

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

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

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

# add blacklist nouveau option nouveau modeset=0 

sudo update-initramfs -u

再配置環境

sudo gedit ~/.bashrc

# add the following two lines
    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 

source ~/.bashrc
4.開始正式安裝驅動

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

sudo service lightdm stop
2)  進入驅動檔案所在目錄,修改檔案許可權(可選),然後執行檔案
sudo chmod a+x NVIDIA-Linux-x86_64-375.26.run  # optional

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使用者進行編輯,也可以嘗試後兩步

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

# add the two lines following
    export PATH=/usr/local/cuda/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

# cuda can change as cuda-8.0 specifically

source ~/.bashrc  # MUST source

2)

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

# add the two lines following
    /usr/local/cuda/lib64
    /lib

sudo ldconfig -v
3)
sudo gedit /etc/profile  

# add following two lines
    PATH=/usr/local/cuda/bin:$PATH  #  不能有空格!! 
    export PATH  

source /etc/profile

7.驗證是否安裝成功:

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

sudo make

./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.重新生成軟連結

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

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

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

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會包含以下有效內容
USE_CUDNN := 1
CUDA_DIR := /usr/local/cuda    # or cuda-8.0
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
        -gencode arch=compute_20,code=sm_21 \
        -gencode arch=compute_30,code=sm_30 \
        -gencode arch=compute_35,code=sm_35 \
        -gencode arch=compute_50,code=sm_50 \
        -gencode arch=compute_52,code=sm_52 \
        -gencode arch=compute_60,code=sm_60 \
        -gencode arch=compute_61,code=sm_61 \
        -gencode arch=compute_61,code=compute_61
BLAS := atlas
PYTHON_INCLUDE := /usr/include/python2.7 \
                /usr/lib/python2.7/dist-packages/numpy/core/include \
                /usr/local/lib/python2.7/dist-packages/numpy/core/include
PYTHON_LIB := /usr/lib
WITH_PYTHON_LAYER := 1
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/
BUILD_DIR := build
DISTRIBUTE_DIR := distribute
TEST_GPUID := 0
Q ?= @
3.進一步更改配置
sudo gedit ./Makefile

# replace this line
    NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
# with the following line
    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
並開啟CMakelists.txt新增一下內容
# ---[ Includes
set(${CMAKE_CXX_FLAGS} "-D_FORCE_INLINES ${CMAKE_CXX_FLAGS}")
4.為hdf5新增軟連線,ubuntu16.04的某些升級之後,此步不再需要,但安全起見依然進行
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 
5.安裝需要的python模組,先進入caffe根目錄(可以以root使用者執行,避免出現一些許可權問題)
cd python

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.配置環境
sudo gedit ~/.bashrc

# add the following line
export PYTHONPATH=/path/to/caffe-master/python:$PYTHONPATH

source ~/.bashrc
3.測試pycaffe
python

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

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

import caffe
4.最後,可以安裝jupyter神器
sudo pip install jupyter

# 命令終端輸入以下語句即可使用
jupyter notebook


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

參考: