singularity container

Menu


daru 上で singularity を使う

   /mnt/ie-virsh/singularity 

にいくつか image が置いてある。

   singularity shell /mnt/ie-virsh/singularity/os_complete/os_complete.sif

で起動する。


daru 上で singularity で GPU を使う

ここを参考に 作業ディレクトリを作成して、そこで

    singularity pull --docker-login ubuntu:20.04

とする。

学科のrepositoryに何があるかはamaneで

    ls /ie-ryukyu/podman/registry/registry/docker/registry/v2/repositories

とするとわかります。


GPU があるかどうかを確認する

+daru+kono singularity shell --nv ubuntu_20.04.sif Singularity> nvidia-smi Fri Sep 24 11:15:37 2021 +-----------------------------------------------------------------------------+| NVIDIA-SMI 450.142.00 Driver Version: 450.142.00 CUDA Version: 11.0 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. || | | MIG M. ||===============================+======================+======================|| 0 Tesla V100S-PCI... Off | 00000000:3B:00.0 Off | 0 || N/A 37C P0 36W / 250W | 0MiB / 32510MiB | 0% Default || | | N/A |+-------------------------------+----------------------+----------------------+
                                                                               

+-----------------------------------------------------------------------------+| Processes: || GPU GI CI PID Type Process name GPU Memory || ID ID Usage ||=============================================================================|| No running processes found |+-----------------------------------------------------------------------------+


apt-install は このままではできない

vim も入ってない。apt-install vim は失敗する。root じゃないから。

test.def という以下のファイルを作る

    BootStrap: docker
    From: ubuntu:20.04
    %post
        apt-get update
        apt-get -y upgrade
        apt-get -y install build-essential vim

以下を実行する

    % singularity build --fakeroot test.sif test.def

すると
    % singularity shell test.sif  
    Singularity> vim

で vim が動作する


rust を入れてみる

   Singularity>  apt search rust

rustc だというのがわかるので、

   Singularity>  apt-get install rustc

でもやっぱりだめ。

    % singularity shell --fakeroot test.sif  

でもだめ。

    %  singularity shell --fakeroot  --writable  test.sif

これで、なかから、
   Singularity>  apt-get update
   Singularity>  apt-get install rustc

で rust が入る。
   Singularity>  mkdir rust; cd rust ; cargo new hello_world --bin

でも、これでは抜けたあと、全部消えてしまう。なのでやっぱり、build しないと繰り返し使えない。

    BootStrap: docker
    From: ubuntu:20.04
    %post
        apt-get update
        apt-get -y upgrade
        apt-get -y install build-essential vim
        apt-get -y install rustc

で build しなおす。

でも、これやる必要なくて、既に誰かが作ったものを使えば良い。

  % singularity build --sandbox --fakeroot test/ test.def
  % singularity shell --fakeroot --writable test

と sanbox でやっても良い。これだと install 履歴は command に残らない。あと、かなり遅い。

   daru:/mnt/nvme0/singuralrity/students/e2175xx

などを作ってやると少し早いかも。


daru 上で slum を使う

pytorch のイメージを pull
    singularity pull --docker-login docker://localhost:5000/pytorch:latest

または
    singularity pull --docker-login docker://pytorch/pytorch:latest

localhost:5000 は学科のコンテナレジストリ

MNIST の exsample をホームディレクトリに clone

    git clone https://github.com/pytorch/examples.git

以下の batch を作って

    #!/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

Slurm で Job を投下
      sbatch mnist.sbatch

GPUが混んでる時には gpu をはずそう

    #!/bin/bash
    #SBATCH --job-name mnist 
    #SBATCH --output logs/%x-%j.log
    #SBATCH --error logs/%x-%j.err
    #SBATCH --nodes 1
    date
    singularity exec pytorch_latest.sif python examples/mnist/main.py
    date

以下はオプションにします。


daru 上で podman を使う

   rm -rf ~/.local
   podman-init    #  
   sudo podman run hello-world

が実行できることとを確認せよ。


podman でなにか動かす


オプション k8s で grpc を動かす

   % mkdir -p ~/podman/grpc
   % cd !$
   % hg clone http://www.cr.ie.u-ryukyu.ac.jp/hg/podman/GRPCTest/

が、まだ動いてない (誰かやって...


オプション macOS 上の podman (あまり勧めない)

macOS のpodmanを使うと、Linuxのアプリを指定したの環境上で動かすことができる。

   qemu 上で、ARM 用の xv6 kernel (MITで書かれた tiny OS)をコンパイルして動かす
   それに対して、gdb を動かして xv6 を debug する

これを行う podman script を用意した。

xv6 kernel の system call に break point をかけて、system call を実行し、backtrace を示せ。

また、kernel から xv6 に戻る部分を stepi で trace して見よ。

MacOSXでpodmanなxv6を動かす 終わった後は、

    podman stop xv6
    podman rm xv6

で消しておく。必要ならさらに podman rmi で image の削除を行う。


podman の速度

podman 内のfileは podman のAUFS上に作られている。それがどこかを lsof commnad で調べよ。

podman 環境下で FileWrite.jar を用いてファイルの書き込み時間を測定する。以下の二種類の測定を行う。

    podman 内の file system に対して測定を行う
    -v ~/tmp/os:/mnt/os などで podman からpodmanの外のdirectoryを共有して測定を行う

Shinji KONO / Sat May 21 17:17:08 2022