Популярные сообщения

понедельник, 4 октября 2010 г.

Сборка кластера Beowulf на основе PVM & Ubuntu(практическое руководство)

      Вторая редакция статьи от 07.12.2010. Сборка кластера процесс не такой уж долгий и не особо сложный, как по началу может казаться, зато экономический эффект от применения такого рода устройства может быть достаточно большой, особенно в условиях ограниченности денежных средств, т.к. параллельные вычисления и так уменьшают затраты на расчеты различных задач, а кластерный подход - создание вычислительной MPP системы  из серийных устройств соединенных серийными коммуникационными каналами связи, результатом которого является модель кластера Beowulf еще больше уменьшает стоимость полученной из расчетов информации.
       Описание оборудования кластера.
  Парк оборудования состоит из 10 машин с процессорами: AMD ATHLON-64 X2 4200+, оперативной памятью: 2 ГБ, сетевым адаптером: 10/100/1000 Мб/с.
  Процессор:  ATHLON-64 X2 4200+ является суперскалярным, содержит 3 декодера команд, теоретически позволяющих достичь пиковой производительности до 3-х операций за 1 такт в каждом ядре. Таким образом, для данного процессора, имеющего в своём составе 2 ядра и работающего на частоте  2.2 ГГц теоретический предел производительности составляет 3х2х2.2=13.2 GFlops. В данную кластерную систему входи всего 9 компьютеров, значит теоретически предел всего кластера равен 13.2х9=118.8 GFlops.
      Предыдущая конфигурация программного обеспечения кластерной системы позволяла использовать пропускную способность сетевого интерфейса лишь на 10 Мб/с, что плохо сказывалось на производительности установки, когда на ней считались сильно связные задачи, требующие большого количества синхронизаций  друг с другом. Данная проблема была решена, использованием дополнительной опции прямой связи задач в PVM: задача-задача.
    Алгоритм установки и настройки ПО для кластера.
    1) Установка операционной системы Ubuntu. Этот этап нет смысла описывать, ее описаний полно в инете.
    2) Установка и настройка PVM.
   PVM версии 3.4.6. скачиваем. Распаковав архив в домашнюю папку пользователя (~/pvm3/), в конфигурационный файл командного интерпретатора bash (/etc/bash.bashrc) добавлены следующие строчки:
#pvm configuration
export PVM_ROOT=/home/root/pvm3
if [ -z $PVM_ROOT ]; then
    if [ -d ~/pvm3 ]; then
        export PVM_ROOT=~/pvm3
    else
        echo "Warning - PVM_ROOT not defined"
        echo "To use PVM, define PVM_ROOT and rerun your .bashrc"
    fi
fi
if [ -n $PVM_ROOT ]; then
    export PVM_ARCH=`$PVM_ROOT/lib/pvmgetarch`
    export PATH=$PATH:$PVM_ROOT/lib/$PVM_ARCH  # arch-specific
    export PATH=$PATH:$PVM_ROOT/bin/$PVM_ARCH
fi
export PVM_PATH=$PVM_ROOT/bin/$PVM_ARCH
export PVM_DPATH=pvm3/lib/pvmd
export PVMHOSTFILE=/home/root2/.rhosts
   В должен быть системе установлен SSH. Для коммуникаций, PVM использует RSH или SSH, по умолчанию в файле конфигурационном файле для каждой операционной системы в PVM (например, для Linux 64-bit ~/pvm3/conf/LINUX64.def), стоит RSH, но лучше его не использовать, т.к. он морально устарел, нужно прописать значение переменной ARCHCFLAGS, параметр RSHCOMMAND должен содержать путь к SSH, например DRSHCOMMAND=\"/usr/bin/ssh\" .
   В каталоге /pvm3 выполняем команду для сборки и установки:
    make
   По окончании ее работы PVM будет готова к использованию. На одном из этапов выполнения, команда завершилась выходом с ошибкой из-за отсутствия библиотеки m4_1.4.13-2_amd64, которую необходимо скачать:
          sudo apt-get install m4
   На этом процесс установки и настройки PVM завершен. Для удобства работы, данная конфигурация была скопирована на все узлы кластера.
   Следующие действия проводились только на главном узле кластера.
   Выполнена процедура создания беспарольного доступа пользователя root2 с консоли кластера на узлы кластера по протоколу SSH. Беспарольный доступ обеспечит более комфортную работу в PVM. Так, отпадет необходимость вводить пароли доступа при добавлении каждого нового узла и при копировании исполняемых модулей в локальные файловые системы узлов кластера. Алгоритм обеспечения беспарольного доступа следующий:
