2017-09-26 14 views
0

は私がsbatch job_array_script.sh [args]で実行すること(以下ジョブ配列のスクリプトで、SLURMでのジョブ配列を実行しています:slurmジョブ(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は、配列ジョブとして実行する200のタスクの最大で1000倍にしたいですすべての場合は、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

スラム17.02.7。また、システムによってはどういう意味ですか?私が見たことから、srunはすぐに次のコマンドに過去をスキップしません。通常、srunはかなり長い間待機しています。しかし何かが起こって過去をスキップするようになります。私は何がわかりませんが、私が疑うことは1つありますが、これはすべてのアレイジョブタスクが保留中の場合に発生します。 –

関連する問題