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

Singularity/crYOLO SingularityでcrYOLOを作ってみた
Singularity/Relion Singularityでrelionを作ってみた
Singularity/mpi

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

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

操作は至って簡単で、「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 ~]$

めも

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

2022y01m03d_184354362.png

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


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-01-03 (月) 18:50:57 (18d)