Я пытаюсь запустить несколько задач в кластере, управляемом 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.
Правильно ли мое толкование И есть ли лучший способ (я полагаю), чем моя попытка обработать несколько заданий в слерме без потери среди многих файлов?