Лабораторія технологій штучного інтелекту

(v.1.5)

 

Інструкція для користувачів навчального кластера паралельних та розподілених обчислень  

Львівського національного університету імені Івана Франка

 

Ця інструкція призначена для роботи на навчальному кластері Львівського національного університету ім. І. Франка. Вона містить мінімально необхідний обсяг інформації для роботи: опис процесу реєстрації, відомості про роботу в ОС Linux (вхід в систему, робота з каталогами і файлами, моніторинг) і роботу з MPI-програмами та непаралельними програмами на кластері (компіляція, запуск, зупинка, робота з чергами). Далі всюди під терміном «паралельна програма» слід розуміти лише MPI-програми.

Відповідно до оновлення наявного програмного забезпечення обчислювального кластера, додавання нових прикладних програм, програмних комплексів і бібліотек також буде оновлюватися ця інструкція. У зв’язку з цим прохання завжди використовувати останню версію інструкції, яку можна отримати за адресою http://cluster-edu.lnu.edu.ua на офіційному сайті навчального кластера, а також звернувшись безпосередньо до адміністратора кластера. У разі виникнення додаткових запитань чи ускладнень у використанні цієї інструкції, прохання звертатись до адміністратора навчального кластера за адресою  stolyarchuk@electronics.lnu.edu.ua.

 

Реєстрація

 

Для отримання логіна і паролю доступу пройти процедуру реєстрації користувача навчального кластеру. Порядок реєстрації визначається Правилами використання ресурсів навчального кластеру паралельних та розподілених обчислень Львівського національного університету імені Івана Франка

Після реєстрації користувач отримує системне ім'я (логін), пароль і домашню директорію. Наприклад, логін – koval_pm, пароль – ew2$!Qs, домашня директорія - /home/koval_pm.

 

Вхід в систему

 

Користувач має змогу працювати на обчислювальному кластері з будь-якого комп'ютера, що має доступ до мережі Інтернет. Для входу в систему користувачеві необхідно використовувати адресу сервера cluster-edu.lnu.edu.ua. Для входу використовується логін і пароль, отримані під час реєстрації.

Робота з системою здійснюється через захищений протокол SSH (Secure Shell). Для цього необхідно мати відповідне клієнтське програмне забезпечення, різне для різних операційних систем.

 

Вхід з Windows-машини

 

Робота з системою здійснюється за допомогою будь-якого SSH-клієнта, що працює в ОС Windows. Рекомендується використовувати клієнт PuTTY. Ця програма вільно розповсюджується, проста у використанні і доступна в Інтернеті за адресою www.chiark.greenend.org.uk/~sgtatham/putty/.

Після запуску програми користувач повинен вибрати протокол SSH і в полі «Host Name (or IP address)» вказати адресу сервера (cluster-edu.lnu.edu.ua). Натиснення на «Open» приведе до відправки запиту на підключення. У разі успішного підключення до сервера буде запропоновано ввести ім'я (логін), а потім і пароль.

Під час уведення пароля символи на екрані не відображаються. Якщо все введено правильно, то користувач автоматично опиниться у своїй домашній директорії.

На кластері існує єдиний дисковий простір. Всі вузли використовують дисковий масив сервера за допомогою мережевої файлової системи NFS (Network File System).

Робота в SSH-сесії відбувається в термінальному (текстовому, консольному) режимі. Необхідно пам'ятати, що консоль Linux, на відміну від Windows, розрізняє регістр символів, що вводяться, тобто, наприклад, document.dat і Document.DAT – різні файли.

 

Вхід з Unix/Linux машини

 

Як правило, в будь-який дистрибутив Unix/Linux входить термінальний SSH-клієнт. Мінімальний формат команди для підключення такий:

 

ssh -l <ім’я_користувача>       

 

або

 

ssh <ім’я_користувача>@      

 

Більшість користувачів UNIX-подібних систем знайома з протоколом SSH, тому труднощів з підключенням у них виникнути не має.

 

Копіювання файлів

 

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

 

