#author("2023-04-03T15:47:01+00:00","default:sysosa","sysosa")
#author("2023-04-03T18:27:41+00:00","default:sysosa","sysosa")
コンテナ技術[[Singularity]]で動くcrYOLOを作ってみた.

対象の計算機はCentOS7でA2000が搭載されてます
#code(nonumber){{
[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」を入れます
#code(nonumber){{
[root@centos7 ~]# yum install epel-release
[root@centos7 ~]# yum install apptainer apptainer-suid
}}
***crYOLOが入ったsig(Singularity image file)を作る [#z4bf512e]

[[https://pypi.org/project/cryolo/>+https://pypi.org/project/cryolo/]]からcrYOLOは pythonが >=3.5.0, <3.9 で動いているみたい. &size(10){crYOLO-1.9.3ね}; なのでdockerHUBから python3.8 が動くコンテナイメージを探して
「&color(magenta){python:3.8.16-bullseye};」を使うことにした. こちらのコンテナイメージはdebianベースでその上でpython3.8が動く代物.

「sandbox」モードで用意して、crYOLO実行環境を作ります
#code(nonumber){{
[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 ~]#
}}
&size(10){napari-boxmanagerは[[https://pypi.org/project/napari-boxmanager/>+https://pypi.org/project/napari-boxmanager/]]によればpython3.10以上を要求します. 一方crYOLOのpython条件「>=3.5.0, <3.9」なので相容れません};
&size(10){同じに入れたら扱けました};


これで実行環境が完成.
次にこれをsifに変換します
#code(nonumber){{
[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
}} 


***つかってみる [#bd8630c6]
構築したユーザとは別のユーザで使ってみます
#code(nonumber){{
[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
}}

&color(red){*};「cryolo_boxmanager_legacy.py」は動かないです.


***SingularityのDefinition Fileにしてみてsifを作る [#gbbb3b98]
Dockerfileのような仕様書を作れば簡単にsifが作れるそうな
っで
crYOLO.defを作ってみた
#code(nonumber){{
[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
}}


***rockylinux9でcrYOLO [#zaa60ee7]
rockylinux9.1でcrYOLOを作ったのだが、「&color(red){ValueError: Number of processes must be at least 1};」とエラーが表示される. 
anacondaの中なのでpython関係は関係ないと思うのだが...
っでCentOS7で作った  crYOLO.def を動かしてみた

...っが、同じようなエラーが発生した...何かが問題みたい

1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS