Cluster MPI en Linux con computadores de escritorio

A diferencia de la mayoría de los tutoriales, que parten de la base que uno tiene N equipos para destinarlos exclusivamente a ser parte de un cluster, acá relato cómo armé un cluster en equipos de un laboratorio de computación, que además son utilizados por usuarios para trabajo habitual (todo esto bajo Linux, obvio)

Configuración de red: 192.168.5.0 ethernet gigabit
Configuración de equipos: Kubuntu 9.10 64-bit

Paso 1: El servidor. Ejecutar como root lo siguiente:

Instalar paquetes de NFS, SSH y compiladores
$ apt-get install nfs-kernel-server openssh-server build-essential

Instalar MPICH2
$ wget http://octopus.inf.utfsm.cl/fsaravia/files/herramientas/mpich2_1.1.1p1-1ubuntu_amd64.deb
$ dpkg -i mpich2_1.1.1p1-1ubuntu_amd64.deb

Crear un usuario (en este caso “mpi”), con un uid fijo
$ adduser mpi --uid 1002

Crear claves DSA para conectarse por ssh sin password
$ ssh-keygen -t dsa

Exportar por NFS el $HOME del usuario mpi, agregando en el archivo /etc/exports lo siguiente:
$ /home/mpi 192.168.5.0/24*(rw,no_root_squash,sync,no_subtree_check)

Luego aplicar los cambios:
$ exportfs -av

Por simplicidad, agregar los nodos de la red en /etc/hosts. La separación entre las direcciones IP y el nombre de cada host debe ser un tabulador y no espacios.
192.168.5.70 pc001
192.168.5.116 pc002
192.168.5.78 pc003
192.168.5.77 pc004

Esto es todo lo que se debe realizar como root.

Ahora acceder como usuario mpi y configurar la cuenta para trabajar como cluster:

En el archivo /home/mpi/mpd.hosts poner los nombres de todos los equipos que forman parte del cluster:
pc001
pc002
pc003
pc004

Luego crear el archivo /home/mpi/.mpd.conf donde va la “clave” del cluster:
$ echo algunapalabra > /home/mpi/.mpd.conf
$ chmod 600 /home/mpi/.mpd.conf

Finalmente, crear claves DSA para acceder por SSH sin clave. Por seguridad no utilizar las mismas de root.
$ ssh-keygen -t dsa

Listo. Con esto tenemos el pc servidor configurado.

Paso 2: Equipos esclavos

Ejecutar como root lo siguiente:

Instalar paquetes de NFS, SSH y compiladores
$ apt-get install nfs-kernel-server openssh-server build-essential

Instalar MPICH2
$ wget http://octopus.inf.utfsm.cl/fsaravia/files/herramientas/mpich2_1.1.1p1-1ubuntu_amd64.deb
$ dpkg -i mpich2_1.1.1p1-1ubuntu_amd64.deb

Crear un usuario (en este caso “mpi”), con un uid fijo
$ adduser mpi --uid 1002

Copiar el archivo /etc/hosts del servidor al equipo esclavo
$ scp root@pc001:/etc/hosts /etc

Configurar el $HOME del usuario mpi para que se monte vía NFS desde el servidor, agregando la siguiente línea al archivo /etc/fstab
pc001:/home/mpi /home/mpi nfs defaults,auto 0 0

Luego, eliminar el contenido local del directorio /home/mpi y montar vía NFS:
$ rm -rf /home/mpi/*
$ mount -a

Con esto queda configurado el cliente.

Consideraciones finales:

Desde el servidor y como usuario mpi conectarse por ssh a todos los nodos, para que quede como “conocido” y guardado en ~/.ssh/known_hosts.

Una vez realizado esto, es posible levantar un cluster MPI con todas las de la ley:
$ mpdboot -n 4 -f ~/mpd.hosts

Si no hay ningún mensaje de error se puede visualizar una lista de los nodos que forman parte del cluster
$ mpdtrace

Y finalmente, para ejecutar código C++/MPI
mpirun -np 8 ./programa_mpi
En el ejemplo, hay 4 máquinas dual-core, es decir, 8 cores en total.

Seguramente me faltan algunos detalles. Información más detallada y otros tips en los siguientes sitios:
http://allintech.info/2008/09/a-ubuntu-mpi-cluster-part-1-server-setup
http://www.glib.org.mx/article.php?story=20070320133500387

Una posible causa de errores puede ser que el nombre del equipo (hostname) no coincida con lo que dice /etc/hosts

Probado con máquinas Kubuntu 9.10 alpha, Ubuntu 9.04, centos 5.3, centos 5.2.

Tags: , , , ,

Leave a Reply