[CUDA/Ubuntu 20.04] バージョンアップ メモ (10.2→11.0)

# 環境の確認
- 以下コマンドで、現在インストールされているGPUドライバとCUDAのバーションの確認する。

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

# 古いバージョンのパッケージをアンインストール
- 以下コマンドの?は、上で確かめたパッケージ名によって決まる数字。

```
$ sudo apt remove --purge cuda-10-2 libcudnn? libcudnn?-dev libnvinfer? libnvinfer-dev libnvinfer-plugin? libnvinfer-plugin-dev
$ sudo apt autoremove
$ dpkg -l | grep cuda
```

- rc状態のパッケージが残ることがあるので、以下コマンドできれいにする。

```
$ sudo aptitude purge `dpkg -l |grep ^rc |cut -f3 -d " "`
```


# リポジトリのdebパッケージを取得・登録

```
$ cd tmp
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
$ sudo apt install ./cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
$ wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
```

- 上記で登録されるリポジトリでは、`cuda-repo-ubuntu1804_10.2.89-1_amd64.deb`が最新であり、これを用いても問題なくUbuntu 20.04環境にCUDA11.0をインストールすることができる。

- ここで、次のようなメッセージが表示されることがある。

```
The public CUDA GPG key does not appear to be installed.
To install the key, run this command:
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
```

- 本来なら、メッセージに書いてあるように最後のコマンドをコピペして実行すればよいが、プロキシ環境下では以下のように、```--keyserver-option http-proxy=http://<プロキシサーバ>:<ポート>```を追加して実行する。

```
$ sudo apt-key adv --keyserver-option http-proxy=http://<プロキシサーバ>:<ポート> --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt update
```

# GPUドライバの更新
- ???は一番新しいドライバ。

```
$ ubuntu-drivers devices
$ sudo apt install nvidia-driver-???
$ sudo reboot
$ nvidia-smi
```

# CUDA + cuDNNのインストール
- CUDA 11.0をインストールする。

```
$ sudo apt install --no-install-recommends cuda-11-0
```

- cuDNNをインストールする。
    - libcudnnなどは、以下のサイトでバージョンをチェックして、指定する。
        - http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/

```
$ sudo apt install --no-install-recommends libcudnn8=8.0.4.30-1+cuda11.0 libcudnn8-dev=8.0.4.30-1+cuda11.0
```

- TensorRTをインストールする。

```
$ sudo apt install --no-install-recommends libnvinfer7=7.2.2-1+cuda11.0 libnvinfer-dev=7.2.2-1+cuda11.0 libnvinfer-plugin7=7.2.2-1+cuda11.0 libnvinfer-plugin-dev=7.2.2-1+cuda11.0
```

- パッケージのバージョンを固定する。

```
$ sudo apt-mark hold cuda-11-0 libcudnn8 libcudnn8-dev libnvinfer7 libnvinfer-dev libnvinfer-plugin7 libnvinfer-plugin-dev
$ dpkg --get-selections | grep hold
```


# 環境変数の設定
- ```.bashrc```内で環境変数を設定する。

```
#--- CUDA Toolkit
export PATH="/usr/local/cuda-11.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH"
```

- ```/usr/local/```に移動し、```cuda -> cuda-11.0```となっていることを一応確認する。
- 完了。

# この手順に従うと以下の環境が完成する

