nvidia-dockerセットアップ手順

# なんの記事？

本年５月にnvidia-dockerセットアップしたときのメモ書きをqiitaに転記した賞味期限ギリギの記事。

## 環境
OS: Ubuntu20.04
GPU: GeForce GTX 1070

## 1. cuda-driversインストール

- <https://developer.nvidia.com/cuda-downloads>から
  - Linux
  - x84_64
  - Ubuntu
  - 20.04
  - deb(network)

    を選択する。

- 「Installation Instructions」の記述の
`sudo apt-get -y install cuda`を`sudo apt-get -y install cuda-drivers`
に置き換えて実行する。

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

- 途中、セキュアブートに関する設定を聞かれるので適当にパスワードを設定し、apt-getが終わったら再起動する。
- 起動中に「Perform MOK management」の画面になるので、「Enroll MOK」を選択する。
- 「View key0」と「Continue」の選択が出てくるので「Continue」を選択する。
- 「No」「yes」の選択で「yes」を選択する。
- パスワードを聞かれるので、再起動前に設定したパスワードを入力する。
- 再起動完了したら`nvidia-smi`を実行して動けばOK。

2021/05/24時点では、この手順で
`NVIDIA-SMI 465.19.01 Driver Version: 465.19.01 CUDA Version: 11.3`
になる。

## 2. dockerインストール

<https://docs.docker.com/engine/install/ubuntu/>

このサイトの手順に沿ってインポートする。
Ubuntuをインストールしたばかりなので、「Uninstall old versions」はスキップ。
「Installation methods」幾つか方法が示されているが、
その中のオススメされている、「Install using the repository」の方法でインストールする。

* dockerインストールに必要なツールをインストール

```bash
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
```

* dockerリポジトリ登録（x86_64 / amd64用を選択）

```bash
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

* dockerインストール

```bash
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
```

* dockerテストラン

```bash
sudo docker run hello-world
```


- sudoなしでdockerを実行するための設定。  
**セキュリティのため、docker管理用のユーザアカウントで実施すること。**

```bash
sudo groupadd docker #なんかすでにdockerグループがあるみたい
sudo usermod -aG docker $USER
newgrp docker 
```

* dockerテストラン

```bash
docker run hello-world
```

* PC起動時に自動的にdockerデーモンを起動するように設定（Ubuntuの場合はデフォルトで有効になってるのでスキップしてよい）  
`systemctl is-enabled docker`  
`systemctl is-enabled containerd`  
で両方enabledになっていたらOK。  
なっていないなら以下を実行する。  
`sudo systemctl enable docker.service`  
`sudo systemctl enable containerd.service`


## 3. NVIDIA Container Toolkit（nvidia-docker2）インストール
* リポジトリの追加

```bash
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
```

* nvidia-docker2インストール

```bash
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
```

* テストラン  

```bash
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
```