Кластер (практичний посібник)

Юрій Сбітнєв

Народився 1965 р. у Волгограді.

Освіта вища: Волгоградський державний університет, фізичний факультет, спеціальність – теоретична фізика.

З 1987 по 1997 р. – системний програміст ВЦ ВолДУ, старший викладач кафедри радіофізики фізичного факультету ВолДУ.

Наразі керівник Служби Інформаційно-Технічного Забезпечення ВАТ "Ювеліри Уралу", Корпорація ЯВА, Єкатеринбург.

Ubuntu кластер

sudo
*** ЩО ТАКЕ UBUNTU?

Дистрибутиви сімейства Ubuntu є комплектом спеціально підібраного програмного забезпечення. Це операційна система плюс безліч потрібних та корисних програм, які вільно та без обмежень можуть бути використані вами та вашими друзями та колегами. Базова повнофункціональна версія системи для персональних комп'ютерів та ноутбуків або версія для серверів займають лише 1 CD, тому ви легко можете отримати її для себе та ділитися з оточуючими. Спеціальні DVD версії дистрибутива включають практично все програмне забезпечення, яке вам знадобиться для вирішення будь-яких повсякденних завдань.

Для встановлення лінукс-кластера на основі дистрибутива Ubuntu вам знадобиться інсталяційний диск Ubuntu Desktop Edition, за допомогою якого ви інсталюєте операційну систему на консоль (головний комп'ютер) кластера. З того самого диска потрібно буде встановити операційну систему на обчислювальні вузли кластера. Однак, якщо обчислювальні вузли не передбачається використовувати як офісні машини, але тільки як вузли кластера, то на ці комп'ютери правильніше буде встановити серверну редакцію дистрибутива - Ubuntu Server Edition, що не містить графічного інтерфейсу, і відповідно більш легку і швидку.

Мережа кластера слід спроектувати так, щоб усі вузлимали доступ до інтернету. Це потрібно для більшого комфорту при налаштуванні кластера та встановлення необхідного програмного забезпечення на його вузлах. Справа в тому, що установка ПЗ в Ubuntu виконується за допомогою завантаження нових версій необхідних пакетів із зовнішніх репозиторіїв. Насправді достатньо буде забезпечити виходом до Інтернету лише головний комп'ютер (консоль кластера), а обчислювальних вузлів необхідна лише можливість завантажувати програмні пакети через проксі. Здійснити це можна, встановивши на консолі кластера пакетapt-cacher-ng, а на обчислювальних вузлах налаштувати менеджер пакетівapt-getдля роботи через проксі. Для цього на консолі кластера виконаємо команду:

sudo apt-get install apt-cacher-ng

Після цього на всіх інших вузлах виконаємо команди:

sudo sh -c "echo \"Acquire::http < Proxy "http://192.168.1.1:3142"; >; \"> /etc/apt/apt.conf.d/01proxy" sudo apt-get update

Після встановлення базової операційної системи необхідно доустановити необхідне для функціонування кластера за компіляторами, бібліотеками та програмами OpenMPI, SSH, NFS. Виконати це можна за допомогою наступних команд:

sudo apt-get install mc build-essential fort77 gfortran libstdc++5 libltdl7-dev sudo apt-get install openssh-server nfs-kernel-server sudo apt-get install openmpi-bin openmpi-doc

Ця послідовність команд встановлює в систему OpenMPI та компілятори з набору Gnu Compiller Collection (gcc). Компілятори gcc мають один істотний (у деяких випадках) недолік. Вони немає підтримки роботи з типами даних REAL*16 і COMPLEX*32 (у термінології Фортрана). Якщо для ваших завдань необхідна така точність обчислень, ви замість стандартного набору компіляторів і пакетаOpenMPI зі складу дистрибутива повинні встановити компілятори фірми Intel і скомпілювати OpenMPI з підтримкою цих компіляторів. Як це зробити – розказано у наступних двох параграфах цієї статті.Якщо ж точність REAL*8 і COMPLEX*16 вас влаштовує, то наступні два параграфи ви можете пропустити.

ВАЖЛИВО!Якщо ви вирішили використовувати компілятори фірми Intel, то не слід встановлювати OpenMPI зі складу дистрибутива. Тобто командуsudo apt-get install openmpi-bin openmpi-doc(див. вище) виконувати не слід.

*** ВСТАНОВЛЕННЯ КОМПІЛЯТОРА INTEL FORTRAN

Завантажити свіжу версію компілятора можна з офіційного сайту компанії Intel з цієї сторінки. Отримавши та розархівувавши у своєму домашньому каталозі архів з компілятором, виконаємо процедуру встановлення, запустивши скриптinstall.sh, який знаходиться в каталозі, що вийшов після розархівації. При запуску скрипт запитає вас у тому варіанті зробити установку компілятора. Потрібно вибрати варіант N3 - установку в користувальницький каталог. Для відповіді на всі подальші питання програми слід вибирати варіант, запропонований програмою за промовчанням.

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

echo ". $HOME/intel/Compiler/11.1/046/bin/ifortvars.sh ia32" >> $HOME/.bashrc

Ця команда побудована в припущенні, що використовується версія 11.1.046 компілятора. Якщо ж на той момент, коли ви скористаєтеся цими рекомендаціями, фірма Intel випустить нову версію, то команду треба буде виправитивідповідним чином.

*** УСТАНОВКА OpenMPI ДЛЯ КОМПІЛЯТОРА INTEL

На жаль, пакет OpenMPI, наявний у дистрибутиві Ubuntu, не знає про існування компілятора Intel. Тому його доведеться встановити з вихідних джерел, які можна завантажити з офіційного сайту проекту OpenMPI. Розархівувавши завантажений файл, перейдемо в отриманий в результаті цього каталог вихідних файлів і виконаємо процедуру встановлення, послідовно запустивши на виконання наступні команди:

./configure --prefix=$HOME/openmpi F77=ifort FC=ifort make make install

У випадку, якщо ви маєте намір використовувати і встановили крім компілятора Intel Fortran, так само і Intel С++, команда конфігурації повинна виглядати так:

./configure --prefix=$HOME/openmpi CC=icc CXX=icpc F77=ifort FC=ifort

Після закінчення процесу встановлення, як і у випадку з компілятором, необхідно виправити деякі змінні оточення. Робимо це за допомогою наступних команд, модифікуємо файл.bashrc:

echo "PATH=$HOME/openmpi/bin:\$PATH" >> $HOME/.bashrc echo "export PATH" >> $HOME/.bashrc echo "LD_LIBRARY_PATH=$HOME/openmpi/lib:\$LD_LIBRARY_PATH" >> $HOME/.bashrc echo "export LD_LIBRARY_PATH" >> $HOME/.bashrc

Після закінчення процедури необхідно перепідключитися до системи (перелогініться).

*** НАЛАШТУВАННЯ МЕРЕЖІ КЛАСТЕРА

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

На консолі кластера, виконавшинаступну команду, додаємо рядок у файл/etc/exportsдля створення мережного ресурсу:

sudo sh -c "echo \"$HOME/mpi 192.168.1.0/24(rw,insecure,noh >> /etc/exports"

Після цього необхідно перезапустити сервіс NFS:

sudo /etc/init.d/nfs-kernel-server restart

На решті вузлів кластера ми повинні будемо поправити файл/etc/fstab, додавши туди запис для автоматичного монтування мережного ресурсу. Робиться це командою:

sudo sh -c "echo \"192.168.1.1:$HOME/mpi $HOME/mpi nfs rsize=8192,wsize=8192,rw,auto,exec 0 0\" >> /etc/fstab"

Тепер для перевірки перезавантажимо обчислювальні вузли кластера. Після перезавантаження каталог mpi в домашній директорії користувача повинен бути змонтований і його вміст має бути еквівалентним вмісту такого ж каталогу на консолі кластера.

Якщо ви вирішили використовувати компілятор Intel Fortran/Intel C++ і, відповідно, на консолі кластера встановили цей компілятор і OpenMPI, зібраний з вихідних джерел, те ж саме ви повинні зробити на всіх обчислювальних вузлах. Проте останнє – не обов'язково. Натомість ви можете підключити по мережі (через NFS) каталоги зі встановленими компілятором і OpenMPI (openmpi та intel) аналогічно тому, як ви щойно це зробили підключаючи робочий каталог mpi. На додаток до цього необхідно підкоригувати на всіх обчислювальних вузлах кластера файл/etc/environmentтакими командами:

sudo sed -i -e 's; /etc/environment sudo sh -c "echo \"LD_LIBRARY_PATH=\\"$HOME/openmpi/lib:$HOME/intel/Compiler/11.1/046/lib/ia32:$HOME/intel/Compiler/ 11.1/046/lib/32 \">> /etc/environment"

*** НАЛАШТУВАННЯПАРАЛЕЛЬНОГО СЕРЕДОВИЩА

*** КОМПІЛЯЦІЯ ПАРАЛЕЛЬНОЇ ПРОГРАМИ

Для прикладу і для перевірки працездатності кластера завантажуємо до каталогу mpi тестову програму обчислення числа flops.f. Для компіляції необхідно виконати таку просту команду:

mpif77 flops.f -o flops

В результаті повинен вийде файл, що виконується з ім'ям "flops". Для запуску його в локальному однопроцесорному режимі достатньо запустити цей файл на виконання звичайним чином, тобто виконати команду/flops. На виході ми отримаємо інформацію про швидкість роботи програми. Якщо все пройшло нормально, можемо переходити до тестування кластера.

*** ЗАПУСК ПАРАЛЕЛЬНОЇ ПРОГРАМИ

Для запуску нашої програми паралельно на кількох процесорах (вузлах кластера) необхідно використовувати диспетчер завдань MPI або менеджер черг, наприклад, Torque. Про менеджер черг і ресурсів Torque ми поговоримо пізніше. Поки що обійдемося без нього. Нам знадобиться створений раніше файл-список вузлівmpi.hosts. За допомогою цього списку запуск нашої паралельної програми здійснюється командою:

mpiexec -hostfile mpi.hosts -np 5 ./flops

Параметр-np 5означає, що програму буде запущено на п'яти вузлах кластера. Відпрацювавши, програма видасть на екран інформацію про швидкісні характеристики кластера в цілому та окремих його вузлів.

У випадку, якщо ваша паралельна програма складається з окремих програмних модулів, то є можливість запускати разом як єдиний комплекс. Припустимо, що ваша програма складається з двох модулів - visio та calc. Модуль calc - це власне паралельна програма, яка в багатопроцесорному режимі обробляє великий масив даних і займає 5 процесорів кластера. Модуль visio -програма візуалізації даних. Програма visio має працювати одному процесорі. Запуск такої комплексної програми виглядатиме так: