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:
- Instalar GNU Octave en Ubuntu 9.10 (Publicado el 10 de Febrero de 2010)
- Como hacer un Ubuntu Diskless (funcionando sin HD local) (Publicado el 9 de Febrero de 2010)
Como podréis comprobar, para hacer un Ubuntu Diskless se han de dominar también estos dos artículos:
- Instalar un servidor NFS (Publicado el 2 de Noviembre de 2009)
- Crear un servidor PXE (Publicado el 18 de Enero de 2010)
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 fuenteswget 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 .bashrcy 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.
Archivo: instala_hpc.sh
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-hostfilePara 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.
Hola, mira tengo instalado ubuntu 9.10 y he seguido los pasos estrictamente como dice este post, hasta la parte en donde dice configurar los nodos; puesto que voy a utilizar un solo nodo con dos nucleos (hpcmaster slots=2 Estaria bien esta sintaxis?) Asi que le di lamboot openmpi-default-hostfile en la consola, ubicado previamente en el directorio /openmpi-1.3.3/etc/; me sale esto:
ResponderEliminarLAM 7.1.2/MPI 2 C++/ROMIO - Indiana University
Lo cual no muestra que este bien pero tampoco me dice que hay un error.
ahora le doy octave en el mismo directorio
lhost@lhost-desktop:~/openmpi-1.3.3/etc$ octave
me sale el prompt de octave; le doy mpi_init y me aparece:
error: `mpi_init' undefined near line 1 column 1
Entonces no tengo nada de nada !!!!!
ESTOY HACIENDO ALGO MAL PORFAVOR AYUDAME!!!! ES URGENTE PARA MI TENER ESTO FUNCIONANDO
Ese error suele salir cuando no se tiene cargada las funciones MPI, y por tanto, cuando octave intenta inicializar el MPI no encuentra la función.
ResponderEliminarHas probado el instalador del tutorial?
Saludos,