MPI Linux Cluster

Кластер MPI у нас получился  случайно. Изначально мы собирали кластер на 32-битных старых машинах. Но задача оказалась непростой, и в качестве учебной цели мы собрали MPI-кластер на 64-битных машинах. Т.к. русскоязычной инструкции в Сети почему-то не нашлось, мы восполняем этот пробел.


Инструкция по созданию MPI-кластера

Инструкция описывает создание MPI-кластера из двух компьютеров – сервера и клиента. Дальнейшее расширение кластера достигается добавлением дополнительных клиентов.

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

Данная инструкция написана летом 2020 года в процессе создания кластера, который заработал и показывается на видео в конце.
В качестве операционной системы был использован MX Linux 19.2 64-битный на обеих машинах. Компьютеры соединены обычным роутером ethernet. IP-адреса приведены такие, какие им выдал роутер. Для постоянного использования следует компьютерам придавать статические IP, либо прописать в роутере, чтобы он сам давал машинам постоянные адреса.

Для создания кластера производятся настройки сначала на сервере, потом на клиенте, потом опять на сервере. Эта инструкция будет дополняться и расширяться по возможности. Комментарии приветствуются.

На сервере

Обновляем систему
sudo su
apt update
apt upgrade

Ставим все необходимые пакеты
apt install mpich openmpi-bin openmpi-common libopenmpi-dev libgtk2.0-dev openssh-server nfs-kernel-server -y

Сервер должен иметь постоянный ip-адрес, который будет использоваться в дальнейших настройках.

Вносим изменения в файл hosts
sudo geany /etc/hosts

добавляем строки:
(в нашем случае ip сервера был 19.16.1.113)
19.16.1.113 GridServer

Сохраняем файл.

Далее создаем серверную папку nfs:
mkdir /home/mpiuser/cloud

Для публикации папки cloud необходимо внести в файл /etc/exports строку:
/home/mpiuser/cloud *(rw,sync,no_root_squash,no_subtree_check)

Далее команда
sudo exportfs -a

В папке cloud необходимо создать файл hostfile со списком допустимых участников nfs.
Пока вносим название сервера:
GridServer

Добавляем в папку cloud исполняемый файл mpi_sample.c (мы скачали c GitHub)

Проверяем работоспособность mpich
mpicc -o mpi_sample mpi_sample.c
mpirun -np 4 ./mpi_sample

4 – кол-во ядер в сервере. Скрип уже должен запускаться. Например, можно скачать скрипт, который посылает Hello World с каждого ядра.

На клиенте

Обновляем пакеты
sudo su
apt update
apt upgrade

Вносим изменения в файл hosts
sudo geany /etc/hosts

(в нашем случае ip сервера был 19.16.1.113)
19.16.1.113 GridServer
19.16.1.117 client001

Ставим пакеты:
apt install mpich openmpi-bin openmpi-common libopenmpi-dev libgtk2.0-dev openssh-server nfs-common -y

Создаем папку для nfs системы
mkdir /home/mpiuser/cloud

Привязываем к ней папку на сервере
sudo mount -t nfs GridServer:/home/mpiuser/cloud /home/mpiuser/cloud

В данный момент в папке cloud уже должны появиться файлы с сервера

Далее
sudo geany /etc/fstab
добавляем строку
GridServer:/home/mpiuser/cloud /home/mpiuser/cloud nfs

в hostfile (который подгрузился с сервера) добавляем имя клиента
GridServer
client001

На сервере

Теперь настраиваем ssh-доступ между машинами

Добавляем в /etc/hosts
19.16.1.117 client001

ssh-keygen -t rsa
ssh-copy-id client001

после этого должно логиниться по команде
ssh client001

И скрипт должен запускаться уже на двух машинах:
mpirun -np 8 ‐‐hostfile hostfile ./mpi_sample

И выдавать что-то типа:
Hello world! from processor 1
Hello world! from processor 2

8 — общее кол-во ядер у двух компьютеров, имена которых берутся из hostfile

Всем привет!


Видео тестов кластера собранного в феврале с небольшим рассказом про проект:

MPI Linux Cluster: 2 комментария

  1. Доброго времени суток. Все это конечно здорово. Но как я понимаю, распараллеливаться будут только определенные программы, исходный код которых включает в себя инструкции mpi. Допустим к примеру есть большая софтинка, которую переписать будет достаточно проблемматично. Но чтобы заставить ее выполняться на mpi-кластере, необходимо изменять исходный код и переписывать его с использованием mpi, что не совсем эффективно в плане времени разработки и возможно качества. Или же она вовсе написана не на С и С++, а на других языках. Если я не прав, поправьте пожалуйста 🙂
    Так вот, не смотрели ли вы в сторону mosix? Если смотрели и отказались от применения, может расскажете причины? И если вдруг вы находили другие решения, другие возможности, был бы благодарен, если поделитесь знаниями.

    1. Да, верное замечание. Мы пока этим занимаемся исключительно ради спортивного интереса.
      Задача состояла именно в оживлении старых 32-х битных машин хоть как-то. Пока сделали на 64-битных. Но вот уже приступили к созданию кластера на 32-битных машинах.

      В технологии MPI в реализации MPICH, которую мы используем, можно распараллеливать программы на C, C++, Fortran. И действительно нужно вписывать туда синтаксис MPI.
      MOSIX мы не пробовали, но почему бы и нет? 😉

      Ещё одно направление, которое мы сейчас хотим опробовать это создание BOINC-кластера.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *