Singularity:特異点なのなそうな.

現在 Singularity には Sylabs社から提供される オープンソース版な SingularityCE (Singularity Community Edition ) とその有償版 SingularityPro がある
他に Apptainer https://apptainer.org/がある.
同じ起点からスタートしているが、企業系とそうじゃない系(Linux Foundation)に分かれた感じかな. v3.8から SingularityCEの名称が付与された

仮想コンテナです. dockerのようなもの. でもdockerでは必要であった管理者権限が不要
本家様 https://sylabs.io/singularity/
GitHub https://github.com/sylabs/singularity

Singularity/crYOLO SingularityでcrYOLOを作ってみた
Singularity/Relion Singularityでrelionを作ってみた
Singularity/cryoSPARC SingularityでcryoSPARCを作ってみた(みかんせい)
Singularity/mpi
Singularity/eman

一応 epelリポジトリから入手可能です

[root@centos7 ~]# yum install epel-release
[root@centos7 ~]# yum --enablerepo=epel install apptainer apptainer-suid
 
(RHEL8系)
[root@RockyLinux ~]# dnf install epel-release
[root@RockyLinux ~]# dnf install apptainer

操作は至って簡単で、「ubuntu20.04」を扱いたければ

[saber@centos7 ~]$ singularity pull docker://ubuntu:20.04

とすればdockerHub様からイメージを取得して、singularity向けのimage「ubuntu_20.04.sif」を作ってくれる

[saber@centos7 ~]$ ls -lh ubuntu_20.04.sif
-rwxr-xr-x 1 saber em 27M 12月 19 11:32 ubuntu_20.04.sif
[saber@centos7 ~]$

このイメージを使うには「singularity shell ubuntu_20.04.sif」とする 拡張子.sifは「singulairty image file」

[saber@centos7 ~]$ singularity shell ubuntu_20.04.sif
Singularity> cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
 :
 :
Singularity> hostname
centos7
Singularity> ls
Desktop  cryoSPARC  data  pyenv  src  ubuntu_20.04.sif           <-- 母体の$HOMEの内容が表示される
 
Singularity> exit

とプロンプトが「Singularity>」になり、「/etc/os-release」を参照にubuntu20.04に乗り移っている.
ホームディレクトリ、hostnameは母体から継承される. 「exit」で元に戻る.

cudaは?

dockerHUBにhttps://hub.docker.com/r/nvidia/cudaがあるのでそれをsifにしてみる
実際、ひっぱてくるものはhttps://hub.docker.com/r/nvidia/cuda/tagsのひとつ

[saber@centos7 ~]$ singularity pull docker://nvidia/cuda:11.4.2-cudnn8-devel-ubuntu20.04      <--- ubuntu20.04でcuda11.4.2が有効
 
[saber@centos7 ~]$ ls -l cuda_11.4.2-cudnn8-devel-ubuntu20.04.sif
-rwxr-xr-x  1 saber em 4951932928 Dec 19 20:22 cuda_11.4.2-cudnn8-devel-ubuntu20.04.sif
[saber@centos7 ~]$

っで試してみる. GPUを使うには「--nv」をオプションとしてつける --nv: enable experimental Nvidia support

[saber@centos7 ~]$ singularity  shell --nv cuda_11.4.2-cudnn8-devel-ubuntu20.04.sif
Singularity> nvidia-smi -L
GPU 0: NVIDIA GeForce GT 710 (UUID: GPU-f0753e20-06f7-695a-f325-b5b6342393ba)
GPU 1: NVIDIA GeForce GT 710 (UUID: GPU-34c49ab7-b79d-e341-93e2-1659e9bd9e57)
Singularity> exit
[saber@centos7 ~]$

nvidia-dockerの整備とか不要で使える.

自分が望むイメージを作るには

っとわ言ってもOSだけでは仕事はできない. 自分の使いたいアプリが入ったイメージが欲しいものである.
jupyterlabとかならそれが入ったdockerがdockerHubにあるので便利だけど、自分が望むアプリが入ったイメージを作るには

の2つの手法があるみたい

