旧ページcrYOLO190418 crYOLO/200211

粒子pickツール
本家様https://cryolo.readthedocs.io/en/stable/index.html

crYOLOのバージョン履歴
https://pypi.org/project/cryolo/#history

convolutional neural networksを利用した粒子pickツール
提供されているモデルファイルを使って、あるいは自分自身でモデルファイルを作ってpickします.
そして結果を可視化するツールもそろっています

2021.11.26に最新版 1.8.0 がリリースされました.

ここでは pyenv-anaconda 経由で crYOLO 実行環境を作って EnvironmentModules を経て利用するようにします.
*自分のホームディレクトリに anaconda を敷いて crYOLO 実行環境を作り「conda activate crYOLO」とかで利用されても構いません

まずは下準備 pyenv-anaconda 環境の整備

pyenv-anaconda

各自のホームディレクトリに各種pythonアプリの実行環境を用意するのではなく、rootで一元管理させるために
「pyenv-anaconda」を使ってます. pyenvでOS提供のpython,anaconda環境から離れ、そのpyenv上にanaconda環境を独自に作ります
ここでは「/apps/pyenv」を起点としています

git clone https://github.com/yyuu/pyenv.git /apps/pyenv
 
export PYENV_ROOT=/apps/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init - --no-rehash)"
 
pyenv install anaconda3-5.3.1

その後にpyenvの既定を anaconda に移します

pyenv global anaconda3-5.3.1

移ったかを確認します

[root@c ~]# pyenv versions
  system
* anaconda3-5.3.1 (set by /apps/pyenv/version)
[root@c ~]#

これで「pyenv-anaconda」の環境敷設は完了です。

次にcrYOLO実行環境を作ります

crYOLO向けの仮想実行環境を作る

crYOLOはnvidia製GPUカードを使ってより高速な処理が可能です. そのためにはCUDA環境の整備が必要です

GPUカードはnvidia社製カードなら大抵大丈夫ですが、crYOLO内で使用するTensorflowプログラムのために場合によっては別途処置が現状必要です.
具体的には RTX 30X0 とかの CUDA11 が必要なGPUカードの場合と、それ以外(RTX 20X0、RTX10X0)で対応が分かれます.

まず初めに「pyenv-anaconda」の環境を用意します

export PYENV_ROOT=/apps/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init - --no-rehash)"
export PATH=$PYENV_ROOT/versions/anaconda3-5.3.1/bin/:$PATH

「conda」を最新版にします. 時間が掛かる処理なのでcondaを使てって「古いよ」って言われたら実行してください

[root@c ~]# conda update conda

その後にcrYOLOのpython実行環境を作成します.

(RTX30X0らのCUDA-11.Xが必要なGPUカードなら)
[root@c ~]# conda create -n cryolo-1.8.0-c11 -c conda-forge -c anaconda pyqt=5 python=3.8 numpy=1.16 libtiff wxPython=4.1.1 adwaita-icon-theme
 
(それ以外の場合)
[root@c ~]# conda create -n cryolo-1.8.0-c10 -c conda-forge -c anaconda pyqt=5 python=3.7 cudatoolkit=10.0.130 cudnn=7.6.5 numpy==1.18.5 libtiff wxPython=4.1.1  adwaita-icon-theme

環境名「cryolo-1.8.0-c11」はversion 1.8.0 で cuda11 対応環境を意図してます. 同じく「cryolo-1.8.0-c10」はcuda10での環境を意図してます
作成した環境は「conda env list」で確認できます

[root@c ~]# conda env list
# conda environments:
#
base                  *  /apps/pyenv/versions/anaconda3-5.3.1
cryolo-1.8.0-c11         /apps/pyenv/versions/anaconda3-5.3.1/envs/cryolo-1.8.0-c11
cryolo-1.8.0-c10         /apps/pyenv/versions/anaconda3-5.3.1/envs/cryolo-1.8.0-c10
 
[root@c ~]#

「cryolo-1.8.0-c11」と「cryolo-1.8.0-c10」の2つを作る必要はありません. ここは説明のために2つ作っているだけです
環境を削除するには「conda env remove --name <環境名>」としてください
次に作成したpython実行環境にプログラム「crYOLO」をインストールします

crYOLOのインストール CUDA11版

作成したpython実行環境に移ります.

移るには「source activate <環境名>」と実行します. RHEL8系なら「conda activate <環境名>」としても同じです

ここでCUDA11向けの「cryolo-1.8.0-c11」に移ります.

[root@c ~]# source activate cryolo-1.8.0-c11
(cryolo-1.8.0-c11) [root@c ~]#