```
$ dpkg -l | grep cuda
hi  cuda-11-0                               11.0.3-1                          amd64        CUDA 11.0 meta-package
ii  cuda-command-line-tools-11-0            11.0.3-1                          amd64        CUDA command-line tools
ii  cuda-compiler-11-0                      11.0.3-1                          amd64        CUDA compiler
ii  cuda-cudart-11-0                        11.0.221-1                        amd64        CUDA Runtime native Libraries
ii  cuda-cudart-dev-11-0                    11.0.221-1                        amd64        CUDA Runtime native dev links, headers
ii  cuda-cuobjdump-11-0                     11.0.221-1                        amd64        CUDA cuobjdump
ii  cuda-cupti-11-0                         11.0.221-1                        amd64        CUDA profiling tools runtime libs.
ii  cuda-cupti-dev-11-0                     11.0.221-1                        amd64        CUDA profiling tools interface.
ii  cuda-demo-suite-11-0                    11.0.167-1                        amd64        Demo suite for CUDA
ii  cuda-documentation-11-0                 11.0.228-1                        amd64        CUDA documentation
ii  cuda-driver-dev-11-0                    11.0.221-1                        amd64        CUDA Driver native dev stub library
ii  cuda-drivers                            460.32.03-1                       amd64        CUDA Driver meta-package, branch-agnostic
ii  cuda-drivers-460                        460.32.03-1                       amd64        CUDA Driver meta-package, branch-specific
ii  cuda-gdb-11-0                           11.0.221-1                        amd64        CUDA-GDB
ii  cuda-libraries-11-0                     11.0.3-1                          amd64        CUDA Libraries 11.0 meta-package
ii  cuda-libraries-dev-11-0                 11.0.3-1                          amd64        CUDA Libraries 11.0 development meta-package
ii  cuda-memcheck-11-0                      11.0.221-1                        amd64        CUDA-MEMCHECK
ii  cuda-nsight-11-0                        11.0.221-1                        amd64        CUDA nsight
ii  cuda-nsight-compute-11-0                11.0.3-1                          amd64        NVIDIA Nsight Compute
ii  cuda-nsight-systems-11-0                11.0.3-1                          amd64        NVIDIA Nsight Systems
ii  cuda-nvcc-11-0                          11.0.221-1                        amd64        CUDA nvcc
ii  cuda-nvdisasm-11-0                      11.0.221-1                        amd64        CUDA disassembler
ii  cuda-nvml-dev-11-0                      11.0.167-1                        amd64        NVML native dev links, headers
ii  cuda-nvprof-11-0                        11.0.221-1                        amd64        CUDA Profiler tools
ii  cuda-nvprune-11-0                       11.0.221-1                        amd64        CUDA nvprune
ii  cuda-nvrtc-11-0                         11.0.221-1                        amd64        NVRTC native runtime libraries
ii  cuda-nvrtc-dev-11-0                     11.0.221-1                        amd64        NVRTC native dev links, headers
ii  cuda-nvtx-11-0                          11.0.167-1                        amd64        NVIDIA Tools Extension
ii  cuda-nvvp-11-0                          11.0.221-1                        amd64        CUDA Profiler tools
ii  cuda-repo-ubuntu1804                    10.2.89-1                         amd64        cuda repository configuration files
ii  cuda-runtime-11-0                       11.0.3-1                          amd64        CUDA Runtime 11.0 meta-package
ii  cuda-samples-11-0                       11.0.221-1                        amd64        CUDA example applications
ii  cuda-sanitizer-11-0                     11.0.221-1                        amd64        CUDA Sanitizer
ii  cuda-toolkit-11-0                       11.0.3-1                          amd64        CUDA Toolkit 11.0 meta-package
ii  cuda-tools-11-0                         11.0.3-1                          amd64        CUDA Tools meta-package
ii  cuda-visual-tools-11-0                  11.0.3-1                          amd64        CUDA visual tools
hi  libcudnn8                               8.0.4.30-1+cuda11.0               amd64        cuDNN runtime libraries
hi  libcudnn8-dev                           8.0.4.30-1+cuda11.0               amd64        cuDNN development libraries and headers
hi  libnvinfer-dev                          7.2.2-1+cuda11.0                  amd64        TensorRT development libraries and headers
hi  libnvinfer-plugin-dev                   7.2.2-1+cuda11.0                  amd64        TensorRT plugin libraries
hi  libnvinfer-plugin7                      7.2.2-1+cuda11.0                  amd64        TensorRT plugin libraries
hi  libnvinfer7                             7.2.2-1+cuda11.0                  amd64        TensorRT runtime libraries
```