我正在提交SLURM作业数组,并希望将总运行时间(即不是每个任务的运行时间)打印到日志中。
这是我尝试过的:
#!/bin/bash
#SBATCH --job-name=step1
#SBATCH --output=logs/step1.log
#SBATCH --error=logs/step1.log
#SBATCH --array=0-263%75
start=$SECONDS
python worker.py ${SLURM_ARRAY_TASK_ID}
echo "Completed step1 in $SECONDS seconds"
在step1.log中得到的内容是这样的:
Completed step1 in 42 seconds
Completed step1 in 94 seconds
Completed step1 in 88 seconds
...
似乎为数组中的最后一组任务提供了运行时。从提交到最后一个任务结束,我希望为整个数组使用一个计时器。有可能吗?
答案 0 :(得分:2)
对于作业数组,每个任务都是脚本的相同提交,因此,如您所见,测量时间的方式必然只是每个任务。要获取整个作业数组的总体经过时间,您需要获取第一个任务的提交时间,然后从最后一个任务的结束时间中减去。
例如
# get submit time for first task in array
sacct -j <job_id>_0 --format=submit
# get end time for last task in array
sacct -j <job_id>_263 --format=end
然后使用date -d <timestamp from sacct> +%s
将时间戳转换为自纪元以来的秒数,以使它们更易于减去。
还要注意,您的264个任务中的每一个都将使用自己的输出覆盖step1.log
。我通常会使用#SBATCH --output=step1-%A_%a.out
来区分不同任务的输出。