SingularityやSlurmをインストールしたDocker対応モデルを発売
SingularityやSlurmをインストールしたDocker対応モデルを発売しました
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