Skip to content
UKENRU
Kyiv, Ukrainemail@dvornichenko.com
Михайло Дворниченко Архітектор рішень · SK.AI
Home Blog Всі записи

Як відправити задачу в ГРІД

У тих, хто тільки почав розбиратися з ГРІД-обчисленнями, виникає дуже багато запитань. Здається, ідею ГРІД ти розумієш, але щойно починаєш копати глибше в технічні деталі — опиняєшся над прірвою власного незнання. Інформації на ці теми 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:

Підключаємося через SSH до сервера
Підключаємося через SSH до сервера

 

Крок 2: Щоб авторизуватися в ГРІД, треба додати свій сертифікат, отриманий у реєстратора. Для цього створюємо в кореневому каталозі користувача папку «.globus».

У цю папку кладемо файл сертифіката і файл відкритого ключа (.pem).

Файл сертифіката і файл відкритого ключа (.pem)
Файл сертифіката і файл відкритого ключа (.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/

Монітор ресурсів показує поточний стан усіх кластерів Європи. Через цей сайт можна стежити за статусами виконання задач, активністю кластерів, їхньою завантаженістю, активними користувачами ГРІД тощо.

 

Ось, власне, і все. Дуже сподіваюся, що інформація допомогла Вам розібратися в цьому питанні.

Якщо є ще запитання з цієї теми, не соромтеся ставити їх під статтею або пишіть мені через форму зворотного зв’язку.

Успіхів!

 



Michael Dvornichenko Архітектор рішень · SK.AI

Leave a comment

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *