SingularityでDockerコンテナを使いたい

# 概要
dockerイメージを変換してSingularityのコンテナを作る
# やったこと
- singularityのインストール
- docker hub上のdockerイメージを使ってコンテナをビルド
- ローカルのdockerイメージを使ってコンテナをビルド
- コンテナ上でgpuを使えるようにする


## 環境
- OS:Ubuntu18.04LTS
- GPU:nvidia Quadro P2000
- nvidiaドライバインストール済み

 
## インストール
このページ通りにインストール
https://github.com/sylabs/singularity/blob/master/INSTALL.md

### システムの依存関係インストール
```
$ sudo apt-get update
$ sudo apt-get install -y build-essential \
  libssl-dev uuid-dev libseccomp-dev \
  pkg-config squashfs-tools cryptsetup
```
### go をインストール＆環境変数設定
```
$ export VERSION=1.13.3 OS=linux ARCH=amd64  # change this as you need
$ wget -O /tmp/go${VERSION}.${OS}-${ARCH}.tar.gz https://dl.google.com/go/go${VERSION}.${OS}-${ARCH}.tar.gz && \
  sudo tar -C /usr/local -xzf /tmp/go${VERSION}.${OS}-${ARCH}.tar.gz
$ echo 'export GOPATH=${HOME}/go' >> ~/.bashrc && \
  echo 'export PATH=/usr/local/go/bin:${PATH}:${GOPATH}/bin' >> ~/.bashrc && \
  source ~/.bashrc
```

#### オプション：golangci-lintをインストール おすすめらしい
```
$ curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh |
  sh -s -- -b $(go env GOPATH)/bin v1.15.0
```

### リポジトリをコピー
```
$ mkdir -p ${GOPATH}/src/github.com/sylabs
$ cd ${GOPATH}/src/github.com/sylabs
$ git clone https://github.com/sylabs/singularity.git
$ cd singularity
$ git checkout v3.5.1
```
### Singularityのインストール
```
$ cd ${GOPATH}/src/github.com/sylabs/singularity
$ ./mconfig 
$ cd ./builddir 
$ make 
$ sudo make install
```
```
$ singularity version
```
でバージョンが表示されれば成功

## dockerコンテナからビルド
### docker hubで検索したコンテナを変換する

例: https://hub.docker.com/r/rogerchen/cuda10.0-cudnn7-py3.6 を使う

```
$ singularity build cuda10cu7.sif docker://fangchen1988/cuda10.0-cudnn7-py3.6
```
### ローカルdockerファイルをSingularityに変換する
dockerイメージ一覧

```
$ docker images
REPOSITORY                      TAG                      IMAGE ID            CREATED             SIZE
hello-world                     latest                   aaa111a11aa1        11 months ago       1.84kB
```
```
$ sudo singularity build hello-singularity.sif docker-daemon://hello-world:latest
```
 hello-singularity.sifは作りたいコンテナの名前
hello-worldは変換したいローカルのdockerイメージの名前

## コンテナを起動しnividia-smiを実行
--nv オプションでgpuを使えるようにする

```
$ singularity exec --nv cuda10cu7.sif nvidia-smi
Fri Dec 20 20:37:42 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50       Driver Version: 430.50       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro P2000        Off  | 00000000:01:00.0 Off |                  N/A |
| 46%   33C    P8     4W /  75W |     17MiB /  5059MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1977      G   /usr/lib/xorg/Xorg                             9MiB |
|    0      2457      G   /usr/bin/gnome-shell                           5MiB |
+-----------------------------------------------------------------------------+
```
表示されれば成功
## shellを起動
```
$ singularity shell --nv cuda10cu7.sif
```