Запустите сценарий PBS и постобработайте вывод в сценарии bash.

У меня есть куча заданий для отправки в очередь PBS, и после этого выходные данные должны быть обработаны локально. Поскольку задания похожи (и я не хочу так часто менять их вручную), я написал себе сценарий bash, который локально генерирует сценарий задания PBS, а затем отправляет задание. Мой вопрос заключается в следующем: как я могу заставить свой bash-скрипт дождаться завершения задания PBS, а затем начать постобработку? (Постоянно проверять статус задания нельзя.) Какие возможности у меня есть для этого?

Большое спасибо всем подсказкам, советам или решениям!

Редактировать: как указано в комментарии (спасибо), некоторые правки:

  • PBS = Портативная пакетная система
  • Документация доступна здесь: http://resources.altair.com/pbs/documentation/support/PBSProUserGuide12.1.pdf
  • Я подумал о возможных решениях и пришел к следующему, который не будет работать, однако: я мог бы мой скрипт bash ждать количество времени, которое запрошено как время настенных часов задания. Однако есть две сложности: во-первых, задание может не требовать так много времени и завершаться раньше, поэтому сценарий bash будет ждать слишком долго; во-вторых, задание может быть поставлено в очередь и не выполнено немедленно, поэтому сценарий bash, вероятно, будет ждать слишком мало.

Редактировать 2: Поскольку я не уверен, что всегда могу работать в интерактивном режиме, как предложено ниже, я подумал о следующем: у меня есть сценарий задания PBS, создающий (пустой) файл непосредственно перед завершением. Мой сценарий bash проверяет каждые пару минут (скажем), существует ли этот файл (используя цикл while). Если он существует, я знаю, что задание завершено, и могу начать постобработку, удалив только что созданный (пустой) файл. Таким образом, у меня есть задержка максимум на пару минут, и мне действительно не нужны никакие ресурсы. Это определенно не идеально, но своего рода обходной путь. Любые более практичные идеи приветствуются.

Любая мысль приветствуется, даже если она не имеет прямого отношения к PBS.

Кари


person Cari Baur    schedule 22.08.2013    source источник
comment
Рассмотрите возможность добавления ссылки на документацию для pbs (в США это означает систему общественного вещания). Обратите внимание, что у pbs всего 18 подписчиков, так что, вероятно, это не широко известная технология. Тем не менее, С.О. не является бесплатной службой кодирования, ожидается, что вы предприняли попытку решить свою проблему и разместили этот код (в правильном формате) в своем вопросе. Удачи.   -  person shellter    schedule 22.08.2013


Ответы (2)


Я не верю, что PBSPro поддерживает это, но TORQUE (еще одна производная от PBS) имеет параметр -x, который может вас заинтересовать. Вы можете отправить задание следующим образом:

qsub -I -x <executable>

Это запустит вашу работу в интерактивном режиме и запустит исполняемый файл, при этом весь вывод будет направлен на ваш терминал, и задание будет выполнено, как только этот исполняемый файл завершится. Затем вы можете начать постобработку в этот момент. PBSPro может иметь аналогичную функциональность, но то, что я описал здесь, относится к TORQUE.

person dbeer    schedule 23.08.2013
comment
Спасибо! Это звучит очень полезно не только для вышеуказанной проблемы. Однако я не уверен, что всегда могу запустить задание в интерактивном режиме. Я обязательно посмотрю на это! - person Cari Baur; 24.08.2013

Это связано с ответом, который я написал на другой вопрос. У меня есть доступ к нескольким машинам в высокопроизводительном вычислительном центре моего кампуса. По крайней мере, в одном из кластеров разрешено вызывать qsub из родительского сценария PBS. Это позволяет создавать цепочки заданий, как описано в эта страница. Таким образом, вы можете использовать решение, подобное следующему скелету:

# ...do your PBS stuff
# launch your code on the cluster that creates, say "JOBID.txt"
parallel -j0 mycode.sh

# you may need to use PBS environment variables to figure out what your output file is called
filename=$${PBS_JOBID%%.*}.txt # e.g., this would be like the JOBID.txt I wrote above

# next, use qsub to launch the post-processing script
echo "${PBS_O_WORKDIR}/postprocess.pbs $filename" | qsub

posprocess.pbs будет принимать имя файла для обработки в качестве аргумента. В ответе, на который я ссылался, это помогло мне скопировать стандартный выходной файл PBS в другой файл после завершения. Однако я не уверен в возможных условиях гонки, и вам может понадобиться использовать параметр -W depend= qsub, что-то вроде этого (не проверено):

echo "-W depend=afterok:$PBS_JOBID postprocess.pbs $filename" | qsub
person Steve Koch    schedule 17.01.2014