#slurm
#slurm
Вопрос:
Я понял, что задания, отправленные с предыдущей версией моего программного обеспечения, бесполезны из-за ошибки, поэтому я хочу отменить их. Однако у меня также есть новые задания, которые я хотел бы продолжать выполнять. Все задания имеют одинаковое имя задания и выполняются в одном разделе.
Я написал следующий скрипт для отмены заданий с идентификатором ниже заданного.
#!binbash
if [ $1 ]
then
MAX_JOBID=$1
else
echo "An integer value is needed"
exit
fi
JOBIDLIST=$(squeue -u $USER -o "%F")
for JOBID in $JOBIDLIST
do
if [ "$JOBID" -lt "$MAX_JOBID" ]
then
echo "Cancelling job "$JOBID
scancel $JOBID
fi
done
Я бы сказал, что это повторяющаяся ситуация для кого-то, кто разрабатывает программное обеспечение, и мне интересно, есть ли прямой способ сделать это с помощью команд slurm. В качестве альтернативы, используете ли вы некоторые приемы, такие как добавление идентификатора программного обеспечения к имени задания, чтобы преодолеть подобные ситуации?
Ответ №1:
К сожалению, в таких сценариях нет прямого способа отменить задание.
В качестве альтернативы, как вы указали, полезно присвоить заданию имя задания, добавив версию / фиксацию программного обеспечения вместе с именем задания. В этом случае вы можете использовать, scancel --name=JOB_NAME_VERSION
чтобы отменить все задания с этим именем задания.
Кроме того, если могут использоваться вновь отправленные задания hold
scontrol hold <jobid>
, а затем все PENDING
задания могут быть отменены с помощью scancel --state=PENDING
В моем случае я использовал аналогичный подход (например, ваш), squeue
передав вывод awk
и отменив первые N заданий, которые я хотел удалить. Это однострочный скрипт.
Что-то вроде этого:
например: squeue arguments | awk 'NR>=2 amp;amp; NR<=N{print $1}' | xargs /usr/bin/scancel
Комментарии:
1. Хороший подход! Я уверен, что это полезно во многих случаях.
Ответ №2:
В дополнение к предложениям @j23, вы можете организовать свои задания с
-
массивы заданий ; если все ваши задания похожи с точки зрения сценария отправки, сделайте их массивом заданий и отправляйте по одному массиву заданий для каждой версии вашего программного обеспечения. Затем вы можете отменить весь массив заданий всего одной
scancel
командой -
система управления рабочими процессами; они позволяют легко отправлять и управлять наборами заданий (возможно, в разных кластерах)
- Фейерверк https://materialsproject.github.io/fireworks /
- Bosco https://osg-bosco.github.io/docs /
- Конвейеры Slurm https://github.com/acorg/slurm-pipeline
- Луиджи https://github.com/spotify/luigi
Комментарии:
1. Я использую массивы заданий для группировки конфигураций параметров, но, как вы сказали, это первый подход, который следует рассмотреть.
2. Я не знал о системах управления рабочими процессами, которые вы упоминаете. Спасибо за предложение. Я всегда использовал slurm непосредственно из командной строки. Нужны ли им права администратора в кластере для установки? На первый взгляд кажется, что Firework и Lugi нуждаются в привилегиях администратора, slurm-pipelines не нужны, и я не уверен, действительно ли Bosco нужны привилегии в slurm sever. Это правильно?
3. Для установки некоторых из них могут потребоваться права администратора, но в большинстве случаев их не нужно устанавливать в кластере. Они устанавливаются либо на ваш персональный компьютер, либо на выделенный сервер. Fireworks лучше всего подходит для командной работы на выделенном сервере, в то время как Bosco больше подходит для личного использования на вашем ноутбуке. О других я знаю меньше.