っでますは「sandbox」オプションを使ってみる.

[saber@centos7 ~]$ singularity build --sandbox ubuntu20.04 docker://nvidia/cuda:11.4.2-cudnn8-devel-ubuntu20.04
 :
INFO:    Creating sandbox directory...
INFO:    Build complete: ubuntu20.04
[saber@centos7 ~]$

こうするとディレクトリとして「ubuntu20.04」ができる. 中身はubuntu20.04のシステム丸ごとみたい.

[saber@centos7 ~]$ ls -CF
Desktop/  cryoSPARC/  data/  pyenv/  src/  ubuntu20.04/  ubuntu_20.04.sif*
 
[saber@centos7 ~]$ ls -CF ubuntu20.04/
bin@          etc/    lib64@   NGC-DL-CONTAINER-LICENSE  run/          sys/
boot/         home/   libx32@  opt/                      sbin@         tmp/
dev/          lib@    media/   proc/                     singularity@  usr/
environment@  lib32@  mnt/     root/                     srv/          var/
 
[saber@centos7 ~]$ ls -CF ubuntu20.04/usr/local/
bin/   cuda-11@    etc/    include/  man@   share/
cuda@  cuda-11.4/  games/  lib/      sbin/  src/
 
[saber@centos7 ~]$ du -hs ./ubuntu20.04/ ubuntu_20.04.sif
8.6G    ./ubuntu20.04/
27M     ubuntu_20.04.sif
 
[saber@centos7 ~]$

作ったフォルダ「ubuntu20.04」にsingularityでアクセスは可能であるが、root権限でsingularityを動かさないとフォルダ「ubuntu20.04」の内部はいじれない.

[saber@centos7 ~]$ singularity shell ./ubuntu20.04/
Singularity> id
uid=1003(saber) gid=2001(em) groups=2001(em),978(docker)
 
Singularity> apt update
Reading package lists... Done
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (30: Read-only file system)
Singularity>

そうするには、事前に「visudo」で特定ユーザにroot権限でsingularityを実行できるように調整する

[saber@centos7 ~]$ su -
[root@centos7 ~]# visudo
 :
root    ALL=(ALL)       ALL
saber   ALL=(ALL)       /usr/bin/singularity
 :
[root@centos7 ~]#

そうしてからフォルダ「ubuntu20.04」を調整する

[saber@centos7 ~]$ sudo singularity shell --writable ubuntu20.04
Singularity> id
uid=0(root) gid=0(root) groups=0(root)
 
Singularity> pwd
/root
 
Singularity> apt update
Singularity> apt install cmake git build-essential mpi-default-bin mpi-default-dev libfftw3-dev libtiff-dev libfltk1.3-dev libx11-dev libpng-dev
Singularity> git clone https://github.com/3dem/relion
Singularity> mkdir relion/build && cd $_
Singularity> git checkout ver4.0
Singularity> cmake .. && make install               <--- 「ubuntu20.04」の/usr/local/bin にrelionがインストールされます.
 
Singularity> exit
[saber@centos7 ~]$

変更を加えた「ubuntu20.04」はそのまま利用してもいい

[saber@centos7 ~]$ singularity shell ubuntu20.04
Singularity> relion

あるいは、「ubuntu20.04」をsingulairty image fileに変換する。そうすれば配布も容易

[saber@centos7 ~]$ sudo singularity build ubuntu20.04-relion4.0b2.sif ubuntu20.04
[sudo] password for saber:
INFO:    Starting build...
INFO:    Creating SIF file...
INFO:    Build complete: ubuntu20.04-relion4.0b2.sif
 
[saber@centos7 ~]$ ls -lh
drwxr-xr-x 18 saber em 4.0K Dec 19 11:43 ubuntu20.04
-rwxr-xr-x  1 saber em 390M Dec 19 12:34 ubuntu20.04-relion4.0b2.sif
-rwxr-xr-x  1 saber em  27M Dec 19 11:32 ubuntu_20.04.sif
 
[saber@centos7 ~]$

既にある sif に修正を加えたい

