現在地

Singularity

はじめに

Singularity はコンテナ仮想化のプラットフォームで、Docker と良く似た立ち位置のソフトウェアです。Singularity は HPC 環境での利用を想定して設計されているため、実行したユーザーの権限で実行できたり(root 権限や特殊な設定は不要)、カレントディレクトリが自動的に mount されてそのまま使えたり、GPU の利用が容易であったりと、スパコンのような環境で使いやすくなっています。

情報は随時追加していきます。
 

コンテナイメージ

Singularity のイメージを利用することにはなりますが、docker のイメージを利用することも可能です。NVIDIA NGC にある docker イメージなども利用可能です。

例:
[user@ccfep1 ~]$ singularity pull docker://nvcr.io/nvidia/tensorflow:20.10-tf2-py3

以下のようなサイトから既存のイメージを取得できます。

コンテナイメージの作成について

現時点ではフロントエンド(ccfep)でユーザーがコンテナを作成することはできません。fakeroot についても現時点では利用できません。Sylabs や Singularity Hub で作成するか、あるいはご自身の環境で作成するようお願いします。
 

RCCS 作成のコンテナイメージ

試験的に /local/apl/lx/singularity/containers/ 以下にイメージ(.sif ファイル)と作成に用いた .def ファイルを配置しています。
 

anaconda3-2020.11 (cpu, gpu+tensorflow, gpu+pytorch)

試験的に作成した Ubuntu 20.04 ベースの Anaconda3-2020.11 環境です。
ディレクトリ内の load.sh を使うか .sif ファイルを直接読み込ませることで起動できます。
RCCS で用いるディスクの特性上、こちらを使った方が読み込みが速い場合があるかもしれません。
/usr 以下等については Ubuntu 環境が使われます。

読み込み例(cpu版, bash 利用時):

[user@ccfep3 ~]$ . /local/apl/lx/singularity/containers/anaconda3-2020.11-cpu/load.sh

読み込み例(gpu版):

[user@ccgpuv ~]$ singularity shell --nv /local/apl/lx/singularity/containers/anaconda3-2020.11-gpu-pytorch/anaconda3-2020.11-gpu-pytorch.sif

注意点

  • Anaconda チャンネルのライセンスの関係上、アカデミック利用限定となります。
  • GPU を利用する場合には忘れずに --nv を指定してください
  • ホームディレクトリ以下は特に設定しなくても参照できます。
  • /local/apl 以下のファイルや /save 以下のファイルアクセスしたい場合は --bind /lustre:/lustre,/local:/local,/save:/save を加えてください
    • (load.sh では自動的に指定しています。)
    • 実行例: singularity shell --nv --bind /lustre:/lustre,/local:/local,/save:/save /local/apl/lx/singularity/containers/anaconda3-2020.11-gpu-pytorch/anaconda3-2020.11-gpu-pytorch.sif
  • ジョブスクリプト中でも利用できますが少し挙動が厄介かもしれません。
  • opencv 等のパッケージを追加したい場合はイメージ読み込み後に pip install opencv --user でホームディレクトリ以下に導入するなどしてご対応ください。

 

注意点

  • 簡単なサンプルを /local/apl/lx/singularity364-samples 以下にも置いています。
    • ccfep 上で NGS より tensorflow を含むコンテナイメージをダウンロードし、コンテナ外の /local/apl/lx 以下にある MNIST のデータを利用するものです。
  • GPU を使う場合、ドライバはコンテナではなくホスト側のものが利用される点にご注意下さい。
    • コンテナがホストのものより新しい GPU ドライバのバージョンを要求した場合、エラーとなります。
    • 事前にコンテナの要求するドライバのバージョン、もしくは CUDA のバージョン(RCCS で最新のもの以下のバージョンならばおそらく大丈夫です)をご確認下さい。
  • MPI についてはコンテナ内外でバージョンや仕様をそろえるような手間が必要となります。あまり容易ではありません。
  • /local/apl 以下に導入されたソフトも同時に使うような場合には --bind に /lustre:/lustre,/local:/local,/homeg:/homeg を追加するようお願いします。