[英]Get SLURM job ID from job started by strigger
我有一個由三個部分( partA
, partB
和partC
)組成的R分析。 我將每個部分提交給SLURM(例如sbatch partA
),並且每個部分都通過#SBATCH --array=1-1500
並行#SBATCH --array=1-1500
。 這些零件是串行的,因此我需要等待一個零件完成才能開始下一個零件。 現在,我正在手動開始每項工作,但這不是一個很好的解決方案。
我想自動執行三個sbatch調用。 例如:
sbatch partA
partA
完成后, sbatch partB
partB
完成后,對sbatch partC
我使用此解決方案獲取partA
的作業ID,並將其傳遞給strigger
以完成上述步驟2。 但是我被困在這一點上,因為我不知道如何從strigger
獲取partB
的工作ID 。 這是我的代碼:
#!/bin/bash
# step 1: sbatch partA
partA_ID=$(sbatch --parsable partA.sh)
# step 2: sbatch partB
strigger --set --jobid=$partA_ID --fini --program=/path/to/partB.batch
# step 3: sbatch partC
... ?
如何完成步驟3?
strigger
不是實現該目標的合適工具,它比常規用戶更適合管理員。 只有slurm user
可以實際設置觸發器(請參見strigger聯機幫助頁中的“重要說明”)。
對於您的情況,您應該一次提交所有三個作業,並在它們之間設置依賴性。
例如:
$ partA_ID=$(sbatch --parsable partA.sh)
$ partB_ID=$(sbatch --parsable --dependency=afterany:${partA_ID} partB.sh)
$ partC_ID=$(sbatch --parsable --dependency=afterany:${partB_ID} partC.sh)
這將提交三個作業數組,但是第二個作業數組僅在第一個作業中的所有作業都已完成時才開始。 並且只有在第二個作業完成后,第三個作業才會開始。
可以選擇
$ partA_ID=$(sbatch --parsable partA.sh)
$ partB_ID=$(sbatch --parsable --dependency=aftercorr:${partA_ID} partB.sh)
$ partC_ID=$(sbatch --parsable --dependency=aftercorr:${partB_ID} partC.sh)
這將提交三個作業數組,但是第二個作業數組的所有作業將在第一個作業中的相應作業(即具有相同$SLURM_ARRAY_TASK_ID
)完成之前開始。 並且只有在第二個作業中的相應作業完成后,第三個作業中的所有作業才會開始。
有關詳細信息,請參閱--dependency
在部分sbatch手冊頁 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.