sifファイルを展開というか解凍します. 表現的に微妙ですが、意味はそんな感じ

[saber@centos7 ~]$ singularity build --sandbox ubuntu_20.04 ubuntu_20.04.sif
[saber@centos7 ~]$ ls -lF
total 27108
drwxr-xr-x. 18 saber saber     4096 Apr 20 00:37 ubuntu_20.04/
-rwxr-xr-x.  1 saber saber 27754496 Apr 20 00:40 ubuntu_20.04.sif*
[saber@centos7 ~]$

その後に「ubuntu_20.04/」に対して修正を加える

[saber@centos7 ~]$ singularity shell --writable ./ubuntu_20.04/
WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
Apptainer> touch /usr/local/bin/sample.sh
Apptainer> ls -l /usr/local/bin
total 0
-rw-rw-r--. 1 saber saber 0 Apr 19 15:44 sample.sh
Apptainer>
Apptainer> exit
exit
[saber@centos7 ~]$ singularity build ubuntu_20.04-mod.sif ubuntu_20.04/
INFO:    Starting build...
INFO:    Creating SIF file...
INFO:    Build complete: ubuntu_20.04-mod.sif
 
[saber@centos7 ~]$ ls -lF
total 54212
drwxr-xr-x. 18 saber saber     4096 Apr 20 00:37 ubuntu_20.04/
-rwxr-xr-x.  1 saber saber 27754496 Apr 20 00:45 ubuntu_20.04-mod.sif*
-rwxr-xr-x.  1 saber saber 27754496 Apr 20 00:40 ubuntu_20.04.sif*
 
[saber@centos7 ~]$ singularity shell ubuntu_20.04-mod.sif
Apptainer> ls -l /usr/local/bin
total 1
-rw-rw-r--. 1 root root 0 Apr 20 00:44 sample.sh
 
Apptainer> exit
exit
[saber@centos7 ~]$

他にはdefファイルから作る

[saber@centos7 ~]$ cat alphafold.def
BootStrap: localimage
From: /home/sysosa/alphafold.sif
 
%post
     touch /etc/sample
[saber@centos7 ~]$ singularity build --fakeroot alphafold2.sif alphafold.def

年て新しい「alphafold2.sif」を作るとか

めも

あぷりはどちらへ?
Singularityを実行するとホームディレクトリ配下が起動したSingularityに移動する. その状態で作ったアプリは自分のホームディレクトリに於くことができるが、Singularityを起動しないと使えないアプリとなる.

2022y01m03d_184354362.png

Singularityのイメージ内にアプリを置けば、それを起動すればアプリが使えるとなる. ただ構築の際にroot権限が必要.
2022y01m03d_184952746.png

fakeroot

root権限を使用させるために sudo を与えているが、下記を実施すれば不要になる。
ただ、「singularity build --fakeroot af.sif af.def」とする必要が生じる

[root@centos7 ~]# echo "user.max_user_namespaces=10000" >> /etc/sysctl.conf
[root@centos7 ~]# sysctl -p
[root@centos7 ~]# singularity config fakeroot --add illya
 
(削除は)
[root@centos7 ~]# singularity config fakeroot --remove illy

そもそも user.max_user_namespaces が使えない場合もある. その場合は grub から直接有効にする.

[root@centos7 ~]# vi /etc/default/grub
 :
GRUB_CMDLINE_LINUX="iommu=pt intel_iommu=on rd.driver.blacklist=nouveau nouveau.modeset=0 user_namespace.enable=1"
 :
[root@centos7 ~]# 
 
[root@centos7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@centos7 ~]# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

UbuntuでSingularity

パッケージがありました.
https://github.com/sylabs/singularity/releases
これを取得してインストールします

root@ubuntu22:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.2 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
 
root@ubuntu22:~# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  535.104.05  Sat Aug 19 01:15:15 UTC 2023
GCC version:  gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)
 
root@ubuntu22:~# nvidia-smi
Wed Sep  6 12:49:40 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05             Driver Version: 535.104.05   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| 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  NVIDIA RTX A2000               Off | 00000000:0B:00.0 Off |                  Off |
| 30%   59C    P0              25W /  70W |      1MiB /  6138MiB |      6%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
 
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+
 
