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

Матеріал із Xgu.ru

Ця сторінка знаходиться в розробці. Ця сторінка ще не закінчена. Інформація, представлена ​​тут, може бути неповною або неправильною.

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

Короткий URL: octave/mpi

Зміст

[ред.] Вступ

[ред.] Налаштування мережі

Для реалізації паралельних обчислень можна використовувати:

  • мережу віртуальних машин, що діють на одному комп'ютері (з практичної точки зору, доцільно лише для навчання та тестування);
  • локальну мережу;
  • мережа віртуальних машин Amazon EC2

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

Файл /etc/network/interfaces машиниlinux1

auto lo iface lo inet loopback iface eth1 inet static address 192.168.0.1 netmask 255.255.255.0

Файл /etc/hosts машиниlinux1

Конфігурація інших машин аналогічна.

[ред.] Інсталяція (виконується наlinux1)

Оскільки більша половина необхідних програм є в репозиторії Debian, є два шляхи їх встановлення.

Перший - традиційний за допомогою apt. З погляду користувача це найшвидший і найпростіший спосіб. Однак на численних форумах, та й самі розробники, рекомендують виконувати встановлення з вихідних джерел, аргументуючи це тим, що при компіляції можна включати/відключати ті чи інші опції, оптимізуючи цим програми під свої потреби. Недоліком другого способу вважатимутьсянеобхідність також вручну довстановлювати супутні пакети (наприклад, компілятори g++, f77; пакети типу ncurses, octplot; різноманітних бібліотеки та ін.).

З вказаних вище причин, розглянемо обидва способи встановлення пакетів Octave та OpenMPI, а також загальний варіант налаштування MPI Toolbox.

Увага!Виконання паралельних програм, написаних з використанням MPI, не рекомендується виконувати від іменіroot. Тому для початку командоюadduserзаводимо нового користувача під назвоюmpi.

[ред.] Встановлення Octave та OpenMPI з вихідних джерел

Отже, спочатку потрібно отримати вихідні коди пакетів. На момент написання статті це були: octave-3.0.0.tar.bz2 та openmpi-1.2.5.tar.bz2.

Розархівуємо ці пакети в будь-яку папку, наприклад/var/tmp. І по черзі виконуємо такі дії.

# cd /var/tmp/openmpi-1.2.5 # ./configure --prefix=/home/mpi/openmpi-1.2.5 --enable-mpi-threads # make # make install # # cd /var/tmp/octave-3.0.0 # ./configure --prefix=/home/mpi/octave-3.0.0 --enable-shared # make # make install

Установку ми будемо виконувати в домашній каталог користувачаmpi(параеметр --prefix), ну а про інші параметри можна докладніше дізнатися з:

Після приблизно півгодини збірки (якщо не потрібно щось встановити) отримаємо майже готові для використання програми.

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

. export PATH=$PATH:/home/mpi/octave-3.0.0/bin export PATH=$PATH:/home/mpi/openmpi-1.2.5/bin/ export LD_LIBRARY_PATH=" /home/mpi/openmpi-1.2.5/lib"

Щодо опису кластера, то в openmpi ця процедура виконується за допомогою редагування конфігураційного файлу: за умовчанням це/home/mpi/openmpi-1.2.5/etc/openmpi-default-hostfile.

Для початку залишимо в ньому лише один рядок:

[ред.] Встановлення Octave та OpenMPI у Debian

Тут все дуже просто:

Установка буде виконана в каталог/usr, шляхи до якого і так вже є $PATH. Єдина відмінність від наведеного вище способу - файл опису кластераopenmpi-default-hostfileбуде знаходитися в каталозі/etc/openmpi.

[ред.] Налаштування MPI Toolbox

Ми говоримо про налаштування пакету mpitb, оскільки він не потребує інсталяції. Просто завантажуємо з сайту http://atc.ugr.es/javier-bin/mpitb архів (на момент написання статті це був файл mpitb-beta-FC6-OCT2912-LAM713-OMPI123.tar.bz2) та розархівуємо його до каталогу користувачаmpi.

