2016-02-19 4 views
4

Я хотел бы запустить ту же программу на большом количестве разных входных файлов. Я мог бы просто представить каждого в виде отдельного представления Slurm, но я не хочу болотовать очередь, сразу сбросив 1000 единиц заданий. Я пытался выяснить, как обрабатывать одинаковое количество файлов, вместо этого сначала создавая выделение, а затем в пределах этого цикла распределения по всем файлам с помощью srun, предоставляя каждому вызову одно ядро ​​из выделения. Проблема в том, что независимо от того, что я делаю, выполняется только один шаг работы. Самый простой тест я мог придумать это:Параллельные, но разные действия, выполняемые с помощью команды slurm srun, не работают

#!/usr/bin/env bash 

srun --exclusive --ntasks 1 -c 1 sleep 1 & 
srun --exclusive --ntasks 1 -c 1 sleep 1 & 
srun --exclusive --ntasks 1 -c 1 sleep 1 & 
srun --exclusive --ntasks 1 -c 1 sleep 1 & 

wait 

Это не имеет значения, сколько ядер Поручаю распределение:

time salloc -n 1 test 
time salloc -n 2 test 
time salloc -n 4 test 

всегда занимает 4 секунды. Невозможно ли выполнить несколько шагов задания параллельно?

ответ

3

Оказалось, что память по умолчанию для процессора не определена, поэтому даже одноядерные задания выполнялись путем резервирования всей ОЗУ узла.

Установка DefMemPerCPU, или указание явного резервирования ОЗУ, сделало трюк.

3

Остерегайтесь того, что в этом случае вы измеряете как время работы, так и время ожидания. Сценарий представления должен выглядеть следующим образом:

#!/usr/bin/env bash 

time { 
srun --exclusive --ntasks 1 -c 1 sleep 1 & 
srun --exclusive --ntasks 1 -c 1 sleep 1 & 
srun --exclusive --ntasks 1 -c 1 sleep 1 & 
srun --exclusive --ntasks 1 -c 1 sleep 1 & 
wait 
} 

и просто подают с

salloc -n 1 test 
salloc -n 2 test 
salloc -n 4 test 

Вы тогда должны наблюдать разницу, наряду с сообщениями, такие как srun: Job step creation temporarily disabled, retrying при использовании n<4.

+0

Это хорошие предложения, очень ценные. Однако проблема оказалась чем-то еще. – Cyclone