NVIDIA Docker 環境の作り方

# はじめに
2020/11/04時点での NVIDIA Docker 環境の作り方をメモ。
いつの間にかCUDAが認識されなくなっていたため、ドライバーから入れ直すことに。

```
USER@HOST:~$nvidia-smi
Wed Nov  4 14:41:54 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.64       Driver Version: 430.64       CUDA Version: N/A      |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   35C    P8    12W / 275W |     62MiB / 11175MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1609      G   /usr/lib/xorg/Xorg                            59MiB |
+-----------------------------------------------------------------------------+
```


# 古い環境を消す

```
# 現在のCUDAをアンインストール
$ sudo apt-get purge cuda*
$ sudo apt-get purge nvidia-cuda-*
$ sudo apt-get purge libcuda*
$ sudo apt-get purge nvidia*
# 完全に削除
$ sudo apt-get autoremove
$ sudo apt-get autoclean
$ sudo rm -rf /usr/local/cuda*
```

# 本題
以下３手順で、CUDA、Docker、nvidia-docker2がインストールできる。尚、今まではNvidia Driverは別で入れていたが、CUDAを入れれば対応するDriverも一緒にインストールされる。

## 1. 最新CUDAドライバのインストール
[CUDA Toolkit の Web サイト](https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=debnetwork)に従ってインストール
最後の行は~~cuda~~ cuda-driversにすること

```
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-ubuntu1604.pin
$ sudo mv cuda-ubuntu1604.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/ /"
$ sudo apt-get update
$ sudo apt-get -y install cuda-drivers
```

## 2. Dockerのインストール
[Docker公式のインストール方法](https://docs.docker.com/engine/install/ubuntu/#install-using-the-convenience-script)に従ってインストール

```
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
```
インストール後、docker サービスの開始と、自動起動を設定

```
$ sudo systemctl start docker && sudo systemctl enable docker
```

sudo なしに docker コマンドを実行可能にするのであれば、次のように対象のユーザーを docker グループへ追加

```
$ sudo usermod -aG docker $USER
```

## 3.NVIDIA Container Toolkit(nvidia-docker2) パッケージのインストール
[公式のインストール方法](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit)に従ってインストール

```
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
$ sudo systemctl restart docker
```

## 再起動後、動作確認

```
$ sudo reboot
$ nvidia-smi
```

Nvidia DriverとCUDA Versionが表示されれば完了。



>参考
[NVIDIA Docker って今どうなってるの？ (20.09 版)](https://medium.com/nvidiajapan/nvidia-docker-%E3%81%A3%E3%81%A6%E4%BB%8A%E3%81%A9%E3%81%86%E3%81%AA%E3%81%A3%E3%81%A6%E3%82%8B%E3%81%AE-20-09-%E7%89%88-558fae883f44)