Ubuntu 16.04 安裝CUDA 10.0 + cuDNN 7.3

徐子函
12 min readOct 17, 2018

因為目前的Tensorflow 10不支持Cuda 10.0所以以下教程可以直接略過,而下面教程是關於Cuda 9.0的安裝

安裝條件

檢查顯示卡是否可用

lspci -nnk | grep -i nvidia

會出現類似下面畫面:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1b82] (rev a1)
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10f0] (rev a1)
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1b82] (rev a1)
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
02:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10f0] (rev a1)

前期準備

檢查升級:

sudo apt-get update

檢查gcc、 python和pip

sudo apt-get install libglu1-mesa libxi-dev libxmu-dev -y
sudo apt-get --yes install build-essential
sudo apt-get install python-pip python-dev -y
sudo apt-get install python-numpy python-scipy -y

安裝驅動程式

檢查是否有安裝Nvidia驅動程式:

若沒有安裝則進行安裝

首先先下載您電腦上安裝的GPU的驅動程式:(若您不是GTX1070,則按下這裡下載)

wget http://us.download.nvidia.com/XFree86/Linux-x86_64/390.87/NVIDIA-Linux-x86_64-390.87.run

添加執行權限:

sudo chmod +x NVIDIA-Linux-x86_64–390.87.run

運行驅動安裝程序

./NVIDIA-Linux-x86_64–390.87.run --silent

安裝後運行下面命令檢查是否安裝成功:

nvidia-smi

會出現

Tue Oct 16 14:47:47 2018 
+ — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -+
| NVIDIA-SMI 390.87 Driver Version: 390.87 |
| — — — — — — — — — — — — — — — -+ — — — — — — — — — — — + — — — — — — — — — — — +
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 107… Off | 00000000:01:00.0 Off | N/A |
| 39% 42C P0 40W / 180W | 0MiB / 8119MiB | 0% Default |
+ — — — — — — — — — — — — — — — -+ — — — — — — — — — — — + — — — — — — — — — — — +
| 1 GeForce GTX 107… Off | 00000000:02:00.0 Off | N/A |
| 0% 33C P0 38W / 180W | 0MiB / 8119MiB | 2% Default |
+ — — — — — — — — — — — — — — — -+ — — — — — — — — — — — + — — — — — — — — — — — +

+ — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+ — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -+

安裝CUDA

首先下載CUDA:

wget https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux

添加執行權限:

sudo chmod +x cuda_10.0.130_410.48_linux

開始安裝CUDA:

sudo ./cuda_10.0.130_410.48_linux --driver --silent

sudo ./cuda_10.0.130_410.48_linux --toolkit --silent

sudo ./cuda_10.0.130_410.48_linux --samples --silent

若出現Missing recommended library: libGLU.so,則進行下面命令:

sudo apt-get install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev

安裝CUDA之後,還是需要將CUDA添加至~/.bashrc當中:

export PATH=/usr/local/cuda/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda/64:$LD_LIBRARY_PATH

然後再激活~/.bashrc

source ~/.bashrc

再檢查是否安裝完成:

nvcc -V

出現下面信息表示安裝成功:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright © 2005–2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

編譯以及運行Cuda例子,首先切換目錄

cd /usr/local/cuda/samples/7_CUDALibraries/batchCUBLAS/

然後編譯

sudo make

編譯成功會出現下面信息:

“/usr/local/cuda-10.0”/bin/nvcc -ccbin g++ -I../../common/inc -m64 -gencode arch=compute_30,code=compute_30 -o batchCUBLAS.o -c batchCUBLAS.cpp
“/usr/local/cuda-10.0”/bin/nvcc -ccbin g++ -m64 -gencode arch=compute_30,code=compute_30 -o batchCUBLAS batchCUBLAS.o -lcublas
mkdir -p ../../bin/x86_64/linux/release
cp batchCUBLAS ../../bin/x86_64/linux/release

切換到編譯好的範例目錄:

cd /usr/local/cuda/samples/bin/x86_64/linux/release/

運行batchCUBLAS範例:

./batchCUBLAS

成功會出現下面類似畫面:

