MPI Linux Cluster

MPI Linux Cluster

http://odtech.ru/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

Всем привет!