Распределённые вычисления в GNU Octave

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

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Автор: Владимир Кореньков

Короткий 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.

Icon-caution.gif

Внимание! Выполнения параллельных программ, написанных с использованием 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).

Octave mpi test1.png

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

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

[править] Инсталляция сетевых служб

[править] 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).


[править] Дополнительная информация

Софт

  1. MPI Toolbox for Octave
  2. Parallel Octave - tried the parallelization of Octave
  3. OctaveMPI - port code of MatlabMPI (release for octave)
  4. LAM/MPI Parallel Computing
  5. MPICH2 - a high-performance and widely portable implementation of the Message Passing Interface (MPI) standard
  6. ParallelKnoppix - is a fast and easy way to create a HPC cluster for parallel computing (used as a "live CD")

Русскоязычная литература

  1. Сайт лаборатории Параллельных информационных технологий МГУ (один из крупнейших русскоязычных сайтов, посвященных параллельным вычислениям)
  2. Практическое руководство по параллельным вычислениям (имеется подробное пошаговое описание процесса установки и настройки MPICH и LAM/MPI)
  3. Практикум по параллельному программированию (на примере использования LAM/MPI)
  4. Параллельный вычислитель на аппаратной базе локальной сети персональных компьютеров (статья + небольшой пример решения задач с использованием библиотек MPICH)

Англоязычная литература

  1. Пошаговое руководство по установке связки Octave + MPITB + Lam
  2. Пошаговое руководство по установке связки OctaveMPI + MPICH2
  3. Пошаговое руководство по установке связки MatLab + MPITB + Lam
  4. MPI on Debian (чересчур краткое описание)
Octave GNU Octave

Инсталляция | Синтаксис языка | Командная строка
Скрипты | Функции | Регулярные выражения | Массивы | Графики | Ввод/вывод данных
Распределенные вычисления | Численные методы | Сплайны

Шаблон:распределённые вычисления