028-032_PelicanHPCLM52

PORTADA • PelicanHPC Andrea Danti, Fotolia Cómo convertir nuestra máquina de escritorio en un clúster de alto rendimim

Views 378 Downloads 43 File size 882KB

Report DMCA / Copyright

DOWNLOAD FILE

Citation preview

PORTADA • PelicanHPC

Andrea Danti, Fotolia

Cómo convertir nuestra máquina de escritorio en un clúster de alto rendimimento con PelicanHPC

DE CAOS A CLÚSTER Manejando números enormes con nuestro propio clúster computacional de alto rendimiento. POR MAYANK SHARMA

S

i los usuarios reclaman la potencia de un centro de datos, y el tacaño del jefe dice que hay que hacerlo con el hardware que ya tenemos, no hay que perder la esperanza. Con un poco de tiempo, algo de esfuerzo y unas cuantas herramientas de código abierto, se puede transformar un conjunto de insulsas máquinas de escritorio en una supercomputadora capaz de machacar grandes cifras. Perfecto para el impaciente, PelicanHPC Live CD emplea cualquier hardware válido para montar un clúster. Michael Creel desarrolló PelicanHPC para sus propios trabajos de investigación. Creel quería aprender sobre clustering y, debido a que añadir paquetes resultaba tan fácil, añadió PVM, herramientas de clustering como

28

Número 52

ganglia monitor y aplicaciones como GROMACS. Incluyó además ejemplos simples de computación paralela en Fortran, C, Python y Octave para proveer al principiante de algunos ejemplos básicos. No obstante, el proceso de mantenimiento de una distribución llevaba su tiempo, especialmente cuando se trataba de actualizar paquetes como el de las X o KDE. Fue entonces cuando Creel descubrió Debian Live, invirtió algún tiempo en comprender el funcionamiento del paquete live-helper y creó un modo más sistemático de hacer una distro Live para clustering. Así que, en esencia, PelicanHPC es simplemente un script que se encarga de obtener los paquetes necesarios desde un repositorio de Debian,

WWW.LINUX- MAGAZINE.ES

añade scripts de configuración y software de prueba, y devuelve una ISO arrancable.

Arrancar PelicanHPC Más adelante usaremos el script para crear una versión personalizada. Por ahora, usaremos la versión (v.1.8) de PelicanHPC publicada en su sitio web [1] para conseguir hacer funcionar varios núcleos a la vez. Están disponibles ambas versiones, de 32 y 64 bits, por lo que se hace necesario elegir la adecuada al hardware que se empleará. El desarrollador de PelicanHPC asevera que es posible tener un clúster funcionando en cinco minutos. Es realidad esto es una completa exageración… se pueden tener en tres.

PelicanHPC • PORTADA

servidores y de conectar con los nodos esclavos. Para comenzar con la configuración del clúster, abrimos una ventana de terminal e introducimos: sh pelican_hpc

Figura 1: En caso de que disponga de un monitor, un nodo esclavo muestra este aviso.

Primero hemos de asegurarnos de que disponemos de todos los ingredientes: Una máquina que hará de nodo primario y otras que serán los nodos esclavos. La máquina principal y las esclavas se conectan a través de la red, por lo que deben formar parte de una misma LAN. Aunque es posible conectarlas de forma inalámbrica, dependiendo de la cantidad de datos que vayan a intercambiarse, podrían producirse cuellos de botella. Además, debemos asegurarnos de que el router que conecta la máquina primaria con las esclavas no está ejecutando un servidor de DHCP, ya que la primaria reparte direcciones IP al resto. Aunque no hagan falta monitor ni teclado en ninguna máquina esclava, los necesitaremos en la primaria. Si se dispone de un doble núcleo con suficiente memoria, no es tan descabellada la idea de ejecutar el nodo primario en una máquina virtual y los esclavos en máquinas físicas. PelicanHPC se ejecuta principalmente en memoria, por lo que hay que disponer de mucha. Si se van a hacer trabajos serios en el clúster, se puede configurar éste para que guarde los datos en disco duro, en cuyo caso haría también falta uno. De hecho, se puede probar PelicanHPC ejecutándolo completamente en hardware virtual y conexiones de red virtuales, suponiendo que se disponga de la suficiente potencia como para generar tal cantidad de recursos virtuales. Una vez esté todo en su sitio, metemos el Live CD en la máquina primaria y la arrancamos con él. Se puede elegir un idioma personalizado, desactivar ACPI o personalizar otras opciones desde los parámetros de arranque. El acceso a los mismos lo proporciona la tecla F1; pulsando Intro son las opciones predeterminadas las que prevalecen. Durante el arranque, PelicanHPC nos pregunta tres cosas. En primer lugar nos pide que seleccionemos un dispositivo de almacenamiento permanente para usarlo como /home. La

