2017-09-26 68 views
0

我正在與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「保持」直到整個作業數組完成?

+0

作業數組的每個任務都是獨立的,因此srun不會影響它。一旦完成所有的數組步驟,您就可以使用依賴關係來啓動作業 –

+0

在這種情況下依賴關係是什麼? –

+0

依賴關係將阻止作業開始,直到它所依賴的作業已完成 –

回答

0

您可以使用wait bash命令。它會一直等到上面的任何代碼行完成。因此,您的腳本應如下所示:

#!/bin/bash 

#SBATCH ... other options ... 

#SBATCH --array=0-1000%200 

srun ./job_slurm_script.py $1 $2 $3 $4 

wait 

echo 'open' > status_file.txt 
+0

這看起來不起作用,並且出現與以前相同的問題。 –

+0

你正在運行什麼版本的SLURM以及哪種系統? – rmdcoding

+0

slurm 17.02.7。你也是什麼意思的系統。從我所看到的,srun不會立即*跳過到下一個命令。通常情況下,srun會持有/等待一段時間。但是,有些事情會讓它跳過去。我不確定是什麼,儘管我懷疑有一件事是當所有陣列工作任務都處於等待狀態時會發生這種情況。 –