Создание MPICH2 кластера на базе учебной лаборатории
Автор: Савостин Игорь Анатольевич, Горбунов Александр Николаевич
Статья в выпуске: 2 (10), 2017 года.
Бесплатный доступ
Данная статья описывает конкретные шаги по созданию простого варианта вычислительного кластера на базе учебной лаборатории университета. Кластер работает под управлением Linux-подобной ОС Kubuntu.
Кластер, параллельные вычисления
Короткий адрес: https://sciup.org/140225616
IDR: 140225616
Текст научной статьи Создание MPICH2 кластера на базе учебной лаборатории
Обоснование выбора программного обеспечения
В БГТУ для обучения студентов основам параллельного программирования используется MPICH2 реализация протокола MPI. MPICH2 является легкопортируемой быстрой реализацией стандарта MPI. Данная система активно разрабатывается в Аргоннской национальной лаборатории США, с участием компаний IBM, Cray, SiCortex, Microsoft, Intel, NetEffect, Qlogic, Myricom, UBC, а также Университета штата Огайо. Модульная структура для создания производных реализаций, предоставляющая широкие возможности для исследования технологии MPI.
Однако, существовавший ранее учебный кластер под ОС Windows не отличался стабильностью и надежностью, т. к. данная ОС не является основной и приоритетной платформой для MPICH2. В результате анализа материалов по параллельным системам, было принято развернуть кластер на базе Linux-подобной ОС, так как эта операционная система является целевой платформой для выбранной реализации протокола MPI, а так же именно Linux-подобные ОС традиционно используются для развертывания вычислительных кластеров.
За основу была взята инструкция с [2].
Настройка сети
Для работы кластера необходима надежная связь между всеми его узлами, а так же возможность обращения к машинам по их имени.
После согласования с системным администратором кафедры было принято решение о выделении диапазона
IP адресов для компьютеров кластера в зоне, в которой не работает кафедральный DHCP сервер, т. к. адреса машин должны быть статическими. Этим требованиям отвечали адреса в диапазон 192.168.193.201-192.168.193.253.
Т.к. установка DNS сервера является избыточный, с точки зрения количества машин и необходимости наличия у каждой статического IP адреса, было решено отредактировать на каждой машине файл /etc/hosts, используемый POSIX-совместимыми операционными системами для разрешения доменных имён. После редактирования файл /etc/hosts на каждой машине кластера имел вид согласно листингу 1.
127.0.0.1 localhost
192.168.193.211 |
WS01-408 |
192.168.193.212 |
WS02-408 |
192.168.193.213 |
WS03-408 |
192.168.193.214 |
WS04-408 |
192.168.193.215 |
WS05-408 |
192.168.193.216 |
WS06-408 |
192.168.193.217 |
WS07-408 |
192.168.193.219 |
WS09-408 |
192.168.193.220 |
WS10-408 |
192.168.193.221 |
WS11-408 |
192.168.193.222 |
WS12-408 |
192.168.193.224 |
WS14-408 |
192.168.193.226 |
WS16-408 |
Листинг 1. Файл /etc/hosts
Далее, в менеджере сетей были созданы подключения с с именами ClusterNode##, где ## – номер компьютера в аудитории, и вышеописанными IP адресами с маской 255.255.255.0.

