SingularityやSlurmをインストールしたDocker対応モデルを発売

2019.12.09 ホット

SingularityやSlurmをインストールしたDocker対応モデルを発売しました

GDEP_DockerModel
GDEPアドバンスが提供する Docker対応モデルは コンテナ技術に特化したモデルです。
OSはUbuntu 18.04 LTSまたはCentOS7が選択可能で、業界標準となっている仮想環境「Docker」に加え、GDEPアドバンスでは AI/HPCアプリケーションに適した「Singularity」、およびワークロードマネジメント用に「Slurm」をプレインストールしてあります。また、NVIDIA社が提供するNVIDIA GPU Cloud (NGC)の内容を検索できるngcスクリプトも配置してありますので、コマンドラインから、利用可能なDocker Imageを簡単に探し出すことができます。

※Version 1.0における主なソフトウェアリスト
 Ubuntu 18.04 LTS または CentOS7
 CUDA 10.0
 CUDA Driver 10.1
 Docker CE 19.03.5
 NVIDIA Docker2 2.2.2
 NGC script
 Singularity 3.5.0
 Slurm 19.05.4

また、これらに加え、NGC等から以下のDocker Imageも配置済みです。
 nvcr.io/nvidia/tensorflow: 19.08-py3
 nvcr.io/nvidia/tensorrtserver:19.08-py3
 nvcr.io/nvidia/digits:19.08-caffe
 nvcr.io/nvidia/digits:19.08-tensorflow
 nvcr.io/nvidia/mxnet:19.08-py3
 nvcr.io/nvidia/caffe:19.08-py2
 nvcr.io/nvidia/tensorrt:19.08-py3
 chainer/chainer:v6.3.0-python3
 gdep-adv/handsign:1.0

Dockerとは

Dockerはコンテナと呼ばれる技術の中で最も普及しています。アプリケーションに対してベースOSに配置されたライブラリ群に依存しない環境を提供することで、主にマイクロサービスをポータブルにすることを目的に開発されました。例えばApache2, MySQLをそれぞれ独立したイメージとして構築して、そのイメージを多数配置すれば、簡単にアプリケーションサーバをスケールアウトすることができます。

dl-box@DL-BoxII:~$  docker images

REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE

nvcr.io/nvidia/tensorflow       19.08-py3           be978d32a5c3        3 months ago        7.35GB

nvcr.io/nvidia/pytorch          19.08-py3           f68208d0a8ef        3 months ago        9.01GB

chainer/chainer                 v6.3.0-python3      ea238bc365b3        3 months ago        4.12GB

nvcr.io/nvidia/tensorrtserver   19.08-py3           951d0400284e        3 months ago        7.73GB

nvcr.io/nvidia/digits           19.08-caffe         dcd2fc8d7e04        3 months ago        5.13GB

nvcr.io/nvidia/caffe            19.08-py2           5d56c583fd55        3 months ago        5.02GB

       :

dl-box@DL-BoxII:~$  docker run --rm -it nvcr.io/nvidia/caffe:19.08-py2 /bin/bash -l

 

==================

== NVIDIA Caffe ==

==================

 

NVIDIA Release 19.08 (build 7603994)

NVIDIA Caffe Version 0.17.3

       :

root@1dcd8ca1c3c5:/workspace#

 

NVIDIA Docker

NVIDIA Dockerは、Dockerコンテナ内部からGPUを扱いやすくするためのラッパーで、使用するGPUをコマンドのパラメータで渡すことなどができます。GDEPアドバンスのDockerモデルには nvidia-dockerがデフォルト設定してあり、またDocker 19.03からはGPUがネイティブサポートされましたので、nvidia-docker2の文法を気にすることなく--gpusオプションが使用できます。

dl-box@DL-BoxII:~$  docker run --rm -it nvcr.io/nvidia/caffe:19.08-py2 /bin/bash -l

root@1dcd8ca1c3c5:/workspace# ls -l /dev/nvidia*

crw-rw-rw- 1 root root 195, 255 Dec  3 20:33 /dev/nvidiactl                

root@1dcd8ca1c3c5:/workspace# logout

 