python実行環境に移るとプロンプトの前に「(環境名)」が追加されます。
環境から抜けるときは「source deactivate」「conda deactivate」と実行します. そうするとプロンプトの前に「(環境名)」は消えます.

cuda11向けのcrYOLOをインストールします

(cryolo-1.8.0-c11) [root@c ~]# pip install nvidia-pyindex
(cryolo-1.8.0-c11) [root@c ~]# pip install nvidia-tensorflow[horovod]
(cryolo-1.8.0-c11) [root@c ~]# pip install 'cryolo[c11]'

これでcuda11向けのcudaがインソールされますが、同時にインストールされる Tensorflow はnvidia謹製のcuda11向けのTensorflow(名称は nvidia-tensorflow-1.15.5+nv21.11)です
ですが、このnvidia謹製のTensorflowは GLIBC-2.29 向けでRHEL7/8系では利用できない様子.
具体的には

ImportError: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /apps/pyenv/versions/anaconda3-5.3.1/envs/cryolo-1.8.0-c11/lib/python3.8/site-packages/tensorflow_core/python/_pywrap_tensorflow_internal.so)

とエラーが表示されます.

これをcrYOLO/Tensorflowで作った「tensorflow-1.15.5+nv-cp38-cp38-linux_x86_64.whl」で重ね、追加必要となる「cudnn」もインストールします

(cryolo-1.8.0-c11) [root@c ~]# pip install tensorflow-1.15.5+nv-cp38-cp38-linux_x86_64.whl
(cryolo-1.8.0-c11) [root@c ~]# conda install cudnn=8

728枚mrcファイル処理「real 13m56.758s, user 6m23.043s, sys 1m5.157s」(RTX A2000[6GB],i7-10700K[8core],32GB) GPUを「-g 0 1 2 3」と4枚指定ならもっと早いのかな?

*syslogにワーニングが発生する. 微妙...

一応ubuntu20.04で改変を施さない場合も試してみて
728枚mrcファイル処理「real 13m15.924s, user 5m27.480s, sys 0m53.887s」(RTX A2000[6GB],i7-10700K[8core],32GB) とほぼ同じスピードで処理が進んだ

Singularityで作ってみた Singularity/crYOLO

crYOLOのインストール CUDA10版

RTX 20X0 とかの一世代前のGPUカードはCUDA10で動きます.
crYOLOで使用される Tensorflow version1.15 には CUDA10 対応版がすでに存在して RHEL7系、RHEL8系でも動きます そのためCUDA11のような面倒な追加対応は不要です

インストールはCUDA10向けに作った「cryolo-1.8.0-c10」に移って、crYOLOをインストールするだけです。

[root@c ~]# source activate cryolo-1.8.0-c10
 
(cryolo-1.8.0-c10) [root@c ~]# pip install 'cryolo[gpu]'

これで完了です

crYOLOのインストール CPU版

glibcを別途配置しても動かない場合があるみたい. そうなると RTX 30x0 ではもはや動かない. crYOLO開発側が tensorflow-2.X に切り替えるまで待つしかないかも.
その代替としては GPU を使わず CPU で計算させる

[root@c ~]# conda create -n cryolo-1.8.0-cpu -c conda-forge -c anaconda pyqt=5 python=3.7 numpy==1.18.5 libtiff wxPython=4.1.1  adwaita-icon-theme
[root@c ~]# source activate cryolo-1.8.0-cpu
(cryolo-1.8.0-cpu) [root@c ~]# pip install 'cryolo[cpu]'

728枚mrcファイル処理「real 21m21.117s, user 67m26.962s, sys 7m1.656s」(i7-10700K[8core],32GB) 32coreとかならCPUでも戦える?

EnvironmentModules

ここではEnvironmentModulesを使って実行環境を整備してます。
作ったmoduleファイルは下記URLを参照して
http://sphire.mpg.de/wiki/doku.php?id=pipeline:window:cryolo:integration_into_module_system

「cryolo-1.8.0-c10」向けなら
「/apps/modulefiles/crYOLO/1.8.0-c10」と用意して、中身は下記にします

#%Module1.0
set          root       /apps/pyenv/versions/anaconda3-5.3.1/envs/cryolo-1.8.0-c10
setenv       CRYOLOPATH $root
prepend-path PATH       $root/bin

「cryolo-1.8.0-c11」向けなら
「/apps/modulefiles/crYOLO/1.8.0-c11」と用意して、中身は下記にします

#%Module1.0
set          root       /apps/pyenv/versions/anaconda3-5.3.1/envs/cryolo-1.8.0-c11
setenv       CRYOLOPATH $root
prepend-path PATH       $root/bin

