1. 程式人生 > >Cuda安裝步驟記錄(超詳盡)

Cuda安裝步驟記錄(超詳盡)

安裝硬體: intel i5 + NVIDIA 740 M

安裝流程細分為如下10個步驟,細化步驟粒度更易避免出錯:
4、下載 CUDA 8.0 
5、安裝 CUDA 8.0 
6、驗證 CUDA 8.0 是否安裝成功 
7、安裝 cudnn 
8、安裝 opencv3.1 
9、安裝 caffe 
10、安裝 pycaffe notebook 介面環境

第4步 下載 CUDA 8.0

第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 stop11

然後通過 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/deviceQuerysudo make ./deviceQuery

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

./deviceQuery Starting...  CUDA Device Query (Runtime APIversion (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)   ( 2Multiprocessors, (192CUDA 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=(6553665536), 3D=(409640964096)   Maximum Layered 1D Texture Size, (numlayers  1D=(16384), 2048 layers   Maximum Layered 2D Texture Size, (numlayers  2D=(1638416384), 2048 layers   Total amount of constant memory:               65536 bytes   Total amount of shared memory per block:       49152 bytes   Total number of registers available per block65536   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): (1024102464)   Max dimension size of a grid size    (x,y,z): (21474836476553565535)   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> deviceQueryCUDA Driver = CUDARTCUDA Driver Version = 8.0CUDA Runtime Version = 8.0NumDevs = 1Device0 = GeForce GT 740M Result = PASS123456789101112131415161718192021222324252627282930313233343536373839404142123456789101112131415161718192021222324252627282930313233343536373839404142

第7步 安裝 cudnn

下載完成後解壓,得到一個 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 #生成軟連結12341234

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

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

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

locate libcudnn.so11

我執行完後顯示如下:

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.5123456789101112131415123456789101112131415

可以看到我的檔案是 libcudnn.so.5.1.10 ,並沒有 libcudnn.so.5.1.5,所以第三行命令我連結的是 libcudnn.so.5.1.10 ,這裡第三行連結命令視你的檢視結果而定。

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

yhao@yhao-X550VB:~$ nvcc -VnvccNVIDIA (RCuda compiler driverCopyright (c2005-2016 NVIDIA CorporationBuilt on Tue_Jan_10_13:22:03_CST_2017Cuda compilation toolsrelease 8.0V8.0.611234512345

第8步 安裝 opencv3.1

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

mkdir build # 建立編譯的檔案目錄cd build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j8  #編譯1234567812345678

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

modules/cudalegacy/src/graphcuts.cpp:120:54error‘NppiGraphcutState’ has not been declared typedef NppStatus (*init_func_t)(NppiSize oSizeNppiGraphcutState** ppStateNpp8u* pDeviceMem);12341234

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

修改 /opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp 檔案內容,如圖: 

編譯成功後安裝:

sudo make install #安裝11

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

pkg-config --modversion opencv  11

3. Opencv3 CMake編譯過程中出現File download hash mismatch問題

解決方法:連結  下載包連結

4.我使用的版本是3.1.0,在編譯工程的時候,遇到如下BUG:

CXX/LD -o .build_release/tools/convert_imageset.bin .build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int) 
.build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&) 
.build_release/lib/libcaffe.so: undefined reference to `cv::imdecode(cv::_InputArray const&, int)’ 
collect2: error: ld returned 1 exit status 
make: * [.build_release/tools/convert_imageset.bin] Error 1...1234567891012345678910

首先,我是已經配置過了OpenCV的,可以這樣查詢安裝版本:

$ pkg-config --modversion opencv11

因為編譯好了,理所當然,輸出結果是3.1.0

所以出現上面的錯誤,應該是opencv_imgcodecs連結的問題,比較有效的解決方案是,把opencv需要的lib新增到Makefile檔案中,找到LIBRARIES(在PYTHON_LIBRARIES := boost_python python2.7 前一行)並修改為:

LIBRARIES += glog gflags protobuf leveldb snappy \        lmdb boost_system hdf5_hl hdf5 m \        opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs123123

第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 := 112341234

2.應用 opencv 版本

#OPENCV_VERSION := 3 修改為:  OPENCV_VERSION := 312341234
#WITH_PYTHON_LAYER := 1 修改為  WITH_PYTHON_LAYER := 112341234
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       1234512345

然後修改 caffe 目錄下的 Makefile 檔案:

將: NVCCFLAGS +=-ccbin=$(CXX-Xcompiler-fPIC $(COMMON_FLAGS) 替換為: NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX-Xcompiler -fPIC $(COMMON_FLAGS)12341234
將: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_serial12341234

然後修改 /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!12341234

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

make all -j811

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

編譯成功後可執行測試

sudo make run