コンテナ技術Singularityで動くcrYOLOを作ってみた.
対象の計算機はCentOS7でA2000が搭載されてます
[root@centos7 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@centos7 ~]# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 525.105.17 Tue Mar 28 18:02:59 UTC 2023
GCC version: gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
[root@centos7 ~]# nvidia-smi -L
GPU 0: NVIDIA RTX A2000 (UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084)
[root@centos7 ~]# ls -l /usr/local/cuda
ls: cannot access /usr/local/cuda: No such file or directory <-- cudaライブラリは入れてません
[root@centos7 ~]#
そこにSingularityをインストールします. 現在「Singularity」としては「singularity-ce」と「apptainer」のどちらかを選ぶようになっている.
ここでは「apptainer」を入れます
[root@centos7 ~]# yum install epel-release
[root@centos7 ~]# yum install apptainer apptainer-suid
crYOLOが入ったsig(Singularity image file)を作る †
https://pypi.org/project/cryolo/
からcrYOLOは pythonが >=3.5.0, <3.9 で動いているみたい. crYOLO-1.9.3ね なのでdockerHUBから python3.8 が動くコンテナイメージを探して
「python:3.8.16-bullseye」を使うことにした. こちらのコンテナイメージはdebianベースでその上でpython3.8が動く代物.
「sandbox」モードで用意して、crYOLO実行環境を作ります
[root@centos7 ~]# singularity build --sandbox crYOLO docker://python:3.8.16-bullseye
[root@centos7 ~]# singularity shell --writable crYOLO
Apptainer>
「conda create -n cryolo -c conda-forge -c anaconda pyqt=5 python=3 numpy==1.18.5 libtiff wxPython=4.1.1 adwaita-icon-theme 'setuptools<66'」相当部分を作る
(bullseye側の調整)
Apptainer> chown root / /var /var/log
Apptainer> apt update
Apptainer> apt install libgtk-3-0 libnotify4 libxxf86vm1 libsdl2-2.0-0 adwaita-icon-theme
Apptainer> curl -O http://archive.ubuntu.com/ubuntu/pool/main/libj/libjpeg-turbo/libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb
Apptainer> apt-get install -f ./libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb
Apptainer> rm -rf libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb
(pipでコンテンツ作成)
Apptainer> /usr/local/bin/python -m pip install --upgrade pip
Apptainer> pip install PyQt5
Apptainer> pip install numpy==1.18.5
Apptainer> pip install libtiff
Apptainer> pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04/wxPython-4.1.1-cp38-cp38-linux_x86_64.whl
Apptainer> pip install 'setuptools<66'
Apptainer> pip install nvidia-pyindex
Apptainer> pip install 'cryolo[c11]'
Apptainer> exit
[root@centos7 ~]#
napari-boxmanagerはhttps://pypi.org/project/napari-boxmanager/
によればpython3.10以上を要求します. 一方crYOLOのpython条件「>=3.5.0, <3.9」なので相容れません
同じに入れたら扱けました
これで実行環境が完成.
次にこれをsifに変換します
[root@centos7 ~]# singularity build crYOLO.sif crYOLO <--いったん/tmpに転送してsifを作る. なので/tmpの容量に注意
INFO: Starting build...
INFO: Creating SIF file...
INFO: Build complete: crYOLO.sif
[root@centos7 ~]# ls -lh crYOLO.sif
-rwxr-xr-x. 1 root root 4.0G Mar 26 03:47 crYOLO.sif
[root@centos7 ~]# mv crYOLO.sif /home/crYOLO.sif
つかってみる †
構築したユーザとは別のユーザで使ってみます
[saber@centos7 ~]$ singularity shell --nv --bind /Public:/Public /home/crYOLO.sif <--「--nv」を設けるとhostのcudaが使える
「--bind」はhostの領域をコンテナへつなげる
Apptainer> nvidia-smi -L
GPU 0: NVIDIA RTX A2000 (UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084)
Apptainer> cryolo_gui.py <-- GUIモードも起動できます
Apptainer> cryolo_gui.py config config_cryolo_.json 220 --filter LOWPASS --low_pass_cutoff 0.1
Apptainer> cryolo_predict.py -c config_cryolo_.json -w /Public/gmodel_phosnet_202005_N63_c17.h5 -i /Public/mrc/*.mrc -o ./out
*「cryolo_boxmanager_legacy.py」は動かないです.
SingularityのDefinition Fileにしてみてsifを作る †
Dockerfileのような仕様書を作れば簡単にsifが作れるそうな
っで
crYOLO.defを作ってみた
[illya@centos7 ~]$ vi crYOLO.def
BootStrap: docker
From: python:3.8.12-bullseye
%post
chown root / /var /var/log
apt update -y
apt install -y libgtk-3-0 libnotify4 libxxf86vm1 libsdl2-2.0-0 adwaita-icon-theme
curl -O http://archive.ubuntu.com/ubuntu/pool/main/libj/libjpeg-turbo/libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb
apt-get install -f ./libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb
rm -f ./libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb
pip install PyQt5
pip install numpy==1.16
pip install libtiff
curl -O https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04/wxPython-4.1.1-cp38-cp38-linux_x86_64.whl
pip install ./wxPython-4.1.1-cp38-cp38-linux_x86_64.whl
rm -f ./wxPython-4.1.1-cp38-cp38-linux_x86_64.whl
pip install nvidia-pyindex
pip install nvidia-tensorflow[horovod]
pip install 'cryolo[c11]'
[illya@centos7 ~]$ sudo singularity build crYOLO.sif crYOLO.def