「cryolo-1.8.0-cpu」向けなら「/apps/modulefiles/crYOLO/1.8.0-cpu」と用意して、中身は下記にします

#%Module1.0
set          root       /apps/pyenv/versions/anaconda3-5.3.1/envs/cryolo-1.8.0-cpu
setenv       CRYOLOPATH $root
prepend-path PATH       $root/bin

計算してみる

まずはcrYOLOのmoduleファイルをロードしてcrYOLO実行環境を準備します

[saber@c ~]$ module load crYOLO
[saber@c ~]$ cd crYOLO
[saber@c crYOLO]$

これでcrYOLO関係のアプリが使えます。
*「/apps/pyenv/versions/anaconda3-5.3.1/envs/cryolo/bin」の関連アプリがあります

ここでは提供されているmodelファイル
General PhosaurusNet models

  • For cryo images (low-pass filtered)
  • For cryo images (neural network denoised with JANNI)
  • For negative stain images

から「For cryo images (low-pass filtered)」のmodelを使ってpickしてみます。
modelファイルは、「http://sphire.mpg.de/wiki/doku.php?id=downloads:cryolo_1#general_phosaurusnet_models」から取得

そしてconfigファイルを準備します。
チュートリアルにも記載されてますが、下記を実行してconfigファイルを作ります

[saber@c crYOLO]$ cryolo_gui.py config config_cryolo_.json 220 --filter LOWPASS --low_pass_cutoff 0.1

中身は

[saber@c crYOLO]$ cat config_cryolo_.json
{
    "model": {
        "architecture": "PhosaurusNet",
        "input_size": 1024,
        "anchors": [
            220,
            220
        ],
        "max_box_per_image": 700,
        "filter": [
            0.1,
            "filtered_tmp/"
        ]
    }
}
[saber@c crYOLO]$

となる。configファイルのたたき台を作るくらいでしょうか。別に手動で作成しても宜しいかと思う。
各項目の説明は下記URL参照
http://sphire.mpg.de/wiki/doku.php?id=cryolo_config

pick対象はrelion30のチュートリアルデータです。
っで実際にpickさせてみます。

[saber@c crYOLO]$ cryolo_predict.py -c config_cryolo_.json -w /Appl/crYOLO/gmodel_phosnet_201912_N63.h5 -i ./20170629_000*.mrc -o ./
 
[saber@c crYOLO]$

6701個の粒子をpickしました。そのpickした座標データは形式に合わせてCBOX、EMAN、STARフォルダにそれぞれ書かれる。
EMANのbox形式を見てみると

[saber@c crYOLO]$ less EMAN/20170629_00021_frameImage.box
723.0   3568.5  220     220
2002.5  3583.5  220     220
2128.0  3587.5  220     220
2391.5  3574.0  220     220
2929.0  3565.0  220     220
3358.0  3596.0  220     220
1268.5  3517.5  220     220
1557.0  3526.0  220     220
2575.0  3522.0  220     220
3114.0  3520.5  220     220
 :
[saber@c crYOLO]$

な感じで書かれています。
GPU4枚マシンで4枚使って計算したいなら

[saber@c crYOLO]$ cryolo_predict.py -g 0 1 2 3 -c config_cryolo_.json -w /Appl/crYOLO/gmodel_phosnet_201912_N63.h5 -i ./20170629_000*.mrc -o ./

と「-g 0 1 2 3」と指定する

cryolo_gui.pyを使ってみる

[saber@c crYOLO]$ cryolo_gui.py

実行するとcrYOLOの画面が表示されます。その左側には「Actions」として「config」「train」「predict」「ecaluation」があります。
2020y02m13d_022916652.png
「config」を選ぶとその右側には複数のタブが並びます。
2020y02m13d_023250324.png
先ほどコマンドラインで作成した「config_cryolo_.json」をGUIで作っているだけなのですが、個々の項目の説明があるので
こちらで欄を埋めてconfigファイルを用意された方がいいのかと思う。
ただ「predict」の実行なら「General arguments」タグの「config_out_path」「boxsize」、「Model options」タグのすべて、
「Denoising option」を埋めて、「Start」ボタンを押下すればconfigファイルは得られる。

っで、次にpredictを選択
2020y02m13d_025846210.png
「Required arguments」タグでconf欄は前段で作ったconfigファイル。inputはmrcファイルを指定します。
weightsがmodelファイルを指定して、outputはそのばでいいなら「./」とします。
2020y02m13d_030217762.png

