Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

martes, 23 de febrero de 2010

Instalar Octave3.2 + Open MPI 1.3.3. + openmpi_ext (HPC Ubuntu)

En este artículo vamos a explicar como montar un sistema HPC (High Performance Computing). El campo de computación de alto rendimiento (High performance o HPC en inglés) es una herramienta muy importante en el desarrollo de simulaciones computacionales a problemas complejos. Para lograr este objetivo, la computación de alto rendimiento se apoya en tecnologías computacionales como los clusters, supercomputadores o mediante el uso de la computación paralela. La mayoría de las ideas actuales de la computación distribuida se han basado en la computación de alto rendimiento. La computación paralela es una técnica de programación en la que muchas instrucciones se ejecutan simultáneamente.Se basa en el principio de que los problemas grandes se pueden dividir en partes más pequeñas que pueden resolverse de forma concurrente ("en paralelo").

(Fuente Wikipedia)




Hasta llegar a poder hacer este artículo, y con el objetivo que el lector pudiera tener una explicación detallada de todas las partes, realicé artículos anteriores en donde se explican detalladamente dichas partes y hacer que éste fuera menos complejo. Así pues, para montar un sistema MPI seria conveniente saber:


Como podréis comprobar, para hacer un Ubuntu Diskless se han de dominar también estos dos artículos:


 

Con todo esto, e instalando los paquetes de Open MPI 1.3.3 y openmpi_ext, podremos obtener un sistema de Alto Rendimiento de Computación para cálculos realizados con Octave3.2.x



A fecha de edición del artículo, los requisitos para instalar openmpi_ext son según Michael Creel, responsable de PelicanHPC de la Universidad Autónoma de Barcelona, los siguientes:

Hola Eduardo,
openmpi_ext no funciona con Octave < 3.2.x, y MPITB no funciona con
Octave > 3.0.x  El problema ès que los tipos internos de Octave
cambien con las versiones. En este momento, yo recomano utilizar
openmpi_ext y Octave 3.2.x (o version de desarollo) ya que Octave
3.2.x tiene muchas mejoras respecto Octave 3.0.x. La desavantaja és
que openmpi_ext no és completo. Pero si tiene las funciones que
necesitas, el rendemiento és muy bueno.
Michael


Pues ya sabiendo todo esto, pongámonos manos a la obra. En nueve sencillos pasos podremos tener instalado todo el sistema.


PASO 1: Instalar Octave3.2 desde el repositorio
En este punto os aconsejo seguir el artículo ya publicado en este blog que se indica más arriba.

PASO 2: Crear carpeta para las fuentes en ~/fuentes
Crearemos una carpeta de fuentes en $HOME en donde bajaremos todo lo necesario para compilar nuestras aplicaciones.


PASO 3: Descargar Open MPI 1.3.3 de la página oficial
Como existen diversas versiones de Open MPI, nos aseguraremos de descargar aquella que funciona correctamente según las especificaciones para openmpi_ext.

cd fuentes
wget http://www.open-mpi.org/software/ompi/v1.3/downloads/openmpi-1.3.3.tar.bz2


PASO 4: Descomprimir Open MPI 1.3.3
Descomprimimos el archivo tar.bz2 del siguiente modo:
tar xfjv openmpi-1.3.3.tar.bz2


PASO 5: Descargar openmpi_ext de SourceForge
Ahora podemos pasar a descargar la extensión de octave openmpi_ext :
wget "http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/extra/openmpi_ext.tar.gz?view=tar" -O openmpi_ext.tar.gz
Necesitamos estas fuentes ya que son las que hacen que Octave funcione con MPI. Es una toolbox de Octave basada en MPITB desarrollada por Javier Fernández Baldomero.

PASO 6: Descomprimir openmpi_ext
Descomprimimos el archivo tar.gz del siguiente modo:
tar xfzv openmpi_ext.tar.gz


PASO 7: Compilar Open MPI 1.3.3
Llegados a este punto nos ponemos a compilar:

cd openmpi-1.3.3 ; echo "Ahora estamos en : "$(pwd)
make clean
./configure --enable-mpirun-prefix-by-default --prefix=$HOME/openmpi-1.3.3/ --enable-static --enable-orterun-prefix-by-default
make install all

PASO 8: Modificar .bashrc con rutas necesarias
Es necesario que los binarios del Open MPI 1.3.3 que se acaban de compilar estén incluidas en la ruta (PATH) ya que sino no compilará correctamente el openmpi_ext.Esto lo podreis ver en el archivo ~/fuentes/openmpi_ext/doc/README.Modifica el .bashrc de tu $HOME:
 OMPIBIN=`$ompi_info -path     bindir  -parsable | cut -d: -f3`
 OMPILIB=`$ompi_info -path     libdir  -parsable | cut -d: -f3`
 OMPISCD=`$ompi_info -path sysconfdir  -parsable | cut -d: -f3`


export            PATH=$OMPIBIN:$PATH


export LD_LIBRARY_PATH=:$OMPILIB:$LD_LIBRARY_PATH


unset  ompi_info OMPIBIN OMPILIB OMPISCD


