- Estréllate y Arde - https://www.estrellateyarde.org -
Clusters Beowulf/MPI en Linux
En 1994 la NASA construyó un cluster bajo Linux con hardware barato, con 16 procesadores 486 conectados mediante una red local Ethernet, con el objetivo de conseguir alto rendimiento. Para ello se utilizó computación paralela por lo que los programas (escritos en C y Fortran) estaban paralelizados, es decir, utilizaban librerías de Message Passing (PVM y MPI) para que los procesos se ejecutasen en múltiples procesadores siguiendo el paradigma master/esclavo. El proyecto se llamó Beowulf y fue un gran éxito, por lo que actualmente cualquier sistema similar se denomina cluster tipo Beowulf.
MPI (Message Passing Interface, mpi-forum.org) es la especificación de un protocolo de comunicación entre ordenadores para computación paralela, existiendo varias implementaciones del mismo, como MPICH, OpenMPI o LAM/MPI.
MPICH (MPI Chameleon, mcs.anl.gov/mpi/mpich/) funciona sobre una capa de abstracción del hardware que le permite ser independiente de la arquitectura y fácilmente portable. Esta capa, llamada ADI (Abstract Device Interface, Interfaz de Dispositivo Abstracto) se encarga de facilitar el acceso al hardware mientras que el resto de MPICH por encima de la ADI se encarga de la sintaxis y la semántica MPI.
Algunos ADIs (también llamados dispositivos) disponibles en MPICH son:
En Debian disponemos de varias versiones de MPICH:
Nosotros instalaremos mpich-bin (paquete mpich-bin), la versión para ch_p4.
master
slave1
slave2:2
slave3
Los nombres utilizados en /etc/mpich/machines.LINUX deben estar en /etc/hosts:
127.0.0.1 localhost 192.168.0.200 master 192.168.0.201 slave1 192.168.0.202 slave2 192.168.0.203 slave3
Para disponer de SSH instalaremos en los esclavos el servidor SSH (paquete openssh-server) y los configuraremos para que acepten conexiones desde el master sin pedir password ni pass-phrase (utilizaremos el mismo usuario en todas las máquinas). Para ello:
- crearemos una clave RSA en el master:
francis@master:~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
- activaremos ssh-agent en el master para que no nos pida la pass-phrase:
francis@master:~$ eval `ssh-agent -s` Agent pid 12297 francis@master:~$ ssh-add Enter passphrase for /home/francis/.ssh/id_rsa: Identity added: /home/francis/.ssh/id_rsa (/home/francis/.ssh/id_rsa)
- copiaremos la clave pública (~/.ssh/id_rsa.pub) en todos los esclavos:
francis@master:~$ scp ~/.ssh/id_rsa.pub francis@slave1:~/.ssh/id_rsa.pub
- la añadiremos al final del fichero ~/.ssh/authorized_keys en cada esclavo:
francis@slave1:~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- y comprobaremos que podemos iniciar sesión SSH en los esclavos sin que nos pida password:
francis@master:~$ ssh slave1
francis@slave1:~$
export P4_RSHCOMMAND=ssh
Cargamos .bashrc de nuevo y comprobamos:
$ source ~/.bashrc $ echo $P4_RSHCOMMAND ssh
MPICH proporciona el comando tstmachines, que comprueba la disponibilidad de las máquinas listadas en /etc/mpich/machines.LINUX para ejecutar programas MPI.
$ tstmachines
These machines seem to be available
asterix
slave1
slave2
MPICH proporciona cuatro comandos para compilar programas MPI:
Por ejemplo, para compilar el programa cpi.c (que calcula PI usando MPI) haremos:
$ mpicc -o cpi cpi.c
Para ejecutar programas MPI utilizaremos el comando mpirun. Por ejemplo, para ejecutar el programa cpi en 2 procesadores haremos:
$ mpirun -np 3 cpi Process 0 on asterix Process 2 on slave1 Process 1 on slave2 pi is approximately 3.1416009869231245, Error is 0.0000083333333314 wall clock time = 0.001762
Veamos un ejemplo programado en Python para MPI (previamente instalaremos el soporte para Python pyMPI, pympi.sourceforge.net, paquete python-mpi):
$ mpirun -np 3 pyMPI fractal.py Starting computation process 1 done with computation!! process 2 done with computation!! process 0 done with computation!! Header length is 54 BMP size is (400, 400) Data length is 480000
Se generará el archivo output.bmp, una imagen fractal:
El proyecto OpenMPI (open-mpi.org) es el resultado de la unión de varias implementaciones de MPI, como LAM/MPI, FT-MPI y LA-MPI.
Es muy similar en su manejo a MPICH, algunas diferencias son:
master
slave1
slave2 slots=2
slave3
LAM/MPI (lam-mpi.org) es una implementación de MPI que utiliza un demonio lamd activo en cada nodo.
master.fransberns.com slave1.fransberns.com slave2.fransberns.com slave3.fransberns.com
$ recon
$ lamboot
$ mpirun C hello
$ tping N
$ lamhalt
$ xmpi
Article printed from Estréllate y Arde: https://www.estrellateyarde.org
URL to article: https://www.estrellateyarde.org/discover/cluster-beowulf-mpi-en-linux
Click here to print.
Copyright © 2010 Estrellate y Arde