вторник, 8 февраля 2011 г.

Настройка кластера в Linux Mandriva 2010 и Ubuntu 10.04
Часть 2

01.02.2011

Соседний компьютер
172.16.229.27
вЫключен. Протокол запуска программы:

[student@localhost mympi]$ mpirun -np 4 -machine linux.local aa44
p0_4323: (1082,417904) Procgroup:
p0_4323: (1082,417944)     entry 0: linux-3.local:student@172.16.229.22:linux-2.local 0 0 /home/student/mympi/aa44 student 
p0_4323: (1082,417959)     entry 1: linux-2.local 1 1 /home/student/mympi/aa44 student 
p0_4323: (1082,417970)     entry 2: student@172.16.229.22 1 2 /home/student/mympi/aa44 student 
p0_4323: (1082,417981)     entry 3: student@172.16.229.27 1 3 /home/student/mympi/aa44 student 
p0_4323:  p4_error: Could not gethostbyname for host linux-2.local; may be invalid name
: 1083
[student@localhost mympi]$ echo $MPI_HOST
linux-3.local:student@172.16.229.22:linux-2.local

Соседний компьютер
172.16.229.27
включЁн. Из файла ~/.bashrc удалена строка Протокол запуска программы:

[student@localhost mympi]$ mpirun -np 4 -machine linux.local aa44
p0_5290: (81,308951) Procgroup:
p0_5290: (81,308988)     entry 0: linux-3.local:student@172.16.229.22:linux-2.local 0 0 /home/student/mympi/aa44 student 
p0_5290: (81,309002)     entry 1: linux-2.local 1 1 /home/student/mympi/aa44 student 
p0_5290: (81,309013)     entry 2: student@172.16.229.22 1 2 /home/student/mympi/aa44 student 
p0_5290: (81,309024)     entry 3: student@172.16.229.27 1 3 /home/student/mympi/aa44 student 
p0_5290:  p4_error: Could not gethostbyname for host student@172.16.229.22; may be invalid name
: 81
[student@localhost mympi]$

Соседний компьютер
172.16.229.27
включЁн. Из файла ~/.bashrc удалена строка student@172.16.229.22.
Протокол запуска программы:

[student@localhost mympi]$ source ~/.bashrc
bash: TMOUT: readonly variable
Identity added: /home/student/.ssh/id_rsa (/home/student/.ssh/id_rsa)
[student@localhost mympi]$ echo $MPI_HOST
linux-3.local:linux.local:linux-2.local
[student@localhost mympi]$ mpirun -np 4 -machine linux.local aa44
p0_8511: (81,328901) Procgroup:
p0_8511: (81,328938)     entry 0: linux-3.local:linux.local:linux-2.local 0 0 /home/student/mympi/aa44 student 
p0_8511: (81,328953)     entry 1: linux-2.local 1 1 /home/student/mympi/aa44 student 
p0_8511: (81,328964)     entry 2: student@172.16.229.22 1 2 /home/student/mympi/aa44 student 
p0_8511: (81,328974)     entry 3: student@172.16.229.27 1 3 /home/student/mympi/aa44 student 
p0_8511:  p4_error: Could not gethostbyname for host student@172.16.229.22; may be invalid name
: 81
[student@localhost mympi]$

Соседний компьютер
172.16.229.27
включЁн. В файле /usr/chare/mpich/machines.LINUX строк вида


student@172.16.229.22
student@172.16.229.27


заменены на строки



172.16.229.22
172.16.229.27


Кроме того, перед указанными выше строками добавлено


linux.local


Протокол запуска программы:

[student@localhost mympi]$ echo $MPI_HOST
linux-3.local:linux.local:linux-2.local
[student@localhost mympi]$ mpirun -np 4 -machine linux.local aa44
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for linux-2.local has changed,
and the key for the corresponding IP address 172.16.229.27
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/student/.ssh/known_hosts:1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
f0:17:17:27:22:61:6f:5f:02:99:b3:9a:83:8a:23:2d.
Please contact your system administrator.
Add correct host key in /home/student/.ssh/known_hosts to get rid of this message.
Offending key in /home/student/.ssh/known_hosts:3
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
X11 forwarding is disabled to avoid man-in-the-middle attacks.
Permission denied (publickey,password,keyboard-interactive).
p0_8909:  p4_error: Child process exited while making connection to remote process on linux-2.local: 0
[student@localhost mympi]$ mpirun -np 4 -machine linux.local aa44
student@172.16.229.22's password: 
p0_9076:  p4_error: Timeout in making connection to remote process on 172.16.229.22: 0
Killed by signal 2.
[student@localhost mympi]$

02.02.2011

