2020年版/CUDAを有効にしてDLIBをインストールする方法

# 概要
CUDA, cuDNNを有効にしてdlibをインストールすることに成功したので備忘録的に記録
dlibのバージョンによってインストール方法が異なり、ネットに転がってる記事の通りにやってもCUDAが有効にならない場合がある
インストール方法はdlibが更新されるたびに変わるので、うまくいかなくなったら[dlib公式のHow to compile](http://dlib.net/compile.html)を確認しよう
以下の手順は2020/7/6時点でのインストール方法である

# 環境
- OS:Ubuntu18.06
- GPU:RTX2060
- CUDA:10.2
- cuDNN:7.6.5
- dlib:19.20  
- python:3.7.6

# インストール
## CUDA, cuDNNをインストール
まだCUDA、cuDNNともにインストールしていない時は先に２つをインストールする。

```
## まずCUDAをインストール
$ sudo apt update -y
$ sudo apt upgrade -y
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
$ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub
$ sudo apt-get -y update
$ sudo apt-get -y install cuda
$ echo "export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}" >> ~/.bashrc
$ echo "export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}" >> ~/.bashrc
```

ここで一旦再起動
起動後、以下のコマンドにてCUDAがインストールされていることを確認

```
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89
```  

確認できればCUDAのインストール完了
続いてcuDNNをインストールする

```
# cuDNNインストール
$ wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb
$ wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb
$ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb
```

ここで一旦再起動
以上でCUDAおよびcuDNNのインストールは完了とする
## 事前に必要なcmakeをインストール

```
$ sudo apt -y install cmake
```

## dlibのダウンロード
[dlib公式](http://dlib.net/)を確認して最新のソースコードをダウンロードしよう

```
$ wget http://dlib.net/files/dlib-19.20.tar.bz2
$ tar -jxvf dlib-19.20.tar.bz2
```

## dlibインストール
dlib-19.20フォルダに入っているsetup.pyを使ってインストールする
dlib-19.20ではmakeコマンドを使ってインストールする必要はない
また、```-yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA```オプションをつける必要があるという記事が多く出回っているが、
v.19.20ではyesオプションが廃止となっており、デフォルトで有効になっているため、オプションをつける必要がなくなった。

```
$ cd dlib-19.20
$ python3 setup.py install
```

setup.py実行時にCUDAとcuDNNが有効になっているか確認する。
以下のメッセージが表示されない場合、CUDA、cuDNNが無効となった状態でインストールされてしまう。

```
-- Found CUDA: /usr/local/cuda-10.2 (found suitable version "10.2", minimum required is "7.5") 
-- Looking for cuDNN install...
-- Found cuDNN: /usr/lib/x86_64-linux-gnu/libcudnn.so
-- Building a CUDA test project to see if your compiler is compatible with CUDA...
-- Checking if you have the right version of cuDNN installed.
-- Enabling CUDA support for dlib.  DLIB WILL USE CUDA
```

また、```No BLAS library found so using dlib's built in BLAS```という警告が表示されるが、これは無視しても良い（多分）

# 確認
pythonを対話モードで起動し、DLIB_USE_CUDAがTrueとなっていれば、無事終了
ここでFalseになっているとCUDA,cuDNNが適用されずにインストールされている。

```
$ python3
Python 3.7.6 (default, Jan  8 2020, 19:59:22) 
Type "help", "copyright", "credits" or "license" for more information.
>>> import dlib
>>> dlib.DLIB_USE_CUDA
True
```