Во-первых, вам нужно разрешить Slurm выделять отдельные узлы для вашей работы, поэтому вам нужно удалить опцию --cpus-per-task
и вместо этого запросить 18 задач .
Во-вторых, вам нужночтобы получить имя хоста, на котором мастер работает как 127.0.0.1
, больше не будет действительным в многоузловой установке.
В-третьих, просто добавьте srun
перед вызовом bash
в parallel
.С --exclusive -n 1 -c 1
он будет отправлять каждый экземпляр рабочего, порожденный parallel
, каждому из ЦП в выделении.Они могут находиться на том же узле или на других узлах.
Таким образом, следующее может работать (не проверено)
#!/bin/bash
#SBATCH -n 18 # total number of tasks requested
#SBATCH -p shortq # queue (partition) -- defq, eduq, gpuq.
#SBATCH -t 12:00:00 # run time (hh:mm:ss) - 12.0 hours in this.
cd /To-master-directory
master.exe /h :4004 &
MASTER_PID=$!
MASTER_HOSTNAME=$(hostname)
cd /To-Parent
# This is the directory that contains all worker (wrk)directories
parallel -i srun --exclusive -n 1 -c 1 bash -c "cd {} ; worker.exe /h $MASTER_HOSTNAME:4004" --
wrk1 wrk2 wrk3 wrk4 wrk5 wrk6 wrk7 wrk8 wrk9 wrk10 wrk11 wrk12 wrk13 wrk14
wrk15 wrk16 wrk17 wrk18 wrk19 wrk20
kill ${MASTER_PID}
Обратите внимание, что в вашем примере с 18 задачами и 20 каталогами для обработки,Вначале в задании будут работать 18 рабочих, а затем два дополнительных будут «микропланироваться» при завершении предыдущего задания.