root@ubuntu22:~#
 
(jammyなので)
root@ubuntu22:~# wget https://github.com/sylabs/singularity/releases/download/v4.0.0-rc.2/singularity-ce_3.11.4-jammy_amd64.deb
 
root@ubuntu22:~# apt-get install ./singularity-ce_3.11.4-jammy_amd64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'singularity-ce' instead of './singularity-ce_3.11.4-jammy_amd64.deb'
The following additional packages will be installed:
  crun libyajl2 uidmap
The following NEW packages will be installed:
  crun libyajl2 singularity-ce uidmap
0 upgraded, 4 newly installed, 0 to remove and 51 not upgraded.
Need to get 343 kB/31.9 MB of archives.
After this operation, 135 MB of additional disk space will be used.
Do you want to continue? [Y/n]
 :
 :
No VM guests are running outdated hypervisor (qemu) binaries on this host.
N: Download is performed unsandboxed as root as file '/root/singularity-ce_3.11.4-jammy_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
root@ubuntu22:~#
root@ubuntu22:~# singularity --version
singularity-ce version 3.11.4-jammy
root@ubuntu22:~#

テスト

saber@ubuntu22:~$ singularity build --sandbox ubunt2004  docker://nvidia/cuda:12.2.0-devel-ubuntu20.04
saber@ubuntu22:~$ du -hs ./ubunt2004/
6.2G    ./ubunt2004/
saber@ubuntu22:~$
 
saber@ubuntu22:~$ singularity shell ubunt2004
Singularity> id
uid=1000(saber) gid=1000(saber) groups=1000(saber),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd)
Singularity> exit
exit
saber@ubuntu22:~$
saber@ubuntu22:~$ singularity shell --fakeroot ubunt2004
WARNING: underlay of /etc/localtime required more than 50 (75) bind mounts
Singularity> id
uid=0(root) gid=0(root) groups=0(root)
Singularity> exit
exit
saber@ubuntu22:~$

fakeroot がそのまま使えそうなのかな?

Singularity のproxy設定

「singularity pull」とかで外部のイメージを取得する際にproxy経由が必要なら環境変数HTTP_PROXYとHTTPS_PROXYが必要みたい

export HTTP_PROXY=${HTTP_PROXY}
export HTTPS_PROXY=${HTTPS_PROXY}

「/etc/localtime doesn't exist in container」って出たら

[root@slurm ~]# singularity config fakeroot --add illya
 
[illya@slurm ~]$ singularity build --sandbox ubuntu-jammy docker://ubuntu:jammy
[illya@slurm ~]$ singularity shell --writable  --fakeroot ubuntu-jammy/
WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
Singularity>

「/etc/localtime doesn't exist in container」と表示される. 回避策は

Singularity> apt update
Singularity> apt install tzdata
 
「6. Asia」を選んで「79. Tokyo」を選ぶ.   再度設定したい場合は「dpkg-reconfigure tzdata」をたたく
 
Singularity> exit
[illya@slurm ~]$ 
[illya@slurm ~]$ singularity shell --writable  --fakeroot ubuntu-jammy/
Singularity>

次回から警告は出ないです.

これは[--writable]を使う場合に発生します. 普通に使う分には表示されないです

[illya@slurm ~]$ singularity shell  ubuntu-jammy/
Singularity>
最新の60件
2024-10-11 2024-10-10 2024-10-09 2024-10-08 2024-10-06 2024-10-05 2024-10-04 2024-10-03 2024-10-02 2024-10-01 2024-09-30 2024-09-29 2024-09-28 2024-09-27 2024-09-22 2024-09-20 2024-09-17 2024-09-12 2024-09-09 2024-09-08 2024-09-06 2024-09-05 2024-09-04 2024-09-02 2024-09-01 2024-08-31 2024-08-28 2024-08-18 2024-08-17 2024-08-16 2024-08-15 2024-08-14 2024-08-11

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-07-16 (火) 13:09:40