Сегодня впервые удалось локально запустить на компьютере
с ip 172.16.229.22 две программы на языке
C++. Первая программа выводит из отдельных процессов слова
"Hello, World!". Вторая программа вычисляет интеграл, однако
результат при каждом запуске был равен inf, предположительно
inf от infinity, то есть бесконечность. Интеграл вычислялся
либо от кубической, либо от квадратической функций в пределах от
нуля до единицы. Возможно, причиной этого является то, что
для каждого процесса приходится вводить пароль для доступа
к данному узлу через SSH.

Это положительный момент: значит, удалось настроить работу
mpich через SSH с помощью правки файла /usr/bin/mpireconfig.dat.

Для достижения полжительных результатов сегодняшнего
дня выполнено следующее. В файле

~/.bashrc

сделаны изменения, показанные ниже, обратить внимание
на закоментированные строки символом диез (шарп, решетка) #
и учесть, что соседний компьютер 172.16.229.27 выключен

#ssh-add
# mpich
MPI_HOST="linux.local"
#export MPI_HOST="linux.local":$MPI_HOST
#export MPI_HOST="linux-3.local":$MPI_HOST
#RSH=SSH

Из локального пакета MPICH2 взят пример расчета числа
Пи на языке программирования C++ из файла


mpich2-1.3.1/examples/cxx/cxxpi.cxx


При компиляции непосредственно этого примера возникли ошибки:

[student@localhost mympi]$ mpiCC cxxpi.cxx -o cxxpi
cxxpi.cxx:18:22: error: iostream.h: Нет такого файла или каталога
cxxpi.cxx: In function 'int main(int, char**)':
cxxpi.cxx:45: ошибка: некорректная инициализация неконстантной ссылки типа 'char*&' из временного выражения типа 'char*'
/usr/include/mpi2c++/functions.h:52: ошибка: in passing argument 1 of 'void MPI::Get_processor_name(char*&, int&)'
cxxpi.cxx:47: ошибка: нет декларации 'cout' в этой области видимости
cxxpi.cxx:48: ошибка: нет декларации 'endl' в этой области видимости
Эту программу пришлось несколько изменить, получился следующий
исходный код, компиляция которого прошла успешно.
/* -*- Mode: C++; c-basic-offset:4 ; -*- */
/*  
 *  (C) 2004 by Argonne National Laboratory.
 *      See COPYRIGHT in top-level directory.
 */

//#include "mpi.h"
/* Support both new (e.g., has iostream) and old (requires iostream.h) 
   C++ compilers */
//#ifdef HAVE_CXX_IOSTREAM
//#include <iostream>
//#ifdef HAVE_NAMESPACE_STD
// Those that do often need the std namespace; otherwise, a bare "cout"
// is likely to fail to compile
//using namespace std;
//#endif
//#else
//#include <iostream.h>
//#endif
//#ifdef HAVE_CXX_MATH
//#include <math>
//#else
//#include <math.h>
//#endif

#include <iostream>
#include "mpi.h"
#include "mpi2c++/mpi++.h"
#include <math.h>
using namespace std;

 //double f(double);

double f(double a)
{
    return (4.0 / (1.0 + a*a));
}

int main(int argc,char **argv)
{
    int n, myid, numprocs, i;
    double PI25DT = 3.141592653589793238462643;
    double mypi, pi, h, sum, x;
    double startwtime = 0.0, endwtime;
 //   int  namelen;
    char processor_name;//[MPI_MAX_PROCESSOR_NAME];
//    int ierror;
  //  ierror = MPI_Init (&argc, &argv);
    MPI::Init(argc,argv);
    numprocs = MPI::COMM_WORLD.Get_size();
    myid     = MPI::COMM_WORLD.Get_rank();
 //   MPI::Get_processor_name(processor_name,namelen);

    cout << "Process " << myid << " of " << numprocs << " is on " <<
 processor_name << endl;

    n = 10000;   /* default # of rectangles */
    if (myid == 0)
 startwtime = MPI::Wtime();

    MPI::COMM_WORLD.Bcast(&n, 1, MPI_INT, 0);

    h   = 1.0 / (double) n;
    sum = 0.0;
    /* A slightly better approach starts from large i and works back */
    for (i = myid + 1; i <= n; i += numprocs)
    {
 x = h * ((double)i - 0.5);
 sum += f(x);
    }
    mypi = h * sum;

    MPI::COMM_WORLD.Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0);

    if (myid == 0) {
 endwtime = MPI::Wtime();
 cout << "pi is approximately " << pi << " Error is " <<
     fabs(pi - PI25DT) << endl;
 cout << "wall clock time = " << endwtime-startwtime << endl;
    }

    MPI::Finalize();
    return 0;
}

Протокол выполнения приведенной выше программы:

[student@localhost mympi]$ mpirun -np 3 -all-local aa11
student@linux.local's password: 
student@linux.local's password: 
Process 1 of 3 is on ?
Process 0 of 3 is on ?
Process 2 of 3 is on ?
pi is approximately 3.14159 Error is 8.33339e-10
wall clock time = 0.000226
[student@localhost mympi]$

