Singularity 実践

  • Singularity の使い方
  • Slurm の使い方

Singularity とは

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

Singularity の使い方 (1)

  • イメージの pull
    • singularity pull ubuntu:20.04
    • ubuntu_20.04.sif というイメージが保存されます
    • docker://localhost:5000/ で学科レジストリからの取得も可能
  • 実行例
    • singularity run 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)

  • docker とは少し違います!!
    • run すると SHELL が立ち上がります
    • 環境変数も引き継がれます!!
e175733@amane$ echo $SHELL                          
/bin/zsh

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

Singularity の使い方 (4)

  • 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

Slurm とは

  • ジョブスケジューラーである
  • リソースへの競合を解決してくれる

Slurm の使い方 (1)

  • sbatch コマンドで実行する
    • スクリプトを用意する
    • 名前は適当で OK
      • aa.bash
      • anpan.sbatch
    • 標準出力、標準エラーを出力する logs ディレクトリを作成すると便利
      • #SBATCH --output 標準出力
      • #SBATCH --error 標準エラー
#!/bin/bash
#SBATCH --job-name hostname 
#SBATCH --output logs/%x-%j.log
#SBATCH --error logs/%x-%j.err

hostname

Slurm の使い方 (2)

MNIST 実践

  • 実際に Singularity と Slurm を使ったサンプルを実行する
  • pytorch を使った MNIST の学習プログラムを実行してみます

下準備

  • SSH で amane に接続
  • pytorch のイメージを pull !!!!
    • singularity pull docker://localhost:5000/pytorch:latest
    • または
    • singularity pull docker://pytorch/pytorch:latest
    • localhost:5000 は学科のコンテナレジストリです!!
  • MNIST の exsample をホームディレクトリに clone !!!!
    • git clone https://github.com/pytorch/examples.git

学習

  • Slurm で Job を投下
    • sbatch mnist.sbatch
#!/bin/bash
#SBATCH --job-name mnist 
#SBATCH --output logs/%x-%j.log
#SBATCH --error logs/%x-%j.err
#SBATCH --nodes 1
#SBATCH --gpus tesla:1

date
singularity exec --nv pytorch_latest.sif python examples/mnist/main.py
date

確認

  • 学習の進捗は #SBATCH --output で指定したファイルに吐き出されます
    • tail -f logs/mnist-100.log などで確認できます
  • エラーは #SBATCH --error で指定したファイルに吐き出されます
    • cat logs/mnist-100.err などで確認できます

付録

  • イメージの作り方
    • Singularity 編 (推奨)
    • Docker 編
      • MacOS からでも可能です (学内ネットのみ)
      • amane では podman を使います
  • 今回の例は gccg++make ができる環境の構築方法です

Singularity 編 (1)

  • Dockerfile とは書き方が違います
  • まず Definition Files を作成します
    • test.def という名前で作成します
BootStrap: docker
From: ubuntu:20.04

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

Singularity 編 (2)

  • 次に build を行います

    • singularity build --fakeroot test.sif test.def
  • Image を test.sif として作成します

Singularity 編 (3)

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
  • 現在プライベートレジストリは httpsに対応していないため Docker の設定が必要になります
    • Preferences -> Docker Engine に下を追加します
  "insecure-registries": [
    "amane.ie.u-ryukyu.ac.jp:5000"
  ]

Docker編 (4)

  • amane に SSH を行います
  • push 後に singularity で pull します
    • singularity pull docker://amane.ie.u-ryukyu.ac.jp:5000/e1757xx/test:latest

Docker編 (5)

  • pull が終了後 .sif ファイルができます
  • 実行は Singularity の使い方 (1) を参照してください
  • amane で podman を使って Image の build も行えます

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