-title: singularity container
--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を共有して測定を行う