а) Логинимся к консоли кластера: ssh root2@phys4
б) Переходим в каталог ssh: cd ~/.ssh
в) Генерируем rsa-ключи: ssh-keygen -t rsa
г) На вопрос задать имя файла жмем Enter - остается имя по умолчанию id_rsa.
д) На просьбу задать пароль жмем Enter два раза (второй раз для проверки).
е) Копируем публичный ключ на узел кластера: scp id_rsa.pub root2@phys1:~/.ssh
ж) Логинимся к узлу phys1: ssh root2@phys1
з) Переходим в каталог ssh: cd ~/.ssh
и) Копируем публичный ключ: cat id_rsa.pub >> authorized_keys2
к) Отключаемся от узла phys1: exit
л) Повторяем пункты а-к для остальных узлов кластера (phys2 ... physN).
   После проведения вышеописанной процедуры пользователь "root2" сможет подключаться к узлам кластера с консоли кластера на сервере, не вводя свой пароль. Следует отметить, таким образом, обеспечивается беспарольный доступ только для одного пользователя и только в одном направлении: консоль кластера -> узлы кластера. И только для случая, когда root2 подключается к узлам кластера под своим именем.
   Также был установлен CSSH, для более комфортного управления всеми узлами кластера.
   Для автоматического подключения узлов кластера в PVM в файле ~.rhosts были указаны имена всех хостов, которые должны входить в кластер и подключаться автоматически при старте PVM. В данном файле они указываются по принципу одно имя хоста - одна строчка, также в этом же файле можно указать дополнительные особенности конфигурации PVM на  узлах кластера, за более подробным описанием данного файла рекомендуется обратиться к руководству PVM.
   Для автоматической проверки конфигурации кластера в файл ~/.pvmrc была введена команда conf. Данный файл PVM считывает построчно при запуске и исполняет все команды стоящие каждой строке, если она не начинается с символа комментария(#).
    3) Установка и настройка XPVM.
Установка графической консоли проводилась только на главном узле кластера командой: sudo apt-get install xpvm .
Для автоматической регистрации хостов в XPVM в файл ~/.xpvm_host необходимо добавить, также как и в файл .rhosts, имена хостов по тому же принципу.
На этом можно считать, что сборка кластера завершена, он готов к работе.
     4)  Дополнения:  
1. Процесс компиляции собственного программного обеспечения для работы с PVM.  
   Для того, чтобы писать программы для исполнения в параллельной вычислительной машиной следует использовать стандартные вызовы библиотеки pvm3.h, необходимо указывать дополнительный набор ключей для осуществления процесса компиляции ПО. Компиляция ПО проводилась в Qt-creator. Дополнительный набор ключей указывался в *.pro файле проекта:
          QMAKE_LIBS += -lpvm3 -lrt
    Обязательным условием для гетерогенных установок является компиляция исходных кодов ПО для каждой системы в отдельности, в нашем случае LINUX64. Далее следует разослать на все узлы кластера исполняемый файл, т.е. скопировать его в каталог соответствующей архитектуры (в моем случае ~/pvm3/bin/LINUX64) на каждый хост кластера. 

2. Использование графической консоли XPVM.
     Данная консоль содержит все те же самые наборы атрибутов и функций, что и обычна консоль PVM, только они представлены в графическом виде,  в качестве кнопок и графиков.
   Окно графической консоли разделено на две части. В верхней части сосредоточены кнопки управления кластером, а также наглядно представлена конфигурация кластерной системы в виде хостов. Когда они бездействуют, светятся белым, когда считают, зеленым. Нижняя часть она разделана на две взаимосвязанных части. Левая часть содержит номера TID запущенных задач, а правая иллюстрирует их поведение: пустая белая полоса задача запущена, зеленая - считается, красная – передает информацию, черные линии, отходящие от плоской задачи, свидельствуют об обмене информацией с другими задачами.
   Данная графическая консоль достаточно хорошо иллюстрирует работу PVM. Значительным недостатком ее является то, что при большой связности задачи XPVM не эффективно использовать в виду того, что она каждое событие сохраняет в своей памяти и затем иллюстрирует на экране, с большой задержкой в силу, отсутствия возможности более быстрого способа иллюстрации, а также в виду того что при больших посылках по сети, она начинает использовать все больше и больше ресурсов компьютерной памяти (физической и виртуальной), когда они заканчивается на главном узле кластера, то локальные задачи теряют связь с главной задачей, они зависают в памяти узлов кластера, и все расчеты соответственно останавливаются. Ввиду этого негативного воздействия, данная графическая консоль более не использовалась, т.к. она очень затратная по компьютерным ресурсам.
XPVM - вид графической консоли (увеличение)

P.S. Если статья была вам полезна проголосуйте в опросе блога, этим вы скажите СПАСИБО Автору, также можно обсудить её на Форуме. 

