У меня возникла проблема, когда мне нужно запустить тот же скрипт, но с разными входными аргументами.SLURM sbatch job array для того же скрипта, но с разными входными аргументами, выполняемыми параллельно
Скажем, у меня есть сценарий myscript.py -p <par_Val> -i <num_trial>
, где мне нужно рассмотреть N
различные par_values
(между x0
и x1
) и M испытаний для каждого значения par_values
.
Каждое испытание M таково, что оно почти достигает временного диапазона кластера, в котором я работаю (и у меня нет привилегий, чтобы изменить это). Поэтому на практике мне нужно запустить NxM
независимых рабочих мест.
Поскольку каждые из пакетных заданий имеют такую же конфигурацию узла/центральный процессор и вызывают тот же питон скрипт, для изменения входных параметров, в принципе, за исключением того, в псевдо-языке, который я должен иметь sbatch
сценарий, который должен сделать что-то вроде:
#!/bin/bash
#SBATCH --job-name=cv_01
#SBATCH --output=cv_analysis_eis-%j.out
#SBATCH --error=cv_analysis_eis-%j.err
#SBATCH --partition=gpu2
#SBATCH --nodes=1
#SBATCH --cpus-per-task=4
for p1 in 0.05 0.075 0.1 0.25 0.5
do
for i in {0..150..5}
do
python myscript.py -p p1 -v i
done
done
где каждый вызов сценария сам по себе является пакетным заданием. Глядя на sbatch doc, вариант -a --array
кажется многообещающим. Но в моем случае мне нужно изменить входные параметры для каждого скрипта NxM
, который у меня есть. Как я могу это сделать? Я бы не хотел писать NxM
пакетных скриптов, а затем перечислил их в файле txt
, как это было предложено this post. Не предлагаемое решение here кажется идеальным, так как это имеет место в imho массива заданий. Кроме того, я хотел бы убедиться, что все сценарии NxM
запускаются одновременно, а вызывающий выше скрипт заканчивается сразу после этого, так что он не будет сталкиваться с ограничением по времени, и вся моя работа будет завершена системой и остаются неполными (тогда как, поскольку каждое из заданий NxM
находится в таком пределе, если они выполняются параллельно, но независимы, этого не произойдет).
Спасибо это именно то, что я искал , Однако, прежде чем я его одобрю, во втором примере, который вы предоставляете, я не убежден аргументом '$ 1' в' expr', когда вы назначаете 'p1'. Не могли бы вы пояснить это. Это не имеет для меня никакого смысла, так как afaik $ относится к входным аргументам ... –
maurizio
Хорошо, ваш ответ правильный, с малой опечаткой на присваивание 'p1', который должен быть вместо' p1 = $ {PARRAY [ 'expr $ SLURM_ARRAY_TASK_ID% $ {# PARRAY [@]}']} '. – maurizio
Вы правы. Я исправлю это сейчас –