#author("2020-12-10T18:01:02+00:00","default:sysosa","sysosa") #author("2020-12-10T18:48:56+00:00","default:sysosa","sysosa") cryoSPARCが version3 になった。 メジャーバージョンアップしたらLiveと統合かな?って思ってたけど、違うみたい。 本家様 [[https://cryosparc.com/>+https://cryosparc.com/]] &size(10){過去記事 [[cryoSPARC180829]]}; update [[cryoSPARC/update]] [[cryoSPARC/memo]] [[cryoSPARC/SingleWorkstation]] ***ライセンスコードを取得します。 [#n2d7b763] [[https://cryosparc.com/download/>+https://cryosparc.com/download/]]に必要事項を記載してsubmitします。 直後に「応答メール」が届きますが、これにはライセンスコードは記載されてません。 最大24時間までにはライセンスコードが記載された返信メールが届きます。 これを使ってプログラムの入手、及び実行が可能になるみたい。 ***プログラムの入手 [#edc82aba] 詳しくは[[https://cryosparc.com/docs/reference/install/>+https://cryosparc.com/docs/reference/install/]]に記載されている。 下記2つのファイルを取得します。 -cryosparc2_master.tar.gz -cryosparc2_worker.tar.gz どちらもライセンスコードを渡さないと得られない仕組みっぽい #code(nonumber){{ [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 }} ***運用形体 [#wd366dac] 従来のようなスタンドアローンでの運用も可能なのですが、あたらに queuing機構(SLURM/PBS/Torque) も利用可能のようで ここでは&color(blueviolet){''master''}; − &color(crimson){Cluster worker nodes};形式で作っていきます。&color(lightseagreen){''CentOS 7.5''};で構築します。 &size(10){クラスターマシンで言うところのログインノードを&color(blueviolet){''master''};と見立てれば宜しいかと}; 一台の計算機に&color(blueviolet){''master''};と&color(crimson){worker};を持たせる場合は、こちらを参照「[[cryoSPARC/SingleWorkstation]]」 ***&color(blueviolet){''master''};構築 [#hcfc3475] 共通アカウント&color(orangered){cryosparc};で&color(blueviolet){''master''};ノードを構築していきます。 #code(nonumber){{ [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」が追加された。 ***&color(blueviolet){''master''};起動 [#r6364816] 「~/.bashrc」を読み込んで下記コマンドで起動させる。 #code(nonumber){{ [cryosparc@c ~]$ cryosparcm start }} psコマンドで何が動いているかを確認すると #code(nonumber){{ 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_(略 }} こんな感じだった。 ***&color(crimson){Cluster worker nodes};構築 [#qcbbb863] 次に、&color(crimson){Cluster worker nodes};の構築であるが、 ここでは /home は&color(blueviolet){''master''};と&color(crimson){Cluster worker nodes};で共有されている。 #code(nonumber){{ [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連携 [#e2cffdba] &color(darkorange){cluster_info.json};と&color(darkorchid){cluster_script.sh};を用意します。 これら2つは、「cryosparcm cluster example」を実行すれば、ジョブ管理システム毎にそのテンプレートを用意してくれます。 #code(nonumber){{ [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」のテンプレートを頂きます。 #code(nonumber){{ [cryosparc@c ~]$ cryosparcm cluster example pbs Writing example cluster_info.json and cluster_script.sh to current dir [cryosparc@c ~]$ }} テンプレート&color(darkorange){cluster_info.json};の中身は &color(red){*};&size(10){ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています}; #code(nonumber){{ [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 ~]$ }} こんな感じ。もう一つの&color(darkorchid){cluster_script.sh};は &color(red){*};&size(10){ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています}; #code(nonumber){{ [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つを&color(crimson){Cluster worker nodes};に合うように調整します。 こちらでは下記のような変更を加えた。 &color(red){*};&size(10){ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています}; #code(diff,nonumber){{ --- 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 } }" } }} #code(diff,nonumber){{ --- 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 } } }} こうしてカスタマイズした&color(darkorange){cluster_info.json};と&color(darkorchid){cluster_script.sh};をシステムに反映させるには、 これらのファイルが置かれた場所で「cryosparcm cluster connect」を実行します #code(nonumber){{ [cryosparc@c ~]$ cryosparcm cluster connect : Successfully added cluster lane em [cryosparc@c ~]$ }} これで反映できました。 ***複数のqueueを作りたい [#o64a290a] 登録した lean: em の削除は下記にて削除できます。 #code(nonumber){{ [cryosparc@c ~]$ cryosparcm cluster remove em em Removing cluster em True [cryosparc@c ~]$ }} 先般の例では使用するqueueを定義していませんでした。そのためデフォルトのqueueが使われるのですが、 使用するqueueを複数用意して使用したい場合、「cluster_info.json」をその都度修正して読み込ませます。 例えば、queue「gpu1」があってこの「cluster_info.json」を作成して #code(nonumber){{ { "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」向けに修正する。 #code(nonumber){{ { "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を使うかが選べるようになります。 &ref(2018y08m30d_034126257.png,nolink); &size(10){(画面は例です)}; ***createuser [#gf137c02] cryosparcm createuser --email hoge@chaperone.jp --password ageha --name uuu ***再起動時の自動起動 [#w9335327] 参照先: [[https://discuss.cryosparc.com/t/adding-cryosparc-to-systemd/1436>+https://discuss.cryosparc.com/t/adding-cryosparc-to-systemd/1436]] 「cryosparc2_master」パッケージ内の「cryosparc2_master/deps/anaconda/etc/systemd/system/supervisord.service」 単純にsystemcdにUnit 定義ファイルを加えてみた 場所は「/etc/systemd/system/」でファイル名は「cryosparc.service」 &color(red){*};&size(10){システム由来のunitファイル置き場「/usr/lib/systemd/system/」ではなく、管理者が面倒見る場所に配置します}; 「cryosparc.service」ファイルの中身は下記のようにします #code(nonumber){{ [Unit] Description=Cryosparc After=network.target [Service] Type=forking User=cryosparc Group=em ExecStart=/home/cryosparc/software/cryosparc/cryosparc2_master/bin/cryosparcm start ExecStop=/home/cryosparc/software/cryosparc/cryosparc2_master/bin/cryosparcm stop Restart=on-abort [Install] WantedBy=multi-user.target }} 「User」と「Group」は環境に応じて変更して下さい 「Restart=on-abort」がいいのか微妙. ふとすると勝手に停止しているときがあるので「Restart=always」と付けたいが、、 その後 #code(nonumber){{ [root@c ~]# systemctl daemon-reload [root@c ~]# systemctl start cryosparc.service [root@c ~]# systemctl status cryosparc.service ● cryosparc.service - Cryosparc Loaded: loaded (/etc/systemd/system/cryosparc.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2020-10-25 00:16:02 JST; 17s ago Process: 186928 ExecStart=/home/cryosparc/software/cryosparc/cryosparc2_master/bin/cryosparcm start (略 Main PID: 186953 (supervisord) CGroup: /system.slice/cryosparc.service tq186953 /home/cryosparc/software/cryosparc/cryosparc2_master/deps/anaconda/bin/python /hom(略 tq186955 mongod --dbpath /home/cryosparc/cryosparc_database --port 39001 --oplogSize 64 --r(略 tq187033 python -c import cryosparc2_command.command_core as serv; serv.start(port=39002) tq187056 python -c import cryosparc2_command.command_vis as serv; serv.start(port=39003) tq187061 python -c import cryosparc2_command.command_proxy as serv; serv.start(port=39004) mq187089 /home/cryosparc/software/cryosparc/cryosparc2_master/cryosparc2_webapp/nodejs/bin/(略 Oct 25 00:16:01 c.sybyl.local cryosparcm[186928]: command_proxy: started Oct 25 00:16:02 c.sybyl.local cryosparcm[186928]: webapp: started Oct 25 00:16:02 c.sybyl.local cryosparcm[186928]: ----------------------------------------------------(略 Oct 25 00:16:02 c.sybyl.local cryosparcm[186928]: CryoSPARC master started. Oct 25 00:16:02 c.sybyl.local cryosparcm[186928]: From this machine, access cryoSPARC at Oct 25 00:16:02 c.sybyl.local cryosparcm[186928]: http://localhost:39000 Oct 25 00:16:02 c.sybyl.local cryosparcm[186928]: From other machines on the network, access cryoSPARC (略 Oct 25 00:16:02 c.sybyl.local cryosparcm[186928]: http://c.sybyl.local:39000 Oct 25 00:16:02 c.sybyl.local cryosparcm[186928]: Startup can take several minutes. Point your browser (略 Oct 25 00:16:02 c.sybyl.local systemd[1]: Started Cryosparc. [root@c ~]# }} と一応の起動確認をしてから、再起動時にも起動できるように #code(nonumber){{ [root@c ~]# systemctl enable cryosparc.service Created symlink from /etc/systemd/system/multi-user.target.wants/cryosparc.service to /etc/systemd/system/cryosparc.service. [root@c ~]# }} として置く。