Informática de Alto Rendimiento en el Hogar: Primeros Pasos con ODROID y MPI

En este artículo, Cooper Filby y Anthony Skjellum de Runtime Computing Solutions LLC http://www.runtimecomputing.com, describen de forma general la instalación y configuración de un clúster básico "sin nodo principal" con el objetivo final de ejecutar programas en paralelo basados en el envío de mensajes, utilizando en particular el modelo de programación en paralelo Interfaz de paso de mensajes (MPI). Existen numerosos sistemas operativos Linux precompilados disponibles para las placas ODROID desde el sitio web de Hardkernel. Para empezar, descarga la imagen de Ubuntu Server para tu modelo exacto de ODROID y extrae la imagen archivada IMG.XZ utilizando la herramienta 7zip en Windows o escribiendo “xz” desde la línea de comandos de Linux. Por último, debes copiar la imagen a una tarjeta SD o módulo eMMC con el comando “dd” en Linux/OS X o utilizar la herramienta Win32DiskImager.exe para ODROID en Windows. Para obtener información de la instalación del sistema operativo, consulta el artículo de Bohdan Lechnowsky titulado “Instalación de un sistema operativo en ODROID” de la edición de enero 2014 de ODROID Magazine. Recomendamos utilizar los módulos eMMC disponibles en Hardkernel, para un mejor rendimiento. Sin embargo, las tarjetas SD también son válidas.

Conectando a tu ODROID

Puesto que hemos optado por utilizar Ubuntu Server en nuestros dispositivos ODROID, podemos conectarnos a nuestros sistemas XU-E (que llamaremos nodos) a través del protocolo “ssh” usando Terminal (o Putty si estamos en Windows) para continuar con la configuración de nuestro clúster. Debido a los potenciales conflictos iniciales con las direcciones MAC y los hostname que resolveremos más adelante, necesitamos reiniciar el primer ODROID y realizar algunos ajustes antes de pasar al segundo.

[Nota: Si es posible, es recomendable disponer de una máquina con Linux o Windows que te ayudará con la instalación y reinicio del clúster, solucionar problemas de hardware y corregir posibles errores. Una alternativa a la utilización de un equipo independiente es conectar un teclado USB y un monitor HDMI en el primer ODROID y utilizarlo directamente para arrancar el clúster en lugar de usar SSH tal como se describe en el siguiente párrafo. Presiona Ctrl-Alt-F1 para utilizar la consola framebuffer si X11 no se ejecuta]

Para conectarte a tu ODROID ha de conocer el hostname o dirección IP del dispositivo. En la imagen de Ubuntu Server utilizada en nuestro clúster XU+E el hotsname por defecto es “odroid-server”, mientras que para el resto de imágenes que hemos utilizado, el hotsname usado es “odroid”. La mayoría de las redes domésticas deberían soportar DNS por defecto, lo que te permite conectarse simplemente con el hostname. Si esto no funciona, puedes conectarte mediante la dirección IP que el router ha asignado al ODROID. Si no se resuelve ningún hostname entra en el panel de control del router para localizar la dirección IP que necesitas. Esta información suele estar en la tabla de clientes DHCP dentro del panel de administración del router.

Dado que se han utilizado copias idénticas de la imagen en ambos nodos, por defecto presentan un conflicto de hostname. Este problema lo resolveremos iniciándolos uno por uno y luego cambiando la configuración de red de forma individual. Si no puedes acceder al panel de control del router, puedes utilizar el comando “nmap” para escanear la red en busca de los dispositivos ODROIOD. Ej.: “nmap 192.168.1.0/24”. Busca un host que tenga el puerto 22 abierto

Enciende uno de los ODROID y a continuación introduce “ssh odroid@ubuntu-server” (o “shh odroid@xxx.xx.xx.xxx”, si utilizas la dirección IP) en el Terminal o con la herramienta Putty del ordenador principal. Esto establecerá una conexión segura con el dispositivo ODROID. Utiliza “odroid” como contraseña para iniciar sesión.

Una vez que aparezca el prompt de comandos, deberías ejecutar “sudo apt-get update && sudo apt-get upgrade” para asegurarnos de que el sistema operativo este actualizado. Además, se recomienda ejecutar el comando “passwd” para cambiar la contraseña del usuario odroid, o crear nuevas cuentas de usuario con el comando “adduser”, como por ejemplo ejecutar “sudo adduser kilroy”. (En términos generales, debes tener en cuenta tres cosas a la hora de determinar las contraseñas de los nodos: que tengas una cierta extensión, que sean difíciles de adivinar y que estén guardadas en un lugar seguro).

Configurando la red

Antes de tener los dispositivos ODROID operativos y funcionando, debemos realizar algunos cambios en la configuración de la red y eliminar los conflictos de direcciones MAC y hostname que pueden aparecen en tu clúster ODROID. Para cambiar el hostname tenemos que editar dos archivos /etc/hostname y /etc/hosts cambiando “odroid-server” por otro nombre y reiniciar la máquina para que los cambios tengan efecto. A efectos de este artículo, utilizaremos odroid-server0 y odroidserver1 para referirnos al primer y segundo ODROID respectivamente. De forma alternativa y si tu sistema operativo lo permite, puede ejecutar “sudo odroid-config” para cambiar el hostname y utilizar cualquier otro nombre. Cada hostname debe ser único para cada nodo.

