Можете ли вы помочь мне выполнять задачи параллельно в Slurm?

Я новичок в Slurm и пытаюсь запустить несколько исполняемых файлов для параллельной работы (в приведенном ниже примере это просто команда даты). Я хотел бы, чтобы они начинались в разное время, разделенные небольшой задержкой.

Я сделал несколько попыток, пытаясь добавить дополнительные строки между sruns, например, «srun sleep 5s &» или с опцией «--begin», показанной ниже. В частности, опция "--begin" не сообщает, что "--begin игнорируется, поскольку узлы уже выделены".

Похоже, параллельный модуль недоступен в нашем кластере.

#!/bin/bash
#SBATCH --output=parallel_test_%j.out   # Standard output and error log
#SBATCH --time=06:00:00
#SBATCH --nodes=1   # number of nodes
#SBATCH --ntasks=6   
#SBATCH --mem-per-cpu=1024M   # memory per CPU core

srun="srun -n1 -N1 --exclusive"
# --exclusive     ensures srun uses distinct CPUs for each job step
# -N1 -n1         allocates a single core to each task


$srun date &
$srun --begin=now+3 date &
$srun --begin=now+6 date &
$srun --begin=now+9 date &
$srun --begin=now+12 date &
$srun --begin=now+15 date &
wait

Вывод, который я получаю, следующий:

srun: error: --begin is ignored because nodes are already allocated.
srun: error: --begin is ignored because nodes are already allocated.
srun: error: --begin is ignored because nodes are already allocated.
srun: error: --begin is ignored because nodes are already allocated.
srun: error: --begin is ignored because nodes are already allocated.
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:06 PDT 2019

Я хотел бы получить следующий вывод:

Sun Jun 23 13:22:54 PDT 2019
Sun Jun 23 13:22:57 PDT 2019
Sun Jun 23 13:23:00 PDT 2019
Sun Jun 23 13:23:03 PDT 2019
Sun Jun 23 13:23:06 PDT 2019
Sun Jun 23 13:23:09 PDT 2019

спасибо за помощь


person Vincent    schedule 23.06.2019    source источник
comment
ShellCheck правильно указывает, что ваша переменная srun не используется. Вы имели в виду $srun date &?   -  person that other guy    schedule 24.06.2019
comment
Спасибо за вашу помощь, мне определенно не хватало символа $. Тем не менее, я не получаю желаемого результата...   -  person Vincent    schedule 24.06.2019
comment
Вы можете настроить задержки между вызовами srun (sleep 5). Но что в этом рационального? Это не кажется полезным вообще.   -  person Poshi    schedule 25.06.2019


Ответы (1)


В этом случае --begin не поможет, потому что он используется для отсрочки запуска задания, а задание уже запущено, когда srun запускается в сценарии отправки.

Вы можете получить запрошенное поведение следующим образом:

$srun date &
sleep 3; $srun date &
sleep 3; $srun date &
sleep 3; $srun date &
sleep 3; $srun date &
sleep 3; $srun date &
wait

или даже вот так

$srun date &
$srun bash -c "sleep 3 ; date" &
$srun bash -c "sleep 6 ; date" &
$srun bash -c "sleep 9 ; date" &
$srun bash -c "sleep 12 ; date" &
$srun bash -c "sleep 15 ; date" &
wait

Касательно

Похоже, параллельный модуль недоступен в нашем кластере.

это не означает, что вы не можете установить его самостоятельно (см. этот вопрос). Если в вашем кластере установлен Easybuild, это еще проще. (Если это не так, вы также можете установить его самостоятельно) Затем вы можете использовать опцию --delay.

parallel --delay 3 $srun date
person damienfrancois    schedule 26.06.2019