コンテナ技術Singularityで動くcrYOLOを作ってみた.
crYOLO/Tensorflowの REHL7/8向けのcuda11対応Tensorflow-1.15を作ってcrYOLO-1.8.0[c11]を動かせばいいのだが、
かなり面倒でsyslogに怪しいログが出る. なので、コンテナ技術を使って RHEL7/8の中にcrYOLO-1.8.0[c11]版を動かすことにした.
対象の計算機はCentOS7でA2000が搭載されてます
[root@centos7 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@centos7 ~]# nvidia-smi -L
GPU 0: NVIDIA RTX A2000 (UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084)
[root@centos7 ~]#
そこにSingularityをインストールします
[root@centos7 ~]# yum install epel-release
[root@centos7 ~]# yum install singularity
crYOLO-1.8.0[c11]版が実行できる sif作成 †
crYOLOのcuda11対応版はpython 3.8にて動く. dockerHUBには python3.8 のコンテナイメージが用意されていて、これはdebianベースである.
crYOLO-1.8.0のcuda11版はubuntu20.04向けっぽく、ubuntu20.04に相当するdebian「bullseye」の python3.8 をコンテナイメージとして使った.
「sandbox」モードで用意して、crYOLO実行環境を作ります
[illya@centos7 ~]$ singularity build --sandbox crYOLO docker://python:3.8.12-bullseye
[illya@centos7 ~]$ sudo singularity shell --writable crYOLO
Singularity> chown root / /var /var/log
Singularity> apt update
Singularity> apt install libgtk-3-0 libnotify4 libxxf86vm1 libsdl2-2.0-0 adwaita-icon-theme
Singularity> curl -O http://archive.ubuntu.com/ubuntu/pool/main/libj/libjpeg-turbo/libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb
Singularity> apt-get install -f ./libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb
Singularity> pip install PyQt5
Singularity> pip install numpy==1.16
Singularity> pip install libtiff
Singularity> curl -O https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04/wxPython-4.1.1-cp38-cp38-linux_x86_64.whl
Singularity> pip install ./wxPython-4.1.1-cp38-cp38-linux_x86_64.whl
Singularity> pip install nvidia-pyindex
Singularity> pip install nvidia-tensorflow[horovod]
Singularity> pip install 'cryolo[c11]'
Singularity> exit
[illya@centos7 ~]$
これで実行環境が完成.
次にこれをsifに変換します
[illya@centos7 ~]$ sudo singularity build crYOLO-1.18.0.sif crYOLO <--いったん/tmpに転送してsifを作る. なので/tmpの容量に注意
INFO: Starting build...
INFO: Creating SIF file...
INFO: Build complete: crYOLO-1.18.0.sif
[illya@centos7 ~]$ ls -lh crYOLO-1.18.0.sif
-rwxr-xr-x. 1 illya illya 3.9G Dec 31 13:50 crYOLO-1.18.0.sif
[illya@centos7 ~]$
つかってみる †
構築したユーザとは別のユーザで使ってみます
[saber@centos7 ~]$ cp /home/illya/crYOLO-1.18.0.sif .
[saber@centos7 ~]$ singularity shell --nv --bind /Public:/Public crYOLO-1.18.0.sif <--「--nv」を設けるとhostのcudaが使える
「--bind」はhostの領域をコンテナへつなげる
Singularity>
Singularity> nvidia-smi -L
GPU 0: NVIDIA RTX A2000 (UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084)
Singularity> cryolo_gui.py <-- GUIモードも起動できます
Singularity> cryolo_gui.py config config_cryolo_.json 220 --filter LOWPASS --low_pass_cutoff 0.1
Singularity> cryolo_predict.py -c config_cryolo_.json -w /Public/gmodel_phosnet_202005_N63_c17.h5 -i /Public/mrc/*.mrc -o ./out
一応問題なく動いた
728枚mrcファイル処理「real 13m15.745s, user 5m17.271s, sys 1m24.168s」(i7-10700K[8core],32GB)
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