「cryoSPARC tips」の版間の差分

提供: Eospedia
移動: 案内検索
(.csfファイル生成のソースコード)
(参考になるスクリプト)
行12: 行12:
 
=== 参考になるスクリプト ===
 
=== 参考になるスクリプト ===
 
cryosparc/cryosparc2_worker/cryosparc2_compute/jobs/workflows/buildrun_bench.py に、T20Sデータセットの自動処理が記述してある。
 
cryosparc/cryosparc2_worker/cryosparc2_compute/jobs/workflows/buildrun_bench.py に、T20Sデータセットの自動処理が記述してある。
 +
 +
buildrun_bench.pyで各make_jobに渡されているcreated_by_job_uidパラメータは、自動処理ジョブから投げる際特有のオプションのようなので、普通に投げる分には不要。
  
 
=== コマンドラインの使い方 ===
 
=== コマンドラインの使い方 ===

2020年9月24日 (木) 19:02時点における版

メタデータファイル(.cs, .csg)の編集

参考

https://cryosparc.com/docs/tutorials/data-management#faq-cs-csg

.csgファイル生成のソースコード

cryosparc/cryosparc2_master/cryosparc2_compute/jobs/runcommon.py の create_csg() で定義されている様。

コマンドラインインターフェイス

リファレンスガイド

https://guide.cryosparc.com/setup-configuration-and-management/management-and-monitoring/cli

参考になるスクリプト

cryosparc/cryosparc2_worker/cryosparc2_compute/jobs/workflows/buildrun_bench.py に、T20Sデータセットの自動処理が記述してある。

buildrun_bench.pyで各make_jobに渡されているcreated_by_job_uidパラメータは、自動処理ジョブから投げる際特有のオプションのようなので、普通に投げる分には不要。

コマンドラインの使い方

基本的には以下の流れでジョブを作成してキューへ投下すれば良いようである。

1. make_jobでジョブを作成

$ cryosparcm cli "make_job(...)"

これを実行するとcryoSPARCのGUIの方でジョブパネルが出現し、ステータスがbuildingになる。

make_jobの中に何を書くかは、上記のリファレンスガイドやT20Sベンチマークスクリプトを眺めたり、cryosparc/cryosparc2master/cryosparc2_compute/jobs/ 内の各ジョブディレクトリの build.py を読むとなんとなく把握できる感がある。

job_typeに関しては、cryosparc/cryosparc2master/cryosparc2_compute/jobs/ 内の各ジョブディレクトリの__init__.pyを読むとわかる。

user_idを渡す必要があるが、それは以下で確認できる。

$ cryosparcm cli "GetUser('<ユーザー登録に使用したメールアドレス>')['_id']"

2. enqueue_jobでスケジューラにジョブを投下

$ cryosparcm cli "enqueue_job('<プロジェクトID>', '<ジョブID>', '<レーン名>'"

プロジェクトIDはP1とかP2など。ジョブIDは手順1にて作成したジョブのID (J100とか)。レーン名は default としておけばスケジューラがよろしくやってくれる。

上記コマンドにより、GUIでQueueボタンを押したときと同様の処理が行われる。

使用可能なレーン名は、以下で確認できる。

$ cryosparcm cli "get_scheduler_lanes()"

[{u'title': u'Lane default (node)', u'type': u'node', u'name': u'default', u'desc': u''}]

'name'キーに対応する値が、指定できるレーン名、のようである。

input_group_connects について

例えば、ab initioジョブを作成したいとして、その入力画像はJ20のものであるとする。

J20のジョブパネルを開いて'Overview'を表示すると、右側のカラムに以下のような表示がある。(この例では、Select 2D classジョブ)

スクリーンショット 2020-09-11 194140.png

各小パネルの上部にparticles_selectedとかtemplates_selectedとか書いてあるが、これが結果の「グループ」名である。

ab initioジョブにはparticles_selectedグループを渡したい。ジョブID J20のparticles_selectedは "J20.particles_selected" のようにして指定することができる。

一方 ab initioジョブでは、GUIであれば以下のような入力項目がある。

スクリーンショット 2020-09-11 194742.png

particlesグループ が入力として必要であることがわかる。

この例で、ab initioをコマンドラインから叩くときのinput_groups_connectsに何を渡せばよいかというと、以下のようなPythonのディクショナリを渡せばよい。

{'particles': 'J20.particles_selected'}

このようにしてmake_jobしてenqueue_jobすると、ちょうどGUIで J20のparticles_selectedをドラッグしてab initioのparticlesへドロップして実行したのと同じことになる。

別のホストマシン、別のユーザーからジョブを投げたい場合

sshを利用して投げることが可能。

例えばcryoSPARCのユーザー名がcryosparc_user、cryoSPARCを動かすホストマシンがfugaの場合、

> ssh cryosparc_user@fuga "cryosparcm cli \"make_job(job_type='homo_abinit', ......)\""

のようにしてジョブを作り、同様にしてキューへ投下すれば実行可能。内側のダブルクォートのエスケープを忘れずに。

