コンテナ技術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

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2023-04-04 (火) 03:27:41 (66d)