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/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にあるので便利だけど、自分が望むアプリが入ったイメージを作るには

  • sandboxオプションで書き換え可能なイメージを作って、いろいろいじってからsifに仕立てる
  • Definition Fileを事前に作成してsifを作る dockerfileっぽいもの

の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@ubuntu:~# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
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"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
root@ubuntu:~#
 
(focalなので)
root@ubuntu:~# wget https://github.com/sylabs/singularity/releases/download/v3.10.4/singularity-ce_3.10.4-focal_amd64.deb
 
root@ubuntu:~# dpkg -i singularity-ce_3.10.4-focal_amd64.deb
Selecting previously unselected package singularity-ce.
(Reading database ... 189831 files and directories currently installed.)
Preparing to unpack singularity-ce_3.10.4-focal_amd64.deb ...
Unpacking singularity-ce (3.10.4-focal) ...
dpkg: dependency problems prevent configuration of singularity-ce:
 singularity-ce depends on cryptsetup-bin; however:
  Package cryptsetup-bin is not installed.
 singularity-ce depends on runc; however:
  Package runc is not installed.
 
dpkg: error processing package singularity-ce (--install):
 dependency problems - leaving unconfigured
Processing triggers for man-db (2.9.1-1) ...
Errors were encountered while processing:
 singularity-ce
 
root@ubuntu:~#
(「cryptsetup-bin」と「runc」がないみたいでインストールできないご様子. なので)
 
root@ubuntu:~# apt install cryptsetup-bin runc
 :
Setting up cryptsetup-bin (2:2.2.2-3ubuntu2.4) ...
Setting up runc (1.1.0-0ubuntu1~20.04.2) ...
Setting up singularity-ce (3.10.4-focal) ...
Processing triggers for man-db (2.9.1-1) ...
root@ubuntu:~#

とsingularity-ceのインストールは完了

root@ubuntu:~# singularity --version
singularity-ce version 3.10.4-focal
root@ubuntu:~#

Singularity のproxy設定

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

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

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2023-04-20 (木) 00:48:32 (43d)