Примітка:

Хоча протокол SFTP забезпечує захист передаваних даних, захист даних на кластері (у домашній директорії) покладений на користувача. Рекомендується встановити права доступу на домашню директорію тільки для користувача (за замовчуванням задаються саме такі права). Для отримання повнішої інформації необхідно обернути до будь-якого керівництва користувача Linux.

 

Копіювання файлів у UNIX/Linux здійснюється за допомогою утиліти scp. Формат цієї команди еквівалентний стандартній команді копіювання файлів cp.

Нижче представлений приклад команди для копіювання в локальній обчислювальній мережі користувачем test теки program і всіх її підпапок в домашню директорію на кластері:

 

scp –r ./program test@cluster-edu.lnu.edu.ua:$HOME

 

Першим обов'язковим параметром цієї команди є копійований файл (тека) – джерело. У показаному прикладі це ./program. Ключ -r указує на рекурсивне копіювання всіх підкаталогів. test@cluster-edu.lnu.edu.ua:$HOME – адреса приймача. Формат адреси: ім’я_користувача@адреса_призначення:файл_або_папка_приймач. $HOME стандартна змінна оточення, що містить розташування домашньої теки користувача. В даному випадку $HOME еквівалентне /home/test.

Багато користувачів Windows, можливо, вважатимуть за краще користуватися звичнішими графічними оболонками. Часто використовується вільно поширювана програма WinSCP, що є клієнтом у стилі провідника Windows або Norton Commander за вибором користувача. Скачати програму можна за адресою winscp.net/eng/docs/lang:uk. Крім того, існує плагін WinSCP для Far Manager. Цей плагін встановлюється автоматично і майже не вимагає налаштування. Для будь-якої з програм налаштування мінімальні: адреса сервера і порт номер 22.

 

Примітка:

Максимальний розмір домашньої директорії користувача може бути обмежений. Користувачам не слід зберігати на сервері файли, не пов’язані безпосередньо з розрахунками.

 

Робота на кластері

 

Для роботи на обчислювальному кластері зручно користуватися файловим менеджером Midnight Commander, який включає редактор текстових файлів. Універсальним способом роботи на кластері є робота через консоль. Обидва способи стисло описано нижче.

 

Структура файлової системи

 

Користувачеві слід знати місце розташування основних програм, які можуть знадобитися для роботи на обчислювальному кластері.

Директорія /usr/lib64 містить встановлені програми:

/usr/lib64/openmpi – поточна версія MPI-дистрибутива OpenMPI

/usr/lib64/mpich2 – поточна версія MPI-дистрибутива MPICH2

/usr/bin/fftw-wisdom – бібліотека FFTW

 

Навігація

 

На кластері користувачеві доступний на запис тільки його домашній каталог і каталог /tmp для тимчасово створюваних файлів. Для роботи з файлами і каталогами існує декілька корисних команд:

ls                                                           Показати список тек і файлів в поточному каталозі

pwd                                          Показати ім'я поточного каталогу

cd <назва_каталогу>             Змінити каталог

mkdir <назва_каталогу>      Створити каталог

clear                                         Очищення екрану

cp <що> <куди>                      Копіювання файлів і каталогів

mv <що> <куди>                     Переміщення файлів і каталогів

 

Примітка:

Докладну довідку про ці команди, а також про всі інші можна отримати, набравши в консолі man <ім’я_команди>. Для ефективної роботи з консоллю рекомендується звернутися до керівництва користувача операційної системи Linux.

 

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

Запустити файловий менеджер Midnight Commander можна, набравши в консолі команду mc. Інтерфейс Midnight Commander зовні схожий на Norton Commander або FAR. Midnight Commander дає змогу користувачеві працювати в консольному режимі зручнішим і звичнішим способом.

 

Примітка:

У випадку недостатньої пропускної здатності з'єднання (особливо через Інтернет) використання mc може сповільнити роботу, оскільки витрачається час на промальовування інтерфейсу. В цьому випадку рекомендуємо користуватися консольними командами.

 

