Нужен ли мне один bash файл для каждой задачи в SLURM? - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь запустить несколько задач в кластере, управляемом SLURM, и хотел бы избежать работы с десятками файлов. Сейчас у меня есть 50 задач (подписано i, и для простоты я также являюсь входным параметром моей программы), и для каждой из них один bash файл slurm_run_i.sh, который указывает конфигурацию вычислений, и команду srun:

#!/bin/bash
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1 
#SBATCH -J pltCV
#SBATCH --mem=30G

srun python plotConvergence.py i

Затем я использую другой файл bash для отправки всех этих задач, slurm_run_all.sh

#!/bin/bash
for i in {1..50}:
  sbatch slurm_run_$i.sh 
done

Это работает (в кластере выполняется 50 заданий), но я найти более 50 входных файлов. В поисках решения я нашел команду &, получив что-то вроде:

#!/bin/bash

#SBATCH --ntasks=50
#SBATCH --cpus-per-task=1 
#SBATCH -J pltall
#SBATCH --mem=30G

# Running jobs 
srun python plotConvergence.py 1   &
srun python plotConvergence.py 2   & 
...
srun python plotConvergence.py 49  & 
srun python plotConvergence.py 50  & 
wait
echo "All done"

, которое, похоже, тоже работает. Однако я не могу управлять каждым из этих заданий независимо: вывод squeue показывает, что на одном узле выполняется одно задание (pltall). Поскольку на каждом узле в разделе, в котором я работаю, есть только 12 ядер, я предполагаю, что большинство моих заданий ожидают на одном узле, для которого я выделен. Установка опции -N тоже ничего не меняет. Более того, я больше не могу отменить некоторые задания по отдельности, если я понимаю, что есть ошибка или что-то, что мне кажется проблемным c.

Правильно ли мое толкование И есть ли лучший способ (я полагаю), чем моя попытка обработать несколько заданий в слерме без потери среди многих файлов?

1 Ответ

1 голос
/ 18 апреля 2020

Что вам нужно, так это массив заданий в Slurm.

В вашем случае у вас будет один файл представления (slurm_run.sh), подобный этому:

#!/bin/bash
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1 
#SBATCH -J pltCV
#SBATCH --mem=30G
#SBATCH --array=1-50

srun python plotConvergence.py ${SLURM_ARRAY_TASK_ID}

, а затем отправьте массив заданий с помощью

sbatch slurm_run.sh

. Вы увидите, что будет отправлено 50 заданий. Вы можете отменить все из них сразу или по одному. Подробнее см. Справочную страницу sbatch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...