我正在與SLURM的作業陣列,具有以下作業陣列的腳本(即我sbatch job_array_script.sh [args]
運行:如何在劇本作業(從srun開始)完成之前保留劇本?
#!/bin/bash
#SBATCH ... other options ...
#SBATCH --array=0-1000%200
srun ./job_slurm_script.py $1 $2 $3 $4
echo 'open' > status_file.txt
要解釋,我想job_slurm_script.py
要運行作爲陣列作業1000次200個任務最大並且當所有的都完成了,我想寫status_file.txt
的'open',這是因爲實際上我有超過10,000個作業,並且這是在我的集羣的MaxSubmissionLimit之上,所以我需要將它分成更小的塊(在1000個元素的作業陣列中)並依次運行它們(只有當前一個完成時纔會運行)。
然而,爲了這個工作,echo語句只能在整個作業數組完成時觸發(除此之外,我有一個循環檢查status_file.txt
,看看作業是否完成,即當內容是字符串'打開')。
到目前爲止,我認爲srun
持有腳本直到整個作業數組完成。但是,有時srun
「返回」,腳本在作業完成之前進入echo語句,因此所有後續作業都會反彈離開集羣,因爲它超出了提交限制。
那麼如何讓srun
「保持」直到整個作業數組完成?
作業數組的每個任務都是獨立的,因此srun不會影響它。一旦完成所有的數組步驟,您就可以使用依賴關係來啓動作業 –
在這種情況下依賴關係是什麼? –
依賴關係將阻止作業開始,直到它所依賴的作業已完成 –