dl-box@DL-BoxII:~$ docker run --gpus=all --rm -it nvcr.io/nvidia/caffe:19.08-py2 /bin/bash -l

root@054600f8b2a6:/workspace# ls -l /dev/nvidia*

crw-rw-rw- 1 root root 510,   0 Dec  3 21:47 /dev/nvidia-uvm

crw-rw-rw- 1 root root 510,   1 Dec  3 21:47 /dev/nvidia-uvm-tools

crw-rw-rw- 1 root root 195,   0 Dec  3 20:33 /dev/nvidia0

crw-rw-rw- 1 root root 195,   1 Dec  3 20:33 /dev/nvidia1

crw-rw-rw- 1 root root 195, 255 Dec  3 20:33 /dev/nvidiactl

root@054600f8b2a6:/workspace# logout

 

dl-box@DL-BoxII:~$ docker run --gpus="device=1" --rm -it nvcr.io/nvidia/caffe:19.08-py2 /bin/bash -l

root@b8d9f0b1fa35:/workspace# ls -l /dev/nvidia*

crw-rw-rw- 1 root root 510,   0 Dec  3 21:47 /dev/nvidia-uvm

crw-rw-rw- 1 root root 510,   1 Dec  3 21:47 /dev/nvidia-uvm-tools

crw-rw-rw- 1 root root 195,   1 Dec  3 20:33 /dev/nvidia1

crw-rw-rw- 1 root root 195, 255 Dec  3 20:33 /dev/nvidiactl

root@b8d9f0b1fa35:/workspace# logout

 

 より詳しくはNVIDIA DEEP LEARNING FRAMEWORKS DOCUMENTATIONをご覧ください。

NVIDIA GPU CLOUD (NGC)

NVIDIA GPU CloudはNVIDIA社がNVIDIA GPU向けにDocker Imageを作成、チューニングし、定期的にリリースしているインターネット上のレポジトリの名称です。NVIDIA社が自社でサポートしている部分と、パートナ企業が作成したイメージを掲載している部分があります。
以前は全てのイメージを参照するために、ユーザ登録が必要でしたが、現在はかなりの部分が登録なしに自由に参照して持ってくることができます。
NGCの内容は、基本的にはWebサイトをブラウザで参照して中身を確かめますが、参照用スクリプトも用意されており、コマンドラインから参照することも可能です。
※以下はngcコマンドの使用例です。

dl-box@DL-BoxII:~$  ngc registry image list

+------------+------------+------------+------------+---------+------------+

| Name       | Repository | Latest Tag | Image Size | Updated | Permission |

|            |            |            |            | Date    |            |

+------------+------------+------------+------------+---------+------------+

| BigDFT     | hpc/bigdft | cuda10-ubu | 2.37 GB    | Oct 18, | unlocked   |

|            |            | ntu1804-om |            | 2019    |            |

|            |            | pi4-mkl    |            |         |            |

| CANDLE     | hpc/candle | 20180326   | 1.52 GB    | Oct 18, | unlocked   |

|            |            |            |            | 2019    |            |

| CHROMA     | hpc/chroma | 2018-cuda9 | 1.43 GB    | Oct 18, | unlocked   |

|            |            | .0-ubuntu1 |            | 2019    |            |

|            |            | 6.04       |            |         |            |

|            |            | -volta-    |            |         |            |

|            |            | openmpi    |            |         |            |

       :

dl-box@DL-BoxII:~$  ngc registry image list nvidia/tensorflow

+------------+------------+------------+------------+---------+------------+

| Name       | Repository | Latest Tag | Image Size | Updated | Permission |

|            |            |            |            | Date    |            |

+------------+------------+------------+------------+---------+------------+

| TensorFlow | nvidia/ten | 19.11-tf2- | 3.21 GB    | Nov 27, | unlocked   |

|            | sorflow    | py3        |            | 2019    |            |

+------------+------------+------------+------------+---------+------------+

dl-box@DL-BoxII:~$  ngc registry image list nvidia/tensorflow:*

+-------------------+---------------+------------+--------------+

| Name              | Tag           | Image Size | Updated Date |

+-------------------+---------------+------------+--------------+

