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
Всем привет!