Настройка кластера в Linux Mandriva 2010 и Ubuntu 10.04
1.3. Вход на сервер по протоколу SSH
Если требуется войти с помощью протокола SSH с компьютера
linux.local на компьютер linux-2.local по локальной
сети, то есть залогиниться на сервере ssh,
следует набрать команду
$ ssh linux.local
Можно указывать пользователя, под именем которого
осуществляется вход, например, если этот пользователь
studetn, то команда будет следующей:
$ ssh student@linux.local
здесь вместо имени узла можно указывать его ip-адрес.
Тогда команды будут выглядеть так:
$ ssh 172.16.229.27
или, например, для пользователя root, так:
$ ssh root@172.16.229.27
10.01.2011
При работе на двух компьютерах по протоколу SSH, кроме указанных
выше, можно использовать следующие имена компьютеров при входе
на них
- node1 172.219.16.27 linux-2.local
- node0 172.219.16.22 linux.local
[student@localhost ~]$ ssh linux.local [student@localhost ~]$ ssh linux-2.local
1.4. Изменение пароля пользователя
При первом подключении к серверу SSH от имени student
система потребовала пароль для пользователя student.
Если пароль какого-либо пользователя не известен,
то от имени администратора можно поменять пароль нужного
пользователя. Для осуществления этого входят в систему
под именем администратора, вводят пароль суперпользователя
и меняют пароль определенного логина, в нашем примере
для пользователя student:
$ su
пароль:
# passwd student
После ввода последней команды система потребует
ввода нового пароля и его подтверждения.
1.5. Беспарольный доступ по протоколу SSH
Найден способ получения беспарольного доступа на другой компьютер локальной сети. За основу взят совет из форума сообщества Ubuntu
http://forum.ubuntu.ru/index.php?topic=47437.45 а можно поподробнее про аутентификацию с использованием ключа? Простенький скрипт для настройки: Код: REMOTE_USER=username REMOTE_HOST=my-desktop.my-domain ssh-keygen -t rsa ssh-copy-id -i $HOME/.ssh/id_rsa.pub $REMOTE_USER@$REMOTE_HOST ssh $REMOTE_USER@$REMOTE_HOST В результате будет коннектиться без спроса пароля. ps И скрипт и команду следует выполнять с другого компьютера, не fox-laptop.Предварительно убеждаются, что ssh установлен на обоих компьютерах. Затем, перейдя в скрытую папку .ssh домашней папки компьютера node0, создают открытый RSA-ключ
[student@localhost ~/.ssh]$ ssh-keygen -t rsa
Выяснилось, что следующая рекомендация действенна для Ubuntu. Выполняют, зайдя через ssh на компьютер node1, копирование ключа авторизации (нужен ли этот шаг требуется проверить)
cat id_rsa.pub >> authorized_keys2
В Mandriva верной будет команда описанная ниже. В терминале компьютера-консоли кластера следует набрать команду
[student@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub student@172.16.229.27
После выполнения этой команды в папке ~/.ssh компьютера node1 появляется файл authorized_keys видимо предыдущий шаг, связанный с копированием ключа авторизации не нужен, либо не должно быть цифры "2" в названии файла ключа авторизации (последнее утверждение требует проверки). Ниже приведен протокол работы этой команды
[student@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub student@172.16.229.27 29 student@172.16.229.27's password: Now try logging into the machine, with "ssh 'student@172.16.229.27'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. [student@localhost ~]$ ssh student@172.16.229.27 Last login: Mon Jan 10 10:36:22 2011 from linux-2.local [student@localhost ~]$ lsКак видно из трех последних строк, вход на соседний компьютер через ssh выполнен без пароля. Введенная для проверки команда ls вывела содержимое домашней папки компьютера node1.
Внимание! Не требуется залогинится в ssh на компьютере node0, тогда не требуется вводить пароль. Нужно сразу логинится к linux-2.local.
2. Освоение NFS
На обоих компьютерах в домашних папках создают
папки с одинаковым именем /mympi.
В папке /etc находится файл hosts.allow.
В нем прописывают следущие строки
portmap: 172.16.229.
/home/student/mympi 172.16.229.22/24(rw,async,no_subtree_check,no_root_squash)
Затем перезагружают nfs-сервер:
[root@localhost etc]# /etc/init.d/nfs-server restart Stopping NFS kernel daemon Stopping rpc.mountd: [ OK ] Stopping nfsd: [ OK ] Unexporting directories for NFS kernel daemon... Exporting directories for NFS kernel daemon... Starting NFS kernel daemon Starting nfsd [ OK ] Starting rpc.mountd [ OK ] [root@localhost etc]#
На компьютере node1 в файле fstab записывают
команду монтирования сетевой папки /home/student/mympi
с компьютера с ip-адресом 172.16.229.22 (node0)
в одноименную папку с тем же местом расположения на компьютере
node1. Для этого логинятся как суперюзер, переходят в папку
/etc и загружают в текстовый редактор файл /fstab
[root@localhost ~]$su пароль: [root@localhost ~]# cd /etc [root@localhost etc]# mcedit fstab
В файл fstab записывают строку
172.16.229.22:/home/student/mpi /home/student/mpi nfs rsize=8192,wsize=8192,rw,user,owner,auto 0 0
или
172.16.229.22:/home/student/mpi /home/student/mpi nfs rw 0 0
Обязательно нажать Enter в конце строки. В файле exports находится строка, открывающая доступ к домашней папке студент только для чтения в начале этой строки нужно поставить знак диеза (шарп, решетка: #). Дело в том, что если в последующей строке стоит команда для монтировки сетевой папки, точнее ее расшаривания с разрешением записи в нее, то первая строка перекрывает право записи, разрешая только чтение с другого компьютера и никакие команды "chmod 777 -R имя папки" ни на том, ни на дргом компьютерах не открывают расшаренную папку для записи.
3. Освоение MPI
MPI Message Passing Interface, открытый стандарт библиотеки, предназначенной для передачи сообщений внутри параллельного приложения. Реализации этого стандарта: mpich, lam, openmpi.
Как оказалось в исследуемом компьютерном классе оказалась предустановлена система mpich. По некоторым сведениям, она не развивается с 2005 года. Рекомендуется использовать openMPI, которая активно развивается (ссылка). Дальнейшее исследование показало, что в данный момент появляются нове версии пакетов mpich.
В файле конфигурации bash, который находится по адресу
/etc/bashrc
прописаны только следующие строки, указывающие, куда установлен
# MPI environment MPIRUN_HOME=/usr/bin export MPIRUN_HOMEПри установке вручную, без использования команды urpmi для конфигурирования этого пакета следует набрать строку
./configure -with-arch=LINUX -with-device=ch_p4 -rsh=/usr/bin/ssh --prefix=/usr/bin
14.01.2011
Пакеты программ MPIch и OpenMPI установлены на компьютере
с именем
linux-10.local
Справа находится машина linux-4.local, а слева
linux-7.local
Запускать программы можно из папки /root/mpich.
Примеры компиляции программ в этой папке.
Тестовая программа для расчета числа пи cpi.c
mpicc cpi.c -o cpi
получаем исполняемый файл cpi, который запускаем
с помощью команды
mpirun -np 4 cpi
запускается четыре процесса. Более расширенная форма
команды
mpirun -np 4 -machine linux-10.local cpi
где после параметра -machine указывают имя узла кластера, хоста,
на котором запускаются процессы. Вместо параметра -machine
можно использовать параметр -machinefile, после которого
указывают имя файла со списком узлов кластера. Указанные
параметры используются в пакете mpich. В пакете openmpi
вместо данных параметров используются параметры -host
и -hostfile.
Получить доступ к папке /root можно с помощью файлового менеджера,
нажав Alt+F2, набрав команду
gksu pcmanfm
и набрав пароль суперюзера.
Специалист утверждает, что для нормальной работы в кластере 4 и более машин требуется гигабитный свич (ориентировочная стоимость 500 р.), поскольку на компьютерах поставлены гигабитные сетевые карты а свич в настояещее время 100 мегабитный. Кроме этого, к интернету должен быть подключен только "master node", то есть сервер, главный узел кластера, который будет служить прокси-сервером для других узлов.
20.01.2011
Выяснилось, что при включении 5 компьютеров имя компьютера с ip-адресом 172.16.229.22 изменилось. Вместо имени linux.local действующим стало имя linux-3.local.
21.01.2011
Для того, чтобы исправить ошибку
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 student@172.16.229.22 . Use the -machine <machinename> argument to select a specific machine type.следует набрать команду
$ export MPI_HOST="student@172.16.229.22":$MPI_HOST тогда вывод значения этой константы дает следующее
$ echo $MPI_HOST
student@172.16.229.22
24.01.2011
Однако, после перезагрузки системы внесенные в значения
константы MPI_HOST изменения теряются. Чтобы предотвратить
эту потерю, значения в эту константу нужно записать
в скрытый файл .bashrc, который находится в домашней папке
пользователя. В этот файл, как правило, вносят конфигурацию
командного интерпретатора bash, которые вступают в силу
когда владелец домашней папки, в данном случае student,
входит в систему. Аналогичный файл, принадлежащий
суперпользователю, находится в папке /etc, здесь
следует отметить, что по некторым сведениям (ссылка),
вносить изменения в этот файл часто является дурным
тоном. Итак в файл ~/.bashrc вносим следующие строчки
# Конфигурация MPICH
export MPI_HOST="student@172.16.229.22":$MPI_HOST
Чтобы изменить конфигурацию без перезагрузки bash
набираем команду
$ source ~/.bashrc
Убедиться, что изменения вступили в силу можно если выполнить
$ echo $MPI_HOST
Следующая проблема: при выполнении приведенной ниже команды
появлялось сообщение о соответствующей ошибки
[student@localhost mympi]$ mpirun -np 4 -all-local cpi
/home/student/mympi/cpi: error while loading shared libraries:
libmpi.so.0: cannot open shared object file: No such file or directory
Видимо, следовало установть пакет программ, содержащий библиотеку
libmpi.so.0
В каком пакете присутствует указанная библиотека, узнают, исполняя
на компьютере, настроенном на установку rpm-пакетов из интернет-источника,
команду
$ urpmf libmpi.so.0
Вывод этой команды: следует установить пакет
libopenmpi.so.0
scp
libibverbs1-1.1.3-1mdv2010.1.i586.rpm
libtorque2-2.4.8-1mdv2010.1.i586.rpm
libnuma1-2.0.3-2mdv2010.1.i586.rpm
libopenmpi1.2-1.4.1-1mdv2010.1.i586.rpm
Could not find enough machines for architecture LINUX
Для исправления данной ошибк следует под рутом в файл
/usr/share/mpich/machines.LINUX.rpmsave
записать
172.16.229.22
либо
linux-2.local
Запись вида
student@172.16.229.22
приводит к указанной выше ошибке отсутствия машин
с линукс-архитектурой.
[student@localhost mympi]$ mpirun -np 4 -all-local cpi [localhost:13774] [[INVALID],INVALID] ORTE_ERROR_LOG: A system-required executable either could not be found or was not executable by this user in file ess_singleton_module.c at line 269 [localhost:13774] [[INVALID],INVALID] ORTE_ERROR_LOG: A system-required executable either could not be found or was not executable by this user in file ess_singleton_module.c at line 143 [localhost:13774] [[INVALID],INVALID] ORTE_ERROR_LOG: A system-required executable either could not be found or was not executable by this user in file runtime/orte_init.c at line 132 -------------------------------------------------------------------------- Sorry! You were supposed to get help about: orte_init:startup:internal-failure But I couldn't open the help file: /usr/share/openmpi/help-orte-runtime: No such file or directory. Sorry! -------------------------------------------------------------------------- -------------------------------------------------------------------------- Sorry! You were supposed to get help about: mpi_init:startup:internal-failure But I couldn't open the help file: /usr/share/openmpi/help-mpi-runtime: No such file or directory. Sorry! -------------------------------------------------------------------------- *** An error occurred in MPI_Init *** before MPI was initialized *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort) [localhost:13774] Abort before MPI_INIT completed successfully; not able to guarantee that all other processes were killed!
Гипотеза: указанная выше ошибка вызвана тем, что в системе
не установлен пакет, содержащий компилятор программ на языке
программирования C. Посылкой к этой гипотезе служит то,
что программа cpi имеет исходный код на языке C и компилировалась
с помощью соответствующего компилятора mpicc, установленного
на другом компьютере linux-10.local с ip-адресом 172.16.229.34.
Для проверки этой гипотезы была откомприлирована программа
на языке C++, которая выводит сообщение "Hello, World!"
с помощью указанного числа процессов. Для компиляции этой программы
использовался компилятор mpiCC из пакета
mpic++-1.2.5.2-11mdv2008.1.i586.rpm
Этот пакет был установлен ранее, до возникновения указанных
двух предыдущих ошибок.
Команда компиляции выглядит следующим образом:
mpiСС 111-001.cpp -o aa22
Здесь 111-001.cpp исходный текст программы, а имя aa22 после
параметра -o имя исполнимого файла.
Вот исходный текст программы 111-001.cpp
#include <iostream> #include "mpi.h" #include "mpi2c++/mpi++.h" using namespace std; int main(int argc, char *argv[]) { MPI::Init(argc, argv); int rank = MPI::COMM_WORLD.Get_rank(); int size = MPI::COMM_WORLD.Get_size(); cout << "Hello World! I am " << rank << " of " << size << endl; MPI::Finalize(); }
В указанной программе следует обратить внимание на 2-ю
и 3-ю строки, в которых указываются используемые заголовочне
файлы:
#include "mpi.h"
#include "mpi2c++/mpi++.h"
Следует учесть, что файл mpi.h находится в папке /usr/include,
а появился он там при установке пакета:
libmpich1-devel-1.2.5.2-11mdv2008.1.i586.rpm
А второй заголовочный файл расположен по адресу
/usr/include/mpi2c++/mpi++.h
Эта папка появилась там при установке пакета
mpic++-1.2.5.2-11mdv2008.1.i586.rpm
Запуск этой программы на локальной машине
mpirun -np 4 -all-local aa22
не приводит ни к каким видимым результатом, то есть
как бы "зависает". Чтобы выяснить, в чем причина такого
поведения системы, запускают вторую консоль, в которой
выводят список процессов. Вот часть протокола:
[student@localhost ~]$ ps ax PID TTY STAT TIME COMMAND 4031 pts/0 S+ 0:00 /bin/sh /usr/bin/mpirun -np 4 -all-local aa22 4157 ? S 0:00 [flush-0:18] 4158 pts/0 S+ 0:00 /home/student/mympi/aa22 -p4pg /home/student/mympi/PI4031 -p4wd /home/student/mympi 4186 pts/1 R+ 0:00 ps ax
Здесь предпоследняя строка связана с файлом PI4031, который появляется
в папке /home/student/mympi/ при запуске mpirun. В этом файле
записан список процессов и хостов, на которых они запускаются.
Этот факт был обнаружен при удалении файла PI4031, после чего
в второй консоли был уничтожен процесс с pid 4158 командрой
$ kill 4158
В ответ на это действие в первой консоли, в которой запущена
программа с помощю mpirun появилось сообщение:
[student@localhost mympi]$ mpirun -np 4 -all-local aa22 /usr/bin/mpirun.ch_p4: line 243: 4158 Завершено /home/student/mympi/aa22 -p4pg /home/student/mympi/PI4031 -p4wd /home/student/mympi /bin/rm: невозможно удалить : Нет такого файла или каталога [student@localhost mympi]$
Вот содержимое файла PI4031
student@172.16.229.22:linux.local 0 /home/student/mympi/aa22 student@172.16.229.22:linux.local 1 /home/student/mympi/aa22 student@172.16.229.22:linux.local 1 /home/student/mympi/aa22 student@172.16.229.22:linux.local 1 /home/student/mympi/aa22
При следующем запуске программы, она снова "зависла". Завершение процесса, аналогичного в указанном здесь примере процессу с pid 4158 соответствующий файл вида PI4031 в папке mympi исчезал. При этом выводилось сообщение:
/usr/bin/mpirun.ch_p4: line 243: 7999 Завершено /home/student/mympi/aa22 -p4pg /home/student/mympi/PI7872 -p4wd /home/student/mympiПри этом оба соответсвующих процесса из списка процессов исчезли.
В другом случае, когда завершался процесс запуска mpirun,
аналогичный процессу с pid 4031, файл вида PI4031 оставался
в папке mympi. В первой консоли, где был выполнен запуск программы
выводилось только единственное слово
Завершено
А в списке процессов оставался висеть процесс aa22, аналогичный
в приведенном примере процессу с номером 4158.
Вот еще один интересный протокол
[student@localhost mympi]$ mpirun -np 4 -machine 172.16.229.22 aa22 p0_9243: p4_error: Child process exited while making connection to remote process on linux-2.local: 0 [student@localhost mympi]$ p0_8532: (1082,225086) Procgroup: p0_8532: (1082,225125) entry 0: student@172.16.229.22:linux.local 0 0 /home/student/mympi/aa22 student p0_8532: (1082,225139) entry 1: student@172.16.229.22:linux.local 1 1 /home/student/mympi/aa22 student p0_8532: (1082,225150) entry 2: student@172.16.229.22:linux.local 1 2 /home/student/mympi/aa22 student p0_8532: (1082,225161) entry 3: student@172.16.229.22:linux.local 1 3 /home/student/mympi/aa22 student p0_8532: p4_error: Could not gethostbyname for host student@172.16.229.22:linux.local; may be invalid name : 1083
Ему соответсвует файл PI9105
student@172.16.229.22:linux.local 0 /home/student/mympi/aa22 linux-2.local 1 /home/student/mympi/aa22 linux-2.local 1 /home/student/mympi/aa22 linux-2.local 1 /home/student/mympi/aa22
Список процессов, фрагмент:
[student@localhost ~]$ ps ax PID TTY STAT TIME COMMAND 8532 pts/0 S 0:00 /home/student/mympi/aa22 -p4pg /home/student/mympi/P 9105 pts/0 S+ 0:00 /bin/sh /usr/bin/mpirun -np 4 -machine 172.16.229.22 9243 pts/0 S+ 0:00 /home/student/mympi/aa22 -p4pg /home/student/mympi/P 9244 pts/0 S+ 0:00 /home/student/mympi/aa22 -p4pg /home/student/mympi/P 9245 pts/0 S+ 0:00 rsh linux-2.local -l student -n /home/student/mympi/ 9252 ? Ss 0:00 /home/student/mympi/aa22 student@172.16.229.22:linux 9267 pts/1 R+ 0:00 ps ax [student@localhost ~]$ kill 9252
Следует отметить, что компьютер, на котором запускали программу
172.16.229.22 linux-2.local
А соседний компьютер
172.16.229.27
который прописан в файле со списком узлов кластера
отключен.
Содержимое файла /usr/share/mpich/machines.LINUX.rpmsave
# Change this file to contain the machines that you want to use # to run MPI jobs on. The format is one host name per line, with either # hostname # or # hostname:n # where n is the number of processors in an SMP. The hostname should # be the same as the result from the command "hostname" linux-2.local 172.16.229.27 172.16.229.22
27.01.2011
Соседний компьютер 172.16.229.27 linux-3.local включен
[student@localhost mympi]$ mpirun -np 4 -machine linux-3.local aa33 p0_20817: (81,332796) Procgroup: p0_20817: (81,332835) entry 0: linux-3.local:student@172.16.229.22:linux-2.local 0 0 /home/student/mympi/aa33 student p0_20817: (81,332848) entry 1: linux-2.local 1 1 /home/student/mympi/aa33 student p0_20817: (81,332858) entry 2: student@172.16.229.22 1 2 /home/student/mympi/aa33 student p0_20817: (81,332868) entry 3: student@172.16.229.27 1 3 /home/student/mympi/aa33 student p0_20817: p4_error: Could not gethostbyname for host student@172.16.229.22; may be invalid name : 81 [student@localhost mympi]$
Из папки /usr/share/mpich/ были удалены файлы
machines.LINUX
machines.sample
и удален файл
machines.LINUX.rpmsave
на исполнение запущен файл
[student@localhost mympi]$ mpirun -np 4 -all-local aa33 ^C[student@localhost mympi]$ mpirun -np 4 -all-local aa33 Cannot read //usr/share/mpich//machines.LINUX. Looked for files with extension LINUX in directory //usr/share/mpich/ . [student@localhost mympi]$
Результат предыдущего эксперимента означает,
что список узлов кластера берется именно из файла
machines.LINUX
а выводы предыдущего аналогичного эксперимента с файлом
machines.LINUX.rpmsave не совсем верны или, по меньшей
мере, не учитывают последующих экспериментов с параметром
конфигурации MPI_HOST в файле ~/.bashrc.
В списке процессов найдена интересная строка
9245 pts/0 S+ 0:00 rsh linux-2.local -l student -n /home/student/mympi/
Здесь rsh означает, что вместо протокола SSH, на который предполагалось
настроить кластер используется протокол удаленного управелния
компьютером Remote SHell (RSH), который как правило не одобряется
администраторами публичных, не частных, сетей.
Вопрос: как настроить mpich на SSH? Гипотеза: возможно
в файле ~/.bashrc нужно присвоит значение SSH соответствующей
переменной окружения пакета mpich.
29.01.2011
Обнаружен файл, который, по-видимому, должен служить для конфигурации
пакета MPICH. Путь к этому файлу:
/usr/bin/mpireconfig.dat
В этом файле существует строка с константой, назначающей режим
использования RSH, которой было присвоено следующее значение:
RSHCOMMAND='ssh'
Возможно, ssh следует записывать прописными буквами: SSH (требуется
проверка).
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]$
3. Освоение PVM
PVM Parallel Virtual Machine, среда программирования.
25.01.2011
Для запуска установленного в папку /pvm3 сервера pvm следует набрать следующие команды
$ ssh-agent bash $ ssh-add $ pvm pvm> add 172.16.229.27 pvm> halt $
Предпоследняя строчка добавляет указанный хост в качестве узла кластера, а последняя строчка позволяет завершить работу с сервером pvm и вернуться в оболочку bash.
MPI Message Passing Interface, среда программирования. Открытый стандарт библиотеки, предназначенной для передачи сообщений внутри параллельного приложения. Реализации этого стандарта: mpich, lam, openmpi.
1. Установка Ubuntu и настройка локальной сети
cluster0
- CPU: Intel Atom N270 1,60 GHz
- Memory: DDR3 3 GiB
- OS: Linux Ubuntu 10.04 LTS "Lucid Lynx"
- eth0: ip 192.168.251.1
cluster1
- CPU: AMD Duron 850 MHz
- Memory: SDRAM 256 MiB
- OS: Linux Ubuntu 10.04 LTS "Lucid Lynx"
- eth0: ip 192.168.251.2
Проблемы:
- [РЕШЕНО-1] При включенном GSM соединении на cluster0
не проходит ping в обоих направлениях сети
cluster0 cluster1. Такой проблемы нет
на другой установке Ubuntu на внешнем диске.
- [РЕШЕНО-2] Невозможно получить доступ через
протокол SSH: не удается залогинится и копировать файлы.
При выполнении команд
ssh cluster1@cluster1-desktop scp ./file1 cluster1@cluster1-desktop:~/.ssh
выдается сообщение
ssh: Could not resolve hostname cluster1-desktop: Name or service not known lost connection
С клинета cluster0 не видно
имя хоста, находящегося на узле cluster1.
Решения проблем:
- [РЕШЕНО-1]http://forum.ubuntu.ru/index.php?topic=25514.0
На cluster0 выполнен скрипт
sudo iptables.sh
следующего содержания для разблокировки исходящего трафика
#!/bin/sh iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t mangle -P PREROUTING ACCEPT iptables -t mangle -P OUTPUT ACCEPT iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -t nat -X iptables -t mangle -X
Теперь ping проходит в обоих направлениях сети
cluster0 cluster1.
- [РЕШЕНО-2]http://forum.ubuntu.ru/index.php?topic=47437.msg772515#msg772515
Если возникает ошибка
ssh: Could not resolve hostname cluster1-desktop: Name or service not known lost connection
при работе с протоколом SSH, то вместо имени хоста можно
использовать соответствующий ip-адрес. Так, чтобы залогинится
на удаленном компьютере, имеющем ip 192.168.251.2,
или скопировать на него файл, выполняют команды
ssh cluster1@192.168.251.2 scp ./file1 cluster1@192.168.251.2:~/.ssh
Другое решение: прописать имя хоста и соответствующий ip
в файл /etc/hosts.
2. Установка пакета apt-cacher-ng на cluster0
На cluster0 выполнены команды
sudo aptitude apdate sudo aptitude install apt-cacher-ng
В итоге
apt-cacher-ng
296 kb архивов
799 kb после распаковки
3. Настройка менеджера пакетов apt-get на cluster1
На cluster1 выполнены команды
sudo sh -c "echo \"Acquire::http { Proxy \\\"http://192.168.251.1:3142\\\"; }; \"> /etc/apt/apt.conf.d/01proxy" sudo apt-get updateПосле этого вычислительный узел cluster1 получил возможность скачивать программные пакеты через прокси, в качестве которого выступает cluster0.
4. Установка пакета openssh-server на cluster0 (и на cluster1)
На cluster0 выполнены команды
sudo aptitude apdate sudo aptitude install openssh-server
В итоге
openssh-server
285 kb архивов
778 kb после распаковки
5. Беспарольный доступ в кластере
С помощью протокола SSH (Secure SHell, сетевой протокол сеансового уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений) обеспечивают беспарольный доступ с cluster0 на cluster1. Нужно копировать исполняемые модули на другие узлы кластера: как правило, это требует вводить пароль доступа. При добавлении нового узла в кластер тоже требуется вводить пароль доступа.- Осуществляют вход в cluster0
ssh netbook@ubuntu-netbook
- Переходят в скрытую папку ssh, которая находится в домашней папке
cd ~/.ssh
- Генерируют rsa-ключ
ssh-keygen -t rsa
При этом оставляют предложенное имя файла id_rsa,
нажимая клавишу Enter. Не задают никакого пароля,
нажимая снова клавишу Enter. Подтверждают пустой
пароль,
вдругоряд
нажимая клавишу Enter.
- Копируют открытый rsa-ключ, созданный в папке ~/.ssh
на узел cluster1, которому назначен ip-адрес
192.168.251.2
scp id_rsa.pub cluster1@192.168.251.2:~/.ssh
- Входят на узел cluster1 с консоли cluster0, при этом требуется
ввести пароль для супер-пользователя узла cluster1:
ssh cluster1@192.168.251.2
- С консоли cluster0 переходят в скрытую папку ssh,
которая принадлежит узлу cluster1:
cd ~/.ssh
- С консоли cluster0 создают копию открытого rsa-ключа
в скрытой папке ~/.ssh узла cluster1:
cat id_rsa.pub >> authorized_keys2
- Отключаются от узла cluster1:
logout
- Проверяют, получается ли вход на узел cluster1 с консоли cluster0
без пароля:
ssh cluster1@192.168.251.2
- Повторяют шаги 4 9 для остальных узлов:
cluster2, cluster3
- Что дальше?!
- А дальше вот что!
- Читайте!
6. Настройка сетевой файловой системы NFS
Задача: все узлы кластера должны иметь доступ к одному и тому же программному модулю и одним и тем же файлам с данными, используемыми этим модулем. Суть решения задачи: программный модуль с файлами данных располагается в папке на консоли кластера, а эта папка монтируется в одноименные папки на узлах кластера через сетевую файловую систему NFS. Вводные: будем предполагать, что узлы кластера имеют ip-адреса в диапазоне 192.168.1.2-192.168.1.254. Консоль кластера, к каталогам файловой системы которой мы будем подключаться через NFS, имеет ip-адрес 192.168.1.1. 0.sudo apt-get install nfs-kernel-server 492 kB архивов 1 524 kB будет занято 1. Конфигурация сервера 1.1.разрешить подключение nfs-клиентам к nfs-серверу. в файле /etc/hosts.allow прописываем следующую строчку: portmap: 192.168.1. Точка в конце строки обязательна! 1.2.Расшарить папку К примеру, мы хотим обеспечить узлам кластера доступ в каталог /home/mpiuser/data-and-progs. Для этого в файле /etc/exports прописываем строку: /home/mpiuser/data-and-progs 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash) На этом настройка серверной части закончена. Чтобы изменения вступили в силу необходимо перезапустить службу NFS с помощью команды "service portmap restart". ----- Ubuntu ----- http://cluster.linux-ekb.info/ubuntu.php На консоли кластера добавляем строчку в файл /etc/exports для создания сетевого ресурса: sudo sh -c "echo \"$HOME/mpi 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)\" >> /etc/exports" sudo sh -c "echo \"/tmp/my-mpi 192.168.251.0/24(rw,async,no_subtree_check,no_root_squash)\" >> /etc/exports" После этого необходимо перезапустить сервис NFS: sudo /etc/init.d/nfs-kernel-server restart ----- /Ubuntu ----- 2. Конфигурация клиентов Все что будет описано ниже необходимо выполнить на каждом компьютере кластера кроме консольного. 2.1. Создать одноименного с консолью пользователя на каждом клиенте и загружаться с него (под ним же должен быть настроен ssh и apt-get-прокси) Либо располагать папку в корне или другой не домашней папке. 2.2. в домашнем каталоге пользователь mpiuser (/home/mpiuser) создать пустой каталог data-and-progs. 2.3. прописать в файле /etc/fstab следующую строку: 192.168.1.1:/home/mpiuser/data-and-progs /home/mpiuser/data-and-progs nfs rw 0 0 2.4. Чтобы удаленный (сетевой) каталог монтировался автоматически при загрузке узла кластера, сервис клиента NFS должен запускаться в процедуре начальной загрузки. 2.5. При включении кластера, консоль кластера должна быть загружена до того, как вы начнете включать остальные узлы. ----- Ubuntu ----- http://cluster.linux-ekb.info/ubuntu.php На всех остальных узлах кластера мы должны будем поправить файл /etc/fstab , добавив туда запись для автоматического монтирования сетевого ресурса: sudo sh -c "echo \"192.168.1.1:$HOME/mpi $HOME/mpi nfs rsize=8192,wsize=8192,rw,user,owner,auto 0 0\" >> /etc/fstab" Теперь для проверки перезагрузим вычислительные узлы кластера. После перезагрузки каталог mpi в домашней директории пользователя должен быть смонтирован и его содержимое должно быть эквивалентно содержимому такого же каталога на консоли кластера. ----- /Ubuntu ----- =================== Подробно для hitech ===================Установка Ubuntu и настройка локальной сети
На первом этапе организуют локальную сеть из двух компьютеров. Для упрощения назвем конфигурацию первого компьютера cluster0, он будет играть роль консоли. Конфигурацию второго компьютера назовем cluster1, он будет играть роль сервера. Ниже перечислены основные характеристики компьютеров.
Характеристики cluster0:
- На нетбуке Compaq mini 311c подключен внешний диск
Western Digital 5000BEKT 8 MiB 7200 rpm
SATA2 2,5" 500 GiB с помощью контейнера AGESTAR
External Enclosure for 2,5" Serial ATA HDD.
apt-cacher-ng 296 kb архивов
799 kb после распаковки
http://www.goodroid.ru/articles/programmirovanie/opengl-es-for-android/draw-triangle-opengl-es.html
Цитата:
"Просто добавьте android.opengl.GLSurfaceView в импорт."
1. Если выполнено указанное в цитате, то нужно ли тогда это:
"Создадим в нашем проекте пакет с именем
com.example.android.apis.graphics и скопируем
в него GLSufaceView.java."?
2. Если ответ на первый вопрос отрицательный, то
в классе Renderer как должен измениться заголовок класса
public class Renderer implements
com.example.android.apis.graphics.GLSurfaceView.Renderer?
Откуда нужно имплементировать интерфейс GLSurfaceView.Renderer?
Неужели вместо
"implements
com.example.android.apis.graphics.GLSurfaceView.Renderer"
нужно написать
"implements
android.opengl.GLSurfaceView"?
3. Если ответ на первый вопрос положительный, то объясните,
пожалуйста,то для чего это действие нужно?
4. И если для чего-то нужно, то где можно достать
файл GLSufaceView.java?
5. Будьте так добры, пожалуйста, выложите полные исходники
Ваших примеров. Для меня Ваши примеры кажутся очень полезными.
Мне представляется, что наличие в статьях полных исходников
сделают Ваши упражнения еще более полезными и внесут
дополнительную ясность.
Дело в том, что после установки на компьютер SDK Android
вытянул из Интернета пакеты примеров для Android версий
7, 8 и 9. Но по указанному в статье пути
"samples\ApiDemos\src\com\example\android\apis\graphics"
я не нашел файл GLSufaceView.java. Существует лишь файл
с похожим названием GLSufaceViewActivity.java.
Комментариев нет:
Отправить комментарий