opción predeterminada ram1 almacena los datos en la memoria RAM física. Si se opta por una opción con más permanencia, sólo hay que introducir el dispositivo, como hda1 o sda5. El dispositivo puede ser una partición de disco o un disco USB (sólo hay que asegurarse de que su formato es ext2 o ext3). Si reemplazamos la opción predeterminada ram1 por un dispositivo, PelicanHPC crea un directorio de inicio en el dispositivo especificado. Si es la primera vez que se ejecuta PelicanHPC, querremos elegir Yes. Si hemos seleccionado una ubicación para almacenamiento permanente, como una partición de disco, en los siguientes arranques elegiremos No. Claro está que si elegimos ejecutar PelicanHPC desde la RAM, tendremos que elegir siempre Yes. Finalmente, se nos pide que introduzcamos la clave predeterminada. Esta clave servirá tanto para las máquinas primarias como para las esclavas. PelicanHPC está diseñado para un solo usuario, y la clave es en texto plano. Una vez disponga de toda esta información, PelicanHPC arrancará el nodo primario con un entorno de escritorio Xfce.

Instalación del Clúster Ahora que ya está configurado y en ejecución el nodo primario, ha llegado la hora de configurarlo para el clustering. PelicanHPC proporciona una serie de scripts para este fin. Se puede llamar a los scripts manualmente o ejecutar el script maestro pelican_setup, que llama a su vez al resto de scripts encargados de iniciar los distintos

Si tenemos varias interfaces de red en la máquina, se nos pregunta cuál de ellas es la que se debe utilizar para conectar con el clúster. Lo siguiente que se nos pregunta es si damos permiso a los scripts para iniciar el servidor de DHCP, seguido de la confirmación para iniciar los servicios que permitirán entrar en el clúster a los nodos esclavos. En un primer momento, las constantes confirmaciones pueden parecer irritantes, pero son necesarias si quiere evitarse el desastre por culpa de servicios de DHCP conflictivos o por interrumpir accidentalmente cálculos en curso. Una vez cuente con permiso nuestro para iniciar el clúster, el script nos preguntará si deseamos iniciar los nodos esclavos. Los nodos esclavos se arrancan por red, por lo que debemos asegurarnos de dar prioridad en la BIOS al arranque por red sobre el resto de modos de arranque de cada máquina. Al ver al nodo primario, los esclavos muestran la pantalla de PelicanHPC y nos permiten introducir parámetros de arranque, del mismo modo que hicimos con el nodo primario. En vez de arrancar escritorios Xfce, los nodos esclavos muestran un aviso advirtiendo sobre la pertenencia de la máquina a un clúster y el peligro que supondría apagarla (Figura 1). Claro está que si los nodos esclavos no disponen de

Figura 2: Dos nodos configurados y en ejecución escaneando en busca de más.

WWW.LINUX- MAGAZINE.ES

Número 52

29

PORTADA • PelicanHPC

el directorio /home/ user/Econometrics, es un buen punto de partida. También es interesante ParallelEconometrics.pdf, que está en /home/user/Econometrics/ParallelEconometrics. Esta presentación es una buena introducción a la computación paralela en conjunción con la econometría. Para el neófito, Figura 3: Hay dos nodos configurados y en ejecución además del GNU Octave [2] es principal. “un lenguaje de computación de alto nivel monitor, sólo hemos de encender la para cálculo numérico”. Es la alternativa máquina tras asegurarnos de que los de código abierto al programa propietaparámetros de la BIOS son los correctos. rio MATLAB, usados ambos en aritméUna vez en funcionamiento el nodo tica extrema. esclavo, volvemos al nodo primario y También hay código de ejemplo en el pulsamos el botón No, que vuelve a directorio /home/user/Econometrics/ escanear el clúster y actualiza el número Examples/ para la realización de pruede nodos conectados (Figura 2). Cuando bas como la densidad del kernel [3] y el número de nodos conectados conlas estimaciones de probabilidad cuerda con el número de esclavos que máxima, así como para la ejecución de hemos activado, pulsamos Yes. Pelisimulaciones Monte Carlo sobre el rencanHPC muestra un mensaje de confirdimiento de un nuevo estimador económación y nos indica el script que se está metro. usando para configurar el clúster cuando decidimos añadir o Listado 1: “Hola Mundo” en C con eliminar un nodo (Figura 3). MPI Para reajustar el tamaño del 01 #include clúster, ejecutamos el siguiente 02 #include ”mpi.h” script: 03

sh pelican_restarthpc

Y listos. El clúster ya está configurado y en ejecución, en espera de órdenes.

