Наличие задания зависит от задания массива в SLURM - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть два сценария задания для отправки в SLURM: jobA.sh и jobB.sh. jobA - это массив заданий, и я хочу, чтобы jobB запускался только после того, как все jobA было завершено. Мой скрипт для jobA.sh:

#!/bin/bash
#SBATCH -A TRIGWMS 
#SBATCH --mail-type=FAIL
# cores per task
#SBATCH -c 11
#
#SBATCH --array=%#combo#%%100
#SBATCH -J %#profile#%_%#freq#%
#
# number of nodes
#SBATCH -N 1
#
#SBATCH -t 0-2:00:00
# Standard output is saved in this file
#SBATCH -o myjob_%A_%a.out
#
# Standard error messages are saved in this file
#SBATCH -e myjob_%A_%a.err
#
# set the $OMP_NUM_THREADS variable
export OMP_NUM_THREADS=12
./myjobA_$SLURM_ARRAY_TASK_ID

Этот сценарий задания работает нормально, но я не могу заставить работать jobB после его выполнения. В jobB есть следующий скрипт:

#!/bin/bash

#SBATCH -A TRIGWMS 
#SBATCH --mail-type=FAIL
# cores per task
#SBATCH -c 11
#
# number of nodes
#SBATCH -N 1
#SBATCH --ntasks=1

#SBATCH -J MESA
#SBATCH -t 0-2:00:00
# Standard output is saved in this file
#SBATCH -o myjob_%A_%a.out
#
# Standard error messages are saved in this file
#SBATCH -e myjob_%A_%a.err
#
# set the $OMP_NUM_THREADS variable
ompthreads=$SLURM_JOB_CPUS_PER_NODE
export OMP_NUM_THREADS=$ompthreads
./myjobB

Этот сценарий также работает нормально, но только если сначала запускается jobA. Чтобы попытаться отправить оба этих задания, причем jobB зависит от jobA, я использовал следующий скрипт:

#!/bin/bash

FIRST=$(sbatch -p bigmem --mail-user=$USER@something.ac.uk jobA.sh)
echo $FIRST
SECOND=$(sbatch --dependency=afterany:$FIRST jobB.sh)
echo $SECOND

exit 0

, но это только первое и приходит с ошибкой 'sbatch: error: Невозможно открыть пакет файла' (у меня изначально был -p bigmem --mail и т. Д., Но я вынул его только для проверки). Проблема связана с частью --dependency, и после удаления все они отправляются, но мне нужно, чтобы jobB запускался после завершения jobA.

1 Ответ

0 голосов
/ 10 сентября 2018

Вы должны отправить свою первую работу с опцией --parsable.

FIRST=$(sbatch -p bigmem --mail-user=$USER@something.ac.uk --parsable jobA.sh)

В противном случае переменная FIRST содержит строку, похожую на:

Submitted batch job 123456789

Итак, ваша вторая строка выглядит так после расширения переменной Bash:

SECOND=$(sbatch --dependency=afterany:Submitted batch job 123456789 jobB.sh)

Итак, sbatch на самом деле пытается найти скрипт с именем batch и запускает его с аргументами job 123456789 jobB.sh. С опцией --parsable, sbatch будет отвечать только с идентификатором задания, и ваша строка должна работать как есть.

Если в вашем кластере установлена ​​слишком старая версия Slurm, опция --parsable может быть недоступна, и в этом случае вы можете следовать этому совету .

...