Главная / Обучение / Практикум / Управление потоками заданий с использованием GridWay

Управление потоками заданий с использованием GridWay

Этот практикум демонстрирует использование метапланировщика 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 .


egee@pnpi.nw.ru

©2004-2010 ПИЯФ РАН им. Б.П.Константинова

СтатистикаСтатистика сайта