Cuda安裝步驟記錄(超詳盡)
安裝流程細分為如下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 安裝檔案移動到 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 API) version (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) ( 2) Multiprocessors, (192) CUDA 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=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 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): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) 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) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = 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 -Vnvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2016 NVIDIA CorporationBuilt on Tue_Jan_10_13:22:03_CST_2017Cuda compilation tools, release 8.0, V8.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:54: error: ‘NppiGraphcutState’ has not been declared typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppState, Npp8u* 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/lib .so: undefined reference to cv::imread(cv::String const&, int)’
.build_release/lib/lib .so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)’
.build_release/lib/lib .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/.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