私はslurmで10,000ジョブを実行する必要があります(それぞれ30分かかると言います)。現在、計画はそうのように、並列に250個のコアを使用して、ジョブ配列でそれを行うことでした。(デフォルト1001から)pythonを使ってslurmに対話する(ジョブを自動的に連鎖させる)
sbatch --array=0-10000%250 array_script.sh args
残念ながら、sysの管理者が変更されていないSLURMのMaxArraySize。これを "回避する"ために、私は全体の仕事を10個にスライスし、前の作品が終わった後に実行するように各作品をスケジューリングすることを計画していました。例えば、私が開始する:
sbatch --array=0-999%250 array_script.sh args
ことが行われているときに、私はどうなる:
sbatch --array=1000-1999%250 array_script.sh args
今、私は何とかこれをスケジュールする必要があります。私はbashに慣れていないので、私はすべての周りにPythonラッパーを持っていたので、私はPythonでそれをやると思っていました(とにかく、私は仕事用配列の周りにPythonラッパーを使用しています。だから私はこれをどのように普通にやるのだろうか?
は現在、私はしている:
for i in range(num_slices):
command = 'sbatch --array={lower_end}-{upper_end}%250 array_script.sh args'.format(lower_end=i*1000, upper_end=min((i+1)*1000-1, num_targets-1), args=args)
subprocess.run(command, shell=True)
<< need to have a step that waits till the job is done >>
まず、上記では、私は現在、JOB_ID
を知らないことを意味する、subprocess.run
でsbatch
を実行します。 subprocess.run
などの出力をキャッチしてJOB_ID
を見つけることができる方法はありますか?そして、ジョブがまだ実行中であり、ループを続行するかどうかを確認するには、squeue
と同等の処理を行うにはどうすればよいですか?
この場合、最大の提出制限は、依存しているジョブであっても、さまざまなジョブにわたってカウントされるようです。だから私はスケジューラが必要な場合は、私の総ジョブサイズが制限を超えて拒否されるような追加のジョブが必要です。 –