#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