Как отправить задачу в ГРИД
У тех кто только начал разбираться с ГРИД вычислениями, возникает очень много вопросов. Кажется что понимаешь идею ГРИД, но когда начинаешь копать глубже в технические детали, оказываешься над пропастью отсутствия знаний. Информации по этим вопросам GOOGLE выдает много, и часто попадаешь на чьи-то научные статьи, монографии, в которых очень «красиво» всё расписано с философской точки зрения, но практической пользы от которых ровным счетом «0», а ведь от запроса ожидаешь получить некий «How to».
Сегодня я хочу без лишних научных отступлений ответить на один из часто задаваемых вопросов «Как отправить задачу в ГРИД?».
Прежде чем рассказать что нужно делать для запуска задачи в ГРИД хочу внести ясность по поводу того, как это всё работает.
Как мы знаем ГРИД вычисления это ничто иное, как распределенное выполнение поставленных задач на удаленных(в том числе географически) кластерах включенных в единую ГРИД сеть.
Естественно возникает вопрос: «Как это всё работает на программном уровне?». Полный ответ на этот вопрос нельзя предоставить в одной статье, однако попробую дать общее представление.
Представьте себе абстрактную ситуацию- вы директор предприятия по производству скворечников :). У вас успешное стабильно-среднее производство около 4 000 скворечников в месяц. Вдруг Вам приходит заказ из Германии: «Срочно нужно сделать 40 000 скворечников за 1 месяц». Естественно своими силами вы такое сделать не сможете. Для этого нанимаете 10 предприятий из разных городов, которые занимаются аналогичным видом деятельности, для параллельного выполнения заказа. Но чтобы предприятия начали работать, вам нужно:
— Подписать договор сотрудничества;
— Отправить техническое задание (чертежи, размеры, уточнения);
После согласования и утверждения, предприятия начали работать в параллельном режиме.
После изготовления скворечников вам приходят уведомления о том, что продукция готова к отгрузке. Вы связываетесь со службой доставки и забираете товар со складов производителей.
В результате ваше предприятие изготовило и отправило 40 000 скворечников в Германию точно в срок.
К чему я привел пример производства скворечников? К тому, что этот пример в точности описывает процедуру работы в ГРИД. Давайте в этом убедимся самостоятельно на следующем практическом примере. Итак, у вас есть задача: «Существует математическая модель развития экономики Украины. Есть набор статистических данных за 10 лет. Необходимо рассчитать как в будущем повлияет изменение курса доллара в диапазоне от 8.00 до 20.00 грн. на развитие малого и среднего бизнеса на 5 лет в будущее. Детализация по каждому месяцу. При условии изменения цены на газ в диапазоне от 500 до 1000 долларов. Подзадача: Необходимо выбрать при каком курсе доллара и цене на газ ситуация развития бизнеса наиболее благоприятна». Неплохая задачка, правда? Но самое главное то, что это одна из реальных задач, которые мы решаем в Донецком Институте Экономики Промышленности НАН Украины. Данная задача на локальном компьютере считается очень долго. Локальный кластер тоже не подходит для оперативного вывода информации и принятия решений. Мы решаем обратится за помощью в ГРИД. Что нам для этого нужно:
1) У нас должен быть сертификат участника ГРИД полученный у регистратора;
2) Мы должны состоять в виртуальной организации, которая соответствует тематике наших исследований;
3) У нас должен быть сервер с предустановленным middleware для работы в ГРИД (В нашем случае доступ к своему серверу предоставлял Киевский Институт Проблем Математических Машин и Систем за что отдельное спасибо!);
Если всё это есть, мы переходим к практическому запуску:
Шаг 1: Заходим на наш сервер. В моем случае я подключаюсь через SSH:
Шаг 2: Для авторизации в ГРИД, нам необходимо добавить свой сертификат полученный у регистратора. Для этого создаем в корневом каталоге пользователя, папку «.globus».
В папку помещаем файл сертификата и файл открытого ключа (.pem).
После этого необходимо выполнить команду grid-cert-info. Если сертификаты указаны правильно, то на экране будет выведена информация о владельце сертификата.
Шаг 3: Необходимо зарегистрировать прокси-сертификат. Этот шаг позволит открыть доступ для работы с ГРИД.
Для этого достаточно ввести команду: grid-proxy-init
Автоматически эта команда открывает время сессии равное 12 часов.
Для установки собственного времени сессии можно указать команду: grid-proxy-init -valid 27:45, где 27:45 = 27 часов 45 минут
Шаг 4: Давайте попробуем запустить нашу задачу на локальном кластере (без использования ГРИД).
Реализация задачи написана на языке Си и находится в файле 062.c. Так же есть база статистики которая находится в каталоге variants и база регуляторов которые находятся в каталоге delays.
Программа использует входные данные из файлов:
./delays/d251
./variants/251
Для запуска программы необходимо произвести компиляцию командой: gcc ./062.c –lm –static –m32
В результате компиляции будет создан исполняемый файл ./a.out
Для запуска файла необходимо выполнить команду: ./a.out 251 ,где 251 это параметр означающий имя файлов для входных данных (из папок delays, variants)
Результатом выполнения программы будет файл 251 в каталоге /prognosis
На этом шаге мы научились запускать программу локально, однако у нас есть сложная задача, которую нужно параллельно считать на серверах ГРИД сети. Для этого переходим к следующему шагу.
Шаг 5: Для запуска задачи в ГРИД необходимо описать её с помощью языка xRSL. Данное описание сравнимо с техническим заданием, в примере о производстве скворечников. Помните? Для того чтоб удаленное предприятие выполнило заказ, необходимо предоставить чертежи и размеры скворечника. Аналогично и здесь, когда задача будет отправлена в ГРИД, удаленный кластер не будет знать что с ней делать. Ну да, есть какие-то файлы, которые делают что-то важное. Но в какой последовательности их запускать? Какие параметры пеедавать? Всё это описывается в xRSL.
При более детальном изучении языка описания вы увидите, что можно будет выставлять требования к кластерам. К примеру если вам нужно выделить 4 процессорных ядра, 8 ГБ оперативной памяти и 500 ГБ дискового пространства, это всё указывается в описании задачи и задача будет передана на кластер удовлетворяющий Вашим требованиям.
Синтаксис xRSL описан в рабочей документации на сайте www.nordugrid.org
Создадим файл task1.xrsl:
&(executable="./task.sh") (inputFiles=(062.c "") (./delays/d251 "")(./delays/d252 "")(./delays/d253 "") (./delays/d254 "")(./delays/d255 "")(./delays/d256 "") (./variants/251 "")(./variants/252 "")(./variants/253 "") (./variants/254 "")(./variants/255 "")(./variants/256 "") ) (stderr="ferr.txt") (outputFiles=(./prognosis/p251 "")(./prognosis/p252 "")(./prognosis/p253 "") (./prognosis/p254 "")(./prognosis/p255 "")(./prognosis/p256 "")) (jobname="IASBPG17122011-хх") (notify="e mymail@gmail.com")
Команда executable говорит, что после того как ваша задачка попадет на любой удаленный кластер, на нем должен будет запуститься именно этот файл.
Команда notify позволит отправить Вам на почту уведомление о выполнении задачи.
inputFiles перечисляет все файлы необходимые для работы программы. Если используются дополнительные библиотеки или файлы входных данных, их необходимо включить в перечисление.
Содержимое файла task.sh идентично шагу запуска программы локально:
#!/bin/sh gcc ./062.c –lm –static –m32 sleep 1 ./a.out 251 ./a.out 252 ./a.out 253 ./a.out 254 ./a.out 255 ./a.out 256
В task.sh мы указываем набор команд которые должны будут запуститься на удаленном ГРИДовском кластере.
На удаленном кластере нам необходимо компилировать наш файл 062.с. Собственно это и сделаем.
После того как были созданы файлы task.sh и task1.xrsl необходимо перейти на этап передачи задачи в ГРИД.
NorduGrid Middleware предусматривает следующую команду: ngsub –f ./task1.xrsl
После этого задача будет размещена на доступный кластер. Если задача передана успешно, то на экран будет выведено сообщение с номером задачи типа:
[nicitiep@cluster iasbpg]$ ngsub -f ./task1.xrsl
Job submitted with jobid: gsiftp://uagrid.org.ua:2811/jobs/7429132311440713023391
Просмотреть статус выполнения задачи можно командой ngstat:
[nicitiep@cluster iasbpg]$ ngstat gsiftp://uagrid.org.ua:2811/jobs/7429132311440713023391
Job gsiftp://uagrid.org.ua:2811/jobs/7429132311440713023391
Шаг 6: После того как задача будет выполнена и статус будет FINISH, полученные данные необходимо забрать. Для этого используем команду ngget:
ngget gsiftp://uagrid.org.ua:2811/jobs/7429132311440713023391
Результаты будут копированы в корневую директорию пользователя
Для мониторинга ресурсов ГРИД, можно использовать Web-интерфейс: http://www.nordugrid.org/monitor/
Монитор ресурсов отображает текущее состояние всех кластеров Европы. С помощью данного сайта можно мониторить статусы выполнения задач, активность кластера, их загрузку, активных пользователей ГРИД и.т.д.
Вот собственно и всё. Очень надеюсь что информация помогла Вам разобраться в данном вопросе.
Если возникли дополнительные вопросы по данной теме, не стесняйтесь их задавать под статьей или пишите мне через форму обратной связи.
Удачи!