「Optional auguments」タグは説明を読み定義すれば宜しいかと。そのままで動きます。
「Filament」タグはパス
「Deprecated/Experimental/Special」タグもパス
そして「Start」ボタンを押下すればpickしてくれます。

pick結果を見たい

pickの状態を可視化するツールも備わっているようで、「cryolo_boxmanager.py」コマンドがそれに該当します。
「cryolo_boxmanager.py」を起動すると下記のようなGUI画面が表示されます。
メニューの「File」から「Open image folder」を選択して
2020y02m13d_030750841.png
「Select Image Directory」画面が新たに表示され、そこでpick対象のmrcファイルのあるフォルダを指定します。
*「cryolo_boxmanager.py」の実行場所にmrcファイルがあるのなら、そのまま「Choose」を選びます
すると、別の画面が表れて、mrcファイルが表示されます。
2020y02m13d_031146529.png

そして初回に表示されGUI画面には読み込まれたmrcファイルらが表示されます
次に、BOXデータを読み込みます。再度Fileメニューから「Import Box files」を選びます
2020y02m13d_031521865.png
新に「Select Box Directory」画面が表示され、そこでpredictで得られたpickデータから「CBOX」を選択してパネル下部の「Choose」ボタンを押下します。
2020y02m13d_031707281.png

すると、mrcイメージにBOXが表示されます。
2020y02m13d_032156784.png

うまく動かない時

古いバージョンに乗せ換えてみる

conda env remove --name cryolo
conda create -n cryolo -c anaconda python=3.6 pyqt=5 cudnn=7.1.2 numpy==1.14.5 cython wxPython==4.0.4 intel-openmp==2019.4
source activate cryolo
pip install cryolo[gpu]==1.7.2

cryoloのバージョンは下記サイトで確認できる
https://pypi.org/project/cryolo/#history

エラーメッセージ

 :
 :
  File "/share/pyenv/versions/anaconda3-5.3.1/envs/cryolo/lib/python3.6/site-packages/keras/engine/saving.py", line 1224, in load_weights_from_hdf5_group_by_name
    original_keras_version = f.attrs['keras_version'].decode('utf8')
AttributeError: 'str' object has no attribute 'decode'

なエラーメッセージ出てきたら

conda install keras

として keras を入れる

proxy....

proxyで外部に出れない場合は「--proxy」を使う
pip install piyopiyo --proxy http://user:pass@fooooo.proxy.local:8080

メモ

cryolo_gui.pyを立ち上げるとターミナルに

(cryolo_gui.py:14093): GLib-GIO-CRITICAL **: 01:39:57.910: g_loadable_icon_load: assertion 'G_IS_LOADABLE_ICON (icon)' failed
 
(cryolo_gui.py:14093): Gtk-WARNING **: 01:39:57.910: Error loading theme icon 'gtk-cancel' for stock: Failed to load icon
 
(cryolo_gui.py:14093): Gtk-CRITICAL **: 01:39:57.910: render_fallback_image: assertion 'pixbuf != NULL' failed
 
(cryolo_gui.py:14093): GLib-GObject-CRITICAL **: 01:39:57.910: g_object_ref: assertion 'G_IS_OBJECT (object)' failed
 
(cryolo_gui.py:14093): GLib-GIO-CRITICAL **: 01:40:09.089: g_loadable_icon_load: assertion 'G_IS_LOADABLE_ICON (icon)' failed
 
(cryolo_gui.py:14093): Gtk-WARNING **: 01:40:09.089: Error loading theme icon 'dialog-information' for stock: Failed to load icon
 
(cryolo_gui.py:14093): Gtk-CRITICAL **: 01:40:09.089: render_fallback_image: assertion 'pixbuf != NULL' failed
 
(cryolo_gui.py:14093): GLib-GObject-CRITICAL **: 01:40:09.089: g_object_ref: assertion 'G_IS_OBJECT (object)' failed
 
(cryolo_gui.py:14093): GLib-GIO-CRITICAL **: 01:40:14.779: g_loadable_icon_load: assertion 'G_IS_LOADABLE_ICON (icon)' failed
 
(cryolo_gui.py:14093): Gtk-WARNING **: 01:40:14.779: Error loading theme icon 'dialog-information' for stock: Failed to load icon
 
(cryolo_gui.py:14093): Gtk-CRITICAL **: 01:40:14.780: render_fallback_image: assertion 'pixbuf != NULL' failed
 
(cryolo_gui.py:14093): GLib-GObject-CRITICAL **: 01:40:14.780: g_object_ref: assertion 'G_IS_OBJECT (object)' failed

と表示される時がある


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-12-31 (金) 13:29:24 (21d)