¿Qué es un clúster MPI?
MPI (Message Passing Interface) es un estándar para escribir programas paralelos que permite la comunicación y la colaboración entre múltiples nodos informáticos. La configuración del clúster MPI hace referencia a la configuración de un entorno MPI en uno o más nodos informáticos para lograr la informática paralela.
Pasos para la configuración del clúster MPI:
Selección de hardware: elija los dispositivos de hardware que se adapten a sus necesidades, incluidos los nodos maestros y los nodos informáticos. El nodo maestro es responsable de coordinar la comunicación y la distribución de tareas entre los nodos informáticos, mientras que los nodos informáticos realizan las tareas informáticas reales.
Instalación del sistema operativo: instale un sistema operativo para cada nodo. Las opciones comunes incluyen servidores Linux, Windows, etc. Asegúrese de que todos los nodos estén accesibles entre sí y tengan conectividad de red.
Instalación del software MPI: elija una implementación MPI, como OpenMPI, MPICH, etc., e instale el software MPI correspondiente en cada nodo de acuerdo con los requisitos del sistema operativo. La biblioteca MPI proporciona un conjunto de funciones y herramientas para que la computación paralela se comunique y sincronice entre nodos.
Configure el nodo maestro: edite el archivo de configuración MPI del nodo maestro, generalmente el archivo de configuración de mpiexec o mpirun, para especificar la forma de ejecutar el programa MPI. Esto puede incluir opciones para especificar la cantidad de nodos de cómputo, scripts de inicio, asignaciones de procesos y más.
Configure los nodos de cómputo: para los nodos de cómputo, edite su archivo de configuración MPI para especificar la ubicación del nodo maestro y otra información necesaria. Además, asegúrese de que los nodos de cómputo tengan acceso al nodo maestro y a otros nodos de cómputo para la comunicación.
Pruebe un clúster MPI: escriba un programa MPI simple y pruébelo en un clúster MPI. Asegúrese de que los programas MPI se puedan ejecutar correctamente en paralelo en varios nodos, y que el intercambio de datos y la sincronización entre nodos se puedan realizar mediante el paso de mensajes.
Expanda el tamaño del clúster (opcional): si necesita más potencia informática, puede agregar más nodos informáticos al clúster. Asegúrese de que el software MPI correspondiente también esté instalado en el nuevo nodo y configurado de acuerdo con los pasos 4 y 5.
Hagamos una configuración de clúster MPI simple a continuación, con la esperanza de ayudarlo a aprender computación en la nube y conocimientos relacionados con el clúster MPI.
1. Configure la máquina virtual con VMware Workstation Pro y ábrala
Aquí elegimos iniciar sesión como un usuario normal
1. Asegúrese de que la red sea fluida, configure la IP fija de cada nodo y reinicie el servicio de red.
Configure el servicio de red maestra:
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
¡Configure correctamente la red
para hacer ping a www.baidu.com correctamente!
Configure el servicio de red host1:
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
¡Configure correctamente la red
para hacer ping a www.baidu.com correctamente!
Configure el servicio de red host2:
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
Red configurada con éxito
ping www.baidu.com
¡Éxito!
2. Configure los archivos de hosts de las dos máquinas: los nombres de host son master, host1 y host2 respectivamente
Orden:
vim /etc/hosts
Orden:
vim /etc/hosts
Modifique el nombre de host maestro:
vim /etc/hosname
Comando: vim /etc/hosts
modificar host1 nombre de host:
vim /etc/hosname
Orden:
vim /etc/hosts
Modifique el nombre de host host2:
vim /etc/hosname
2. Inicio de sesión sin contraseña SSH
ssh-keygen –t rsa Ingrese completamente
en master, host1, host2 respectivamente
2. Agregue la clave pública al archivo authorized_keys, comando:
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
En maestro, host1, host2 respectivamente,
todos los nodos deben configurarse
3. Copie la clave pública a otras máquinas
(1) maestro
ssh-copy-id -i ~/.ssh/id_rsa.pub host1
ssh-copy-id -i ~/.ssh/id_rsa.pub host2
Reinicie el servicio ssh:
sudo systemctl restart sshd
El maestro inicia sesión con éxito en host1 sin contraseña:
ssh host1
(2)anfitrión1
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub host2
Reinicie el servicio ssh:
sudo systemctl restart sshd
Host1 inicia sesión con éxito en host2 sin contraseña:
ssh host2
(3)anfitrión2
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub host1
Reinicie el servicio ssh:
sudo systemctl restart sshd
Host2 inicia sesión con éxito en host1 sin contraseña:
ssh host1
CentOS 7 instaló automáticamente el paquete ssh y configuró el servicio SSH durante la instalación.
El estado del servicio ssh de las tres máquinas:
systemctl status sshd
Tenga en cuenta que el inicio de sesión sin contraseña ssh es de usuario a usuario, por lo que es necesario asegurarse de que la terminal del nodo principal y la terminal del nodo secundario se correspondan durante la operación.
1) Cierra el firewall de cada nodo y
cierra Selinux: sudo systemctl stop firewalld
Power on disabled: sudo systemctl disabled firewalld
Cierra Selinux: sudo setenforce 0
2) Servidor (maestro, se recomienda tomar el primer host)
(1) sudo yum -y install nfs -utils rpcbind #Instalar software
(2) mkdir -p /opt/modules/mpi_share #Crear directorio compartido
(3) chmod 777 /opt/modules/mpi_share -R #Otorgar permisos
(4) sudo vi /etc/ exportaciones #Modificar configuración escribir:
/opt/modules/mpi_share 192.168.95.25(rw,sync,no_root_squash) /opt/modules/mpi_share 192.168.95.26(rw,sync,no_root_squash)
192.168.95.25 es la dirección del nodo secundario, y también puede ser el nombre del host. El rw en la opción de permiso significa que se permite leer y escribir, y la entrada depende de la dirección IP específica del host; se lee ro -solo; sincronización significa escritura síncrona, y no_root_squash significa que cuando el cliente se inicia con otorgar privilegios de raíz local al acceder como raíz.
sudo exportfs -rv
(5) sudo systemctl start rpcbind
sudo systemctl start nfs #启动nfs,或者设置为开机启动
(6) sudo systemctl habilitar rpcbind
sudo systemctl enable nfs
showmount -e #查看NFS服务器端的共享目录
3) Cliente (host1)
(1) sudo yum -y install nfs-utils rpcbind
(2) mkdir -p /opt/modules/mpi_share #Establecer la ubicación del directorio compartido y el nombre de cada nodo en el mismo
(3) sudo systemctl start rpcbind
sudo systemctl start nfs #También se puede configurar para que arranque
(4) sudo systemctl enable rpcbind
(5) sudo mount -t nfs 192.168.95.20:/opt/modules/mpi_share /opt/modules/mpi_share #Montar el lado del servidor directorio compartido Cargue en una carpeta local
(6) o monte permanentemente (opcional)
vim /etc/fstab
add 192.168.95.20:/home/mpi_share /home/mpi_share nfs rw 0 0
4) client (host2)
(1) sudo yum - y install nfs-utils rpcbind
(2) mkdir -p /opt/modules/mpi_share #Establezca que la ubicación del directorio compartido y el nombre de cada nodo sean iguales (3)
sudo systemctl start rpcbind
sudo systemctl start nfs #También puede establecer el inicio
(4) sudo systemctl habilitar rpcbind
(5) sudo mount -t nfs 192.168.95.20:/opt/modules/mpi_share /opt/modules/mpi_share #Montar el directorio compartido del lado del servidor en una carpeta local
(6) o montar permanentemente (opcional)
vim /etc /fstab
agregue 192.168.95.20:/home/mpi_share /home/mpi_share nfs rw 0 0
5. Instale y configure mpich
1) Instale el compilador
yum install gcc gcc-c++ gcc-fortran kernel-devel -y # https://blog.csdn. net/wangzhouf/article/details/108222704
(yum install gcc g++ #Los compiladores predeterminados de mpich son gcc, g++ y gfortran, pero el comando yum no puede encontrar el paquete de instalación de gfortran #Puede encontrar el
método para instalar el compilador de gfortran usted mismo Autor: Piel de naranja secada al aire - https://www.bilibili.com/read/cv15215061 Fuente: bilibili)
2) Descargue e instale el paquete de instalación de mpi
(1) Cree un directorio y descargue el paquete
mkdir -p /opt/softwares
cd softwares
wget http://www.mpich.org/static/downloads/3.4.1/mpich-3.4.1.tar.gz
(2) Descomprimir
tar -zxvf mpich-3.4.1.tar.gz
(3) Crear un nuevo directorio de instalación
mkdir -p /opt/modules/mpich-install
(4) Ingrese al directorio de descarga y compile e instale
cd /opt/softwares/mpich-3.4.1
./configure --disable-fortran --prefix=/opt/modules/mpich-install --with-device=ch4:ofi 2>&1 | tee c.txt
O:
./configure --disable-fortran //Autor: Piel de naranja seca- https://www.bilibili.com/read/cv15215061 Fuente: bilibili
make
make install
3) Configurar el entorno
(1)
vim ~/.bashrc
export MPICH=/opt/modules/mpich-install
export PATH=$MPICH/bin:$PATH
(2) Hacer que las variables de entorno surtan efecto
source ~/.bashrc
4) Comprobar la instalación
mpirun -version
6. Compile el programa C en cada host
1) Cargue el código del programa C helloWorld.c en el directorio /opt/modules/mpi_share de cada host
2) cd /opt/modules/mpi_share`
3) Primero escriba helloWorld.c y un holaMundo2.c:
mpicc -o helloWorld helloWorld.c
Escribiendo otro helloWorld2.c:
#include "mpi.h"
#include <stdio.h>
#include <math.h>
void main(argc,argv)
int argc;
char *argv[];
{
int myid, numprocs;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Get_processor_name(processor_name,&namelen);
fprintf(stderr,"Hello World! Process %d of %d on %s\n", myid, numprocs, processor_name);
MPI_Finalize();
}
7. Ejecutar en maestro:
mpirun -n 3 -host master,host1,host2 ./helloWorld
mpirun -n 3 -host master,host1,host2 ./helloWorld2
Cuando nos enfrentamos a nuestra principal contradicción, si podemos mirar el problema desde una dimensión superior y un nivel superior, descubriremos un mundo nuevo, y habrá una sensación de brisa primaveral que llega de la noche a la mañana, miles de perales floreciendo. Esto es otra gran mejora en nuestro nivel de pensamiento personal, pero este proceso requiere que sigamos aprendiendo y practicando, cuando alcancemos un cierto nivel, los cambios cuantitativos sufrirán cambios cualitativos.