Ubuntu18.04 LTSにCUDA9.0とcuDNN7.4.1をインストールする

# はじめに
やること
・GTX1080tiを搭載したPCに、DUCAとcuDNNをインストールする

バージョン
・DUCA9.0
・cuDNN7.4.1
・Tensorflow1.12.0
※Tensorflow-gpuのサポートが、現状ではCUDA9/cuDNN7までであったため
　参考：https://www.tensorflow.org/install/source#common_installation_problems

全体を通して参考にしたサイト
・https://qiita.com/sho8e69/items/66c1662c49ac89a024be
・https://qiita.com/mitsuharu_e/items/ecff16bdbcb795a86433

# DUCAのインストール手順
それでは最初に、CUDAをインストールしていきましょう。

## 古いDriver／CUDAのチェック
事前準備として、下記コマンドで古いDriver／CUDAがインストールされているかどうかチェックしておきます。

```
dpkg -l | grep nvidia
dpkg -l | grep cuda
```

もし、古いものが入っていて削除しておいた方が良さそうであれば、下記コマンドで削除しておきます。
※なお、CUDAをインストールするときに、nvidia-driverが上書きされてダウングレードする可能性があります。よって、最新のnvidia-driverがインストールされている状態でCUDAを入れる場合は、結果的に最新のnvidia-driverではなくなるため、ここで削除しておいても問題はないかと思います。

```
sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*
```

## DUCAのダウンロード
まずは、CUDAのダウンロードからです。
[CUDA Toolkit 9.0 Downloads](https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1704&target_type=deblocal)の「Base Installer」より、CUDA9.0をダウンロードします。

## CUDAのインストール
公式サイトのBase Installerを参考にして、下記のコマンドを入力します。

```
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda（cuda-toolkit-9-0でも可？）
```

## CUDAのパスを通す
インストール後は、.bashrcにCUDAのパスを記載します。

```
sudo nano .bashrc

export PATH=/usr/local/cuda/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
```

リロードします。

```
source .bashrc
```

再起動します。

```
sudo reboot
```

CUDAのバージョンを確認して、9.0であればインストール成功です。

```
nvcc -V
```

## nvidia-driverのインストール
上記でnvidia-driverを削除したため、CUDAインストール後にnvidia-driverをインストールしておきます。
手順は[Ubuntu18.04 LTSのインストールからGPU Driverのインストールまで](https://qiita.com/riv/items/345373398cf30d16b8ad)にまとめましたので、こちらを参考にしてください。
一応、コマンドだけ簡単にまとめていきます。

```
# PPAリポジトリにグラフィックスドライバ関連を追加
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

# グラフィックボードの詳細を確認
ubuntu-drivers devices

# nvidia-driveをインストール（ここでは415）
sudo apt-get install nvidia-415

# 再起動
sudo reboot
```


# cuDNNのインストール手順
続いて、cuDNNをインストールしていきます。

## cuDNNのダウンロード／インストール
[cuDNN Archive](https://developer.nvidia.com/rdp/cudnn-archive#a-collapse714-9)より、「cuDNN v7.4.1 for CUDA9.0」のcuDNNを選択します。

その後、下記の3種類をダウンロードします。
１．cuDNN v7.4.1 Runtime Library for Ubuntu16.04 (Deb)
２．cuDNN v7.4.1 Developer Library for Ubuntu16.04 (Deb)
３．cuDNN v7.4.1 Code Samples and User Guide for Ubuntu16.04 (Deb)

ダウンロード完了後、それぞれ次のコマンドを実行します。

```
sudo dpkg -i libcudnn7_7.4.1.5-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.4.1.5-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.4.1.5-1+cuda9.0_amd64.deb
```

これでインストールは完了のようです。

なお、cuDNNがインストールされたかを簡単にする方法はなく、例えば以下のコマンドなどで確認できるようです。
参考：http://thr3a.hatenablog.com/entry/20180531/1527753847

```
ls -l /usr/local/cuda/lib64/libcudnn*
```

これでインストールが確認できれば成功です。

（追記）
この後、[Ubuntu18.04 LTSにTensorflow-GPUをインストールしてMNITサンプルを実行する](https://qiita.com/riv/items/a278ce1afeb384eaa518)にてTensorflow-GPUをインストールした際。エラーが出てimportできませんでした。
よって、cuDNNが上手くインストールできていない可能性を追い、下記サイトを参考にさせていただいて次の対処を加えました。
参考：
・https://qiita.com/mitsuharu_e/items/ecff16bdbcb795a86433
・https://qiita.com/JeJeNeNo/items/05e148a325192004e2cd

１．以下のLibraryを新たにダウンロード
・cuDNN Library for Linux

２．ダウンロードしたLibraryを解答して指定の場所にコピー
※コピーは「-a」と付けないと、シンボリックリンクがシンボリックリンクとしてコピーされず、後のliconfigで「シンボリックリンクではありません」のエラーが発生するため、注意が必要です。

```
tar xfvz cudnn-9.0-linux-x64-v7.4.1.5.tgz
sudo cp -a cuda/lib64/* /usr/local/cuda-8.0/lib64/
sudo cp -a cuda/include/* /usr/local/cuda-8.0/include/
sudo chmod a+r /usr/local/cuda-9.0/lib64/libcudnn*
sudo ldconfig
```

これをやった後は、Tensorflow-GPUのimportでエラーが出なくなりました。


以上で、CUDAとcuDNNのインストールは終了です。
お疲れ様でした！

この後は、CUDAとcuDNNの動作確認としてTensorflow-GPUのMNISTサンプルを実行してみたいと思います。（[Ubuntu18.04 LTSにTensorflow-GPUをインストールしてMNITサンプルを実行する](https://qiita.com/riv/items/78f6070dd96275961185)に続きます。）