batchCUBLAS Starting…GPU Device 0: “GeForce GTX 1070 Ti” with compute capability 6.1==== Running single kernels ====Testing sgemm
#### args: ta=0 tb=0 m=128 n=128 k=128 alpha = (0xbf800000, -1) beta= (0x40000000, 2)
#### args: lda=128 ldb=128 ldc=128
^^^^ elapsed = 0.00006795 sec GFLOPS=61.727
@@@@ sgemm test OK
Testing dgemm
#### args: ta=0 tb=0 m=128 n=128 k=128 alpha = (0x0000000000000000, 0) beta= (0x0000000000000000, 0)
#### args: lda=128 ldb=128 ldc=128
^^^^ elapsed = 0.00038695 sec GFLOPS=10.8393
@@@@ dgemm test OK
==== Running N=10 without streams ====Testing sgemm
#### args: ta=0 tb=0 m=128 n=128 k=128 alpha = (0xbf800000, -1) beta= (0x00000000, 0)
#### args: lda=128 ldb=128 ldc=128
^^^^ elapsed = 0.00018406 sec GFLOPS=227.878
@@@@ sgemm test OK
Testing dgemm
#### args: ta=0 tb=0 m=128 n=128 k=128 alpha = (0xbff0000000000000, -1) beta= (0x0000000000000000, 0)
#### args: lda=128 ldb=128 ldc=128
^^^^ elapsed = 0.00181317 sec GFLOPS=23.1324
@@@@ dgemm test OK
==== Running N=10 with streams ====Testing sgemm
#### args: ta=0 tb=0 m=128 n=128 k=128 alpha = (0x40000000, 2) beta= (0x40000000, 2)
#### args: lda=128 ldb=128 ldc=128
^^^^ elapsed = 0.00009513 sec GFLOPS=440.907
@@@@ sgemm test OK
Testing dgemm
#### args: ta=0 tb=0 m=128 n=128 k=128 alpha = (0xbff0000000000000, -1) beta= (0x0000000000000000, 0)
#### args: lda=128 ldb=128 ldc=128
^^^^ elapsed = 0.00142288 sec GFLOPS=29.4775
@@@@ dgemm test OK
==== Running N=10 batched ====Testing sgemm
#### args: ta=0 tb=0 m=128 n=128 k=128 alpha = (0x3f800000, 1) beta= (0xbf800000, -1)
#### args: lda=128 ldb=128 ldc=128
^^^^ elapsed = 0.00012779 sec GFLOPS=328.212
@@@@ sgemm test OK
Testing dgemm
#### args: ta=0 tb=0 m=128 n=128 k=128 alpha = (0xbff0000000000000, -1) beta= (0x4000000000000000, 2)
#### args: lda=128 ldb=128 ldc=128
^^^^ elapsed = 0.00167418 sec GFLOPS=25.053
@@@@ dgemm test OK
Test Summary
0 error(s)

若出現下面錯誤信息:

./batchCUBLAS: error while loading shared libraries: libcublas.so.10.0: cannot open shared object file: No such file or directory

則進行軟鍊接:

sudo ln -s /usr/local/cuda-10.0/lib64/libcublas.so.10.0 /usr/lib/libcublas.so.10.0

針對deviceQuery範例

sudo ln -s /usr/local/cuda-10.0/lib64/libcufft.so.10.0 /usr/lib/libcufft.so.10.0

安裝CuDNN

這裡下載CuDNN,而這個頁面需要登錄,而我們在這裡下載了:

cuDNN v7.3.1 Library for Linux

下載後,在Ubuntu內解壓:

tar -xvf cudnn-10.0-linux-x64-v7.3.1.20.tgz

會得到有下面文件的文件夾:

cuda

cuda/include

cuda/lib64

cuda/NVIDIA_SLA_cuDNN_Support.txt

複製檔案過去

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/

sudo cp cuda/lib64/lib* /usr/local/cuda/lib64/

切換到/usr/local/cuda/lib64/文件夾下

cd /usr/local/cuda/lib64/

建立軟鍊結(需要把版本號換成自己的版本號)

sudo chmod +r libcudnn.so.7.3.1

sudo ln -sf libcudnn.so.7.3.1 libcudnn.so.7

sudo ln -sf libcudnn.so.7 libcudnn.so

sudo ldconfig

結束安裝

--

--