Т. к. компьютеры аудитории будут использоваться не только для вычислений, автоматическое подключение будет устанавливаться к основной сети кафедры, а подключение к подсети кластера — только по требованию.
После настройки сетевых адаптеров и правки файла / etc/hosts была произведена проверка доступности машин командой ping.
Настройка хранилища
Как было сказано выше, для обеспечения доступа любой машины к программе, выполняющейся на кластере, использован механизм NFS.
Настройка головной машины, которой является WS03-408, включает в себя создание каталога /mirror, который будет являться общим для всех машин кластера, установку сервера NFS при помощи команд из листинга 2.
$ sudo apt-get install nfs-server
Листинг 2. Команда установки сервера NFS
А так же добавление в файл /etc/exports строки из листинга 3, что указывает серверу на необходимость предоставления доступа на чтение и запись к указанному каталогу с использованием любого метода аутентификации.
/mirror *(rw,sync)
Листинг 3. Установка параметров общего каталога
После этого сервер NFS необходимо перезапустить командой, данной в листинге 4.
$ sudo service nfs-kernel-server restart
Листинг 4. Команда перезапуска сервера NFS
Т. к. в UNIX-подобных системах разграничение доступа к файлам происходит на основе идентификаторов пользователей и групп, необходимо на всех машинах создать пользователя с одинаковым идентификатором UID, который будет являться владельцем общего каталога.
Для этого на каждом узле, кроме главного, создаем каталог /mirror, в который будет монтироваться одноимённый катало с головной машины по средствам NFS. Затем создаём пользователя mpich с UID 12345 и домашним каталогом в /mirror. Это обеспечит автоматическое перемещение в общий катлог при входе пользователя в систему. Далее, делаем пользователя mpich владельцем каталога / mirror. Затем необходимо установить клиенты NFS на машины кластера. После данных действий, описанных в листинге 5, авторизовавшись в системе под именем пользователя mpich, можно получить полный доступ к каталогу / mirror. Описание команд можно получить в [1].
$ sudo mkdir /mirror
$ sudo chown mpich /mirror
$ sudo useradd -d /mirror -u 12345 -p mpich -U mpich
Листинг 5. Настройка доступа к общему каталогу кластера
Для монтирования общего каталога на узлах кластера (кроме головного) необходимо выполнить команду из листинга 6.
sudo mount WS-03-408:/mirror /mirror
Листинг 6. Команда монтирования общего каталога
Для упрощения монтирования каталога неподготовленными пользователями, данная команда была обёрнута в скрипт, показанный на листинге 7.
#!/bin/bash sudo mount WS03-408:/mirror /mirror
Листинг 7. Скрипт монтирования общего каталога
После подключения всех узлов к подсети кластера и монтирования общего каталога, можно приступить к настройке SSH.
Настройка SSH
Сначала на всех узлах кластера командой из листинга 8.
$ sudo apt-get install openssh-server
Листинг 8. Команда установки SSH сервера
Т. к. для работы MPICH2 требуется такая настройка SSH [3], при которой должен предоставляться автоматический доступ к узлам кластера без запроса паролей [5], сконфигурируем SSH для аутентификации по публичному ключу.
Поскольку SSH хранит ключи в домашнем каталоге пользователя, а ранее мы создали пользователя mpich с домашним каталогом на общем сетевом ресурсе, достаточно производить настройку на одной любой машине, войдя в систему под именем mpich. D дальнейшем, все действия с кластером будем производить с головной машины.
Входим в систему под именем mpich, создаем пару ключей, зашифрованных несимметричным алгоритмом RSA как показано в листинге 9.
$ sudo su - mpich
$ ssh-keygen -t -rsa
Листинг 9. Вход в систему и генерация RSA ключей
При генерации программа ssh-keygen предложит установить пароль на связку ключей, который следует оставить пустым, дважды нажав на клавишу Enter.
Теперь необходимо добавить сгенерированный публичный ключ в список доверенных, используя команды из листинга 10.
$ cd /mirror/.ssh/
Листинг 10. Команда добавления публичного ключа в список доверенных
Очень важным моментом при настройке SSH является установка корректных прав доступа к файлам ключей [4], т. к. при слишком сильном ограничении прав не смогут работать утилиты настройки и сам SSH сервер, но, с другой стороны, если ключи будут открыты для общего доступа, сервер так же откажется работать, или будет постоянно требовать пароль, что неприемлемо для работы MPICH2. Настройка прав доступа показана в листинге 11.
$ sudo go-w /mirror
$ sudo chmod -R 700 /mirror/.ssh
$ sudo chmod 644 /mirror/.ssh/authorized_keys
Листинг 11. Установка правильных прав доступа к файлам ключей
После всех вышеуказанных действий необходимо произвести подключение через SSH ко всем узлам кластера для обмена ключами и проверки работоспособности подключений. При этом будет предложено добавить ключи в список доверенных, на что следует ответить «yes» и нажать Enter на клавиатуре компьютера.
Следующим этапом является установка GCC и MPICH2.
Установка GCC и MPICH2
Чтобы обеспечить возможность компиляции и сборки программ на основном узле кластера, на него следует установить GCC, что показано в листинге 12.
о -j— 1000
/
--I юследовательный алгоритм
Базовый параллельный алгоритм! 10 потоков)
Базовый параллельный алгоритм! 100 потоков)
Ленточный пара ллел ьный алго ритм! 10 потоков)
Ленточный параллельный
Г.ярПГ.ППППППм........;...................
1500 2000
Рис. 1. Результаты эксперимента
алгоритм(100_
- потоков).. . ......

