Розподілені обчислення у 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).