Singularity の紹介

  • Singularity とは
  • Singularity の使い方
  • イメージの作成方法
  • 付録 (Multi-Stage Builds)

Singularity とは

  • 科学及び高性能コンピューティング環境用に設計された Linux コンテナです
  • rootless で実行が可能!!
  • MPI 実行や HPC 系ソフトウェアが利用できる
  • 簡単に GPU が利用できる

Singularity の使い方 (1)

  • イメージの pull
    • singularity pull ubuntu:20.04
    • ubuntu_20.04.sif というイメージが保存されます
  • 実行例
    • singularity run ubuntu_20.04.sif
    • singularity shell ubuntu_20.04.sif
    • singularity exec ubuntu_20.04.sif <COMMAND>
  • GPU の利用
    • --nv をつけるだけ!!
    • singularity run --nv ubuntu_20.04.sif
    • singularity exec --nv ubuntu_20.04.sif <COMMAND>

Singularity の使い方 (2)

  • コンテナにファイルを送信する必要はありません!!
    • ホームディレクトリがコンテナにマウントされます
e175733@amane$ ls
examples  logs  mnist.sbatch  python_v3.8-pytorch.sif  ubuntu_20.04.sif

e175733@amane$ singularity exec ubuntu_20.04.sif ls
examples  logs	mnist.sbatch  python_v3.8-pytorch.sif  ubuntu_20.04.sif

Singularity の使い方 (3)

  • runはカスタムアクションが実行されます
    • Dockerfile の CMDENTORYPOINT が実行される
e175733@amane$ singularity run ubuntu_20.04.sif     
Singularity> 

Singularity の使い方 (4)

  • shellは shell を立ち上げることができます
    • カスタムアクションを実行したくない場合など
e175733@amane$ echo $SHELL                          
/bin/zsh

e175733@amane$ singularity shell ubuntu_20.04.sif     
Singularity> echo $SHELL
/bin/zsh

Singularity の使い方 (5)

  • execはコンテナにやるのではなく、.sifイメージに
e175733@amane$ pwd
/home/student/e17/e175733/slurm/pytorch

e175733@amane$ singularity exec ubuntu_20.04.sif pwd
/home/student/e17/e175733/slurm/pytorch

イメージの作成方法

  • イメージの作り方
    • Singularity 編 (推奨1)
    • ie-podman 編 (推奨2)
    • Docker 編
      • 学内ネットのみ
  • 今回の例は gccg++make ができる環境の構築方法です

Singularity 編 (1)

  • Dockerfile とは書き方が違います
  • Definition Files を作成します
  • 簡単にDockerfileとの違いです
    • FROM -> From
    • RUN -> %post
    • COPY -> %files
    • ENV -> %environment
    • CMD -> %runscript
    • ENTORYPOINT -> %startscript

Singularity 編 (2)

  • 例ではtest.defという名前で作成します
  • BootStrap: docker は Docker Hubからイメージを取得するという意味です
  • %postは毎回記述する必要はなく、また&&などで繋げる必要はありません
BootStrap: docker
From: ubuntu:20.04

%post
    apt-get update
    apt-get -y upgrade
    apt-get -y install build-essential vim

Singularity 編 (3)

  • test.sifという名前のイメージで作成します
  • build を行います
    • --fakeroot は必須です
    • singularity build --fakeroot test.sif test.def
  • 実行は Singularity の使い方 (1) を参照してください

ie-podman 編 (1)

singularity buildはdockerのbuildと違いキャッシュされない。そのため、build中にエラーが発生すると、また一からbuildを行う必要があります。そこで、ie-podmanからイメージを作成します。

  • SSH で amane に接続します
  • ie-podmanpodmanのwrapperなので、Dockerfileを作成します
FROM ubuntu:20.04

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y \
        build-essential \
        vim

ie-podman 編 (2)

  • Dockerfileを作成したらbuildします
    • ie-podman build -t test .
  • buildが成功したら確認します
    • イメージ名はUserNameで補完されます
    • ie-podman images
e175733@amane:) ie-podman images
REPOSITORY                          TAG     IMAGE ID      CREATED       SIZE
localhost/e175733_test             latest  4921b38d4011  2 weeks ago   6.04 MB

ie-podman 編 (3)

  • イメージを作成したらsifファイルに変換します
    • ie-podman sif e175733_test
  • e175733_test.sifが作成されます
  • 実行は Singularity の使い方 (1) を参照してください

Docker編 (1)

  • 例では自身の Mac から実行します
  • まずDockerfileを作成します
FROM ubuntu:20.04

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y \
        build-essential \
        vim

Docker編 (2)

  • 次に build を行います
    • docker build -t test ./
  • build が終了後にレジストリへ push するための tag を付けます
    • docker tag test:latest amane.ie.u-ryukyu.ac.jp:5000/e1757xx/test:latest

Docker 編 (3)

  • tag を付けたらプライベートレジストリへ push します
    • docker push amane.ie.u-ryukyu.ac.jp:5000/e1757xx/test:latest
  • push後 amane に SSH を行います
  • singularity で pull します
    • singularity pull docker://amane.ie.u-ryukyu.ac.jp:5000/e1757xx/test:latest
  • pull が終了後 .sif ファイルができます
  • 実行は Singularity の使い方 (1) を参照してください

付録

Singularity を使ったイメージの作成としてMulti-Stage Buildsがあります(Dockerやie-podmanにもあります)。事前に作成したsifファイルをMulti-Stageで利用する際のDefinition Fileの書き方です。

  • Singularity 編 (1) で作成したtest.sifを利用する
  • Definition Files の書き方
    • BootStrap: localimageと指定することで、sifファイルを利用できます
BootStrap: localimage
From: [test.sif FULL_PATH]
Stage: test

BootStrap: docker
From: ubuntu:20.04
%files from test
    /usr/bin/gcc /usr/bin/gcc

コメント:画像を中央に配置する centerコマンドを有効に