Как рассчитать время работы SLURM? - PullRequest
0 голосов
/ 04 ноября 2019

Я отправляю массив заданий 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
...

, которые, похоже, дают время выполнения дляпоследняя группа задач в массиве. Я хочу один таймер для всего массива, от представления до конца последней задачи. Это возможно?

1 Ответ

1 голос
/ 05 ноября 2019

В массивах заданий каждая задача является идентичной отправкой вашего сценария, поэтому, как вы видите, способ измерения времени будет обязательно зависеть от конкретной задачи. Чтобы получить общее истекшее время всего массива заданий, вам нужно получить время отправки первого задания и вычесть его из времени окончания последнего задания .

например,

# 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, чтобы отличать результаты от разных задач.

...