とある大学のスパコンでcryoSPARCを流すことになった.
そこはジョブコントローラーにGridEngineを採用していた.
まぁーそれはいい. 問題は master を常駐状態でどのように稼働させるかであった.
試しにログインノードでmasterを動かしたら、プロセス数の上限に引っかかり起動しなかった.
まぁー当然の措置ですな. なのでジョブとしてmasterを動かすことに.
幸いなことに、恐らくphenix・ccp4を念頭なのかインターラクティヴモードが結構安く利用できるみたい
iqrsh -l h_rt=24:00:00
と最大24時間利用できるのでその最大数でインターラクティヴモードを開催する
次にcryoSPARCをインターラクティヴモードで動かすわけだが、「iqrsh」の毎に割り当てられるホストが異なる.
「cryosparc_master/config.sh」にはホスト情報が明記されている. なのでホスト情報を割り当てられたマシンに修正してcryosparcを立ち上げる
:
export CRYOSPARC_MASTER_HOSTNAME=r4n11
:
問題がなければこれでcryoSPARCサービスは立ち上がるのだが、web接続ははてどうするか?
ssh tunnelingでカバーする必要がある.
既にcryoSPARCサービスが動いているマシンは知っているので、そこに向けてトンネルを作る.
この場合はログインノードを中継に使う
なので
ssh -L 39000:r4n11:39000 YYYY@login2.t4.gsic.XXXXX.ac.jp
とmacOSのターミナルで作るか、簡単にmobaXtermで用意する.
そうすれば、「localhost:39000」で立ち上げたcryoSPARCにアクセスできる.
次にジョブの投入
こちらはcluster運用なので「cluster_info.json」と「cluster_script.sh」をGridEngine向けに用意して読ませればOK
具体的には
「cluster_info.json」
{
"name" : "gpu_1",
"worker_bin_path" : "/gs/fs/tga-XXXXXXXX/cryoSPARC/cryosparc_worker/bin/cryosparcw",
"cache_path" : "/local/${JOB_ID}",
"send_cmd_tpl" : "{{ command } }",
"qsub_cmd_tpl" : "qsub -g tga-XXXXXXXX {{ script_path_abs } } ",
"qstat_cmd_tpl" : "qstat -j {{ cluster_job_id } } ",
"qdel_cmd_tpl" : "qdel {{ cluster_job_id } }"
}
Pukiwikiの書式により「}」の連続表記にスペースを噛ましてます
また「cluster_script.sh」は
#!/usr/bin/env bash
#$ -cwd
#$ -l gpu_1=1
#$ -l h_rt=24:00:00
#$ -N cs_{{ project_uid } }_{{ job_uid } }
#$ -o {{ job_dir_abs } }/slurm.out
#$ -e {{ job_dir_abs } }/slurm.err
{{ run_cmd } }
な感じで. nameは使用可能な資源名でいいのかなと.
ただ、そのままではGridEngineから出される「job ID」が上手くパースしてくれなくてエラーがでます
なので、ソースコードを一部修正する必要がありました
vi ./cryosparc_master/cryosparc_compute/cluster.py
145行目
return message.strip().split()[-1]
↓
return message.strip().split()[2]
こんな感じで. Slurm/OpenPBSはジョブ発行時の文言の末尾に「job ID」が提示されるのですが、ここのGridEngineはそうではないみたい.
なので修正が必要となりました.
cryoSPARCサービスは最大でも24時間まで動かせれる. それ以上動かすと強制停止になる. そうなるとかなり面倒. まずdetabaseが正常終了しないので怪しい. /tmp/cryosparc-*と/tmp/mongo*が残る.
怖いことに インターラクティヴモード に入っているターミナルで「Ctrl-C」でも強制終了となる. 扱いに注意が必要かな.
もしmasterを止めてしまったら、即座にインターラクティヴモードを再開させて復旧を図る. 発行されている計算jobはmasterと常に通信してます. masterが不在になるとjobも落ちます.
運が良ければ継続可能かなと思いますが、インターラクティヴモードを再開したら別のノードに移ってしまった... アウトかな. はじめら計算を再開になりそうです.