= bubbalog =Дневникът на моето стадо

Beowulf клъстър с OpenMPI под FreeBSD 8.0

Monday 01.03.2010 23:15 EEST · Публикувано от в = Cluster =, = FreeBSD =, = Parallel =

В работата си до тук и след много четене се стигна до извода, че MPICH2 явно наистина има някаки ядове с процесори на които няма SSE инструкции, което обезмисля малко използването му донякъде, когато се работи със стара техника.Но да не забравяме, че компопарка не винаги ще е толкова слаб, така че – засега използването на MPICH2 се изостава. Другата дилема беше LAM/MPI или OpenMPI. Тъй като и двата варианта работеха на старата техника отделих малко време и на това да попрочета нещо, но като цяло всеки казваше че недолюбва LAM/MPI а и OpenMPI е доста по-бърз в работата си, дори и от MPICH2. Така реших да закопая и по този вариант, за да видя какво ще стане. В общи линиии, работата е доста подобна на тази с MPICH2, разбира се има и някои малки изключения. Въпреки, че статията в основната си част е копирана от тази, мисля, че е добре да го има като отделен материал, защото се събраха много “ако…”.

1. Инсталация на Head Node

1-1. Инсталация на FreeBSD – Инсталирайте системата, като при опцята за дистрибуция изберете user distribution

1-2. Конфигурация на root парола и потребители – Тези настройки трябва да са еднакви на Head node и на изчислителните нодове! Това е нужно в последствие за свободната и безпроблемна коуникация на всеки нод с всеки друг.

username:    user
pasword:    pass
group:    wheel
UID:    1001
shell:    csh

1-3. Допълнителни настройки – От мрежовите настройки включете

[x] NFS Server

редактира се /etc/exports – добавят се следните редове:

/usr/home/user -alldirs -network 192.168.1.0 -mask 255.255.255.0
/usr/local -alldirs -network 192.168.1.0 -mask 255.255.255.0

[x] SSH

1-4. редакция на /etc/ssh/sshd_config (Alt+F4 -> ee /etc/ssh/sshd_config): декоментират се следните редове:

#RSAAuthentication yes
#AuthorizedKeysFile      .ssh/authorized_keys

1-5. reboot

1-6. логване като user – Следва малко донастройка на някои работи.

Редактира се .profiles и добавяне на

umask 077

генериране на „public/private key pairs“ и копиране в нужната директория

% ssh-keygen -b 768 -f ~/.ssh/id_rsa -t rsa -N „“
% cd ~/.ssh
% cp id_rsa.pub authorized_keys
% chmod 644 ~/.ssh/authorized_keys
% chmod 755 ~/.ssh

1-7. Инсталация на OpenMPI (като root). За разлика от MPICH2, OpenMPI е налично и като готов пакет, което съкращава времето за инсталиране с няколко часа[1]

# pkg_add -rv openmpi

След като се инсталира се логва като user и се изпълнява следната команда, с която се гарантира, че файловете на OpenMPI ще са достъпни за всеки от изчислителните нодове

%cp -rv /usr/local/mpi/openmpi/bin/ ~/bin/

1-8. Добавя се mc (midnight commander) – полезна и необходима екстра за по-мързеливите

% pkg_add -rv mc

Тук е мястото да се спомене и една малка подробност. След инсталацията на mc, програмата не помни настройки… Това е така, защото по неизяснени за мен причини от FreeBSD 7.x не се създава .mc директорията в която се пазат всички файлове за всеки клиент на програмата. За целта – просто в хоум директорията на всеки клиент трябва на ръка да се създаде  .mc директория.

2. Инсталация на изчислителните нодове

Тя е еднаква за всички нодове. Инсталация, настройка, имидж на цялата система и донастройка на определени параметри при пибавян на всеки нов нод.

2-1. Инсталация на FreeBSD – minimal distribution

2-2. Конфгуриране на root парола и потребител
– (виж 1-3!)

2-3. Настройка на мрежа – без GW

2-4. Включване на NFS client и sshd

2-5. Рестарт

2-6. Редакция на /etc/fstab – добавяне на следните редове

sole00:/usr/home/sole    /usr/home/sole    nfs    rw    0    0
sole00:/usr/local    /usr/local    nfs    rw    0    0

2-7. Рестарт и тест на системата. Затова дали работи може да се използва един прост тест. Целта е да се изпълни от sole00 през ssh  коанда на изчислителния нод, а резултата да се въне на sole00

% ssh sole01 hostname

След завършване на инсталацията направете бекъп на цялата система. За да прибавите нов нод към клъстъра просто разгънете бекъпа на новия нод и сменете хостнейма и адреса на новия нод. Това става само (в момента на рестор от шела на LiveCD) чрез редакцията данните в /etc/rc.conf.

3. Настройка за работа на OpenMPI

За разлика от MPICH2, OpenMPI не използва специален ринг (ring) за работа на нодовете. Това се осъществява само с въвеждането на всички нодове в един файл, наречен mpi.hosts

4. Тест за работа

Това може да се проведе с една проста програмка – hello.c

#include <stdio.h>
#include <mpi.h>
/*-*/
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
/*-*/
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
/*-*/
printf(“Process %d on %s out of %d\n”, rank, processor_name, numprocs);
/*-*/
MPI_Finalize();
}

Компилирайте програмата

% mpicc -O2 hello.c -o hello

и стартирайте

% mpirun -np X -hostfile mpi.hosts hello

където X е броя на процесите, които искате да се стартират, a mpi.hosts е добре познатия ни файл направен преди това.

* * * * *

[1] Това е тест, бих предпочел да си го компилирам като хората от портовете, но поради липса на време предпочетох този вариант. Нямам идея дали няма да се бъгне някъде, но засега е достатъчно за да тръгне, по-натам може да пиша ако има нещо

Има един коментар за “Beowulf клъстър с OpenMPI под FreeBSD 8.0”

  1. Има различни мнения, аз попринцип винаги се старая да избягвам крайностите, защото според мен за каквото и да става въпрос винаги си струва човек да погледне поне от две различни гледни точки за да има претенции за правилна преценка… Ако ме разбирате ;)

    ***
    Коментара някак си не се връзва със статията. Адреса на сайта е премахнат. Моля не използвайте системата за реклама!
    = bubachko =

Остави коментар

Писането на кирилица е задължително!
Коментари, които не са на кирилица ще бъдат изтрити без предупреждение.
Всеки коментари съдържащи 1 или повече линка, ще бъдат публикувани след одобрение.