Procesamiento El desarrollador de PelicanHPC es profesor de economía en la Universidad Autonómica de Barcelona en Cataluña, España. Trabaja en econometría, ciencia que hace un uso intensivo de procesamientos numéricos. Por tanto, encontraremos textos y ejemplos de código para Octave relacionados con la investigación de Creel y su docencia. Si se está interesado en econometría, el archivo econometrics.pdf, bajo

30

Número 52

04 int main(int argc, char *argv[ ]) 05 { 06

int rank, size;

07 08

MPI_Init(&argc, &argv);

09 10

MPI_Comm_rank(MPI_COMM_WORLD, &rank);

11

MPI_Comm_size(MPI_COMM_WORLD, &size);

12 13

printf(“Somos borg! Soy el %d de %d\n”, rank, size);

14 15

MPI_Finalize();

16

return 0;

17 }

WWW.LINUX- MAGAZINE.ES

Realización de Pruebas Para llevar a cabo las pruebas, abrimos una terminal e iniciamos Octave mediante la introducción del comando octave en la línea de comandos. De este modo accedemos a su interfaz gráfica. Aquí podemos ejecutar varios ejemplos de código introduciendo un nombre. Por ejemplo, las estimaciones del kernel se realizan introduciendo kernel_example. De forma similar, pea_example muestra la implementación paralelizada del algoritmo pea (parameterized expectation algorithm), mientras que mc_example2, mostrado en la Figura 4, nos enseña los resultados de la prueba Monte Carlo. Creel sugiere además que PelicanHPC puede ser usado en dinámica molecular mediante el uso del software de código abierto GROMACS (GROningen MAchine for Chemical Simulations). El proyecto distribuido para el estudio del despliegue proteínico, Folding@ home, hace uso también de GROMACS, y Creel piensa que uno podría replicar esta configuración en un clúster creado con PelicanHPC. Creel sugiere además al usuario interesado únicamente en la computación de alto rendimiento, que eche un vistazo a ParallelKnoppix, cuya última versión está disponible para descarga [4].

Programación Paralela con PelicanHPC Uno de los mejores usos que se puede dar a PelicanHPC es la compilación y ejecución de programas paralelizados. Si para esto es para lo único que se pretende usar PelicanHPC, no hacen falta en realidad nodos esclavos, ya que las herramientas pueden compilar los programas en el mismo nodo primario. PelicanHPC incluye varias herramientas para la escritura y el procesamiento de código paralelo. OpenMPI compila programas escritos en C, C++ y Fortran. SciPy y NumPy [5] son aplicaciones basadas en Python para cálculo científico. PelicanHPC incluye además la caja de herramientas MPI (MPITB) para Octave, que permite llamar a rutinas de las librerías de MPI desde Octave.

Pasar la Pelota Todo principiante en programación paralela puede haber pasado por alto la exis-

PelicanHPC • PORTADA

tencia de MPI (Message-Passing Interface), que es la clave de la computación paralelizada. Se trata de un sistema de software que nos permite escribir programas que se ejecutan en un clúster y pasar mensajes. MPI no es un lenguaje de programación, sino una librería capaz de pasar mensajes entre varios procesos. El proceso puede estar ubicado tanto en una máquina local como varios nodos más allá en un clúster. MPI se puede escribir en varios lenguajes, como C, C++ y Fortran. MPICH fue la primera implementación de la especificación MPI 1.x. LAM/MPI es otra implementación, que cubre además partes significativas de la especificación MPI 2.x. LAM/MPI es capaz de pasar mensajes a través de TCP/IP, memoria compartida e Infiniband. La implementación más popular de MPI es OpenMPI, desarrollada y mantenida por un consorcio, que combina lo mejor de varios proyectos, como el de LAM/MPI. Muchos de los 500 mayores supercomputadores hacen uso de él, incluido el Roadrunner de IBM, que es actualmente el más rápido.

MPI PelicanHPC incluye dos implementaciones de MPI: LAM/MPI y OpenMPI. A la hora de escribir programas paralelizados en C o C++, debemos asegurarnos de incluir el archivo de cabecera mpi.h (#include ). Para compilar los programas, necesitamos mpicc para programas Figura 4: Gnuplot genera los resultados del test de ejemplo Monte Carlo. C, mpic++ o mpiCC para programas C++, y mpif77 mpicc borg-greeting.c U para Fortran. -o borg-greeting El Listado 1 muestra un ejemplo de programa “Hola Mundo”, escrito en C, Para ejecutar los programas hay que usar que usa la librería MPI para mostrar un mpirun: mensaje en todos los nodos del clúster. Lo compilamos con mpicc: mpirun -np 4 U borg-greeting

Listado 2: Paquetes para el Live CD PelicanHPC 01 ### paquetes a añadir - coloca aquí los nombres de los paquetes que desee ### 02 cat