singularity container
Menu
GPU があるかどうかを確認する
確認するだけなら、
$ singularity shell --nv --shell /bin/zsh /mnt/ie-virsh/singularity/os_complete/os_complete.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 | +-----------------------------------------------------------------------------+
daru 上で slum を使う
pytorch のイメージを pull
singularity pull --docker-login docker://localhost:5000/pytorch:latestまたは
singularity pull --docker-login docker://pytorch/pytorch:latestlocalhost: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 dateSlurm で Job を投下
sbatch mnist.sbatchGPUが混んでる時には 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以下はオプションにします。
singularity image の作り方
ここを参考に サーバ上にいろいろおいてある。それが使えるならそれで良い。
% ls /mnt/ie-virsh/singularity README.md alpine-latex/ cbc_gcc/ cbc_llvm/ erlang/ flexgen/ os_complete/ reading/ stable_diffusion/ teachers/ xv6/ agda/ camelot.sif* cbc_gcc_cross/ cbcgcc_vs/ fedora-debug/ hugo/ rails/ rust-debug/ students/ templates/ xv6-podman/作業ディレクトリを作成して、そこで
singularity pull --docker-login ubuntu:20.04とする。
学科のrepositoryに何があるかはamaneで
ls /ie-ryukyu/podman/registry/registry/docker/registry/v2/repositoriesとするとわかります。
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 rustrustc だというのがわかるので、
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などを作ってやると少し早いかも。
オプション macOS 上の lima
macOS のlimaを使うと、singularity container を動かせる
singularity の速度
singularity 内のfileは singularity のAUFS上に作られている。それがどこかを lsof commnad で調べよ。singularity 環境下で FileWrite.jar を用いてファイルの書き込み時間を測定する。以下の二種類の測定を行う。
singularity 内の file system に対して測定を行う -v ~/tmp/os:/mnt/os などで singularity からsingularityの外のdirectoryを共有して測定を行う