Ubuntu 18.04へのCUDAインストール方法

Ubuntu 18.04 に NVIDIA の CUDA のインストール方法です。私は主に Google Cloud や Amazon EC2 の GPU インスタンスを使っているので、それ前提で書きます。ストレージは20GB程度必要です。Python からしか使わない場合は Anconda 内蔵の CUDA を使用するのがお勧めです。

Ubuntu の他のバージョンはこちらをご覧ください。

- Ubuntu 16.04 https://qiita.com/yukoba/items/3692f1cb677b2383c983 
- Ubuntu 20.04 https://qiita.com/yukoba/items/c4a45435c6ee5d66706d

# 前準備
```
sudo apt update
sudo apt upgrade
```

# CUDA 10や11をNVIDIAのリポジトリからインストール
CUDA 10 から Ubuntu 18.04 向けが https://developer.nvidia.com/cuda-downloads で配布されるようになりました。以下は、Installer Type で deb(network) を選択する場合の流れです。ここで apt install で cuda だと最新版がインストールされ、cuda-10-1 のようにバージョン指定も出来ます。

```
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub

wget wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
sudo apt update

sudo apt install cuda cuda-drivers
sudo reboot

rm cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
```

その後、~/.bashrc の末尾にこれを追加する必要があります。

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

そして一度ログオフして再度ログインしてください。

nvidia-smi で動作確認です。cuBLAS など cuDNN 以外は一通りついてきます。

# cuDNN のインストール
### CUDA 10 以降の場合
CUDA 10 以降で cuDNN 7.3 以降の場合、NVIDIAのリポジトリからインストールできます。"7.5.0.56-1+cuda10.0" の部分は https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 から適切なバージョンを探してください。バージョン指定をしないと最新のがインストールされますが、その際は CUDA も最新のバージョンを使用している必要があります。

```
echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 /" | sudo tee /etc/apt/sources.list.d/nvidia-ml.list
sudo apt update
sudo apt install libcudnn7-dev=7.5.0.56-1+cuda10.0
```

### CUDA 9 の場合
強引に Ubuntu 16.04 用のリポジトリからインストールする方法ですが、そもそも Linux 全体で同じバイナリが使えるので Ubuntu 18.04 でも問題が無いようです。

```
echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64 /" | sudo tee /etc/apt/sources.list.d/nvidia-ml.list
sudo apt update
sudo apt install libcudnn7-dev
```

# CUDA 9.2をNVIDIAのリポジトリからインストール

CUDA 9.2 は Ubuntu 18.04 は未対応なんですが、Ubuntu 17.10 用を強引にインストールできます。NVIDIA が https://gitlab.com/nvidia/cuda/blob/ubuntu18.04/9.2/base/Dockerfile に書いている方法です。動作しますが CUDA 10 で良いなら CUDA 10 を使った方が良いと思います。https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-390/+bug/1753796 に書いてあるバグにより --force-overwrite が必要です。

```
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1710/x86_64/7fa2af80.pub

echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1710/x86_64 /" | sudo tee /etc/apt/sources.list.d/cuda.list
sudo apt update
sudo apt -o Dpkg::Options::="--force-overwrite" install cuda-9-2 cuda-drivers

sudo reboot
```

その後、~/.bashrc の末尾にこれを追加する必要があります。

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

そして一度ログオフして再度ログインしてください。

nvidia-smi で動作確認です。cuBLAS など cuDNN 以外は一通りついてきます。

強引な方法ですが Theano を使う限りだと問題ない感じがします。

# CUDA 9.1 をUbuntuのリポジトリからインストール

Ubuntu 18.04 のリポジトリからインストールする方法です。Ubuntu 16.04 との違いはデバイスドライバのパッケージ名に-driverが付きました。

```
sudo apt install nvidia-cuda-toolkit nvidia-driver-440
sudo reboot
```

nvidia-smi で動作確認です。cuBLAS など cuDNN 以外は一通りついてきます。

ただし、この方法は Ubuntu 18.04 である限り、ずっと CUDA 9.1 です。

Ubuntu 16.04 と違って GRUB の設定をいじらなくても変なバグは無い感じです。

# Anaconda内蔵のCUDAとcuDNNを使用する場合

Anaconda で ```conda install tensorflow-gpu``` などをすると自動的に CUDA と cuDNN がインストールされます。ただしデバイスドライバはインストールされないので ```sudo apt install nvidia-driver-440``` して ```sudo reboot``` が必要です。Python からしか使わない場合は、この方法が簡単です。NVIDIA のリポジトリは不要です。

# 後始末
```
sudo apt autoremove
sudo apt clean
```