| nvidia/tensorflow | 19.11-tf2-py3 | 3.21 GB    | Nov 27, 2019 |

| nvidia/tensorflow | 19.11-tf1-py3 | 3.47 GB    | Nov 27, 2019 |

| nvidia/tensorflow | 19.10-py3     | 3.39 GB    | Oct 28, 2019 |

| nvidia/tensorflow | 19.10-py2     | 3.22 GB    | Oct 28, 2019 |

| nvidia/tensorflow | 19.09-py3     | 3.45 GB    | Sep 26, 2019 |

       :

dl-box@DL-BoxII:~$  docker pull nvcr.io/nvidia/tensorflow:19.09-py3

19.09-py3: Pulling from nvidia/tensorflow

35c102085707: Pulling fs layer

251f5509d51d: Pulling fs layer

       :

 

Singularity

Dockerは、その開発目的としてマイクロサービスに主眼が置かれていたため、AIやHPCなど、複数ユーザが環境を共有して利用する場合には、多少不都合を生ずる特徴があります。最大の欠点はコンテナ内部が特権付きrootアカウントで動作していることで、共有環境ではセキュリティリスクになり得ます。ユーザの変更は可能であり、root不要のモードも開発中ですが、根本的にはこのセキュリティリスクの回避は困難です。
AI/HPC用途に用いるために、この問題を解決することを目的として開発されたのがSingularityであり、イメージの実行がユーザ空間で行われることが最大の特徴です。この特徴により、Dockerの使用を拒絶していた計算センターなどにもコンテナの利用が普及するようになりました。(ただし、buildサブコマンドはroot特権が必要です。)
また、Dockerの実行が、Dockerデーモンによる特権付きプロセス生成方式であるのに対し、Singularityはユーザプロセスのまま動作しますので、次に述べるワークロードマネージャとの相性がとても良いことも、大きな特徴の一つです。
Singularity Imageは通常squashfsを用いて単一ファイルに納められ、ライブラリ等をすべて含むためサイズが多少大きめですが、普通の実行ファイルとなんら変わることなく扱うことができます。一方Docker Imageは通常overlay filesystemを用いて何層、何十層というローカルシステムのディレクトリ群で構成され、専用のsaveサブコマンドを用いて一つのtarアーカイブにまとめます。

Singularityはインターネット上に独自のSingularity Hubを持っていますが、既存リソースを最大限に生かすため、SingularityにはDocker Imageを変換して実行する機能があります。この機能を用いると、既存のDockerレポジトリからDocker Imageを持ってきて実行することができます。ただし、多くのイメージは変換可能ですが、ユーザIDをいじったり、特殊なことをしていたりするイメージは、手作業で作り直す必要があることもあります。残念ながらSingularityはDockerイメージの作成手順書にあたるDockerfileとの互換性は持ち合わせていません。
また、Singularityを使用してホストにpullしてあるDocker ImageをSingularity Imageに変換することも可能です。この場合pullサブコマンドではなくbuildサブコマンドであり、且つdockerへのアクセスなのでdockerグループに属している必要があることに注意が必要です。
※以下はsingularityの使用例です。

dl-box@DL-BoxII:~$ module list

Currently Loaded Modulefiles:

 1) singularity/3.5.0   2) slurm/19.05.4 

dl-box@DL-BoxII:~$ singularity search centos

       :

       library://dtrudg/linux/centos

                 Tags: 6 7 centos6 centos7 latest

       :

dl-box@DL-BoxII:~$ singularity pull library://library/default/centos:7.6

INFO:    Downloading library image

 79.08 MiB / 79.08 MiB [================================] 100.00% 7.51 MiB/s 10s

WARNING: Container might not be trusted; run 'singularity verify centos_7.6.sif' to show who signed it

INFO:    Download complete: centos_7.6.sif

dl-box@DL-BoxII:~$ singularity verify centos_7.6.sif

Container is signed by 1 key(s):

 

Verifying partition: FS:

8883491F4268F173C6E5DC49EDECE4F3F38D871E

[REMOTE]  Sylabs Admin <support@sylabs.io>

[OK]      Data integrity verified

 

INFO:    Container verified: centos_7.6.sif

