Добавление элементов массива заданий в Slurm после отправки - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь использовать управляемый Slurm кластер для запуска LS-Dyna (программа моделирования конечных элементов с ограниченным количеством лицензий, доступных в моем кластере ).Я пытаюсь написать свои пакетные сценарии, чтобы не тратить время на обработку из-за этого ограничения лицензии (а также для улучшения разборчивости при выполнении команд 'squeue') с помощью массивов заданий, но у меня возникают проблемы с выполнением этой работы.

Я хочу запускать идентичные сценарии Bash в различных сетках FEM, каждую из которых я организовал в разные подпапки.

Учитывая эту структуру папок в моем кластере ...

cluster root
|
...
|
|-+ my scratch space's root
  |
  |-+ this project
    |
    |--+ lat_-5mm
    |  |- runCurrentLine.bash
    |  |- other files
    |
    |--+ lat_-4.75mm
    |  |- runCurrentLine.bash
    |  |- other files
    |
    |--+ lat_-4.5mm
    |  |- runCurrentLine.bash
    |  |- other files
    |
   ...
    |
    |--+ lat_5mm
    |  |- runCurrentLine.bash
    |  |- other files
    |
    |
    |-sendDynaRuns.bash
    |-other dependencies

... Я пытаюсь отправить "runCurrentLine.bash" в каждую папку, запустив следующий сценарий на моем узле входа в систему.

#!/bin/bash
iter=0
for foldernow in */; do

# change to subdirectory for current line iteration
    cd "./${foldernow}";

# make Slurm and user happy
    echo "sending LS Dyna simulation for ${pos}mm line..."
    sleep 1

# first line only: send batch, and get job ID
    if [ "${iter}" == 0 ];then

# send the batch...
        jobID=$(sbatch -J "Dyna" --array="${iter}"%15 runCurrentLine.bash)

# ...ensure that Slurm's output shows on console (which includes the job ID)...
        echo "${jobID}"

# ...and extract the job ID and save as a variable
        jobID=$(echo "${jobID}" | grep -Eo '[+-]?[0-9]+([.][0-9]+)?')

# subsequent lines: add current line to job array
    else
        scontrol update --jobid="${jobID}" --array="${iter}"%15 runCurrentLine.bash
    fi

# prepare to move onto next position
    iter=$((iter+1))
    cd ../
done

Эта установка правильно отправляет пакетное задание дляпервая линия, при -0,25 мм *.Тем не менее, для второй строки далее, похоже, это не то же самое ... Вот что я в итоге получаю на своей консоли:

*: я предполагал, что папки "lat_xmm" должны быть численнозаказал, но Unix, похоже, не признает, что

$ ./sendDynaRuns.bash
sending LS Dyna simulation for -0.25mm line...
Submitted batch job 1081040
sending LS Dyna simulation for 0.25mm line...
sbatch: error: Batch job submission failed: Invalid job id specified
sending LS Dyna simulation for -0.5mm line...
sbatch: error: Batch job submission failed: Invalid job id specified

Я знаю, что runCurrentLine.bash работает очень хорошо, если я вручную отправляю его как пакет (и он работает до завершения в течение срока, указанного в-файл, в основном, поскольку он не должен конкурировать с другими линиями за открытые лицензии).Что я должен сделать, чтобы мой код заработал?

Заранее спасибо!

1 Ответ

0 голосов
/ 29 марта 2019

Как состояние @Poshi, вы не можете добавлять задания в существующий массив.

Я бы создал скрипт отправки, подобный этому:

#!/bin/bash
#SBATCH --array=1-<nb of folders>%15
# ALL OTHER SLURM SBATCH DIRECTIVES HERE

folders=(lat_*)
foldernow=${folders[$SLURM_TASK_ARRAY_ID]}

cd $foldernow && ./runCurrentLine.bash

Единственный недостаток - это то, что вам нужноявно укажите количество заданий в массиве в зависимости от количества папок.

...