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

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

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

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

```
$ sudo apt remove --purge cuda-10-1 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
```

こうすると、最後に次のようなメッセージが表示されることがある。

```
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 10.2をインストールする。

```
$ sudo apt install --no-install-recommends cuda-10-2
```

- cuDNNをインストールする。
    - libcudnnなどは、以下のサイトでバージョンをチェックして、指定する。
        - http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/
    - nnabla=1.10.0 + nnabla-ext-cuda102=1.10.0環境では、libcudnn8系は使えないようなので注意。

```
$ sudo apt install --no-install-recommends libcudnn7=7.6.5.32-1+cuda10.2 libcudnn7-dev=7.6.5.32-1+cuda10.2
```

- TensorRTをインストールする。
    - 以下の```libnvinfer7```などで、バージョン```7.1.3-1+cuda10.2```以降では、```libcudnn8```が必要になるので注意。

```
$ sudo apt install --no-install-recommends libnvinfer7=7.0.0-1+cuda10.2 libnvinfer-dev=7.0.0-1+cuda10.2 libnvinfer-plugin7=7.0.0-1+cuda10.2 libnvinfer-plugin-dev=7.0.0-1+cuda10.2
```

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

```
$ sudo apt-mark hold cuda-10-2 libcudnn7 libcudnn7-dev libnvinfer7 libnvinfer-dev libnvinfer-plugin7 libnvinfer-plugin-dev
$ dpkg --get-selections | grep hold
```


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

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

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

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

```
$ dpkg -l | grep cuda
hi  cuda-10-2                                  10.2.89-1                                        amd64        CUDA 10.2 meta-package
ii  cuda-command-line-tools-10-2               10.2.89-1                                        amd64        CUDA command-line tools
ii  cuda-compiler-10-2                         10.2.89-1                                        amd64        CUDA compiler
ii  cuda-cudart-10-2                           10.2.89-1                                        amd64        CUDA Runtime native Libraries
ii  cuda-cudart-dev-10-2                       10.2.89-1                                        amd64        CUDA Runtime native dev links, headers
ii  cuda-cufft-10-2                            10.2.89-1                                        amd64        CUFFT native runtime libraries
ii  cuda-cufft-dev-10-2                        10.2.89-1                                        amd64        CUFFT native dev links, headers
ii  cuda-cuobjdump-10-2                        10.2.89-1                                        amd64        CUDA cuobjdump
ii  cuda-cupti-10-2                            10.2.89-1                                        amd64        CUDA profiling tools runtime libs.
ii  cuda-cupti-dev-10-2                        10.2.89-1                                        amd64        CUDA profiling tools interface.
ii  cuda-curand-10-2                           10.2.89-1                                        amd64        CURAND native runtime libraries
ii  cuda-curand-dev-10-2                       10.2.89-1                                        amd64        CURAND native dev links, headers
ii  cuda-cusolver-10-2                         10.2.89-1                                        amd64        CUDA solver native runtime libraries
ii  cuda-cusolver-dev-10-2                     10.2.89-1                                        amd64        CUDA solver native dev links, headers
ii  cuda-cusparse-10-2                         10.2.89-1                                        amd64        CUSPARSE native runtime libraries
ii  cuda-cusparse-dev-10-2                     10.2.89-1                                        amd64        CUSPARSE native dev links, headers
ii  cuda-demo-suite-10-2                       10.2.89-1                                        amd64        Demo suite for CUDA
ii  cuda-documentation-10-2                    10.2.89-1                                        amd64        CUDA documentation
ii  cuda-driver-dev-10-2                       10.2.89-1                                        amd64        CUDA Driver native dev stub library
ii  cuda-drivers                               450.51.06-1                                      amd64        CUDA Driver meta-package, branch-agnostic
ii  cuda-drivers-450                           450.51.06-1                                      amd64        CUDA Driver meta-package, branch-specific
ii  cuda-gdb-10-2                              10.2.89-1                                        amd64        CUDA-GDB
ii  cuda-libraries-10-2                        10.2.89-1                                        amd64        CUDA Libraries 10.2 meta-package
ii  cuda-libraries-dev-10-2                    10.2.89-1                                        amd64        CUDA Libraries 10.2 development meta-package
ii  cuda-license-10-2                          10.2.89-1                                        amd64        CUDA licenses
ii  cuda-memcheck-10-2                         10.2.89-1                                        amd64        CUDA-MEMCHECK
ii  cuda-misc-headers-10-2                     10.2.89-1                                        amd64        CUDA miscellaneous headers
ii  cuda-npp-10-2                              10.2.89-1                                        amd64        NPP native runtime libraries
ii  cuda-npp-dev-10-2                          10.2.89-1                                        amd64        NPP native dev links, headers
ii  cuda-nsight-10-2                           10.2.89-1                                        amd64        CUDA nsight
ii  cuda-nsight-compute-10-2                   10.2.89-1                                        amd64        NVIDIA Nsight Compute
ii  cuda-nsight-systems-10-2                   10.2.89-1                                        amd64        NVIDIA Nsight Systems
ii  cuda-nvcc-10-2                             10.2.89-1                                        amd64        CUDA nvcc
ii  cuda-nvdisasm-10-2                         10.2.89-1                                        amd64        CUDA disassembler
ii  cuda-nvgraph-10-2                          10.2.89-1                                        amd64        NVGRAPH native runtime libraries
ii  cuda-nvgraph-dev-10-2                      10.2.89-1                                        amd64        NVGRAPH native dev links, headers
ii  cuda-nvjpeg-10-2                           10.2.89-1                                        amd64        NVJPEG native runtime libraries
ii  cuda-nvjpeg-dev-10-2                       10.2.89-1                                        amd64        NVJPEG native dev links, headers
ii  cuda-nvml-dev-10-2                         10.2.89-1                                        amd64        NVML native dev links, headers
ii  cuda-nvprof-10-2                           10.2.89-1                                        amd64        CUDA Profiler tools
ii  cuda-nvprune-10-2                          10.2.89-1                                        amd64        CUDA nvprune
ii  cuda-nvrtc-10-2                            10.2.89-1                                        amd64        NVRTC native runtime libraries
ii  cuda-nvrtc-dev-10-2                        10.2.89-1                                        amd64        NVRTC native dev links, headers
ii  cuda-nvtx-10-2                             10.2.89-1                                        amd64        NVIDIA Tools Extension
ii  cuda-nvvp-10-2                             10.2.89-1                                        amd64        CUDA nvvp
ii  cuda-repo-ubuntu1804                       10.2.89-1                                        amd64        cuda repository configuration files
ii  cuda-runtime-10-2                          10.2.89-1                                        amd64        CUDA Runtime 10.2 meta-package
ii  cuda-samples-10-2                          10.2.89-1                                        amd64        CUDA example applications
ii  cuda-sanitizer-api-10-2                    10.2.89-1                                        amd64        CUDA Sanitizer API
ii  cuda-toolkit-10-2                          10.2.89-1                                        amd64        CUDA Toolkit 10.2 meta-package
ii  cuda-tools-10-2                            10.2.89-1                                        amd64        CUDA Tools meta-package
ii  cuda-visual-tools-10-2                     10.2.89-1                                        amd64        CUDA visual tools
hi  libcudnn7                                  7.6.5.32-1+cuda10.2                              amd64        cuDNN runtime libraries
hi  libcudnn7-dev                              7.6.5.32-1+cuda10.2                              amd64        cuDNN development libraries and headers
hi  libnvinfer-dev                             7.0.0-1+cuda10.2                                 amd64        TensorRT development libraries and headers
hi  libnvinfer-plugin-dev                      7.0.0-1+cuda10.2                                 amd64        TensorRT plugin libraries
hi  libnvinfer-plugin7                         7.0.0-1+cuda10.2                                 amd64        TensorRT plugin libraries
hi  libnvinfer7                                7.0.0-1+cuda10.2                                 amd64        TensorRT runtime libraries
```