dl-box@DL-BoxII:~$ singularity shell centos_7.6.sif

Singularity> cat /etc/redhat-release

CentOS Linux release 7.6.1810 (Core)

Singularity> id

uid=1002(dl-box) gid=1002(dl-box) groups=1002(dl-box),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd),118(lpadmin),128(sambashare),999(docker)

Singularity> ls -l /dev/nvidia*

crw-rw-rw- 1 root root 195, 254 12月  4 05:33 /dev/nvidia-modeset

crw-rw-rw- 1 root root 510,   0 12月  4 06:47 /dev/nvidia-uvm

crw-rw-rw- 1 root root 510,   1 12月  4 06:47 /dev/nvidia-uvm-tools

crw-rw-rw- 1 root root 195,   0 12月  4 05:33 /dev/nvidia0

crw-rw-rw- 1 root root 195,   1 12月  4 05:33 /dev/nvidia1

crw-rw-rw- 1 root root 195, 255 12月  4 05:33 /dev/nvidiactl

Singularity> exit

exit

 

dl-box@DL-BoxII:~$ docker images

REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE

nvcr.io/nvidia/tensorflow       19.08-py3           be978d32a5c3        3 months ago        7.35GB

nvcr.io/nvidia/pytorch          19.08-py3           f68208d0a8ef        3 months ago        9.01GB

chainer/chainer                 v6.3.0-python3      ea238bc365b3        3 months ago        4.12GB

nvcr.io/nvidia/tensorrtserver   19.08-py3           951d0400284e        3 months ago        7.73GB

nvcr.io/nvidia/digits           19.08-caffe         dcd2fc8d7e04        3 months ago        5.13GB

       :

 

dl-box@DL-BoxII:~$ singularity build nvcr.io_nvidia_digits_19.08-caffe.sif \

docker-daemon://nvcr.io/nvidia/digits:19.08-caffe

INFO:    Starting build...

Getting image source signatures

Copying blob 543791078bdb done

Copying blob c56e09e1bd18 done

       :

 

Writing manifest to image destination

Storing signatures

2019/12/05 13:47:32  info unpack layer: sha256:721c6c6ed752c81eec4dbef6a88cb44d832a9f4185e11e1313b75d4ab942a51a

2019/12/05 13:47:33  info unpack layer: sha256:4a5aa20e831f7664730ad798c6dca9d6a1a4f1ce4a6b8e3be3fee4491982b1dc

       :

 

INFO:    Creating SIF file...

INFO:    Build complete: nvcr.io_nvidia_digits_19.08-caffe.sif

 

Slurm Workload Manager

Slurm Workload Manager (Slurmスラーム)は Lawrence Livermore National Laboratoryで開発が始まったワークロードマネージャで、現在はSchedMD社がサポートしています。無償で全ての機能が利用可能にもかかわらず、非常に高機能を備えているため、HPCの世界では現時点において非常に広く普及しています。
SlurmはCPU, Memoryなどに加え、GPUのサポートも可能であり、ハードウェア資源を監視しながら、順次バッチジョブを実行させることができます。
ワークロードマネージャは、タスクからの要求に応じてハードウェア資源や時間を確保し、ユーザプロセスを作成します。その際、ユーザプロセスはワークロードマネージャが確保してくれたコンテキスト内でプログラムを実行しなければなりません。しかし、Dockerを使用すると、起動されたユーザプロセスは、そのコンテキストの外部に存在するDockerデーモンにリクエストをなげ、Dockerデーモンはコンテキスト外部に勝手に特権付きプロセスを作成しようとします。これではリソース管理の意味がありませんので、ワークロードマネージャがDockerをサポートするためには、非常に複雑な制御プロセスを実施する必要があります。一方Singularityは、前述のように普通のユーザ空間のプログラムと何ら変わりなくふるまうため、ワークロードマネージャに特別な変更を加えることなく、素直に動作させることが可能です。
このことからも、共有環境ではDockerよりSlurmのほうが望ましい場合が多いと思われます。
※以下はslurmの実行例です。

dl-box@DL-BoxII:~$ module list

Currently Loaded Modulefiles:

 1) singularity/3.5.0   2) slurm/19.05.4 

