cryoSPARCが version2 になった。

本家様 https://cryosparc.com/

過去記事 cryoSPARC180829

ライセンスコードを取得します。

https://cryosparc.com/download/に必要事項を記載してsubmitします。
直後に「応答メール」が届きますが、これにはライセンスコードは記載されてません。
最大24時間までにはライセンスコードが記載された返信メールが届きます。

これを使ってプログラムの入手、及び実行が可能になるみたい。

プログラムの入手

詳しくはhttps://cryosparc.com/docs/reference/install/に記載されている。
下記2つのファイルを取得します。

  • cryosparc2_master.tar.gz
  • cryosparc2_worker.tar.gz

どちらもライセンスコードを渡さないと得られない仕組みっぽい

[root@c ~]# su - cryosparc
[cryosparc@c ~]$ mkdir src ; cd src
[cryosparc@c src]$ curl -L https://get.cryosparc.com/download/master-latest/"ライセンスコード" > cryosparc2_master.tar.gz
[cryosparc@c src]$ curl -L https://get.cryosparc.com/download/worker-latest/"ライセンスコード" > cryosparc2_worker.tar.gz

運用形体

従来のようなスタンドアローンでの運用も可能なのですが、あたらに queuing機構(SLURM/PBS/Torque) も利用可能のようで
ここではmasterCluster worker nodes形式で作っていきます。CentOS 7.5で構築します。
クラスターマシンで言うところのログインノードをmasterと見立てれば宜しいかと

master構築

共通アカウントcryosparcmasterノードを構築していきます。

[root@c ~]# su - cryosparc
[cryosparc@c ~]$ mkdir -p software/cryosparc
[cryosparc@c ~]$ mkdir cryosparc_database
 
[cryosparc@c ~]$ cd software/cryosparc
[cryosparc@c cryosparc]$ gzip -cd ~/src/cryosparc2_master.tar.gz | tar xf -
[cryosparc@c cryosparc]$ cd cryosparc2_master
 
[cryosparc@c cryosparc2_master]$ ls -CF
bin/                    cryosparc2_compute/  deps_bundle.hash         supervisord.conf
check_install_deps.sh*  cryosparc2_webapp/   install.sh*              version
cryosparc2_command/     deps_bundle/         setup_client_ipython.py
 
[cryosparc@c cryosparc2_master]$ ./install.sh --license "ライセンスコード" --hostname `hostname -f` \
                 --dbpath /home/cryosparc/cryosparc_database --port 39000
  :
[cryosparc@c cryosparc2_master]$

「~/.bashrc」に「export PATH=/home/cryosparc/software/cryosparc/cryosparc2_master/bin:$PATH」が追加された。

master起動

「~/.bashrc」を読み込んで下記コマンドで起動させる。

[cryosparc@c ~]$ cryosparcm start

psコマンドで何が動いているかを確認すると

