Ubuntu 16.04 に nvidia-docker を install 

まっさらな Ubuntu 16.04 で「ディープラーニングの勉強はじめるぞ〜」な環境を作りたかったので、nvidia-docker を入れました。これはそのときのメモです。


nvidia-docker を入れる前に以下を install しました。

- openssh-server, zsh （個人的な趣味なので、入れる必要は全くない）
- docker 
- nvidia-driver


# openssh & zsh を install

openssh

```
$ sudo apt-get install openssh-server
```

zsh

```
$ sudo apt-get install zsh
$ which zsh
$ chsh
```



# docker を install

[公式](https://docs.docker.com/engine/installation/linux/ubuntu/#/install-using-the-repository)に従っていろいろインストール。


```
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

$ sudo add-apt-repository \
   "deb [arch=armhf] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

$ sudo apt-get update

# sudo apt-get install docker-ce

# 確認
$ sudo docker run hello-world
```

[公式](https://docs.docker.com/engine/installation/linux/linux-postinstall/#/manage-docker-as-a-non-root-user)に従って、docker コマンドを sudo なしで実行できるように、自動で docker コマンドが最初っから使えるようにするように。

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

exit & login

$ docker run hello-world
$ sudo systemctl enable docker
```


# nvidia-driver を install

[公式](http://www.nvidia.co.jp/Download/index.aspx?lang=jp)で自分の GPU にあった nvidia-driver のバージョンを検索する。わたしの GTX 960 の場合は "バージョン:375.39" だったので、それにあった nvidia driver を install。

```
$ sudo add-apt-repository ppa:xorg-edgers/ppa
$ sudo apt-get update
$ apt-cache search 'nvidia-[0-9]+$'

ここで出てきるリストの中から検索したバージョンを選ぶ。

$ sudo apt-get install nvidia-375
$ sudo reboot
$ nvidia-smi
```



# nvidia-docker を install

[公式](https://github.com/NVIDIA/nvidia-docker/wiki/Installation)に従ってやる。

## （念のため、）nvidia-docker に事前に必要なものの確認方法

必要なバージョンが入ってなかったら入れたほうがいい。

(1) GNU/Linux x86_64 with kernel version > 3.10

```
$ cat /proc/version
```

(2) Docker >= 1.9 (official docker-engine only)

```
$ docker version
```

(3) NVIDIA GPU with Architecture > Fermi (2.1)

```
$ lspci | grep VGA
```

(4) NVIDIA drivers >= 340.29 with binary nvidia-modprobe

```
$ nvidia-smi
```


## インストール

```
$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
$ sudo dpkg -i /tmp/nvidia-docker_1.0.1-1_amd64.deb
$ sudo apt-get install nvidia-modprobe
$ sudo docker volume create -d nvidia-docker --name nvidia_driver_375.39
$ sudo docker volume ls
DRIVER              VOLUME NAME
nvidia-docker       nvidia_driver_375.39

# ふつうの docker コマンドだと使えない nvidia-smi コマンドが nvidia-docker がちゃんと install されたら、 docker 内から使えるか？を確認。
$ nvidia-docker run nvidia/cuda nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39                 Driver Version: 375.39                    |
|-------------------------------+----------------------+----------------------+
| 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 970     Off  | 0000:01:00.0      On |                  N/A |
| 25%   30C    P8    19W / 151W |    242MiB /  4036MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+
```

※ `nvidia-docker volume setup`する的なことがいろんな記事に書いてあるが、最近の nvidia-docker にはそんなコマンドがないような気がしてハマった