NVIDIA DIGITSを使ったDeep Learningトレーニング環境のセットアップ

#目的
ローカルPC(Ubuntu 16.04)にNVIDIA DIGITSを使ったDeep Learningのトレーニング環境を整える。
※[このページ](https://github.com/dusty-nv/jetson-inference#system-setup)のDIGITSに関する部分を日本語で書いているだけです

こちらの画像の左側部分（トレーニング環境：DIGITS）を構築するイメージです。
![Qiita](https://github.com/dusty-nv/jetson-inference/raw/master/docs/images/digits-workflow.jpg "NVIDIA Deep Learning Tools")

#PC環境
- OS: Ubuntu 16.04（仮想環境ではGPU認識できなかったので物理環境にOSインストール）
- ディスク容量: 120GB以上を推奨[（画像認識データセットに必要です）](https://github.com/dusty-nv/jetson-inference#downloading-image-recognition-dataset)
- GPU: ~~GeForce GTX 670~~  GeForce GTX 1060 [（CUDA対応GPUが必須です）](https://developer.nvidia.com/cuda-gpus)

※ GTX 670だと最新のCUDAライブラリに対応しておらず、DIGITSのトレーニングが動作しなかった。

#NVIDIAドライバのインストール

まずはUbuntuにGPUを認識させる必要があるので、NVIDIAドライバのインストールする。

```bash
$ sudo apt-get install -y apt-transport-https curl
$ cat <<EOF | sudo tee /etc/apt/sources.list.d/cuda.list > /dev/null
deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 /
EOF
$ curl -s \
 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub \
 | sudo apt-key add -
$ cat <<EOF | sudo tee /etc/apt/preferences.d/cuda > /dev/null
Package: *
Pin: origin developer.download.nvidia.com
Pin-Priority: 600
EOF
$ sudo apt-get update && sudo apt-get install -y --no-install-recommends cuda-drivers
$ sudo reboot
```

GPUを認識できているか確認。

```bash
$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.44                 Driver Version: 396.44                    |
|-------------------------------+----------------------+----------------------+
| 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 106...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   48C    P2    24W / 120W |    495MiB /  6070MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
```

# DIGITSのインストール
Dockerを使う方法と、Dockerを使わずに必要なツールを個別にインストールする方法がある。
Dockerを使うと複数作業（cuDNN、NVcaffe、DIGITSのインストール）をまとめてやってくれるので、今回はDockerを使ってインストールする。

## Dockerのインストール

Dockerを使用する前提となるツールをインストールし、Dockerリポジトリを追加。

```bash
$ sudo apt-get install -y ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
 "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
```

Docker Engine Utility（nvidia-docker2）リポジトリを追加し、nvidia-docker2をインストールし、毎回sudoなしでDockerを使用するためのアクセス許可を設定してから、システムを再起動する。

```bash
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/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 usermod -aG docker $USER
$ sudo reboot
```

## NVIDIA GPU Cloud(NGC)のアカウント作成

NVIDIAが公開しているDockerコンテナを利用するめ、アカウントを作成する。
https://ngc.nvidia.com/signup/register
アカウント作成後、APIキーを生成してコピーしておく。

## NGCコンテナを使ってDIGITSをインストール

NGCコンテナレジストリにログインする。

```bash
$ docker login nvcr.io
Username: $oauthtoken
Password: <生成したNGC API Keyをペースト>
```

NGCコンテナを使ってnvidia-smiコマンドが通るか試験する。

```bash
docker run --runtime=nvidia --rm nvcr.io/nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04 nvidia-smi
```
データとジョブディレクトリの設定を行い、DIGITSコンテナを実行してインストールする。
※usernameは適宜読み替える

```bash
$ mkdir /home/username/data
$ mkdir /home/username/digits-jobs
$ nvidia-docker run --name digits -d -p 8888:5000 \
 -v /home/username/data:/data:ro \
 -v /home/username/digits-jobs:/workspace/jobs nvcr.io/nvidia/digits:18.05
```

ブラウザで http://localhost:8888 にアクセスしてDIGITSページが表示されればインストール成功。
再起動等を行った場合は、コンテナが停止するので以下のコマンドで起動させる必要がある。

```bash
$ nvidia-docker start digits
```

# 続き
NVIDIA DIGITSを使った画像分類モデルの作成
https://qiita.com/otomon10/items/2b9b4f3730c7121a8e92


#参考元
https://github.com/dusty-nv/jetson-inference#system-setup