El conflicto de las direcciones MAC es una cuestión delicada que detectamos cuando configuramos varios dispositivos ODROID XU+E. Nos hemos encontrado que, por defecto, el componente Ethernet integrado en todos los dispositivos compartían la misma dirección MAC, lo cual hacía imposible trabajar en un único ODROID si conectábamos múltiples en la misma red. Como ambos ODROID tienen direcciones MAC idénticas, podemos hacer dos cosas: 1) configurar uno (o ambos) ODROID para usarlo con direcciones MAC diferentes. 2) Configurar dongles Ethernet USB para que todos tenga direcciones MAC únicas. No importa que valores específicos se elijan, siempre y cuando sean únicos en tu Red de Área Local (LAN).

Para cambiar la dirección MAC de un dispositivo, edita /etc/network/Interfaces con un editor de texto y añade la línea “hwaddress ether newmac”, donde Newmac es una dirección con el formato “b6:8d:67:7b:cb:e0”, debajo de las siguientes líneas.

auto eth0
iface eth0 inet dhcp
A continuación, reinicia el ODROID para que los cambios tengan efecto. Asegúrate de verificar la nueva dirección con el comando “ifconfig”. Alternativamente, se puede optar por conectar un adaptador Ethernet USB en la ranura USB 3.0 y luego, ejecutar “if-config-a | eth grep“ que debería devolver algo similar a esto:
eth0 Link encap:Ethernet HWaddr b6:8d:67:7b:cb:e0
eth2 Link encap:Ethernet HWaddr 00:13:3b:99:92:b1
Por defecto, eth0 será el componente Ethernet 10/100 integrado, mientras que el segundo dispositivo de Ethernet (en este caso, eth2) será el adaptador Ethernet USB. Si sólo aparece eth0, intenta conectar de nuevo el adaptador Ethernet USB y/o verifica que funciona en otra máquina. Para configurar el adaptador de forma que use DHCP en el arranque y obtener una dirección IP, modifica /etc/network/interfaces y agrega las siguientes líneas entre las entradas “auto lo” y “auto eth0”:
auto eth2
iface eth2 inet dhcp
Utiliza el ID correcto del dispositivo de red que has localizado previamente a través ifconfig (en este caso, eth2). A continuación, apaga el ODROID, conecta el cable de red al adaptador Ethernet USB y vuelve a encender de su nuevo tu ODROID. Si por alguna razón, no hay conexión prueba a desenchufar y enchufar de nuevo el cable y verifica que el adaptador Ethernet USB aparece en pantalla usando el comando “ifconfig-a” También se puede dar el caso de que el ID del dispositivo Ethernet haya cambiado si el adaptador ha sido desconectado. En este caso debemos actualizar /etc/network/interfaces en consecuencia

Llegado a este punto el primer ODROID está configurado y accesible en red. Antes de adéntranos en la Interfaz de Paso de Mensajes (MPI), configura el segundo ODROID siguiendo los mismos pasos utilizados para configurar el primer ODROID.

Interfaz de Paso de Mensajes(MPI)

Ahora que tenemos ambos nodos configurados correctamente. Podemos empezar a ejecutar trabajos HPC en nuestro clúster formado por dos nodos. Un entorno de programación paralelo como MPI nos facilitará esta labor, el cual se encarga de iniciar los procesos que conforman el modelo de programación paralelo. Proporciona una Interfaz de programación de aplicaciones (API) que permite la comunicación entre procesos secuenciales usados para desarrollar trabajos de programación. Para lograr esto vamos a utilizar la Interfaz de Paso de Mensajes (MPI), que proporciona una API que permite a los nodos enviar y recibir mensajes durante la ejecución de tareas. El comando “mpirun” o “mpiexec” inicia todos los procesos necesarios para controlar tus dispositivos ODROID de forma segura. Podemos descargar cualquiera de las dos implementaciones MPI de código abierto que existen actualmente: MPICH y OpenMPI. Para nuestro clúster ODROID en red ambas opciones son igual de válidas

Para instalar MPICH, ejecuta “sudo apt-get install mpich2”, y para instalar OpenMPI ejecuta “sudo apt-get install openmpi-bin”

Cosas que puedes hacer una vez cargado MPI:

  • 1) Ejecutar programas de ejemplo que usen múltiples núcleos en un único ODROID
  • 2) Ejecutar programas de ejemplo que utilice los 8 núcleos de nuestros dispositivos ODROID
  • 3) Aprender a compilar nuestros propios programas MPI

En este artículo nos hemos centrado en los dos primeros usos. Puedes echar un vistazo a ejemplos de programas desarrollados con OpenMPI y MPICH para seguir aprendiendo. También existen excelentes tutoriales en Internet y numerosos libros de programación MPI como “Using MPI” de MIT Press (Uno de los coautores de este libro).

Mejorando el sistema

El contenido de este artículo representa una pequeña fracción de lo que podemos llegar a realizar con nuestro clúster. No obstante, esta configuración es más que suficiente para hacer funcionar dos nodos con unos cuantos usuarios. Si queremos que nuestro clúster crezca tendremos que hacer uso de un nodo principal que nos permita manejar un mayor número de usuario y nodos conectados. Además de poder ocultar el tráfico del clúster del resto de la red, este nodo principal albergara los servicios que facilitaran la gestión del clúster, como LDAP para la gestión de documentos, Pupper para la gestión de contenido, NFS para compartir archivos, y otros servicios y herramientas de redes.

En la segunda entrega de esta serie de tutoriales convertiremos odroid-server0 en un noto principal.

Be the first to comment

Leave a Reply