#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 を動かしてみた ...っが、同じようなエラーが発生した...何かが問題みたい