Как отправить задания в 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