|
|
Ця інструкція призначена для роботи на навчальному кластері Львівського національного університету ім. І. Франка. Вона містить мінімально необхідний обсяг інформації для роботи: опис процесу реєстрації, відомості про роботу в ОС Linux (вхід в систему, робота з каталогами і файлами, моніторинг) і роботу з MPI-програмами та непаралельними програмами на кластері (компіляція, запуск, зупинка, робота з чергами). Далі всюди під терміном «паралельна програма» слід розуміти лише MPI-програми. Відповідно до оновлення наявного програмного забезпечення обчислювального кластера, додавання нових прикладних програм, програмних комплексів і бібліотек також буде оновлюватися ця інструкція. У зв’язку з цим прохання завжди використовувати останню версію інструкції, яку можна отримати за адресою cluster-edu.wups.lviv.ua на офіційному сайті навчального кластера, а також звернувшись безпосередньо до адміністратора кластера. У разі виникнення додаткових запитань чи ускладнень у використанні цієї інструкції, прохання звертатись до адміністратора навчального кластера за адресою info@cluster-edu.wups.lviv.ua.
Реєстрація
Для отримання логіна і паролю доступу пройти процедуру реєстрації користувача навчального кластеру. Порядок реєстрації визначається “Правилами використання ресурсів навчального кластеру паралельних та розподілених обчислень Львівського національного університету імені Івана Франка” Після реєстрації користувач отримує системне ім'я (логін), пароль і домашню директорію. Наприклад, логін – koval_pm, пароль – ew2$!Qs, домашня директорія - /home/koval_pm.
Вхід в систему
Користувач має змогу працювати на обчислювальному кластері з будь-якого комп'ютера, що має доступ до мережі Інтернет. Для входу в систему користувачеві необхідно використовувати адресу сервера cluster-edu.wups.lviv.ua . Для входу використовується логін і пароль, отримані під час реєстрації. Робота з системою здійснюється через захищений протокол SSH (Secure Shell). Для цього необхідно мати відповідне клієнтське програмне забезпечення, різне для різних операційних систем.
Вхід з Windows-машини
Робота з системою здійснюється за допомогою будь-якого SSH-клієнта, що працює в ОС Windows. Рекомендується використовувати клієнт PuTTY. Ця програма вільно розповсюджується, проста у використанні і доступна в Інтернеті за адресою www.chiark.greenend.org.uk/~sgtatham/putty/. Після запуску програми користувач повинен вибрати протокол SSH і в полі «Host Name (or IP address)» вказати адресу сервера (cluster-edu.wups.lviv.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.wups.lviv.ua:$HOME
Першим обов'язковим параметром цієї команди є копійований файл (тека) – джерело. У показаному прикладі це ./program. Ключ -r указує на рекурсивне копіювання всіх підкаталогів. test@cluster-edu.wups.lviv.ua:$HOME – адреса приймача. Формат адреси: ім’я_користувача@адреса_призначення:файл_або_папка_приймач. $HOME – стандартна змінна оточення, що містить розташування домашньої теки користувача. В даному випадку $HOME еквівалентне /home/test. Багато користувачів Windows можливо вважатимуть за краще користуватися звичнішими графічними оболонками. Часто використовується вільно поширювана програма WinSCP, що є клієнтом у стилі провідника Windows або Norton Commander за вибором користувача. Скачати програму можна за адресою winscp.net/eng/docs/lang:uk. Крім того, існує плагін WinSCP для Far Manager. Цей плагін встановлюється автоматично і майже не вимагає налаштування. Для будь-якої з програм налаштування мінімальні: адреса сервера і порт номер 22.
Примітка: Максимальний розмір домашньої директорії користувача може бути обмежений. Користувачам не слід зберігати на сервері файли, не пов’язані безпосередньо з розрахунками.
Робота на кластері
Для роботи на обчислювальному кластері зручно користуватися файловим менеджером Midnight Commander, який включає редактор текстових файлів. Універсальним способом роботи на кластері є робота через консоль. Обидва способи стисло описано нижче.
Структура файлової системи
Користувачеві слід знати місце розташування основних програм, які можуть знадобитися для роботи на обчислювальному кластері. Директорія /opt містить встановлені програми: /opt/openmpi – поточна версія MPI-дистрибутива OpenMPI /opt/mpich2 – поточна версія MPI-дистрибутива MPICH2 /opt/rocks/lib/ – бібліотека 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).
Для компіляції паралельних програм слід використовувати такі команди: - mpicxx для компіляції програми на мові C або C++; - mpicc для компіляції програми на мові C; - mpif77 для компіляції програми на мові Фортран 77.
Основні параметри для всіх трьох компіляторів однакові. У простому випадку скомпілювати С++ програму можна так:
/opt/openmpi/bin/mpicxx –o test ./test.cpp
Для Fortran-77:
/opt/openmpi/bin/mpif77 –o test ./test.f
У даному прикладі показаний приклад компіляції паралельної програми з використанням MPI з дистрибутива OpenMPI. Це означає, що для запуску цієї програми необхідно використовувати команди дистрибутива OpenMPI саме тієї версії, за допомогою якої була виконана компіляція, і ніякого іншого. Дізнатися версію OpenMPI можна за допомогою команди /opt/openmpi/bin/ompi_info (номер версії виводиться на самому початку). Ту ж саму програму можна скомпілювати, використовуючи дистрибутив MPICH2:
/opt/mpich2/gnu/bin/mpicxx –o test ./test.cpp
Для Fortran-77:
/opt/mpich2/gnu/bin/mpif77 –o test ./test.f
Як і у попередньому випадку, запускати скомпільовану таким чином програму можна тільки за допомогою дистрибутива MPICH2 відповідної версії, номер якої можна дізнатися за допомогою команди /opt/mpich2/gnu/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. Вони розміщені у папках /opt/mpich2/ та /opt/openmpi/ відповідно. Для запуску завдань використовуються скрипти SGE. SGE-скрипт – це звичайний shell-скрипт, в якому у вигляді спеціальним чином оформлених коментарів, що починаються з #$, можна передати менеджерові ресурсів необхідні параметри, і далі скрипти і/або програми, які необхідно виконати на кластері. Шаблон скрипта SGE розміщений у файлі "template.sge", туди слід додати рядок запуску програми:
/opt/openmpi/bin/mpirun <шлях до програми> - у випадку використання OpenMPI
Зразок оформлення скрипта:
#!/bin/bash
Рядки, які починаються з #$, розглядатимуться, як елементи налаштування SGE.
-cwd – виконувати завдання для поточного робочого каталога.
Готовий скрипт має бути у тій самій папці, що й програма. Стандартний вивід у SGE пересилається у файл <ім'я скрипта>.o<номер завдання> Команди SGE:
qsub -pe orte <кількість потоків, у нас до 28> <скрипт> # постановка у чергу
У команді qsub параметр -pe може набувати значення "orte" (для OpenMPI) або "mpich" (для MPICH). Як зразок у домашні папки додано папку із програмою flops. Нижче показаний приклад послідовного сценарію завдання, sleep.sh. Він виконує команду бездіяльності (sleep).
[sysadm1@frontend-0 sysadm1]$ cat sleep.sh
Щоб надіслати цей послідовний сценарій завдання на виконання, ви повинні використати команду qsub.
[sysadm1@frontend-0 sysadm1]$ qsub sleep.sh
Далі показаний приклад запуску паралельного завдання. Спершу скопіюємо і скомпілюємо тестову програму MPI. В якості звичайного користувача виконаємо такі команди:
$ cd $HOME
$ mkdir test
$ cp /opt/mpi-tests/src/*.c .
Наступний крок – створення сценарію SGE для mpi-ring. Програма mpi-ring пересилає повідомлення розміром 1 МБ по колу між усіма процесами завдання MPI. Процес 0 надсилає повідомлення розміром 1 МБ процесові 1, потім процес 1 надсилає повідомлення розміром 1 МБ процесові 2, і т.д. Створіть файл із назвою $HOME/test/mpi-ring.sge, і помістіть у нього наступне:
#!/bin/bash
Команда, яка надсилатиме сценарій паралельного завдання 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:
[sysadm1@frontend-0 sysadm1]$ qsub fluent.sh
Система управління завданнями
Як вже було сказано вище, щоб уникнути різного роду конфліктів і перевантаження обчислювального кластера при використанні його декількома користувачами, користувачі повинні запускати свої завдання тільки через систему управління завданнями 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 Для отримання докладнішої інформації, користувач може скористатися ключем -a. Ще один корисний ключ команди qstat дозволяє подивитися, на яких саме вузлах і процесорах виконується завдання. Це ключ -q. Запуск непаралельних програм також повинен проводитися в рамках системи управління завданнями SGE.
|