Clusters形式
「Master」のweb画面で発行するジョブを ジョブ管理システム 経由で流せます.
ジョブ管理システム で管理されているリソースから 適切に選ばれた 計算ノードが「Worker」として働きます.
目下使用できる ジョブ管理システム は
となっているみたい. ここでは OpenPBS を採用しています.
slurmの場合cryoSPARC/sbatch
gridengineの場合cryoSPARC/sge
cryoSPARC/Master-Workerと同じように構築してください.
ジョブ管理システム の枠組みで
masterノード は ジョブ発行ノード を担い、
workerノードを 計算ノードを担います.
そのように job管理システム を構築してください.
参照 slurm, OpenPBS
ジョブ管理システム毎の設定シート(cluster_info.jsonとcluster_script.sh)があってそれを現場に合わせて修正して登録します.
まずはそのテンプレートを取得.
[cryosparc@cryosparc ~]$ 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@cryosparc ~]$ここではOpenPBSを使用するので「pbs」のテンプレートを頂きます。
[cryosparc@cryosparc ~]$ cryosparcm cluster example pbs
Writing example cluster_info.json and cluster_script.sh to current dir
[cryosparc@cryosparc ~]$すると、コマンドを実行した場所に設定ファイルのテンプレート「cluster_info.json」と「cluster_script.sh」が置かれます.
テンプレートcluster_info.jsonの中身は下記の通り. ****ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています***
[cryosparc@cryosparc ~]$ cat cluster_info.json
{
"name" : "pbscluster",
"worker_bin_path" : "/path/to/cryosparc_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"
}
[cryosparc@cryosparc ~]$もう一つのcluster_script.shはこんな感じ. ****ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています***
[cryosparc@cryosparc ~]$ 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 has the responsibility
## of setting CUDA_VISIBLE_DEVICES or otherwise enuring that the
## job uses 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
## {{ job_creator } } - name of the user that created the job (may contain spaces)
## {{ cryosparc_username } } - cryosparc username of the user that created the job (usually an email)
##
## 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_log_path_abs } }
#PBS -e {{ job_log_path_abs } }
{{ run_cmd } }
[cryosparc@cryosparc ~]$これら2つを ジョブ管理システム openPBS に適合するように修正します
変更箇所
****ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています***
|
ジョブ監視システムに投入されるスクリプト文です.
openPBSなので「#PBS」とディレクティブが含まれ、要求するリソースが定義されます.
「cluster_script.sh」はテンプレートでジョブの内容でテンプレート内の変数が上書きされジョブが発行される.
変数には
num_cpu: CPUの数
num_gpu: GPUの数
ram_gb: RAMのサイズ
とかがあります.
これらの値はジョブの設定画面で決められるものや、内部で既に決まっている場合もあります.
計算に必要なCPUの数、GPUの数、RAMのサイズが定まれば、ジョブ管理システムを経由して実行すべき計算ノードが定まり、そこにジョブが投入される次第ですね.
テンプレートの「#PBS -l」欄には「gputype=P100」とあります. これはP100を持つ計算ノード限定にジョブを流すことを意図してまして、まぁー不要. なのでここを削ります.
|
****ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています***
こうしてカスタマイズしたcluster_info.jsonとcluster_script.shをシステムに登録させる.
これらのファイルが置かれた場所で「cryosparcm cluster connect」を実行します
[cryosparc@cryosparc ~]$ cryosparcm cluster connect
:
Successfully added cluster lane pbscluster
(確認は下記コマンドで)
[cryosparc@cryosparc ~]$ cryosparcm cli "get_scheduler_lanes()"
(削除はcluster_info.jsonのnameを使います)
[cryosparc@cryosparc ~]$ cryosparcm cluster remove pbscluster
(あるいは)
[cryosparc@cryosparc ~]$ cryosparcm cli "remove_scheduler_lane('pbscluster')"もはやジョブ管理システムではなくなっているような気がしますが、ジョブ管理システムでホスト指定でジョブを流すには
「cluster_script.sh」の「#PBS -l」欄で「host=gpu01」と明記します
|
そして「cluster_info.json」でnameを「cs-gpu01」とかにして登録します。
gpu02なら
|
「cluster_info.json」でnameを「cs-gpu02」として登録とかでしょうか. ****ここのpukiwikiの記述ルールの問題から「}}」を「} }」にしています***
これでホスト指定でジョブ投入が行えます。
これなら「master-worker」方式でもよさげですが...
「[Errno 2] No such file or directory: 'qsub': 'qsub'」と表示されたらそれはmasterでqsubへのPATHが入っていない可能性がある
Clusters形式で自動起動する場合、/etc/profile.d/slurm.sh もしくは /etc/profile.d/pbs.sh を噛んで立ち上がる必要があり.
その際「cryosparc.service」で
ExecStart=/home/cryosparc/cryosparc_master/bin/cryosparcm start
↓
ExecStart=/bin/bash -l /home/cryosparc/cryosparc_master/bin/cryosparcm startとする. そうしないとsbatchやqsubコマンドが見つからずに落ちる
master側には
cryosparcm patchでいいのだが、worker側にはpatchがあたらない. なので
cryosparcm patch --download
あるいは
cryosparcm patch --download --forceにてパッチファイルを取得して、
cd cryosparc_worker/
cp ../cryosparc_master/cryosparc_worker_patch.tar.gz .
bin/cryosparcw patchで行う
「とある系で計算してたらメモリーが足らない」と表示された. でも「設定画面にメモリーの項目がない」とか発生する時があります.
たいていは、cryoSPARCが想定しているメモリー量よりも多くのメモリーが必要なのに、「#PBS -l」に必要量のメモリーが指定されていないために起こる現象ですね.
回避策としては「#PBS -l」にパラメータを設置します. するとcryoSPARC側がそれを察知して「設定画面」にメモリーの係数を項目として表示します. これを調整してジョブを流します.
cluster_script.shの例. ram_gb_multiplier が係数になります.
#!/usr/bin/env bash
#PBS -N cryosparc_{{ project_uid } }_{{ job_uid } }
#PBS -l select=1:ncpus={{ num_cpu } }:ngpus={{ num_gpu } }:mem={{ (ram_gb|float * (ram_gb_multiplier|default(1))|float)|int } }G
#PBS -o {{ job_log_path_abs } }
#PBS -e {{ job_log_path_abs } }
{{ run_cmd } }これで登録すると
cryoSPARCサービスのAdmin->Cluster Configurationが下記のようになります

このままでは「No cluster variables have been set.」なので「1」を入力して「set」を押下します。これで何も変更しなければデフォの値で計算が進みます
--> 
これでジョブを投入する際にLaneから「pbscluster」を選ぶと下記のように「Cluster submittion script variables」が選べて、それを開いて「This job」でこのジョブの実行の際の係数を入れます。2倍で行うなら2と入力します
--> 