Редагування файлів

 

Користувачеві рекомендується основну частину початкових файлів готувати на своєму локальному комп'ютері у звичних текстових редакторах. Для внесення невеликих змін до файлів добре підходить вбудований в mc редактор.

У цьому редакторі присутні всі основні засоби, наявні в подібних програмах: копіювання, вставка, пошук, заміна, підсвічування синтаксису, ряд інших.

Якщо необхідні складніші засоби редагування, то можна використовувати редактор vi. Основна функція vi — робота з початковими текстами програм. Перевагами цього редактора є велика кількість функцій, швидкість роботи (редактор повністю консольний). Недолік редактора – досить складне управління, яке не можна назвати інтуїтивно зрозумілим користувачам, звиклим до роботи в ОС Windows. За повним переліком доступних команд редактора vi рекомендується звернутися до відповідної man-сторінки.

Запустити vi можна командою:

 

vi ім’я_файлу.

 

 

Паралельні обчислення

 

Компіляція MPI-програм

 

Користувачеві кластера доступні реалізації стандарту MPI MPICH2 та OpenMPI. Кожна реалізація підтримує мови програмування С (компілятор gcc), С++ (компілятор g++) і Фортран-77 (компілятор f77).

 

Для компіляції паралельних програм слід використовувати такі команди:

-          mpicc для компіляції програми на мові C;

-          mpiCC для компіляції програми на мові C++;

-          mpif77 для компіляції програми на мові Фортран 77.

 

Основні параметри для всіх трьох компіляторів однакові. У простому випадку скомпілювати С++ програму можна так:

 

/usr/lib64/openmpi/bin/mpiCC –o test ./test.cpp

 

Для Fortran-77:

 

/usr/lib64/openmpi/bin/mpif77 –o test ./test.f

 

У даному прикладі показаний приклад компіляції паралельної програми з використанням MPI з дистрибутива OpenMPI. Це означає, що для запуску цієї програми необхідно використовувати команди дистрибутива OpenMPI саме тієї версії, за допомогою якої була виконана компіляція, і ніякого іншого. Дізнатися версію OpenMPI можна за допомогою команди /usr/lib64/openmpi/bin/ompi_info (номер версії виводиться на самому початку).

Ту ж саму програму можна скомпілювати, використовуючи дистрибутив MPICH2:

 

/usr/lib64/mpich2/gnu/bin/mpicxx –o test ./test.cpp

 

Для Fortran-77:

 

/usr/lib64/mpich2/gnu/bin/mpif77 –o test ./test.f

 

Як і у попередньому випадку, запускати скомпільовану таким чином програму можна тільки за допомогою дистрибутива MPICH2 відповідної версії, номер якої можна дізнатися за допомогою команди /usr/lib64/mpich2/bin/mpich2version.

У випадку оновлення версії дистрибутива MPI необхідно наново провести компіляцію прикладних програм.

 

Примітка:

В ОС Windows виконувані файли мають певне розширення: exe, bat, cmd, com і ряд інших. Файли тільки таких типів можуть бути виконані. У Linux виконувані файли визначаються не їх розширенням, а встановленням бітів виконання. В Linux можна зробити виконуваним будь-який файл, незалежно від розширення, виконавши команду: chmod 755 <ім’я_файлу>.

 

Про інші параметри компіляторів можна дізнатися, набравши в консолі man g++, man gcc, man g77 або звернувшись до відповідного керівництва користувача.

 

Примітка:

Практично всі реалізації MPI підтримують запуск паралельних застосувань в режимі емуляції на окремо узятій робочій станції. Це можна робити як на Linux, так і Windows-машинах. Для успішного портування програм з Windows на Linux не слід використовувати розширення програмування, що надаються середовищами, такими як VisualStudio і BorlandBuilder.

Підготовлені початкові коди програм, перевірені і відлагоджені на локальному комп'ютері, рекомендується компілювати на кластері під певну версію дистрибутива MPI. Тільки в цьому випадку можна гарантувати успішне виконання програми.

Якщо використання початкового коду з яких-небудь причин неможливе або недоцільне, можливе виконання бінарних файлів форматів elf, а.out, скомпільованих під Linux. При цьому необхідно дотримуватися наступних рекомендацій:

-        Слід враховувати архітектуру процесора. Не слід застосовувати оптимізацію, доступну на іншій архітектурі, наприклад технологію 3DNow у процесорах AMD.

-        Збіг версій бібліотек, що динамічно підключаються. У випадку невідповідності версій слід використовувати статичне компілювання – ключ "-static".

-        Збіг версії дистрибутива MPI. Локальні паралельні бібліотеки користувача  повинні бути скомпільовані з цією ж версією MPI.

 

Запуск програм

 

Для запуску завдань на обчислювальному кластері необхідно користуватися менеджером ресурсів і черг Sun Grid Engine (SGE). Коротко це можна описати таким чином: користувач готує файл завдання для SGE і ставить його в чергу командою qsub. При цьому користувач запитує необхідні для цього завдання ресурси: число вузлів кластера, число процесорів на кожному з них, необхідну кількість оперативної пам'яті і час виконання завдання.

Кількість вузлів у кластері становить 14. Оптимальна кількість запущених процесів – до 28.

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

Щоб запускати паралельні програми, можна використовувати MPICH2 або OpenMPI. Вони розміщені у папках /usr/lib64/mpich2/ та /usr/lib64/openmpi/ відповідно.

Для запуску завдань використовуються скрипти SGE. SGE-скрипт – це звичайний shell-скрипт, в якому у вигляді спеціальним чином оформлених коментарів, що починаються з #$, можна передати менеджерові ресурсів необхідні параметри, і далі скрипти і/або програми, які необхідно виконати на кластері.

Шаблон скрипта SGE розміщений у файлі "template.sge", туди слід додати рядок запуску програми:

 
/usr/lib64/openmpi/bin/mpirun <шлях до програми> - у випадку використання OpenMPI
/usr/lib64/mpich2/bin/mpirun <шлях до програми> - у випадку використання MPICH2
 

Зразок оформлення скрипта:

 
#!/bin/bash
#
#$ -cwd
#$ -j y
#$ -S /bin/bash
#
/usr/lib64/openmpi/bin/mpirun $HOME/test/mpi-ring
 

Рядки, які починаються з #$, розглядатимуться, як елементи налаштування SGE.

 
-cwd – виконувати завдання для поточного робочого каталога. 
-j y – додати стандартний потік помилок у стандартний вихідний потік
      
замість окремого потоку помилок і вихідного потоку.
-S /bin/bash – конкретизує командний інтерпретатор, щоб завдання виконувалось у bash.
 

Готовий скрипт має бути у тій самій папці, що й програма.

Стандартний вивід у SGE пересилається у файл <ім'я скрипта>.o<номер завдання>

Команди SGE:

 
qsub -pe orte <кількість потоків, у нас до 28> <скрипт> # постановка у чергу
qstat                                      
            # показує статус запущених завдань
qdel <Nr завдання>                                      # примусове завершення завдання
 

У команді qsub параметр прапорця -pe може набувати значення "orte" (для OpenMPI) або "mpich" (для MPICH).

Як зразок у домашні папки додано папку із програмою flops.

Нижче показаний приклад послідовного сценарію завдання, sleep.sh. Він виконує команду бездіяльності (sleep).

 
$ cat sleep.sh 
#!/bin/bash
#
#$ -cwd
#$ -j y
#$ -S /bin/bash
#
date
sleep 10
date
 

Щоб надіслати цей послідовний сценарій завдання на виконання, ви повинні використати команду qsub.

 
$ qsub sleep.sh
your job 16 ("sleep.sh") has been submitted
 

Далі показано приклад запуску паралельного завдання.