1) У домашньому каталозі/home/mpiнашого користувача створюємо файл.octavercі дописуємо туди рядки (якщо він вже існує, то просто замінюємо вміст):

2) Робимо посилання на вказаний файл:

# cd /home/mpi/mpitb видаляємо старе посилання # rm ./DLD створюємо новий каталог (включаємо в назви наявні версії програм) # mkdir DLD-oct3.0.0-ompi1.2.5 -gcc4.2-i386 . і нове посилання # ln -s DLD-oct3.0.0-ompi1.2.5-gcc4.2-i386 DLD переходимо в каталог з вихідними кодами # cd ./src видаляємо старий Makefile.include # rm ./Makefile.inc далі посиланням пов'язуємо з Makefile.inc.OMPI (не з Makefile.inc.LAM) # ln -s Makefile.inc.OMPI Makefile.inc ну і як завжди # make

[ред.] Тестування

Для початку в консолі логінімся під користувачемmpiізапускаємо Оctave. У звіті про завантаження має виводитися запрошення типуMinimal test., потім набираємо:

Якщо бачимо щось схоже на зображення нижче - мінімальний тест пройдено. Якщо ж ні, то перевіряємо шляхи в змінних оточення (у разі відсутності звітуMinimal test.) або перезбираємо/налаштовуємо бібліотеки/home/mpi/mpitb/DLD(за відсутності нульового результату на командуMPI_Init).

Далі, перевіряємо роботу одного із стандартних тестових завдань (обчислення числа Pi):

переходимо до каталогу з відповідними m-файлами # cd /home/mpi/mpitb/Pi запускаємо виконання # mpirun -c 1 octave -q --eval Pi.m

[ред.] Інсталяція мережевих служб

[ред.] NFS (не обов'язковий етап)

Особливістю запуску MPI-програми є необхідність наявності її копії на всіх вузлах кластера, причому що знаходяться в тому самому місці. Природно, каталог із програмою можна копіювати звичайними засобами. Але якщо кількість вузлів досить велика, а програма знаходиться на стадії налагодження, то відстежувати і вчасно синхронізувати її версії стає накладно. У такому випадку зручним є використання протоколу NFS мережного доступу до файлових систем. Для цього:

встановлюємо програмне забезпечення (виконується наlinux1) # apt-get install nfs-common створюємо каталогtest, в який поміщаємо m-файли (на прикладі тестового завдання обчислення числа Pi) # mkdir /test # cp -R /home/mpi/mpitb/Pi /test

на машинахlinux2таlinux3дописуємо у файл/etc/fstabрядки:

та монтуємо файлову систему:

[ред.] SSH

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

Процедура досить проста (виконується на машині ):

встановлюємо програмне забезпечення # apt-get install ssh логінімося під користувачемmpiі переходимо в його домашній каталог # su mpi # cd

логінімося до консолі кластера # ssh linux1 генеруємо ключ (на всі запитання відповідаємо натисканням Enter) # ssh-keygen -t dsa # cat

/.ssh/authorized_keys копіюємо публічний ключ на вузлиlinux2таlinux3# scp

Після виконання цієї процедури безпарольний доступ буде можливий тільки для одного користувачаmpiі тільки в одному напрямку:linux1-linux2таlinux3.

[ред.] Інсталяція на вузлах кластера (виконується наlinux2таlinux3)

На вузлахlinux2іlinux3досить простий установки octave:

[ред.] Тестування кластера

За аналогією з тестуванням наlocalhost, насамперед на машиніlinux1слід описати у файлі схеми завантаження вузли, що входять до кластера:

Файл /home/mpi/openmpi-1.2.5/etc/openmpi-default-hostfile або /etc/openmpi/openmpi-default-hostfile (див. вище установка в Debian)

Далі переходимо в каталог/testз m-файлами розрахункової задачі та пробуємо її порахувати:

В останній команді ключ-cзадає кількість процесорів кластера, на яких буде запущена програма (згідноman mpirun- синонім ключа-np).