Смотрите также:
        Список использованных мною источников в Дополнительных ссылках. 
        Моделирование в GROMACS (практическое руководство)
        CPMD - установка пакета для квантово-химических расчетов "из первых принципов".

    15 комментариев:

    1. Спасибо. Интересная статья.

      ОтветитьУдалить
    2. Интересная статейка...
      Но ведь непринципиально использование именно ubuntu? В debian/gentoo/slackware тоже будет работать?

      Я вообще использую gentoo для всего... решил поискать пакет pvm/xpvm в portage - и меня насторожило, что я его не нашёл %) Думал, там есть всё...

      Просто с ubuntu не хочу возиться... она никогда не отличалась особенной стабильностью. А кластер скоро предстоит настраивать. %)

      ОтветитьУдалить
    3. Да... и чем PVM лучше или хуже MPI? %) Как-то для меня не совсем очевидно...

      ОтветитьУдалить
    4. В принципе PVM и MPI очень похожи и в плане написания параллельных алгоритмов, и в плане установки и работы самим интерфейсом.
      У каждого есть свои недостатки и косяки вот некоторые:
      - для MPI я не нашел централизованной, консоли управления запущенных задач на кластере, ни графической, ни консольной,
      - у PVM есть свой косяк - на некоторых конфигурациях железа, она за каким-то снижает скорость обмена по сети до 10 Мбит/с, что очень сказывается на производительности системы при счете сильно связных задач, спасает от этого только включение опции задача-задача в теле программы.
      - в новых параллельных версиях некоторых приложений, например у Gromacs, отменена поддержка PVM,
      - если обучать приемам параллельного программирования на картинках, то графическая консоль XPVM лучший тому пример - как все это добро работает на кластере,
      - для MPI написано больше литературы,
      - оба они кроссплатформенные,
      - в случае с Линуксом для PVM, при сборке из исходников должно работать на любой версии, там есть спец.файл который как раз определяет тип архитектуры ПК: pvmgetarch.
      По большому счету я выбирать не стал, у меня стоят оба...)))

      ОтветитьУдалить
    5. Понятно в принципе в общих чертах...
      Мне дают задание (пока ещё не дали, я только устраиваюсь на новое место), сделать кластер... то есть скорее донастроить. Нужно, чтобы была "система очередей". То есть запустил кто-то один одно довольно ресурсоёмкое приложение для расчётов, а потом кто-то другой запустил второе... и надо так, чтобы продолжало выполняться только первое, а второе начало только после того, как закончится первое, что ли... %) Как-то так. Вообще не уверен, ибо мне такая схема кажется сомнительной.

      ОтветитьУдалить
    6. Я хотел сделать такого рода систему на нашем кластере, только сначала времени не хватило, а потом необходимость отпала, а так я хотел начать все с консоли PVM, там на ее основе можно скорее сделать мини центр управления полетами...
      Другим способом было написание сторонней программы, на подобии снифера, но это более долгий процесс...
      Можно также взять готовый для кластера дистрибутив - линукса и посмотреть есть ли там чего.

      ОтветитьУдалить
    7. Вот я и ищу готовое решение. Нашёл вот кое-что... http://www.cs.wisc.edu/condor/

      ОтветитьУдалить
    8. вот http://cluster.linux-ekb.info/ адрес хорошего ресурс по кластерам, называется Кластер - практическое руководство, там я много нового узнал.

      ОтветитьУдалить
    9. Я наткнулся на этот сайт... мне не понравилось, что там инфа немного устаревшая. Но в принципе полезно. Принципы ведь не изменились.
      Но многие дистрибутивы оттуда, которые там в примере, безнадёжно устарели (хотя и не все).

      ОтветитьУдалить
    10. Еще на одном кластере, знакомом мне с недавнего времени, стоит спец.дистриб. Red Hat Enterprise 9, все хосты кластера грузятся по сетке с сервера работает как часы...

      ОтветитьУдалить
    11. > Вот я и ищу готовое решение
      попробуйте pelicanhpc http://pelicanhpc.org/
      есть русская документация http://pareto.uab.es/mcreel/PelicanHPC/Tutorial/PelicanTutorialRus.pdf

      ОтветитьУдалить
    12. Описанная здесь - http://silverghost.org.ua/2009/09/15/bezparolnyj-vxod-po-ssh-na-server/ - организация беспарольного доступа по ssh, к тому же без ограничения на совпадение имен пользователей, мне показалась более простой.

      ОтветитьУдалить
    13. Да, хорошая инструкция. Возьму на заметку.

      ОтветитьУдалить
    14. А эффект прироста производительности (распределения выполнения между узлами) есть только для специально скомпилированных программ или для любых?

      ОтветитьУдалить
    15. В моём случае да. Есть также специальные пакеты программ, оптимизированные для работы в такой среде.

      ОтветитьУдалить

    Ваш комментарий будет "принят к сведению" и пойдет на рассмотрение.