dl-box@DL-BoxII:~$ tail -N 5 /opt/slurm/19.05.4/etc/slurm.conf

#

# COMPUTE NODES

GresTypes=gpu,mps

NodeName=localhost Sockets=1 CoresPerSocket=10 ThreadsPerCore=2 RealMemory=64091 Gres=gpu:titanrtx:2,mps:200 State=UNKNOWN

PartitionName=all Nodes=localhost Default=YES MaxTime=120:0:0 State=UP

dl-box@DL-BoxII:~$ sinfo

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST

all*         up 5-00:00:00      1   idle localhost

dl-box@DL-BoxII:~$ salloc --gres=gpu:2

salloc: Granted job allocation 3

To run a command as administrator (user "root"), use "sudo <command>".

See "man sudo_root" for details.

test@DL-BoxII:~$ salloc -n2 --gres=gpu:2

salloc: Pending job allocation 4

 

dl-box@DL-BoxII:~$ srun nvidia-smi -q | grep Minor

    Minor Number                    : 0

    Minor Number                    : 1

dl-box@DL-BoxII:~$ srun id

uid=1002(dl-box) gid=1002(dl-box) groups=1002(dl-box),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd),118(lpadmin),128(sambashare),999(docker)

dl-box@DL-BoxII:~$ exit

exit

salloc: Relinquishing job allocation 3

salloc: Job allocation 3 has been revoked.

salloc: Granted job allocation 4

test@DL-BoxII:~$ srun id

uid=1001(test) gid=1001(test) groups=1001(test),999(docker)

uid=1001(test) gid=1001(test) groups=1001(test),999(docker)

test@DL-BoxII:~$ srun nvidia-smi -q | grep Minor

    Minor Number                    : 0

    Minor Number                    : 0

    Minor Number                    : 1

    Minor Number                    : 1

dl-box@DL-BoxII:~$ salloc --gres=gpu:1

salloc: Pending job allocation 5

salloc: job 5 queued and waiting for resources

test@DL-BoxII:~$ srun sleep 5

test@DL-BoxII:~$ exit

exit

salloc: Relinquishing job allocation 4

salloc: Job allocation 4 has been revoked.

salloc: job 5 has been allocated resources

salloc: Granted job allocation 5

To run a command as administrator (user "root"), use "sudo <command>".

See "man sudo_root" for details.

 

dl-box@DL-BoxII:~$ srun nvidia-smi -q | grep Minor

    Minor Number                    : 0

dl-box@DL-BoxII:~$ exit

exit

salloc: Relinquishing job allocation 5

salloc: Job allocation 5 has been revoked.

 

test@DL-BoxII:~$ salloc --gres=gpu:1

salloc: Granted job allocation 6

test@DL-BoxII:~$ srun nvidia-smi -q | grep Minor

    Minor Number                    : 1

test@DL-BoxII:~$ exit

exit

salloc: Relinquishing job allocation 6

salloc: Job allocation 6 has been revoked.

 

test@DL-BoxII:~$ salloc -n2 --gres=gpu:2

salloc: Granted job allocation 7

test@DL-BoxII:~$ srun hostname

DL-BoxII

DL-BoxII

test@DL-BoxII:~$ exit

exit

salloc: Relinquishing job allocation 7

salloc: Job allocation 7 has been revoked.

実際の運用ではsalloc+srunを使用することはあまりなく、これらをスクリプト化してsbatchでパーティション(バッチキュー)に投入します。

対応モデル

Deep Learning BOX II
Deep Learning STATION
MAS-XW-621S/3X
MAS-i9WX
MAS-XS-621RM/4X
MAS-XS-621G/4X
MAS-XS-621SV4U/8X

GDEPアドバンスではお客様のご要望に合わせてハードウェアの構成変更や、ソフトウェアのインストールカスタマイズが可能です。
安定したミドルウェアバージョンやこだわりのツールなど、お客様の利用用途や環境に合わせてよりベストな開発環境をご提供致します。
お気軽に弊社営業担当までご相談下さい。

株式会社GDEPアドバンス
TEL 03-6803-0620


TOPへ