Спершу скопіюємо і скомпілюємо тестову програму MPI. Виконаємо такі команди:

 
$ cd $HOME 
$ mkdir test 
$ cd test
$ cp /usr/src/mpi-tests/*.c . 
$ cp /usr/src/mpi-tests/Makefile .
$ make
 

Наступний крок – створення сценарію SGE для mpi-ring. Програма mpi-ring пересилає повідомлення розміром 1 МБ по колу між усіма процесами завдання MPI. Процес 0 надсилає повідомлення розміром 1 МБ процесові 1, потім процес 1 надсилає повідомлення розміром 1 МБ процесові 2, і т.д. Створюємо файл із назвою $HOME/test/mpi-ring.sge, і записуємо в нього наступне:

 
#!/bin/bash 
#
#$ -cwd
#$ -j y
#$ -S /bin/bash
#
/usr/lib64/openmpi/bin/mpirun $HOME/test/mpi-ring
 

Команда, яка надсилатиме сценарій паралельного завдання MPI, подібна до команди запуску послідовного сценарію, але містить додатковий параметр -pe orte N. N – число процесів, які ви хочете виділити для програми MPI. Далі – приклад надсилання завдання, яке використовуватиме 2 процесори:

 
$ qsub -pe orte 2 mpi-ring.sge 
 

Коли завдання завершиться, його вивід буде скеровано у файл mpi-ring.sge.o* (замість * буде відображений номер, який присвоїть завданню SGE). Повідомлення про помилки, що стосуються завдання, будуть у файлі mpi-ring.sge.po*.

Щоб виконати завдання на більшій кількості процесорів, слід лише змінити число, що ставиться після прапорця -pe orte. Наприклад, надсилання завдання на 16 процесорів виглядатиме так:

 
$ qsub -pe orte 16 mpi-ring.sge 
 

Якщо потрібно з якоїсь причини видалити вже поставлене в чергу завдання, ви можете використовувати команду qdel із номером завдання. Далі – приклад видалення роботи, що перебуває в стані виконання під SGE:

 
$ qsub sleep.sh 
your job 31 ("
sleep.sh") has been submitted
$ qstat
job-ID 
prior name       user         state submit/start at     queue      master  ja-task-ID
---------------------------------------------------------------------------------------------
    31      0 sleep.sh   koval_pm     t     06/24/2012 01:10:28 default    MASTER
$ qdel 31
koval_pm has registered the job 31 for deletion
$ qstat
$
 

 

Система управління завданнями

 

Як вже було сказано вище, щоб уникнути різного роду конфліктів і перевантаження обчислювального кластера при використанні його декількома користувачами, користувачі повинні запускати свої завдання тільки через систему управління завданнями SGE.

Про те, як поставити завдання в чергу, вже було розказано вище. У даному розділі приводиться ряд корисних команд, використання яких підвищує гнучкість управління завданнями.

Після того, як завдання успішно поставлене в чергу, йому присвоюється унікальний ідентифікатор завдання (Job ID). Використовуючи цей номер, можна маніпулювати завданням в черзі:

·         qstat       Подивитися стан черги;

·         qdel       Видалити завдання з черги;

·         qalter     Змінити параметри вже запущеного завдання;

·         qrerun    Перезапустити завдання, якщо це можливо;

·         qhold     Призупинити завдання;

·         qrls         Запустити призупинене завдання.

 

Кожна з цих команд має багато параметрів, ознайомитися з якими користувач може за допомогою команди man <ім'я команди>, наприклад man qstat. Про інші команди системи SGE читайте в керівництві користувача.

Якщо завдання було успішно поставлене в чергу, qstat за умовчанням виведе на екран таблицю, стовпці якої мають наступні значення:

job ID – унікальний ідентифікатор завдання;

name імя виконуваного завдання;

user імя власника завдання;

state – статус

submit/start at – час запуску завдання

queue – назва черги, в якій запущено завдання.

 

Ось приклад виводу на екран після запуску команди qstat:

 

job-ID  prior name       user         state submit/start at     queue      master  ja-task-ID
---------------------------------------------------------------------------------------------
    31      0 sleep.sh   koval_pm     t     06/24/2012 01:10:28 default    MASTER

Для отримання докладнішої інформації, користувач може скористатися ключем -a.

Ще один корисний ключ команди qstat дозволяє подивитися, на яких саме вузлах і процесорах виконується завдання. Це ключ -q.

Запуск непаралельних програм також повинен проводитися в рамках системи управління завданнями SGE.

 

Розподілені обчислення

 

Виконання розподілених завдань під управлінням системи Condor

 

Розподілені обчислення полягають в обробці незалежних між собою підзавдань для отримання одного кінцевого результату. Система Condor під управлінням кластерної операційної системи дає можливість створювати черги завдань, які виконуються відповідно до заданих правил у строго визначеному чи невизначеному порядку на тих чи інших вузлах кластера.

 

Для того щоб виконати розподілені обчислення з використанням системи Condor, потрібно визначити правила і послідовність виконання програм, надати виконавчі файли програм і потрібні вхідні файли. Програми, що виконуються раніше можуть створювати вхідні файли для програм, що виконаються пізніше. Детальну інформацію про доступні варіанти виконання програм можна отримати у документації.

 

В загальному випадку для підготовки завдань до виконання під управлінням системи Condor потрібно:

  1. Підготувати вхідні дані для окремих завдань (вручну чи за допомогою програмних засобів).
  2. Вибрати середовище (набір умов) в якому повинні виконуватись завдання. Забезпечити доступ до вхідних і вихідних файлів завдань тим чи іншим способом (NFS, Condor FileTransfer, …).
  3. Створити виконавчий файл програми, який повинен виконуватися на робочих вузлах відповідно до вимог системи Condor та встановленої операційної системи.
  4. Створити файл опису завдання Condor з параметрами виконання, вказаними вхідними і вихідними файлами і т.д.
  5. Додати завдання в чергу Condor за допомогою команди condor_submit.
  6. Після виконання завдань отримати вихідні файли (відповідно до способу виконання завдань) та при потребі виконати програму обробки результатів.

 

Підготовані фали слід помістити в робочу директорію доступну користувачеві.

 

Приклад файлу опису завдань:

 

Executable   =      condor_segment

Universe     =      vanilla

 

Error  =      log/err.segment.$(Process)

Input  =      in/$(Process)_1

Output =      out_$(Process)_1

Log          =      log/condor_segment.log

 

Arguments    =      $(Process)

 

Should_transfer_files      =      YES

When_to_transfer_output    =      ON_EXIT

Transfer_input_files       =      in/$(Process)_0, in/$(Process)_1

 

Queue 162

 

Цей файл опису визначає 162 завдання з виконавчим файлом condor_segment. Середовище виконання ”vanilla”. Файл звіту про виконання підзавдань condor_segment.log по завершенню виконання буде знаходитися в піддиректорії log. В разі помилок виконання в цій же директорії будуть знаходитися файли вигляду err.segment.х де замість х – номер підзавдання. Регулярний вираз $(Process) означає номер виконуваного підзавдання. Потік стандартного вводу stdin (з клавіатури) буде перенаправлений на файли в піддиректорії in вигляду x_1 х – номер підзавдання. Потік стандартного виводу stdout (на екран) буде перенаправлений у файли вигляду out_x_1, х – номер підзавдання. При виконанні кожного підзавдання виконавчий файл condor_segment буде виконуватися з аргументом командної стрічки, в якому буде вказаний номер підзавдання. Вхідні і вихідні файли будуть пересилатися між виконавчими вузлами і управляючим вузлом засобами системи CondorFileTransfer. Перед виконанням підзавдання вхідні файли будуть пересилатися з піддиректорії in. По завершенню виконання підзавданя утворені вихідні файли будуть пересилатися в робочу директорію.

 

Детальну інформацію по роботі з системою Condor можна отримати з документації.

 

© 2003- Лабораторія технологій штучного інтелекту,
Львівський національний університет імені Івана Франка
Останні зміни ▲ Нагору ▲