cryoSPARC/sbatch をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
slurmでcryoSPARCを運用する場合.
&color(darkorange){cluster_info.json};と&color(darkorchid...
#code(nonumber){{
cryosparcm cluster example slurm
}}
cryoSPARC v5.0.4の場合ね
***&color(darkorange){cluster_info.json}; [#lae79ece]
中身はこんな感じ
#code(nonumber){{
{
"send_cmd_tpl": "ssh loginnode {{ command } }",
"qsub_cmd_tpl": "sbatch {{ script_path_abs } }",
"qstat_cmd_tpl": "squeue -j {{ cluster_job_id } }",
"qdel_cmd_tpl": "scancel {{ cluster_job_id } }",
"qinfo_cmd_tpl": "sinfo",
"cache_path": "/path/to/local/SSD/on/cluster/nodes",
"cache_reserve_mb": null,
"cache_quota_mb": null,
"name": "slurmcluster",
"title": "",
"worker_bin_path": "/path/to/cryosparc_worker/bin/cry...
}
}}
&size(10){&color(red){***Pukiwikiの表記のため一部表記を変...
以前のバージョンで合った「qstat_code_cmd_tpl」が無くなっ...
代わりに「cache_reserve_mb」と「cache_quota_mb」が追加さ...
cache_reserve_mb:「cache_path」で指定されたストレージを...
cache_quota_mb:cacheをどれくらい使うか。4TBのSSDで2TBま...
中身はそれぞれの環境に合わせて調整しますが、調整例としては
#code(nonumber){{
{
"send_cmd_tpl": "{{ command } }",
"qsub_cmd_tpl": "sbatch {{ script_path_abs } }",
"qstat_cmd_tpl": "squeue -j {{ cluster_job_id } }",
"qdel_cmd_tpl": "scancel {{ cluster_job_id } }",
"qinfo_cmd_tpl": "sinfo",
"cache_path": "/scratch/cs",
"cache_reserve_mb": null,
"cache_quota_mb": null,
"name": "slurmcluster",
"title": "",
"worker_bin_path": "/home/cryosparc/cryosparc_worker/...
}
}}
titleはcryoSPARCのweb画面出てくる名称ですな。付けても付け...
***&color(darkorchid){cluster_script.sh}; [#uc13e0c9]
中身はこんな感じ
#code(nonumber){{
#!/usr/bin/env bash
#### CryoSPARC cluster submission script template for SLURM
## Available variables:
## {{ run_cmd } } - the complete command strin...
## {{ num_cpu } } - the number of CPUs needed
## {{ num_gpu } } - the number of GPUs needed.
## Note: The code will use thi...
## The cluster scheduler...
## of setting CUDA_VISIB...
## job uses the correct ...
## {{ ram_gb } } - the amount of RAM needed i...
## {{ job_dir_abs } } - absolute path to the job d...
## {{ project_dir_abs } } - absolute path to the proje...
## {{ job_log_path_abs } } - absolute path to the log f...
## {{ worker_bin_path } } - absolute path to the cryos...
## {{ run_args } } - arguments to be passed to ...
## {{ project_uid } } - uid of the project
## {{ job_uid } } - uid of the job
## {{ job_creator } } - name of the user that crea...
## {{ cryosparc_username } } - cryosparc username of the ...
##
## A simple SLURM submission script:
#SBATCH --chdir={{ job_dir_abs } }
#SBATCH --export=NONE
#SBATCH --job-name cryosparc_{{ project_uid } }_{{ job_ui...
#SBATCH --cpus-per-task={{ num_cpu } }
#SBATCH --gres=gpu:{{ num_gpu } }
#SBATCH --mem={{ ram_gb } }G
#SBATCH --comment="created by {{ cryosparc_username } }"
{{ run_cmd } }
}}
&size(10){&color(red){***Pukiwikiの表記のため一部表記を変...
主に変更する箇所としては、「--mem」の部分。cryoSPARCがジ...
なので
「#SBATCH --mem={{ (ram_gb|float * (&color(orange){''ram_...
と変数&color(orange){''ram_gb_multiplier''};を付けます。
この値はcryoSPARCのweb画面で規定値を1、そして実行時には...
不要な部分を削って、下記のような&color(darkorchid){cluste...
#code(nonumber){{
#!/usr/bin/env bash
#SBATCH --job-name cs{{ project_uid } }{{ job_uid } }
#SBATCH --nodes=1 # -...
#SBATCH --ntasks=1 # -...
#SBATCH --cpus-per-task={{ num_cpu } } # -...
#SBATCH --gres=gpu:{{ num_gpu } }
#SBATCH --partition=workq
#SBATCH --mem={{ (ram_gb|float * (ram_gb_multiplier|defau...
#SBATCH --output={{ job_log_path_abs } }
#SBATCH --error={{ job_log_path_abs } }
#SBATCH --comment="created by {{ cryosparc_username } }" ...
{{ run_cmd } }
}}
って感じで
slurmでAccount機能が有効ならジョブの名称(Patch Motion Cor...
ジョブ管理システムでは何か変ですが、特定のノードで計算さ...
#code(nonumber){{
#SBATCH --nodelist=gpu01
}}
を加える
***登録 [#r78ad386]
作った&color(darkorange){cluster_info.json};と&color(dark...
#code(nonumber){{
cryosparcm cluster connect
}}
で登録される。
目下登録済みは
#code(nonumber){{
cryosparcm cli "get_scheduler_lanes()"
(v5)
cryosparcm cli "api.resources.find_lanes()"
}}
で確認出来て、削除するには
#code(nonumber){{
cryosparcm cli "remove_scheduler_lane('pbscluster')"
(v5)
cryosparcm cli "api.resources.remove_cluster('pbscluster')"
}}
で行う
***ログインユーザ毎でslurmのリソース制限を課すには [#l730...
cryoSPARCは1つのunixアカウントでweb、データベース、そし...
そのためcryoSAPRC内に登録された(メールアドレスでログイン...
例えは userA さんは同時に3つのジョブを流してもいい。user...
これは slurm の「#SBATCH --account=userA」という感じでジ...
なのでcryoSPARCにユーザ登録をする際にメールアドレスの他に...
#code(nonumber){{
(v4)
cryosparcm createuser --email saber@fgo.jp --password sab...
(v5)
cryosparcm user create --email saber@fgo.jp --password sa...
[更新]
cryosparcm user update --email saber@fgo.jp --password sa...
}}
更新時は email と password が一致すれば、更新されます。
っで、肝心の &color(darkorchid){cluster_script.sh}; は下...
#code(nonumber){{
#!/usr/bin/env bash
#SBATCH --job-name cs{{ project_uid } }{{ job_uid } }
#SBATCH --nodes=1 # -...
#SBATCH --ntasks=1 # -...
#SBATCH --cpus-per-task={{ num_cpu } } # -...
#SBATCH --gres=gpu:{{ num_gpu } }
#SBATCH --partition=workq
#SBATCH --mem={{ (ram_gb|float * (ram_gb_multiplier|defau...
#SBATCH --output={{ job_log_path_abs } }
#SBATCH --error={{ job_log_path_abs } }
#SBATCH --comment="created by {{ cryosparc_username } }" ...
#SBATCH --account=sc-{{ cryosparc_username } }
{{ run_cmd } }
}}
末尾に「#SBATCH --account={{ &color(magenta){cryosparc_us...
次に、slurm側ですが、[[https://web.chaperone.jp/w/?slurm/...
っでAccount名が、&color(magenta){cryosparc_username};と同...
cryoSPARCはunixアカウント cryosparc で動ているとして、そ...
#code(nonumber){{
sacctmgr -i add account cs-saber # slur...
sacctmgr -i add user saber Account=cs-saber # ac-s...
sacctmgr -i modify account cs-saber \
set MaxJobs=3 \
GrpTRES=gres/gpu=3 \
MaxTRESPerJob=gres/gpu=3
sacctmgr -i add user cryosparc Account=cs-saber # unix...
}}
確認は「sacctmgr show association format=Cluster,Account,...
#code(nonumber){{
[root@slurm ~]# sacctmgr show association format=Cluster,...
Cluster Account User MaxJobs GrpTRES ...
---------- ---------- ---------- ------- ------------- --...
cluster root ...
cluster root root ...
cluster cs-saber 3 gres/gpu=3 ...
cluster cs-saber cryosparc 3 ...
cluster cs-saber saber 3 ...
[root@slurm ~]#
}}
あとはcryoSPARCのログインユーザ分、sc-saber のようなのを...
これで必要以上のリソースを要求した場合はエラーにならずにp...
そのためにはluaスクリプトで回避させる
#code(lua,nonumber){{
function slurm_job_submit(job_desc, part_list, submit_uid)
local gres = job_desc.tres_per_node or ""
-- gpu数を取得
local gpu = string.match(gres, "gpu:(%d+)")
if gpu ~= nil then
gpu = tonumber(gpu)
-- accountごとの制限
if job_desc.account == "cs-saber" and gpu > 3 then
slurm.log_user("Error: GPUは最大3枚までです (...
return slurm.ERROR
end
end
return slurm.SUCCESS
end
function slurm_job_modify(job_desc, job_rec, part_list, m...
return slurm.SUCCESS
end
}}
このスクリプトを「/opt/slurm/etc/job_submit.lua」に置いた...
#code(nonumber){{
JobSubmitPlugins=lua
}}
ただ、このluaを使えるようにコンパイルしている必要がある。
っで実際に本来は無理な4枚GPUのジョブを走らせると
#code(nonumber){{
sbatch: error: Error: GPUは最大3枚までです (account=cs-sa...
sbatch: error: Batch job submission failed: Unspecified e...
}}
と表示されて終わる。squeueにも残らない。
終了行:
slurmでcryoSPARCを運用する場合.
&color(darkorange){cluster_info.json};と&color(darkorchid...
#code(nonumber){{
cryosparcm cluster example slurm
}}
cryoSPARC v5.0.4の場合ね
***&color(darkorange){cluster_info.json}; [#lae79ece]
中身はこんな感じ
#code(nonumber){{
{
"send_cmd_tpl": "ssh loginnode {{ command } }",
"qsub_cmd_tpl": "sbatch {{ script_path_abs } }",
"qstat_cmd_tpl": "squeue -j {{ cluster_job_id } }",
"qdel_cmd_tpl": "scancel {{ cluster_job_id } }",
"qinfo_cmd_tpl": "sinfo",
"cache_path": "/path/to/local/SSD/on/cluster/nodes",
"cache_reserve_mb": null,
"cache_quota_mb": null,
"name": "slurmcluster",
"title": "",
"worker_bin_path": "/path/to/cryosparc_worker/bin/cry...
}
}}
&size(10){&color(red){***Pukiwikiの表記のため一部表記を変...
以前のバージョンで合った「qstat_code_cmd_tpl」が無くなっ...
代わりに「cache_reserve_mb」と「cache_quota_mb」が追加さ...
cache_reserve_mb:「cache_path」で指定されたストレージを...
cache_quota_mb:cacheをどれくらい使うか。4TBのSSDで2TBま...
中身はそれぞれの環境に合わせて調整しますが、調整例としては
#code(nonumber){{
{
"send_cmd_tpl": "{{ command } }",
"qsub_cmd_tpl": "sbatch {{ script_path_abs } }",
"qstat_cmd_tpl": "squeue -j {{ cluster_job_id } }",
"qdel_cmd_tpl": "scancel {{ cluster_job_id } }",
"qinfo_cmd_tpl": "sinfo",
"cache_path": "/scratch/cs",
"cache_reserve_mb": null,
"cache_quota_mb": null,
"name": "slurmcluster",
"title": "",
"worker_bin_path": "/home/cryosparc/cryosparc_worker/...
}
}}
titleはcryoSPARCのweb画面出てくる名称ですな。付けても付け...
***&color(darkorchid){cluster_script.sh}; [#uc13e0c9]
中身はこんな感じ
#code(nonumber){{
#!/usr/bin/env bash
#### CryoSPARC cluster submission script template for SLURM
## Available variables:
## {{ run_cmd } } - the complete command strin...
## {{ num_cpu } } - the number of CPUs needed
## {{ num_gpu } } - the number of GPUs needed.
## Note: The code will use thi...
## The cluster scheduler...
## of setting CUDA_VISIB...
## job uses the correct ...
## {{ ram_gb } } - the amount of RAM needed i...
## {{ job_dir_abs } } - absolute path to the job d...
## {{ project_dir_abs } } - absolute path to the proje...
## {{ job_log_path_abs } } - absolute path to the log f...
## {{ worker_bin_path } } - absolute path to the cryos...
## {{ run_args } } - arguments to be passed to ...
## {{ project_uid } } - uid of the project
## {{ job_uid } } - uid of the job
## {{ job_creator } } - name of the user that crea...
## {{ cryosparc_username } } - cryosparc username of the ...
##
## A simple SLURM submission script:
#SBATCH --chdir={{ job_dir_abs } }
#SBATCH --export=NONE
#SBATCH --job-name cryosparc_{{ project_uid } }_{{ job_ui...
#SBATCH --cpus-per-task={{ num_cpu } }
#SBATCH --gres=gpu:{{ num_gpu } }
#SBATCH --mem={{ ram_gb } }G
#SBATCH --comment="created by {{ cryosparc_username } }"
{{ run_cmd } }
}}
&size(10){&color(red){***Pukiwikiの表記のため一部表記を変...
主に変更する箇所としては、「--mem」の部分。cryoSPARCがジ...
なので
「#SBATCH --mem={{ (ram_gb|float * (&color(orange){''ram_...
と変数&color(orange){''ram_gb_multiplier''};を付けます。
この値はcryoSPARCのweb画面で規定値を1、そして実行時には...
不要な部分を削って、下記のような&color(darkorchid){cluste...
#code(nonumber){{
#!/usr/bin/env bash
#SBATCH --job-name cs{{ project_uid } }{{ job_uid } }
#SBATCH --nodes=1 # -...
#SBATCH --ntasks=1 # -...
#SBATCH --cpus-per-task={{ num_cpu } } # -...
#SBATCH --gres=gpu:{{ num_gpu } }
#SBATCH --partition=workq
#SBATCH --mem={{ (ram_gb|float * (ram_gb_multiplier|defau...
#SBATCH --output={{ job_log_path_abs } }
#SBATCH --error={{ job_log_path_abs } }
#SBATCH --comment="created by {{ cryosparc_username } }" ...
{{ run_cmd } }
}}
って感じで
slurmでAccount機能が有効ならジョブの名称(Patch Motion Cor...
ジョブ管理システムでは何か変ですが、特定のノードで計算さ...
#code(nonumber){{
#SBATCH --nodelist=gpu01
}}
を加える
***登録 [#r78ad386]
作った&color(darkorange){cluster_info.json};と&color(dark...
#code(nonumber){{
cryosparcm cluster connect
}}
で登録される。
目下登録済みは
#code(nonumber){{
cryosparcm cli "get_scheduler_lanes()"
(v5)
cryosparcm cli "api.resources.find_lanes()"
}}
で確認出来て、削除するには
#code(nonumber){{
cryosparcm cli "remove_scheduler_lane('pbscluster')"
(v5)
cryosparcm cli "api.resources.remove_cluster('pbscluster')"
}}
で行う
***ログインユーザ毎でslurmのリソース制限を課すには [#l730...
cryoSPARCは1つのunixアカウントでweb、データベース、そし...
そのためcryoSAPRC内に登録された(メールアドレスでログイン...
例えは userA さんは同時に3つのジョブを流してもいい。user...
これは slurm の「#SBATCH --account=userA」という感じでジ...
なのでcryoSPARCにユーザ登録をする際にメールアドレスの他に...
#code(nonumber){{
(v4)
cryosparcm createuser --email saber@fgo.jp --password sab...
(v5)
cryosparcm user create --email saber@fgo.jp --password sa...
[更新]
cryosparcm user update --email saber@fgo.jp --password sa...
}}
更新時は email と password が一致すれば、更新されます。
っで、肝心の &color(darkorchid){cluster_script.sh}; は下...
#code(nonumber){{
#!/usr/bin/env bash
#SBATCH --job-name cs{{ project_uid } }{{ job_uid } }
#SBATCH --nodes=1 # -...
#SBATCH --ntasks=1 # -...
#SBATCH --cpus-per-task={{ num_cpu } } # -...
#SBATCH --gres=gpu:{{ num_gpu } }
#SBATCH --partition=workq
#SBATCH --mem={{ (ram_gb|float * (ram_gb_multiplier|defau...
#SBATCH --output={{ job_log_path_abs } }
#SBATCH --error={{ job_log_path_abs } }
#SBATCH --comment="created by {{ cryosparc_username } }" ...
#SBATCH --account=sc-{{ cryosparc_username } }
{{ run_cmd } }
}}
末尾に「#SBATCH --account={{ &color(magenta){cryosparc_us...
次に、slurm側ですが、[[https://web.chaperone.jp/w/?slurm/...
っでAccount名が、&color(magenta){cryosparc_username};と同...
cryoSPARCはunixアカウント cryosparc で動ているとして、そ...
#code(nonumber){{
sacctmgr -i add account cs-saber # slur...
sacctmgr -i add user saber Account=cs-saber # ac-s...
sacctmgr -i modify account cs-saber \
set MaxJobs=3 \
GrpTRES=gres/gpu=3 \
MaxTRESPerJob=gres/gpu=3
sacctmgr -i add user cryosparc Account=cs-saber # unix...
}}
確認は「sacctmgr show association format=Cluster,Account,...
#code(nonumber){{
[root@slurm ~]# sacctmgr show association format=Cluster,...
Cluster Account User MaxJobs GrpTRES ...
---------- ---------- ---------- ------- ------------- --...
cluster root ...
cluster root root ...
cluster cs-saber 3 gres/gpu=3 ...
cluster cs-saber cryosparc 3 ...
cluster cs-saber saber 3 ...
[root@slurm ~]#
}}
あとはcryoSPARCのログインユーザ分、sc-saber のようなのを...
これで必要以上のリソースを要求した場合はエラーにならずにp...
そのためにはluaスクリプトで回避させる
#code(lua,nonumber){{
function slurm_job_submit(job_desc, part_list, submit_uid)
local gres = job_desc.tres_per_node or ""
-- gpu数を取得
local gpu = string.match(gres, "gpu:(%d+)")
if gpu ~= nil then
gpu = tonumber(gpu)
-- accountごとの制限
if job_desc.account == "cs-saber" and gpu > 3 then
slurm.log_user("Error: GPUは最大3枚までです (...
return slurm.ERROR
end
end
return slurm.SUCCESS
end
function slurm_job_modify(job_desc, job_rec, part_list, m...
return slurm.SUCCESS
end
}}
このスクリプトを「/opt/slurm/etc/job_submit.lua」に置いた...
#code(nonumber){{
JobSubmitPlugins=lua
}}
ただ、このluaを使えるようにコンパイルしている必要がある。
っで実際に本来は無理な4枚GPUのジョブを走らせると
#code(nonumber){{
sbatch: error: Error: GPUは最大3枚までです (account=cs-sa...
sbatch: error: Batch job submission failed: Unspecified e...
}}
と表示されて終わる。squeueにも残らない。
ページ名:
1