Распределённые вычисления в GNU Octave
Материал из Xgu.ru
Автор: Владимир Кореньков
- Короткий URL: octave/mpi
Содержание |
[править] Вступление
[править] Настройка сети
Для реализации параллельных вычислений можно использовать:
- сеть виртуальных машин, действующих на одном компьютере (с практической точки зрения, целесообразно лишь для обучения и тестирования);
- локальную сеть;
- сеть виртуальных машин Amazon EC2.
В учебных целях мы использовали первый способ, запустив несколько доменов Xen на одиночном узле.
Конфигурация сети достаточно примитивна: три машины с названиями linux1, linux2 и linux3, которым назначены статические IP-адреса 192.168.0.1, 192.168.0.2 и 192.168.0.3, соответственно. Для примера ниже приведено содержание файлов машины linux1, на которой, собственно, будем устанавливать MPI.
Файл /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
127.0.0.1 localhost
192.168.0.2 linux2
192.168.0.3 linux3
Конфигурация остальных машин аналогична.
[править] Инсталляция (выполняется на 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), ну а об остальных параметрах можно более подробно узнать из:
./configure --help
После приблизительно получаса сборки (если не потребуется что-то доустановить) получим почти готовые для использования программы.
Последний штрих - указать системе пути поиска исполняемых файлов. Для каждого пользователя это можно сделать, дописав в соответствующий файл .bashrc строки:
Файл /home/mpi/.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.
Для начала, оставим в нем лишь одну строку:
Файл /home/mpi/openmpi-1.2.5/etc/openmpi-default-hostfile
localhost
[править] Установка Octave и OpenMPI в Debian
Тут все предельно просто:
# apt-get install octave3.0 openmpi*
Установка будет выполнена в каталог /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 и дописываем туда строки (если он уже существует, то просто заменяем содержимое):
Файл /home/mpi/.octaverc
if exist('startup_MPITB.m','file')
startup_MPITB
end
2) Делаем ссылку на указанный файл:
# cd /home/mpi
# ln -s /home/mpi/mpitb/startups/startup_MPITB.m .
3) Если просмотреть содержимое startup_MPITB.m, то можно увидеть, что в самом его начале используются функция getenv. Данная функция должна из файла /etc/environment определить каталог установки openmpi, следовательно в этот файл требуется дописать:
Файл /etc/environment
...
MPITB_HOME="/home/mpi/mpitb"
Если же по каким-либо причинам сие выполнить не удасться, то можно просто подправить startup_MPITB.m, закомментировав выделенные жирным строки на прямое указание пути:
Файл /home/mpi/mpitb/startups/startup_MPITB.m
...
%p = getenv('MPITB_HOME');
%if isempty(p)
%p=[getenv('HOME') '/octave/mpitb'];
%putenv('MPITB_HOME', p)
%end
% Дописать:
p="/home/mpi/mpitb";
...
4) В каталоге /home/mpi/mpitb имеется символическая ссылка DLD на подкаталоги типа DLD-oct2.9.12-ompi1.2.3-gcc4.1.2-i386 с соответствующими библиотеками. Не тяжело догадаться из названия, что эти библиотеки должны соответствовать имеющимся на машинах версиям octave, openmpi и компилятора gcc. Скорее всего у Вас эти версии не совпадают, а следовательно, лучше их пересобрать:
# 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..., затем набираем:
octave:1> MPI_Init
Если видим нечто похожее на изображение ниже -- минимальный тест пройден. Если же нет, то проверяем пути в переменных окружения (в случае отсутствия отчета 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 строки:
Файл /etc/fstab
...
linux1:/test /test nfs defaults 0 0
и монтируем файловую систему:
# mount /test
[править] SSH
Согласно документации, MPI для обмена информацией между узлами кластера использует протокол SSH. Следовательно, для нормальной работы нужно обеспечить возможность беспарольного доступа по SSH к узлам кластера с консоли.
Процедура достаточно проста (выполняется на машине linux1):
устанавливаем программное обеспечение
# apt-get install ssh
логинимся под пользователем mpi и переходим в его домашний каталог
# su mpi
# cd ~
логинимся к консоли кластера
# ssh linux1
генерируем ключ (на все вопросы отвечаем нажатием Enter)
# ssh-keygen -t dsa
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
копируем публичный ключ на узлы linux2 и linux3
# scp ~/.ssh/id_rsa.pub mpi@linux2:~/.ssh
# scp ~/.ssh/authorized_keys mpi@linux2:~/.ssh
# scp ~/.ssh/id_rsa.pub mpi@linux3:~/.ssh
# scp ~/.ssh/authorized_keys mpi@linux3:~/.ssh
проверяем
# ssh mpi@linux2
После выполнения данной процедуры беспарольный доступ будет возможен только для одного пользователя mpi и только в одном направлении: linux1 -- linux2 и linux3 .
[править] Инсталляция на узлах кластера (выполняется на linux2 и linux3)
На узлах linux2 и linux3 достаточно простой установки octave:
# apt-get install octave3.0
[править] Тестирование кластера
По аналогии с тестированием на localhost, первым делом на машине linux1 следует описать в файле схемы загрузки узлы, входящие в кластер:
Файл /home/mpi/openmpi-1.2.5/etc/openmpi-default-hostfile или /etc/openmpi/openmpi-default-hostfile (см. выше установка в Debian)
localhost
linux2
linux3
Вместо названий машин можно указать их IP-адреса.
Далее переходим в каталог /test с m-файлами расчетной задачи и пробуем ее посчитать:
# cd /test/Pi
# mpirun -c 3 octave -q --eval Pi.m
В последней команде ключ -c задает количество процессоров кластера, на которых будет запущена программа (согласно man mpirun - синоним ключа -np).
[править] Дополнительная информация
Софт
- MPI Toolbox for Octave
- Parallel Octave - tried the parallelization of Octave
- OctaveMPI - port code of MatlabMPI (release for octave)
- LAM/MPI Parallel Computing
- MPICH2 - a high-performance and widely portable implementation of the Message Passing Interface (MPI) standard
- ParallelKnoppix - is a fast and easy way to create a HPC cluster for parallel computing (used as a "live CD")
Русскоязычная литература
- Сайт лаборатории Параллельных информационных технологий МГУ (один из крупнейших русскоязычных сайтов, посвященных параллельным вычислениям)
- Практическое руководство по параллельным вычислениям (имеется подробное пошаговое описание процесса установки и настройки MPICH и LAM/MPI)
- Практикум по параллельному программированию (на примере использования LAM/MPI)
- Параллельный вычислитель на аппаратной базе локальной сети персональных компьютеров (статья + небольшой пример решения задач с использованием библиотек MPICH)
Англоязычная литература
- Пошаговое руководство по установке связки Octave + MPITB + Lam
- Пошаговое руководство по установке связки OctaveMPI + MPICH2
- Пошаговое руководство по установке связки MatLab + MPITB + Lam
- MPI on Debian (чересчур краткое описание)
GNU Octave Инсталляция |
Синтаксис языка |
Командная строка
|
---|