Как отправить задания в SLURM с разных узлов?

Я должен запустить несколько симуляций на кластере, используя sbatch. В одной папке у меня есть скрипт Python для запуска и файл для использования с sbatch:

#!/bin/bash -l
#SBATCH --time=04:00:00
#SBATCH --nodes=32
#SBATCH --ntasks-per-core=1
#SBATCH --ntasks-per-node=36
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal
#SBATCH --constraint=mc

module load Python

source /scratch/.../env/bin/activate

srun python3 script.py

deactivate

Что мне нужно сделать, так это запустить тот же скрипт на Python, но используя разные значения для --nodes. Как я могу это сделать? Более того, я хотел бы создать одну папку для каждого прогона, в которой будет сохранен (вывод) файл slurm с именем что-то вроде "node_xy".

1 ответ

Предполагая, что ваш сценарий назван submit.shВы можете удалить --nodes из скрипта и запустите:

for i in 2 4 8 16 32 64; do sbatch --nodes $i --output nodes_$i.txt, submit.sh; done

Это представит submit.sh скрипт с двумя дополнительными параметрами, --nodes а также --outputпервый для управления количеством используемых узлов, а второй для указания имени выходного файла, для каждого значения 2, 4, 8 и т. д. Обратите внимание, что все выходные файлы будут в текущем каталоге, вы будете нужно немного развить однострочность, если они действительно нужны в отдельных каталогах.

Если это позволяет максимально допустимое время выполнения, вы можете выполнить все запуски в одном задании примерно так:

#!/bin/bash -l
#SBATCH --time=04:00:00
#SBATCH --nodes=32
#SBATCH --ntasks-per-core=1
#SBATCH --ntasks-per-node=36
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal
#SBATCH --constraint=mc

module load Python

source /scratch/.../env/bin/activate

for i in  2 4 8 16 32 64;
do
srun --nodes $i python3 script.py > nodes_$i
done

deactivate
Другие вопросы по тегам