Управление потоками заданий с использованием GridWay
- Предварительные действия
- Потоки заданий
- Пример описания потока заданий в виде направленного ациклического графа (НАГ)
- Запуск НАГ
- Использование утилиты gwdag для запуска НАГ
- Дополнительная информация
Этот практикум демонстрирует использование метапланировщика GridWay для запуска сложных заданий, представляющих из себя поток взаимозависимых простых (атомарных) заданий.
Предварительные действия
Прежде чем выполнять какие-либо действия необходимо получить прокси-сертификат для того чтобы получить доступ к грид-ресурсам.
$ voms-proxy-init -voms gilda Enter GRID pass phrase: Your identity: /DC=es/DC=irisgrid/O=ucm/CN=joseluis.vazquez Cannot find file or dir: /home/jlvazquez/.glite/vomses Creating temporary proxy ................................................. Done Contacting voms.ct.infn.it:15001 [/C=IT/O=INFN/OU=Host/L=Catania/CN=voms.ct.infn.it] "gilda" Done Creating proxy ...................................... Done Your proxy is valid until Tue Jun 3 08:22:47 2008
Потоки заданий
Мощный набор команд GridWay для запуска, контроля и синхронизации выполнения заданий позволяет нам программно создавать сложные задания или workflow, которые представляют из себя поток заданий, где одни задачи используют данные, полученные в результате выполнения других заданий. GridWay позволяет указать зависимость запуска задания от события завершения других заданий. Эта новая функциональность обеспечивает возможность выполнения таких сложных заданий.
GridWay позволяет учёным и инженерам описывать алгоритмы выполнения своих сложных приложений, используя понятие потоков заданий. Перехват и анализ кода завершения задания позволяет пользователям описать сложное задание, как поток задач, где каждая задача зависит от результатов и кода завершения предыдущей задачи. Такая зависимость может включать ветвление, порождение подзадач и даже цикличность, что позволяет в полной мере реализовывать параллелизм выполнения потоков заданий для определённого типа приложений. Использование программных средств скриптовых языков вместе с командами GridWay позволяет создавать и управлять потоками атомарных заданий, для которых поддерживается:
- последовательная зависимость, параллельность, ветвление, цикличность
- поток заданий может быть описан в абстрактном виде, без привязки к конкретным вычислительным уздам, где будут выполнятся атомарные задания
- ограничения на качество обслуживания и устойчивость к ошибкам определяются на уровне атомарных заданий
Взаимозависимости отдельных заданий могут быть определены во время запуска задания, используя опцию -d
команды gwsubmit.
Зависимое задание будет запущено в состоянии hold (приостановлено) и только когда все задания, от которых оно зависит, будут успешно завершены,
его выполнение будет возобновлено.Также можно возобновить выполнение такого задания при помощи команды gwkill.
Пример описания потока заданий в виде направленного ациклического графа (НАГ)
НАГ-ориентированное описание потока заданий состоит из временных зависимостей между узлами графа, каждый из которых представляет атомарное задание и вход, выход или выполнение одного или нескольких заданий зависят от одного или нескольких других заданий. У каждого узла может быть несколько узлов-родителей или узлов-сыновей, но не может быть петель. Составим простейший направленный ациклический граф:
В этом примере задание A генерит случайное число, каждое из заданий B и C прибавляют к этому числу по 1 и, в завершение, задание D суммирует оба результата. Таким образом, окончательный результат должен быть равен удвоенному начальному числу, плюс 2. В нашем случае для передачи чисел между заданиями будет использоваться файл стандартного вывода.
Файл описания задания (Job Template) для задания A (A.jt)
EXECUTABLE=/bin/echo ARGUMENTS="$RANDOM" STDOUT_FILE=out.A
Файлы описания задания для заданий B и C (B.jt и C.jt)
EXECUTABLE=/usr/bin/expr ARGUMENTS="`cat out.A`" + 1 INPUT_FILES=out.A STDOUT_FILE=out.B #изменить на out.C для задания C
Файл описания задания для задания D (D.jt)
EXECUTABLE=/usr/bin/expr ARGUMENTS="`cat out.B`" + "`cat out.C`" INPUT_FILES=out.B, out.C STDOUT_FILE=out.workflow
Запуск НАГ
Если все предыдущие файлы описания заданий созданы, то можно запустить выполнение потока заданий с помощью последовательности команд:
$ gwsubmit -v -t A.jt JOB ID: 5 $ gwsubmit -v -t B.jt -d "5" JOB ID: 6 $ gwsubmit -v -t C.jt -d "5" JOB ID: 7 $ gwsubmit -t D.jt -d "6 7"
Замечание: В этом примере задания B и C могли быть запущены, как массив заданий, используя только один
файл описания задания, в котором выходные файлы заданы как OUTPUT_FILES=out.${TASK_ID}
. В этом случае
входные файлы для задания C должны быть заданы как INPUT_FILES=out.0,out.1
Все эти команды можно объединить в один скрипт:
#!/bin/sh A_ID=`gwsubmit -v -t A.jt | cut -f2 -d':' | cut -f2 -d' '` B_ID=`gwsubmit -v -t B.jt -d "$A_ID" | cut -f2 -d':' | cut -f2 -d' '` C_ID=`gwsubmit -v -t C.jt -d "$A_ID" | cut -f2 -d':' | cut -f2 -d' '` D_ID=`gwsubmit -v -t D.jt -d "$B_ID $C_ID"| cut -f2 -d':' | cut -f2 -d' '` #Sync with last job of the workflow gwwait $D_ID echo "Random number `cat out.A`" echo "Workflow computation `cat out.workflow`"
Следует отметить, что когда имена входных или выходных файлов зависят от итератора или идентификатора задания, тогда файл описания задания должен создаваться динамически непосредственно перед запуском соответствующего задания. Это может быть сделано программно, используя DRMAA API или через скрипт.
Использование утилиты gwdag для запуска НАГ
Как альтернативный вариант, для запуска потока заданий, описываемых, как НАГ, можно использовать файл описания, похожий на описание, которое использует утилита DAGMAN из пакета CONDOR. В этом случае зависимости между заданиями контролируются не самим GridWay, а утилитой gwdag. Необходимо только заменить файлы описания заданий в формате CONDOR на файлы описания заданий в формате GridWay. Ниже приведён пример описания того же самого задания в виде НАГ в формате DAGMAN.
JOB A A.jt JOB B B.jt JOB C C.jt JOB D D.jt PARENT A CHILD B C PARENT B C CHILD D
Для запуска этого задания необходимо только передать имя этого файла утилите gwdag.
$ gwdag <name of the file>
При помощи этой утилиты также можно преобразовать описание НАГ в формат DOT, который может использоваться в дальнейшем для
создания графического представления графа зависимостей. Для этого при вызове gwdag используется опция -d
$ gwdag -d <name of the file> <name of the dot file>
Замечание: в некоторых версиях дистрибутива GridWay утилита gwdag входит под именем gwdagman.
Дополнительная информация
Для получения дополнительной информации посетите сайт документации по GridWay .