Antes de compilar openmpi_ext deberás salir de la shell y volver a entrar para que tomen efecto los cambios (al más estilo MS Windows) o usar el siguiente comando:
source .bashrc
y no hará falta que salgas de tu sesión (al más estilo GNU/Linux)

PASO 9: Compilar openmpi_ext

Antes de continuar con este paso, quiero aprovechar para dar las gracias a Michael Creel y Riccardo Corradini por su ayuda en este paso. Entre los tres encontramos el porque inicialmente no me compilaba correctamente el openmpi_ext dándome este error cuando queria usar el MPI_Init:
 
octave:1> MPI_Init
error: /home/csi/ompi_ext/MPI_Init.oct: undefined symbol: _ZN3MPI3Win4FreeEv


El error lo encontramos en el Makefile del openmpi_ext usaba mpicc en vez de mpiCC, y por tanto, la libreria -lmpi_cxx no se incluía correctamente, faltándole el símbolo_ZN3MPI3Win4FreeEv de arriba. Puedo decir que me siento satisfecho de haber podido ayudar a mejorar el código para su compilación.

Para compilar openmpi_ext haremos:
cd $HOME/fuentes/openmpi_ext/src
make clean
make
Ahora podemos probar si funciona entrado en la carpeta en donde se ha compilado el openmpi_ext y ejecutando el octave. Una vez arrancado hacemos MPI_Init y veremos que nos devuelve 0, es decir, que todo ha ido bien.

ans = 0

Todos estos pasos se pueden automatizar perfectamente. He realizado un script que puede ayudaros. Funciona perfectamente en Ubuntu 9.10, si bien no deberia haber ningún problema para cualquier otra distribución.
Para ejecutar el archivo, descomprimirlo y usad:
source ./instala_hpc.sh. 
El programa os descargará todos los paquetes necesarios, los descomprimirá, compilará y añadirá en los PATHs necesarios. Simplemente hará que todo el proceso sea más fácil. La última prueba realizada realizó exitosamente todos los pasos en 20 minutos.
ans = 0

Se ha tardado en instalar el sistema HPC 1215 segundos.

Para especificar los nodos que deberá usar el master, deberemos editar un archivo de nodos y decirle al entorno (environment) que ese archivo es el que queremos usar por defecto. Sino creamos ningún archivo de nodos deberemos especificar los nodos en cada comando que ejecutemos, ya que sino no sabrá cuales son los nodos de nuestro sistema. Sería una opción, pero vamos a crear el archivo y luego cada cual es libre de usarlo o no. El archivo de configuración de nodos suele ser openmpi-default-hostfile y siguiente el ejemplo de nuestra instalación lo encontraremos en $HOME/openmpi-1.3.3/etc/openmpi-default-hostfile. Este archivo tiene su interior comentado por defecto y seremos nosotros los que añadamos los nodos manualmente, dejándolo en cada caso como corresponda. Por ejemplo:


hpcmaster
hpcnode1
hpcnode2 slots=2
hpcnode3

En el ejemplo vemos que tenemos el master y 3 nodos. El nodo hpcnode2 tiene dos cores, y por ello podremos contar con los dos.
Una vez editado nuestro archivo de nodos le diremos al entorno dónde se ubica dicho archivo:
export OMPI_MCA_orte_default_hostfile=$HOME/openmpi-1.3.3/etc/openmpi-default-hostfile
Para comprobar que lo hemos realizado correctamente podemos hacer:







ompi_info --param all all | grep hostfile

Perfecto. Ahora que ya tenemos el hpcmaster preparado, deberemos instalar los n nodos. Para ello necesitamos instalar exactamente las mismas versiones de Octave, Open MPI y openmpi_ext que en hpcmaster, así que o repetimos la operación anterior (recordad que mediante el script son sólo 20 minutos) o bien lo hacemos a mano o bien copiamos las carpetas ya compiladas en los nodos, ya que las versiones serán las mismas no habrá ningún problema. Lo único que no hará falta es especificar el archivo de nodos en los nodos, ya que los procesos se arrancarán desde el hpcmaster.

Una vez configurados los nodos, podremos hacer pruebas:

mpirun -np 8 uptime

En próximos artículos explicaré como hacer pruebas en donde podremos comprobar como el rendimiento de nuestros cálculos se mejora considerablemente.

Si ahora aplicais lo que vimos en el artículo de  Como hacer un Ubuntu Diskless (funcionando sin HD local) (Publicado el 9 de Febrero de 2010)  pues tendríamos un HPCMaster que haría de servidor de disco en donde los sistemas de archivo de los nodos estarian guardados y N nodos sin disco, pero con CPU, que es lo que nos interesa.

La imagen de un rack de nodos podría ser como esta:

En la imagen se ven los 25 nodos que yo usé para realizar este artículo. Existen algunos conceptos extra como los Power Switch, refrigeración, etc que se pueden tener en cuenta, pero dichos conceptos extra serán explicados en próximos artículos.

Espero que os haya servido de ayuda.

That u don't know what you've got 'til it's gone