我需要在slurm上运行10000个作业(假设每个作业需要30分钟)。目前,计划是用一个作业阵列,并行使用250个核心,如下所示:sbatch --array=0-10000%250 array_script.sh args
不幸的是,系统管理员没有更改slurm的MaxArraySize(从默认的1001)。为了“避开”这个问题,我计划将整个工作分成10个部分,并以某种方式安排每一个部分,以便在前一个部分完成后运行。例如,我会从以下几点开始:
^{pr2}$
当这一切完成后,我会: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 >>
首先,在上面,我用subprocess.run运行sbatch,这意味着我目前不知道{}。有没有一种方法可以捕捉subprocess.run的输出,或者有什么方法可以让我找到JOB_ID。我如何做等效于squeue来检查作业是否仍在运行并决定是否继续循环?在