cryospa+ 29553     1  0  8月29 ?      00:00:03 /home/cryosparc/software/cryosparc/cryosparc2_master/deps/anacon(略
cryospa+ 29556 29553  0  8月29 ?      00:01:39 mongod --dbpath /home/cryosparc/cryosparc_database --port 39001 (略
cryospa+ 29642 29553  0  8月29 ?      00:00:21 python -c import cryosparc2_command.command_core as serv; serv.s(略
cryospa+ 29721 29553  0  8月29 ?      00:00:06 python -c import cryosparc2_command.command_vis as serv; serv.st(略
cryospa+ 29733 29553  0  8月29 ?      00:00:00 python -c import cryosparc2_command.command_proxy as serv; serv.(略
cryospa+ 29738 29553  0  8月29 ?      00:00:27 /home/cryosparc/software/cryosparc/cryosparc2_master/cryosparc2_(略

こんな感じだった。

Cluster worker nodes構築

次に、Cluster worker nodesの構築であるが、
ここでは /home はmasterCluster worker nodesで共有されている。

[cryosparc@c ~]$ cd software/cryosparc
[cryosparc@c cryosparc]$ gzip -cd ~/src/cryosparc2_worker.tar.gz | tar xf -
[cryosparc@c cryosparc]$ cd cryosparc2_worker
[cryosparc@c cryosparc2_worker]$ ls -CF
bin/                    cryosparc2_compute/  deps_bundle.hash  version
check_install_deps.sh*  deps_bundle/         install.sh*
 
[cryosparc@c cryosparc2_worker]$ ./install.sh --license "ライセンスコード" --cudapath /usr/local/cuda
(pycudaらのコンパイルが始まる)
 :
******* CRYOSPARC WORKER INSTALLATION COMPLETE *******************
 
 In order to run processing jobs, you will need to connect this
 worker to a cryoSPARC master.
 
******************************************************************
[cryosparc@c cryosparc2_worker]$

qsub連携

cluster_info.jsoncluster_script.shを用意します。
これら2つは、「cryosparcm cluster example」を実行すれば、ジョブ管理システム毎にそのテンプレートを用意してくれます。

[cryosparc@c ~]$ cryosparcm cluster example
Writing example cluster_info.json and cluster_script.sh to current dir
Unknown cluster type. Supported templates are:
  pbs
  slurm
  gridengine
Any cluster scheduler is supported, but you may have to write your own custom submission script.
 
[cryosparc@c ~]$

ここではpbsproを使用するので「pbs」のテンプレートを頂きます。

[cryosparc@c ~]$ cryosparcm cluster example pbs
Writing example cluster_info.json and cluster_script.sh to current dir
 
[cryosparc@c ~]$

テンプレートcluster_info.jsonの中身は
*ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています

[cryosparc@c ~]$ cat cluster_info.json
{
    "name" : "pbscluster",
    "worker_bin_path" : "/path/to/cryosparc2_worker/bin/cryosparcw",
    "cache_path" : "/path/to/local/SSD/on/cluster/nodes"
    "send_cmd_tpl" : "ssh loginnode {{ command } }",
    "qsub_cmd_tpl" : "qsub {{ script_path_abs } }",
    "qstat_cmd_tpl" : "qstat -as {{ cluster_job_id } }",
    "qdel_cmd_tpl" : "qdel {{ cluster_job_id } }",
    "qinfo_cmd_tpl" : "qstat -q",
    "transfer_cmd_tpl" : "scp {{ src_path } } loginnode:{{ dest_path } }"
}
[cryosparc@c ~]$

こんな感じ。もう一つのcluster_script.sh
*ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています

[cryosparc@c ~]$ cat cluster_script.sh
#!/usr/bin/env bash
#### cryoSPARC cluster submission script template for PBS
## Available variables:
## {{ run_cmd } }            - the complete command string to run the job
## {{ num_cpu } }            - the number of CPUs needed
## {{ num_gpu } }            - the number of GPUs needed.
##                            Note: the code will use this many GPUs starting from dev id 0
##                                  the cluster scheduler or this script have the responsibility
##                                  of setting CUDA_VISIBLE_DEVICES so that the job code ends up
##                                  using the correct cluster-allocated GPUs.
## {{ ram_gb } }             - the amount of RAM needed in GB
## {{ job_dir_abs } }        - absolute path to the job directory
## {{ project_dir_abs } }    - absolute path to the project dir
## {{ job_log_path_abs } }   - absolute path to the log file for the job
## {{ worker_bin_path } }    - absolute path to the cryosparc worker command
## {{ run_args } }           - arguments to be passed to cryosparcw run
## {{ project_uid } }        - uid of the project
## {{ job_uid } }            - uid of the job
##
## What follows is a simple PBS script:
 
#PBS -N cryosparc_{{ project_uid } }_{{ job_uid } }
#PBS -l select=1:ncpus={{ num_cpu } }:ngpus={{ num_gpu } }:mem={{ (ram_gb*1000)|int } }mb:gputype=P100
#PBS -o {{ job_dir_abs } }
#PBS -e {{ job_dir_abs } }
 
available_devs=""
for devidx in $(seq 1 16);
do
    if [[ -z $(nvidia-smi -i $devidx --query-compute-apps=pid --format=csv,noheader) ]] ; then
        if [[ -z "$available_devs" ]] ; then
            available_devs=$devidx
        else
            available_devs=$available_devs,$devidx
        fi
    fi
done
export CUDA_VISIBLE_DEVICES=$available_devs
 
{{ run_cmd } }
 
[cryosparc@c ~]$

こんな感じ。これら2つをCluster worker nodesに合うように調整します。
こちらでは下記のような変更を加えた。
*ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています

--- cluster_info.json.orig      2018-08-30 03:07:15.346571799 +0900
+++ cluster_info.json   2018-08-30 03:18:21.475509168 +0900
@@ -1,11 +1,11 @@
 {
-    "name" : "pbscluster",
-    "worker_bin_path" : "/path/to/cryosparc2_worker/bin/cryosparcw",
-    "cache_path" : "/path/to/local/SSD/on/cluster/nodes"
-    "send_cmd_tpl" : "ssh loginnode {{ command } }",
+    "name" : "em",
+    "worker_bin_path" : "/home/cryosparc/software/cryosparc/cryosparc2_worker/bin/cryosparcw",
+    "cache_path" : "/scratch/cryosparc"
+    "send_cmd_tpl" : "{{ command } }",
     "qsub_cmd_tpl" : "qsub {{ script_path_abs } }",
     "qstat_cmd_tpl" : "qstat -as {{ cluster_job_id } }",
     "qdel_cmd_tpl" : "qdel {{ cluster_job_id } }",
     "qinfo_cmd_tpl" : "qstat -q",
-    "transfer_cmd_tpl" : "scp {{ src_path } } loginnode:{{ dest_path } }"
+    "transfer_cmd_tpl" : "cp {{ src_path } } {{ dest_path } }"
 }
--- cluster_script.sh.orig      2018-08-30 03:00:13.833657020 +0900
+++ cluster_script.sh   2018-08-30 03:28:04.600113261 +0900
@@ -20,7 +20,7 @@
 ## What follows is a simple PBS script:
 
 #PBS -N cryosparc_{{ project_uid } }_{{ job_uid } }
-#PBS -l select=1:ncpus={{ num_cpu } }:ngpus={{ num_gpu } }:mem={{ (ram_gb*1000)|int } }mb:gputype=P100
+#PBS -l select=1:ncpus={{ num_cpu } }:ngpus={{ num_gpu } }
 #PBS -o {{ job_dir_abs } }
 #PBS -e {{ job_dir_abs } }

こうしてカスタマイズしたcluster_info.jsoncluster_script.shをシステムに反映させるには、
これらのファイルが置かれた場所で「cryosparcm cluster connect」を実行します

[cryosparc@c ~]$ cryosparcm cluster connect
 :
Successfully added cluster lane em
[cryosparc@c ~]$

これで反映できました。

複数のqueueを作りたい

登録した lean: em の削除は下記にて削除できます。

[cryosparc@c ~]$ cryosparcm cluster remove em
em
Removing cluster em
True
[cryosparc@c ~]$

先般の例では使用するqueueを定義していませんでした。そのためデフォルトのqueueが使われるのですが、
使用するqueueを複数用意して使用したい場合、「cluster_info.json」をその都度修正して読み込ませます。
例えば、queue「gpu1」があってこの「cluster_info.json」を作成して

{
    "name" : "em-gpu1",  <--ここ
    "worker_bin_path" : "/home/cryosparc/software/cryosparc/cryosparc2_worker/bin/cryosparcw",
    "cache_path" : "/scratch/cryosparc",
    "send_cmd_tpl" : "{{ command } }",
    "qsub_cmd_tpl" : "qsub -q gpu1 {{ script_path_abs } }",   <--ここ
    "qstat_cmd_tpl" : "qstat -as {{ cluster_job_id } }",
    "qdel_cmd_tpl" : "qdel {{ cluster_job_id } }",
    "qinfo_cmd_tpl" : "qstat -q",
    "transfer_cmd_tpl" : "cp {{ src_path } } {{ dest_path } }"
}

「cryosparcm cluster connect」コマンドで読み込ませる。
次に、また「cluster_info.json」を修正して、queue「gpu2」向けに修正する。

{
    "name" : "em-gpu2",  <--ここ
    "worker_bin_path" : "/home/cryosparc/software/cryosparc/cryosparc2_worker/bin/cryosparcw",
    "cache_path" : "/scratch/cryosparc",
    "send_cmd_tpl" : "{{ command } }",
    "qsub_cmd_tpl" : "qsub -q gpu2 {{ script_path_abs } }",            <--ここ
    "qstat_cmd_tpl" : "qstat -as {{ cluster_job_id } }",
    "qdel_cmd_tpl" : "qdel {{ cluster_job_id } }",
    "qinfo_cmd_tpl" : "qstat -q",
    "transfer_cmd_tpl" : "cp {{ src_path } } {{ dest_path } }"
}

そして再度「cryosparcm cluster connect」コマンドを実行します。

そうするとwebブラウザでの処理の際、どのqueueを使うかが選べるようになります。
2018y08m30d_034126257.png
(画面は例です)


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2018-08-30 (木) 05:38:14 (51d)