GPUオンでtopazの並列度[Number of parallel processes]を1、cpu並列度[Number of CPUs]は既定の8とかがいいみたい(Topaz Extract).
規定値のtopaz並列度8なら処理が重くて落ちるそうな (K様ご指摘ありがとうございます)
自分以外のアカウント(例: cryosparc)でcryoSPARCサービスを運用していると、自分のアカウントのホームディレクトリにあるファイルを読ませるために
chmod 755 $HOME
mkdir $HOME/cryosparc
chmod 777 $HOME/cryosparc
と設定を緩くしてしまう... これだと他人が $HOME/cryosparc に入ってファイルを読めたり消したりできてしまいます
じゃぁーどうるかとなりますが、ACLを使います
今時の$HOMEは 750 とかセキュア的に強固です. っでまずはユーザcryosparcに $HOME に入って頂くために
cd /home
setfacl -m user:cryosparc:rx $HOME
これでユーザcryosparcは、$HOMEの中に入れて$HOME直下のフォルダ/ファイル類が見えるようになります
他の方は$HOMEに入れないので、ある意味これで十分かも.
あとはcryoSPARC向けのフォルダを作って書き込み権限を付与させる
mkdir $HOME/cryo
chmod 777 $HOME/cryo
とかでもいいのかなと.
もっとエレガントにしたいのなら
mkdir $HOME/cryo
setfacl -m user:cryosparc:rwx $HOME/cryo
setfacl -dm user:cryosparc:rwx $HOME/cryo
(ユーザ cryosparc が作成したフォルダを弄るために)
setfacl -dm user:$USER:rwx $HOME/cryo
とします. 「m」は既存からの修正. 「d」は設定が既定値との意味. 「R」を付けると、そのファルダの配下に既に存在しているフォルダ・ファイルにも適用することを意味します.
「777」よりはだいぶいいかと.
cryoSPARCでジョブ管理システムを使っているとたまに発生します.
「このジョブは終わったかい?」とジョブ管理システムに問い合わせを掛けるのですが、「そんなん知らん」と帰ってくると流れるエラーって感じ
この問い合わせは結構頻繁に行うので、エラーでログが埋まります。
支障あるって訳ではないですが、お掃除は必要かなと。
「COMMAND.SCHEDULER update_cluster_job_status ERROR | Cluster job status update for P10 J50 failed with exit code 35」
上記の場合は P10のJ50を「killed」にしたとcryoSPARC側に登録すれば問い合わせが無くなってハッピーになります
っで方法
cryosparcm cli "set_job_status('P10','J50','killed')"
削除(解決済み)
「config.sh」に
export CRYOSPARC_SSD_CACHE_LIFETIME_DAYS=7
と追記すれば7日で消えるそうな
clustersのlaneにはジョブが流れるが、Master-Workerで登録したnodeにジョブを投げると
「symbol lookup error: /lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b」
とエラーが発生する. worker/worker共にRockyLinux8.5
調べるとOS由来の openssl と cryoSPARCのcondaでインストールされたopensslで参照優先の違いっぽい. (未確定)
っで面倒なのでアプリを再インストールしてみる
databaseと演算場所は残して、cryosparc_worker cryosparc_master cryosparc2_workerらは削除する あるいはrenameします. databaseフォルダもバックアップを取ります
*注意: 同じcryoSPARCのバージョンで再インストールします
cd ~/cryoSPARC
rm -rf cryosparc_worker cryosparc_master cryosparc2_worker
tar xf src/cryosparc_master.tar.gz
tar xf src/cryosparc_worker.tar.gz
./cryosparc_master/install.sh --license xxxxxx --hostname c --dbpath $HOME/cryoSPARC/database --port 39000
./cryosparc_worker/install.sh --license xxxxxx --cudapath /usr/local/cuda-11.5
cryosparcm start
clusters形式とかMaster-Worker形式の情報はデータベースに残っているので、特段追加作業せずに使えます
「cryosparcm start」で下記文言が表示されて止まるなら、すでにdatabaseが動いている事. Master-Worker形式でどこかの計算ノードで cryosparc のプロセスがないかを調べてkillする
Starting cryoSPARC System master process..
CryoSPARC is not already running.
database: ERROR (spawn error)
あるいはcryoSPARCのデータベースが破損している可能性があります。
その際は
eval $(cryosparcm env)
cd cryosparc2_database
mongod --dbpath ./ --repair
で直す 参照先https://discuss.cryosparc.com/t/please-advise-database-error-spawn-error/6547
あるいは、既にdatabaseが動いているがり、その際は「ps -ef |grep mongod」でmongoDBのプロセスを見つけてkillします.
cryoSPARCのworkerたちは下記コマンドで得られる cryoSPARCサービスを起動していないとえらになります
[illya@c ~]$ cryosparcm cli "get_scheduler_lanes()"
[{'desc': '', 'name': 'pbscluster', 'title': 'Lane pbscluster (cluster)', 'type': 'cluster'}, <--- clusters形式のscheduler
{'desc': '', 'name': 'run-on-s', 'title': 'Lane run-on-s (cluster)', 'type': 'cluster'}, <--- 同じ
{'desc': '', 'name': 'default', 'title': 'Lane default (node)', 'type': 'node'}] <--- Master-Worker形式
[illya@c ~]$
*表示は一行なのですが、改行コードを入れて見やすくしています
不要となったschedulerは、「cryosparcm cli "remove_scheduler_lane('"pbscluster')"」とかで消せるけど、
"default"を指定して消すとMaster-Worker形式で登録したノードがすべて消えます.
っでMaster-Worker形式は "get_scheduler_lanes()" では一括りですが、個別に何があるかは "get_worker_nodes()" を使う
[illya@c ~]$ cryosparcm cli "get_worker_nodes()"
[{'cache_path': '/scratch/cs_illya', 'cache_quota_mb': None, 'cache_reserve_mb': 10000, 'desc': None, 'gpus': [(略)],
'hostname': 'gpu01', 'lane': 'default', 'monitor_port': None,
'name': 'gpu01', 'resource_fixed': {略}, 'resource_slots': {略},
'ssh_str': 'illya@gpu01', 'title': 'Worker node gpu01', 'type': 'node', 'worker_bin_path': '/home/illya/cryoSPARC/cryosparc_worker/bin/cryosparcw'},
{'cache_path': '/scratch/cs_illya', 'cache_quota_mb': None, 'cache_reserve_mb': 10000, 'desc': None, 'gpus': [(略)],
'hostname': 'gpu02', 'lane': 'default', 'monitor_port': None,
'name': 'gpu02', 'resource_fixed': {略}, 'resource_slots': {略},
'ssh_str': 'illya@gpu02', 'title': 'Worker node gpu02', 'type': 'node', 'worker_bin_path': '/home/illya/cryoSPARC/cryosparc_worker/bin/cryosparcw'}
]
[illya@c ~]$
*表示は一行なのですが、改行コードや文字列を一部省略して見やすくしています
値を変更したいなら "set_scheduler_target_property(hostname, key, value)" を使う
簡単には
[illya@c ~]$ cryosparcm cli "set_scheduler_target_property('gpu01','desc','main server')" <-- Master-Workerのgpu01のdescパラメータを更新します
とかで使います.
例えば
[saber@cryosparc ~]$ cryosparcm start
Starting cryoSPARC System master process..
CryoSPARC is not already running.
database: started
command_core: started
で止まってしまう場合がある. これはそのcryoSPARCサーバの名前解決がうまく行っていないか、proxyの除外設定に入っていないとかで起こるみたい。
前者は「/etc/hosts」にipと名前を記載する
後者は「export no_proxy="127.0.0.1,localhost,<ホスト名>"」を「cryosparc_master/config.sh」に記載する
ただ、前者の対応で起動できてもジョブを投げるとライセンス認証が受けられなくてエラーになる場合があるみたい.
その場合は「cryosparc_master/config.sh」にproxyサーバとかを記載します
[illya@s ~]$ cat cryoSPARC/cryosparc_master/config.sh
export CRYOSPARC_LICENSE_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CRYOSPARC_MASTER_HOSTNAME="s.sybyl.local"
export CRYOSPARC_DB_PATH="/home/illya/cryoSPARC/cryosparc_database"
export CRYOSPARC_BASE_PORT=39000
export CRYOSPARC_DEVELOP=false
export CRYOSPARC_INSECURE=false
export CRYOSPARC_CLICK_WRAP=true
export no_proxy="127.0.0.1,localhost,s.sybyl.local,s"
export http_proxy="http://<proxyサーバのIP>:<proxy port>"
export https_proxy="http://<proxyサーバのIP>:<proxy port>"
[illya@s ~]$
「cryosparcm start」で
Starting CryoSPARC System master process...
CryoSPARC is not already running.
configuring database...
configuration complete
database: started
Warning: Could not get database status (attempt 1/3)
Warning: Could not get database status (attempt 2/3)
Warning: Could not get database status (attempt 3/3)
:
となるのはホスト名に大文字を含むため. 例えば「CRYO-WS1」とかはダメ見たい.
回避策としては /etc/hosts に大文字でエントリーを加える
10.10.10.100 CRYO-WS1
とかで. 小文字なら/etc/hostsに記載しなくてもいいみたい. でも本来ホスト名って小文字かなと思うのだが....
下記を実行して正規のコードなら「{"success": true}」と表記されます
curl https://get.cryosparc.com/checklicenseexists/"ライセンスコード"
もしproxyを利用されているなら「-x」でproxyサーバを指定する
curl https://get.cryosparc.com/checklicenseexists/"ライセンスコード" -x http://10.10.10.1:3128
挙動が微妙なのでcryosparcを再起動させようにも「cryosparcm stop」をしても「ps -ef |grep cryosparc」でプロセスが残る..
「cryosparcm start」の際に「/tmp」に sock ファイルを残します。このsockファイルを使って「cryosparcm stop」を
行うのですが、OSの「systemd-tmpfiles」で/tmpにあるファイルはアクセスが10日以上ないファイルを削除します。
そのために「cryosparcm stop」が効かない事態が発生します。
応急措置的には 「ps -ef |grep cryosparc」で親プロセスが「1」のプロセスを「kill」するか、「ps -ef |grep supervisord」のプロセスをkillして下さい。
その後に「cryosparcm start」とかして下さい。
恒久的な対応としては、「systemd-tmpfiles」の仕組みを弄る.
「systemd-tmpfiles」の設定ファイルは「/etc/tmpfiles.d/*.conf」「/run/tmpfiles.d/*.conf」「/usr/lib/tmpfiles.d/*.conf」なそうな.
「/etc/tmpfiles.d/」に新規ファイルを用意するのもあるけど、「/usr/lib/tmpfiles.d/」に既に規定されているものに「追加」するのが簡単そうである。
なので
[root@s ~]# vi /usr/lib/tmpfiles.d/tmp.conf
:
:
# cryoSPARC
x /tmp/cryosparc-supervisor-*
x /tmp/mongodb-*
[root@s ~]#
とします。
v4.4以上ではこの作業は不要です. cryoSPARC内にcudaライブラリを持つようになったので 力技過ぎる..
cryoSPARCの計算にGPUで計算する項目がある. っでそのGPU計算には cuda ライブラリが必須.
別に必須なわけではないが、cudaライブラリ を更新するなら同時に cryoSPARC もそれに合わせて更新することも出来る.
*別に問題がなければそのままでも構わない
cudaライブラリの更新に伴い cryoSPARC も更新なら対象は worker 部分.
単純に
[cryosparc@s cryosparc_worker]$ ./bin/cryosparcw newcuda /usr/local/cuda-11.3
ほとんどfirewallな話なのですが、cryoSPARCはwebサービスなのでここに記載します
webサービスのポートは既定で39000を使用してます。
cryoSPARCのドキュメントでは連続10個のportを使用するようなので、39000を指定したら 39010 まで抑える必要がある。
1つの計算機で複数のインスタンスを立ち上げるなら、次のユーザは 39011 からスタートとなるが切りのいい数字 39020 を次のインスタンスに割り当てた方がよさそう.
っで
firewall-cmd --add-port=39000-39010/tcp --zone=public --permanent
firewall-cmd --add-port=39020-39030/tcp --zone=public --permanent
firewall-cmd --add-port=39040-39050/tcp --zone=public --permanent
firewall-cmd --add-port=39060-39070/tcp --zone=public --permanent
(あと接続元を制限したいなら下記も追加. 注:他のサービス[ssh]らも同時に制限されます)
firewall-cmd --add-source=192.168.0.0/24 --zone=public --permanent
(最後に)
firewall-cmd --reload
外部に直接cryoSPARCサーバが晒されている場合で特定のipからしかアクセスさせないなら
firewall-cmd --permanent --zone=external --add-rich-rule="rule family="ipv4" source address="133.x.x.x" port protocol="tcp" port="39000" accept"
(あるいは)
firewall-cmd --zone=external --add-rich-rule="rule family="ipv4" source address="133.x.x.x" port protocol="tcp" port="39000" accept"
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
(確認)
firewall-cmd --list-all --zone=external
とする
bin/cryosparcw connect --worker c.sybyl.local --master c.sybyl.local --port 39000 --update --ssdpath /scratch/cryosparc_cache
現状の設定内容は下記コマンドで確認可能
cryosparcm cli "get_config_var(name='targets', colname='sched_config')"
計算機を再起動すると cryosparc も停止します。自動起動はないみたい。
っでそれを起動させるには
これで行けます。もし立ち上がらないのなら
あるいは、「/tmp/cryosparc-supervisor-******.sock」があって起動しないとのメッセージがあるのなら
としてそのファイルを削除してから「cryosparcm start」としてください。
あとは珠にcryosparcのサービスが勝手に停止している場合があります。
その場合、プロセスの残骸が生きていてうまくサービスの再開ができない場合がありますので、
の後に
root権限になって「ps -ef |grep cryosparc」でまだ生き残っているプロセスをkillします。
簡単な方法としては、計算機の再起動を行ってください。
そうした上で「cryosparcm start」としてください。
cryosparcユーザになってから。
以前のバージョンには「cryosparc autostart」でcronを駆使した再起動時自動upが施されるのだが、
今のバージョンではその機能が消えてしまったみたい。
https://discuss.cryosparc.com/t/high-resolution-image-of-2d-classification/3395
実行するにはまずpythonをcryoSPARCのpythonに切り替える必要がある。
それと「CRYOSPARC_ROOT_DIR」の定義も必要みたい。
これらは単純に
export PATH=/home/cryosparc/software/cryosparc/cryosparc2_master/deps/anaconda/bin:$PATH
export CRYOSPARC_ROOT_DIR=/home/cryosparc/software/cryosparc/cryosparc2_master
でいいみたい。
次にpythonを立ち上げる
[saber@c ~]$ which python
/home/cryosparc/software/cryosparc/cryosparc2_master/deps/anaconda/bin/python
[saber@c ~]$ python
Python 2.7.15 |Anaconda, Inc.| (default, Oct 10 2018, 21:32:13)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import os
>>> os.chdir(os.environ['CRYOSPARC_ROOT_DIR'])
>>> from cryosparc2_compute import plotutil
>>> from cryosparc2_compute.blobio import mrc
>>> import matplotlib.pyplot as plt
>>>
>>> mrc_path_abs = '/home/saber/relion30_tutorial_precalculated_results/Class2D/job015/run_it025_classes.mrcs'
>>> plt=plotutil.plot_2D_classes(template_mrc, rows=3, cols=3)
>>> plt.show()
これで下記のような画面が表示される。
既に動ている他のユーザのcryosparcアプリを自分のディレクトリーにコピーします
[saber@s ~]$ cp -r /home/cryosparc/cryoSPARC /home/saber/cryoSPARC
そして.bashrcに「export PATH="/home/saber/cryoSPARC/cryosparc_master/bin":$PATH」としてPATHを通して
下記のように修正を行います
[saber@s ~]$ vi cryoSPARC/cryosparc_master/config.sh
export CRYOSPARC_LICENSE_ID="ccccccccccccccccccccccccccccccccccccccccccccccc"
export CRYOSPARC_MASTER_HOSTNAME="s.sybyl.local"
export CRYOSPARC_DB_PATH="/home/saber/cryoSPARC/cryosparc_database"
export CRYOSPARC_BASE_PORT=39000
export CRYOSPARC_DEVELOP=false
export CRYOSPARC_INSECURE=false
export CRYOSPARC_CLICK_WRAP=true
#(下記を追加)
export CRYOSPARC_FORCE_USER=true
[saber@s ~]$
その上で「cryosparcm start」を実行します
cryoSPARCのtar.gzを展開して、ライセンスコードとともにインストールを行う。
だが、その後「cryosparcm start」としても下記のように止まってしまう
Starting cryoSPARC System master process..
CryoSPARC is not already running.
database: started
command_core: ERROR (spawn error)
こういった場合は、ログファイルで何が原因かが大抵書かれている。
ログファイルは 「cryosparc2_master/run」にある。
今回の場合は
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "cryosparc2_command/command_core/__init__.py", line 33, in <module>
from flask_jsonrpc import JSONRPC
ImportError: No module named flask_jsonrpc
とあったのでcryoSPARCの稼働に必要なpythonパッケージが不足していた模様. それを追加します。
cryoSPARCで使用しているpython環境に移る必要がありますが、下記にて移れます
eval $(./cryosparc2_master/bin/cryosparcm env)
その後、「pip install flask_jsonrpc」でパッケージ追加を試みますが、、、
「AttributeError: 'int' object has no attribute 'endswith'」
とエラーが発生して失敗.
幸いにcryoSPARCの中にそのソースパッケージがありましたのでれを使います
cd cryosparc2_master/deps_bundle/python/python_packages/pip_packages/
cp Flask-JSONRPC-0.3.1.tar.gz Flask-PyMongo-0.5.1.tar.gz libtiff-0.4.2.tar.gz /tmp
cd /tmp
tar xf Flask-JSONRPC-0.3.1.tar.gz
cd Flask-JSONRPC-0.3.1
python setup.py build
python setup.py install
tar xf Flask-PyMongo-0.5.1.tar.gz
cd Flask-PyMongo-0.5.1
python setup.py build
python setup.py install
を施して「cryosparcm start」に成功した
その後、同じような現象が cryosparc_workerでも発生した....調べて原因は pip が古かった.
どうやら「PIP_NO_CACHE_DIR=off」を有効にすればすべて上手く行くみたい.....
cryoSPARCプロセスを全部落としてから「usermod」でUID/GIDら/etc/passwd関係を修正後、
「chown -R cryosparc. /home/cryosparc」でファイル所有権も変更します
大抵はこれでOKですが、それでいて起動しない時がある.
その際は「/tmp/cryosparc-supervisor-*」や「/tmp/mongodb-*」の有無とか確認します
あと「/etc/hosts」に自ホスト存在確認でしょうか