Cluster MPI en Linux con computadores de escritorio
Posted by fsaravia | Filed under Informática
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: Informática, linux, programacion, servidores, ubuntu
