Работа с ограничениями на отправку заданий

#slurm

#slurm

Вопрос:

Я запускаю массивы заданий slurm с помощью —array, и я хотел бы запустить около 2000 задач / элементов массива. Однако это превышает лимит отправки заданий кластера ~ 500 за раз.

Есть ли какие-либо советы / рекомендации по разделению этого? Я хотел бы отправить все это сразу и при этом иметь возможность передавать аргументы идентификатора массива 1-2000 в мои программы, если это возможно. Я думаю, что может быть полезно что-то вроде ожидания отправки фрагментов массива, но я не уверен, как это сделать в данный момент.

Ответ №1:

Если ограничение касается размера массива:

Вам нужно будет разделить массив на несколько массивов заданий. --array Параметр принимает значения формы <START>-<END> , поэтому вы можете отправить четыре задания:

 sbatch --array=1-500 ...
sbatch --array=501-1000 ...
sbatch --array=1001-1500 ...
sbatch --array=1501-200 ...
  

Таким образом, вы обойдете ограничение в 500 и по-прежнему сохраняете SLURM_ARRAY_TASK_ID диапазон от 1 до 2000.

Чтобы немного упростить задачу, вы можете написать все это в одной строке следующим образом:

 paste -d- <(seq 1 500 2000) <(seq 500 500 2000) | xargs -I {} sbatch --array={} ... 
  

Если ограничение на количество отправленных заданий:

Тогда один из вариантов — заставить последнее задание массива отправить следующий фрагмент.

 #!/bin/bash
#SBATCH ...
...
...
if [[ $((SLURM_ARRAY_TASK_ID % 500)) == 0 ]] ; then 
    sbatch --array=$((SLURM_ARRAY_TASK_ID 1))-$((SLURM_ARRAY_TASK_ID 500)) $0
fi
  

Обратите внимание, что в идеале последнее выполняемое задание массива должно отправлять задание, и оно может быть или не быть тем, у которого самый высокий идентификатор ЗАДАЧИ, но это работало для всех практических целей во многих ситуациях.

Другие варианты — настроить задание cron для мониторинга очереди и отправки каждого фрагмента, когда это возможно, или использовать диспетчер рабочих процессов, который сделает это за вас.

Комментарии:

1. К сожалению, метод «вставить» не работает : sbatch: error: Batch job submission failed: Job violates accounting/QOS policy (job submit limit, user's size and/or time limits) sbatch: error: QOSMaxSubmitJobPerUserLimit . Когда я запускаю squeue, отображаются только первые несколько сотен заданий, похоже, что это все еще отправляет все 2000 одновременно.

2. Итак, ограничение зависит не от размера массива заданий, а от количества заданий, отправленных пользователями.

Ответ №2:

вы можете запустить скрипт для отправки своих заданий и попытаться перевести программу в режим ожидания на несколько секунд после каждых 500 отправок. см. https://www.osc.edu/resources/getting_started/howto/howto_submit_multiple_jobs_using_parameters