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

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-03-18 (金) 20:07:24 (154d)