sudo apt-get install build-essential
Листинг 12. Команда установки необходимых для сборки программ
Build-essential является метапакетом, содержащим информационный список пакетов, необходимых для сборки программ в ОС Kubuntu. Для упрощения установки этих пакетов build-essential зависит от них, что приводит к автоматической установке всего необходимого для сборки одной командой.
Заключительным этапом является установка на все машины кластера самого MPICH2 с помощью команды из листинга 13.
sudo apt-get install mpich2
Листинг 13. Команды установки пакета MPICH2
Для проверки успешности установки MPICH2 на все машины можно воспользоваться командами из листинга 14.
$ which mpiexec
$ which mpirun
Листинг 14. Команды проверки установки MPICH2
Далее необходимо создать файл с именем mf, указывающий , какие машины могут участвовать в расчетах. Как это сделать показано в листинге 15.
$ touch /mirror/mf
$ sudo chown mpich /mirror/mf
$ nano /mirror/mf
Листинг 15. Создание файла mf
Структура файла является довольно простой. На каждой новой строке указывается имя машины, затем следуют двоеточие и число процессов. Содержимое файла, созданного для нашего кластера, показано на листинге 16.
WS01-408:4
WS02-408:4
WS03-408:4
WS04-408:4
WS05-408:4
WS06-408:4
WS07-408:4
WS09-408:4
WS10-408:4
WS11-408:4
WS12-408:4
WS14-408:4
WS16-408:4
Листинг 16. Содержимое файла mf
На этом настройка кластера завершена. Теперь можно приступить к тестированию системы, путем запуска пользовательских программ.
Запуск программ
Перезагружаем все машины, чтобы имитировать обычный запуск кластера, затем подключаем их к подсети кластера и выполняем скрипт монтирования общего каталога командой из листинга 17.
$ sudo bash ./mount
Листинг 17. Команда монтировния общего каталога
Для сборки и запуска необходимо выполнить команды из листинга 18.
$ sudo su — mpich mpic++ -o test test.c mpiexec -n 52 -f ./mf /mirror/test
Листинг 18. Команды для сборки и запуска тестовой программы
Сравнение скорости работы алгоритмов
В процессе работы с кластером был проведен эксперимент по определению ускорения работы алгоритмов умножения матриц при использовании параллельных алгоритмов. Результаты представлены на рисунке 1.
По результатам эксперимента видно явное снижение времени расчетов при использовании кластера.

Список литературы Создание MPICH2 кластера на базе учебной лаборатории
- Гранненман С. Linux. Карманный справочник./С. Гранненман, М.: ООО «И. Д. Вильямс», 2013. -416 с
- Гришанова Т.В., Использование облачных технологий в образовании//Вестник образовательного консорциума Среднерусский университет. Информационные технологии. 2015. № 2 (6). С. 22
- Setting Up an MPICH2 Cluster in Ubuntu -: https://help.ubuntu.com/community/MpichCluster
- Теория и практика использования SSH (ssh crypt security) -: https://www.opennet.ru/base/sec/ssh_intro.txt.html
- Permissions on private key in.ssh folder? -: http://superuser.com/questions/215504/permissions-on-private-key-in-ssh-folder
- MPICH Wiki -: https://wiki.mpich.org/mpich/index.php/Main_Page
- Хвостенко Т.М., Формирование электронной информационно-образовательной среды учебного заведения//Вестник образовательного консорциума Среднерусский университет. Информационные технологии. 2015. № 2 (6). С. 48