データベースの移動

データベースがdocker内のホームディレクトリに作られてしまっていたので、ネットワークドライブの中に移動させ、どのホスト、コンテナからもマウントして利用できるようにしたい。(※ single workstationインストールなので普通はホストの移動とかはしないと思うが、筆者はいろいろな事情でホストやコンテナを移動したい場合があるので、このような要求が出てきた。)

参考: https://discuss.cryosparc.com/t/how-to-change-database-directory-in-cryosparc-v2/2068/5

1. まず既存のデータベースのバックアップをする。

> cryosparcm backup

2. cryoSPARCのマスタープロセスを停止する。

> cryosparcm stop

3. データベースディレクトリを所望の場所に移動する。

まずは現在のデータベースディレクトリの場所を確認する。データベースディレクトリのパスは、cryoSPARCをインストールしたディレクトリの cryosparc2_master/config.sh 内に記述してある。

筆者の環境では、

export CRYOSPARC_DB_PATH="/home/csparc/softwares/cryosparc/cryosparc2_database"

であった。

これを所望の場所へコピーする。筆者の場合、/net/fs10/work02/csparc/cryosparc2_database へコピーしたいので、

> cp -r /home/csparc/softwares/cryosparc/cryosparc2_database /net/fs10/work02/csparc

を実行した。

4. cryoSPARCのコンフィグファイルでデータベースディレクトリのパスを書き換える。

先のステップで確認したconfig.shの、CRYOSPARC_DB_PATHを、新しいパスへ書き換えればよい。

5. cryoSPARCのマスタープロセスを起動し、移動前と同じ挙動になるかチェックする。

まずはマスタープロセスの起動。

> cryosparcm start

データベースが切り替わっているかチェック。

> cryosparcm status

----------------------------------------------------------------------------
CryoSPARC System master node installed at
/home/csparc/softwares/cryosparc/cryosparc2_master
Current cryoSPARC version: v2.15.0
----------------------------------------------------------------------------

cryosparcm process status:

app                              STOPPED   Not started
app_dev                          STOPPED   Not started
command_core                     RUNNING   pid 17017, uptime 0:04:18
command_proxy                    RUNNING   pid 17058, uptime 0:04:15
command_rtp                      STOPPED   Not started
command_vis                      RUNNING   pid 17052, uptime 0:04:16
database                         RUNNING   pid 16941, uptime 0:04:23
watchdog_dev                     STOPPED   Not started
webapp                           RUNNING   pid 17061, uptime 0:04:13
webapp_dev                       STOPPED   Not started

----------------------------------------------------------------------------

global config variables:

export CRYOSPARC_LICENSE_ID="*****"
export CRYOSPARC_MASTER_HOSTNAME="csparc-standalone-cs06"
export CRYOSPARC_DB_PATH="/net/fs10/work02/csparc/cryosparc2_database"
export CRYOSPARC_BASE_PORT=39000
export CRYOSPARC_DEVELOP=false
export CRYOSPARC_INSECURE=false
export CRYOSPARC_CLICK_WRAP=true

CRYOSPARC_DB_PATHが移動後のパスに切り替わっているので大丈夫そう。

あとはブラウザからウェブUIにアクセスして、移動前と同じ内容になっているか確認するとよい。

6. 新しいホストでcryoSPARCの新規(上書き)インストール

cryoSPARCを動かすホストは変えずにデータベースだけ移動する場合なら、上記のステップ5までで(多分)良いと思われる。

しかしcryoSPARCを動かすホストを変更し、かつ既存インストールを使用する場合、上記までの手順ではジョブの実行時にssh関連のエラーが出た。ワーカーを動かすホストの情報(cryoSPARCのUIのResource Manager -> Instance Information で確認できる計算リソース)がデータベースに記録されており、データベースを移動しただけでは元々データベースを置いていたホストのままになっているためと考えている。

(ほかに方法はあるかもしれないが、) 筆者が試したところでは、新しいホストにてcryoSPARCを新規インストールしなおせば、新しいホストのリソース情報が登録された。

もちろんこのとき、データベースはcryoSPARCのインストールディレクトリではなく、ステップ3で新たに作ったデータベースを使う必要があって、それはinstall.shに --dbpath オプションで指定できる。

install.sh ... --dbpath /net/fs10/work02/csparc/cryosparc2_database ...

7. 古いレーン情報の削除

ステップ6で新しいホストのリソース情報の登録はできるが、下図のように古いホストのリソース情報が残ったままになってしまった。(Target1 csparc-standalone-cs06が古いホスト、Target2 csparc-standalone-cs08 が新しいホスト)

スクリーンショット 2020-09-14 201755.png

これは以下のコマンドにより消すことができた。( https://guide.cryosparc.com/setup-configuration-and-management/management-and-monitoring/cli#remove_scheduler_target_node-args-kwargs )

> cryosparcm cli "remove_scheduler_target_node('csparc-standalone-cs06')"

スクリーンショット 2020-09-14 204731.png

これで、移動したデータベースで、新しいホストからジョブを実行できるようになった。