03.02.2011

Сегодня удалось на втором компьютере с ip 172.16.229.22
локально запустить программу расчета числа Пи.
Для этого были предприняты описанные выше действия
с файлом ~/.bashrc. Кроме того, пришлось удалить из папки
~/.ssh все файлы. Эти файлы содержали списки известных
хостов и ключи к ним. При подключении к SSH эти файлы
были созданы заново.

При попытке выполнить программу не локально, а на соседнем компьютере
возникла проблема, отраженная в следующем протоколе:

[student@localhost mympi]$ echo $MPI_HOST
linux-2.local
[student@localhost mympi]$ mpirun -np 3 -machine linux-2.local aa11
No value for MPI_HOST!
MPI_HOST is set either from your environment or by
processing for an MPI machine type of ch_p4, ch_tcp, 
ch_nexus, or sgi_mp.  The machine type you used was linux-2.local .
Use the -machine <machinename> argument to select a 
specific machine type.
Здесь нужно обратить внимание на то, что предварительно
в файле


~/.bashrc


строка


linux.local


была заменена строкой


linux-2.local


Описанная выше проблема была решена. В текущей папке создан файл
machines.LINUX, который содержит единственную строку:


linux-2.local


После таких действий был получен беспарольный доступ. Вот следующий
протокол запуска программы:
[student@localhost mympi]$ mpirun -np 3 -machinefile machines.LINUX aa11
bash: /home/student/mympi/aa11: Permission denied
p0_7566:  p4_error: Child process exited while making connection to remote process on linux-2.local: 0

Отмонтирована папка mympi на втором компьютере, в нее скопировны
файлы aa11 и создан файл machines.LINUX, содержащий строку
linux-2.local. На компьютере 172.16.229.22 запущена программа:

[student@localhost mympi]$ mpirun -np 3 -machinefile machines.LINUX aa11
rm_4802:  p4_error: rm_start: net_conn_to_listener failed: 34137
p0_22139:  p4_error: Child process exited while making connection to remote process on linux-2.local: 0
[student@localhost mympi]$

Беспарольный доступ к локальному серверу SSH


04.02.2011

student@localhost ~$ cd ~/.ssh
student@localhost .ssh$ ssh-keygen -t rsa
[student@localhost .ssh]$ ssh-copy-id -i ~/.ssh/id_rsa.pub linux.local
29
student@linux.local's password: 
Now try logging into the machine, with "ssh 'linux.local'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[student@localhost .ssh]$ logout
bash: logout: not login shell: use `exit'
[student@localhost .ssh]$ ssh linux.local
Last login: Fri Feb  4 11:04:55 2011 from student
[student@localhost ~]$ logout

Connection to linux.local closed.
[student@localhost .ssh]$ logout
bash: logout: not login shell: use `exit'
[student@localhost .ssh]$ cd ~/mympi/
[student@localhost mympi]$ mpirun -np 3 -machinefile machines.LINUX aa11
Process 1 of 3 is on ?
Process 2 of 3 is on ?
Process 0 of 3 is on ?
pi is approximately 3.14159 Error is 8.33339e-10
wall clock time = 0.000226
[student@localhost mympi]$ 

В приведенном выше протоколе для получения доступа к серверу SSH
выполняют следующие действия. От имени пользователя student
делают текущей папку ~/.ssh. В этой папке создают rsa-ключи:
частный и общедоступный. Затем с хоста с именем localhost от
имени пользователя student как бы на другой хост с именем
linux.local копируют общедоступный ключ. После этого в папке
~/.ssh появляется файл authorized_keys, который позволяет
пользователю student c хоста localhost логинится на сервер
SSH к другому, как бы, хосту linux.local, что видно из
следующей части протокола. Также происходит локальное
выполнение программы расчета числа Пи без запроса пароля
тогда, когда программа mpirun посредством ssh обращается
к хосту linux.local, который вписан в файл machines.LINUX.

Осталась проблема с выполенением процессов на соседнем компьютере.
Здесь вывелось сообщение о завершении после выполнения команды
kill 11932 в другом терминале.

[student@localhost mympi]$ mpirun -np 10 -machinefile machines.LINUX aa11
rm_5361:  p4_error: rm_start: net_conn_to_listener failed: 53211
p0_11932:  p4_error: Child process exited while making connection to remote process on linux-2.local: 0
Killed by signal 2.

^C/usr/bin/mpirun.ch_p4: line 243: 11932 Завершено      /home/student/mympi/aa11 -p4pg /home/student/mympi/PI11676 -p4wd /home/student/mympi
[student@localhost mympi]$

Комментариев нет:

Отправить комментарий