うまく動かない

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する

database: ERROR (spawn error)

workerたち

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 ~]$

ライセンスコードの確認

下記を実行して正規のコードなら「{"success": true}」と表記されます

curl https://get.cryosparc.com/checklicenseexists/"ライセンスコード"

もしproxyを利用されているなら「-x」でproxyサーバを指定する

curl https://get.cryosparc.com/checklicenseexists/"ライセンスコード" -x http://10.10.10.1:3128

「cryosparcm stop」が効かない

挙動が微妙なので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 ~]#

とします。

最新のcudaライブラリに変更したので cryoSPARC も更新してみる

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を使用してます。
あと内部で 39001-39005まで使っているようなので下記を実行します。 不要かもしれないけど..

firewall-cmd  --add-port=39000/tcp --zone=public --permanent
firewall-cmd  --add-port=39001/tcp --zone=public --permanent
firewall-cmd  --add-port=39002/tcp --zone=public --permanent
firewall-cmd  --add-port=39003/tcp --zone=public --permanent
firewall-cmd  --add-port=39004/tcp --zone=public --permanent
firewall-cmd  --add-port=39005/tcp --zone=public --permanent
 
(あと接続元を制限したいなら下記も追加. 注:他のサービス[ssh]らも同時に制限されます)
firewall-cmd  --add-source=192.168.0.0/24 --zone=public  --permanent
 
(最後に)
firewall-cmd --reload

外部からのアクセスをipアドレスベースで制限したい

外部に直接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

とする

ssdを無効から有効に変更する

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 も停止します。自動起動はないみたい。
っでそれを起動させるには

  • cryosparcユーザになる
    一旦rootになって「su - cryosparc」になっても可。直接「su - cryosparc」でも可
  • cryosparcm start」を実行する

これで行けます。もし立ち上がらないのなら

  • cryosparcm restart

あるいは、「/tmp/cryosparc-supervisor-******.sock」があって起動しないとのメッセージがあるのなら

  • /bin/rm -f /tmp/cryosparc-supervisor-******.sock

としてそのファイルを削除してから「cryosparcm start」としてください。

あとは珠にcryosparcのサービスが勝手に停止している場合があります。
その場合、プロセスの残骸が生きていてうまくサービスの再開ができない場合がありますので、

  • cryosparcm stop

の後に
root権限になって「ps -ef |grep cryosparc」でまだ生き残っているプロセスをkillします。
簡単な方法としては、計算機の再起動を行ってください。
そうした上で「cryosparcm start」としてください。

ユーザの追加とか

cryosparcユーザになってから。

  • 現在の登録済みユーザ一覧
    「cryosparcm listusers」
  • ユーザ作成
    「cryosparcm createuser --email saber_at_chaperone.jp --password artoria --name SABER」
  • パスワード変更
    「cryosparcm resetpassword --email saber_at_chaperone.jp --password starving」
  • ユーザ情報の変更
    「cryosparcm updateuser --email saber_at_chaperone.jp --password starving --name alternative --admin true」
    emailとパスワードをキーとして、「name」と「admin(管理者)」かどうかを定義できます
  • ユーザの削除
    「cryosparcm cli "delete_user('管理者のメールアドレス', '削除したいユーザのメールアドレス', '削除したいユーザのパスw−度')"」
    で行う。削除したいユーザのパスワードが必要なので、一旦「パスワード変更」で対象ユーザのパスワード変更が必要かな
    管理者自分自身を削除するには下記のようにします
    「cryosparcm cli "delete_user('saber_at_chaperone.jp', 'saber_at_chaperone.jp', 'starving')"」

再起動時に自動的にサービスをupするには

以前のバージョンには「cryosparc autostart」でcronを駆使した再起動時自動upが施されるのだが、
今のバージョンではその機能が消えてしまったみたい。

High resolution image of 2D classification

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()

これで下記のような画面が表示される。
2020y02m19d_232235788.png

他のユーザのcryoSPARCアプリをコピーして使う

既に動ている他のユーザの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」を実行します


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