nvidia-dockerをUbuntuで動かす

# はじめに
機械学習を行うにあたって環境構築した際のメモを残す。
本家GitHub: [NVIDIA/nvidia-docker]
(https://github.com/NVIDIA/nvidia-docker)
これを導入したいが、英語力が無さすぎたので下記Qiitaを参考にした。
Qiita: [nvidia-docker2を試してみる](
https://qiita.com/ishouyou/items/3c280144a14fe8bb082b)


# 構成
* マシン：Mouse MASTERPIECE i1720PA1-SP2
* OS：Ubuntu 16.04.5 LTS

# Ubuntuインストール
参考記事
Qiita:[【罠がいっぱい！】ubuntu 16.04 LTS をMSI製ノート(GE62 6QC)にinstall](https://qiita.com/Urushibara01/items/b64f86afe5908bd30d5c)

# Dockerインストール
参考記事
Qiita: [Ubuntuにdockerをインストールする]
(https://qiita.com/tkyonezu/items/0f6da57eb2d823d2611d)
※本題から逸れるが、下記も併せて実施した
[Dockerコマンドをsudoなしで実行する方法](https://qiita.com/DQNEO/items/da5df074c48b012152ee)

# nvidiaドライバインストール
参考記事
Qiita: [UbuntuにNVIDIAドライバを入れる手順]
(https://qiita.com/Reizouko/items/c5826dbcc113321fbbcd)

* リモートから作業しているとssh切られるのでローカルで作業することを推奨
    * このあたりのコマンドで落ちた
        * `sudo service lightdm stop`
        
* ドライバ選択
    * nvidia-XXX を選択する所で [ここ](https://qiita.com/moroku0519/items/234f1c53a3187e32bae5)
とかを参考にバージョンを選ぼうとしたが、困ったことに公式の最新とapt-getの最新が違う（公式の方が新しい）(2018年08月17日現在)。
<br>
      * 公式 (=390)
          * ![nVIDIA](https://www.evernote.com/l/AGdvUxIOr6FI159Iu9s3TWLzEK2nRnSuxOwB/ims)

      * apt-get (=384)
          * ![](https://www.evernote.com/l/AGeyf6N5oNhHM5P4rV5iIaoLizc7Qo5HcjsB/image.png)
    
  * →仕方ないのでapt-getできる方を試した
      * `sudo apt-get install nvidia-384`

* このあとrebootを促されるハズなので従う。
    * upgradeを勧めてくるが無視してOK。


### ドライバ動作確認
* `nvidia-smi` コマンドで GeForce GTX が搭載枚数分見えていればOK

```
$ nvidia-smi
Fri Aug 17 15:02:51 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.48                 Driver Version: 390.48                    |
|-------------------------------+----------------------+----------------------+
| 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:17:00.0 Off |                  N/A |
| 25%   34C    P8    12W / 250W |      2MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 108...  Off  | 00000000:65:00.0  On |                  N/A |
| 25%   41C    P8    13W / 250W |    261MiB / 11175MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    1      1283      G   /usr/lib/xorg/Xorg                            18MiB |
|    1      1357      G   /usr/bin/gnome-shell                          49MiB |
|    1      2020      G   /usr/lib/xorg/Xorg                           104MiB |
|    1      2185      G   /usr/bin/gnome-shell                          85MiB |
+-----------------------------------------------------------------------------+
```

Qiita: [カーネルのバージョン固定](https://qiita.com/Reizouko/items/c5826dbcc113321fbbcd#%E3%81%8A%E3%81%BE%E3%81%91%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%9B%BA%E5%AE%9A) についても書いてある通りに設定した



# nvidia-docker2 のインストール
参考記事
Qiita: [nvidia-docker2を試してみる](https://qiita.com/ishouyou/items/3c280144a14fe8bb082b#%E3%83%AC%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E8%BF%BD%E5%8A%A0)

基本的に上記記事の通りにできるが、自分が混乱した所だけメモ
sudo apt-get install するところで、バージョン名を２つ指定する必要がある(下記)
`sudo apt-get install -y nvidia-docker2={バージョン名1} nvidia-container-runtime={バージョン名2}`
これは、`docker --version` の結果に合わせて `sudo apt-cache madison nvidia-docker2 nvidia-container-runtime` の結果の中から選択することになる。

```
$ sudo docker --version
Docker version 18.06.0-ce, build 0ffa825
```
私の場合はDockerのバージョンが18.06.0だったので、

```
$ sudo apt-cache madison nvidia-docker2 nvidia-container-runtime
nvidia-docker2 | 2.0.3+docker18.06.1-1 | https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64  Packages
nvidia-docker2 | 2.0.3+docker18.06.0-1 | https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64  Packages
nvidia-docker2 | 2.0.3+docker18.03.1-1 | https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64  Packages
（中略）
nvidia-container-runtime | 2.0.0+docker18.06.1-1 | https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64  Packages
nvidia-container-runtime | 2.0.0+docker18.06.0-1 | https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64  Packages
nvidia-container-runtime | 2.0.0+docker18.03.1-1 | https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64  Packages
（以下略）
```
nvidia-docker2(=バージョン名1)・・・ 2.0.3+docker18.06.0-1
nvidia-container-runtime(=バージョン名2)・・・2.0.0+docker18.06.0-1
とした。具体的なコマンドは以下のようになる。
`sudo apt-get install -y nvidia-docker2=2.0.3+docker18.06.0-1 nvidia-container-runtime=2.0.0+docker18.06.0-1`



# 最後に
コメント、修正依頼ありましたらお気軽に！