Blog de Amazon Web Services (AWS)

Cómo poner una supercomputadora en manos de todo científico

Por: Jose Cuéncar, Arquitecto Sr. de Soluciones, Sector Público Mundial

Nina Vogl, Arquitecto Principal Especialista de Soluciones de Cómputo de Alto Desempeño, Sector Público Mundial

Introducción

Amazon Web Services (AWS) entrega recursos de TI a través de Internet con precios de pago por uso. En lugar de comprar, poseer y mantener sus propios centros de datos y servidores dentro de él, las organizaciones pueden adquirir tecnología como potencia informática, almacenamiento, bases de datos y otros servicios según sea necesario.

Esto suena como una propuesta fantástica, sin embargo cuando se piensa en Cómputo de Alto Rendimiento (HPC) y otras aplicaciones de investigación intensiva en computación, puede ser desalentador tener que configurar su propia infraestructura, y además poder configurar y instalar sus aplicaciones.

En este blog te vamos a enseñar a utilizar AWS Parallel Cluster para configurar un Cluster de HPC de manera flexible, elástica y repetible y,  lo más importante es,  que te mostraremos cómo administrar tu software HPC de la misma manera: repetible, flexible.

La nube de AWS le da acceso a una infraestructura prácticamente ilimitada, y ofrece muchas opciones de infraestructura adecuada para cargas de trabajo HPC, como diferentes arquitecturas de microprocesador, aceleración de GPGPU, FPGA y mucho más.

Las herramientas que presentaremos hoy te permitirán configurar clústeres HPC de manera fácil y exactamente como los necesitas, cuando los necesites. Además, te mostraremos cómo puedes hacer que tu aplicación HPC favorita esté fácilmente disponible para cargas de trabajo como química computacional, procesamiento de genomas, dinámica de fluidos computacional, transcodificación, codificación, modelado y simulación del tiempo, sólo por nombrar algunos.

HPC en AWS ayuda a eliminar largas colas y tiempos de espera, evitando retrasos debido a la falta de disponibilidad (debido a la popularidad, por ejemplo) de la infraestructura más reciente o más eficiente.

En este blog, usaremos una aplicación de código abierto (Palabos) como ejemplo para mostrarte cómo puedes habilitar aplicaciones de HPC fácilmente una vez, luego reutilizarlas en nuevos clústeres que construirás. Palabos es una aplicación CFD basada en método Lattice Boltzman (LB). Seguiremos el paso a paso desde su descarga hacia una instancia en la nube de AWS, compilaremos, instalaremos y aprovecharemos esta instalación en un nuevo clúster. Palabos es un ejemplo que usted podrá reemplazar por cualquiera de tus aplicaciones HPC favoritas.

Visión general de arquitectura:

Figura 1. Arquitectura de clústeres HPC

La siguiente imagen representa la arquitectura que construiremos juntos. Te explicaremos brevemente los nombres de los servicios de AWS que encontrarás en este diagrama de arquitectura, como Amazon EC2, AWS Cloud9, S3, AWS:

  • Amazon EC2, Elastic Compute Cloud, es un servicio web que proporciona capacidad informática segura y de tamaño variable en la nube.
  • AWS Cloud9 es un IDE proporcionado por AWS, una “terminal en la nube”, en la cual tu pagas por los recursos que consumes.
  • S3, Simple Storage Service, es un almacenamiento de objetos que ofrece una forma segura, escalable y duradera para casos de usos como sitios web, lagos de datos, y archivos entre otros, como datos de entrada de aplicaciones HPC y resultados.
  • AWS Parallel Cluster es una herramienta gratuita de administración e implementación de clústeres de código abierto. Aprovecha CloudFormation para aprovisionar todos los recursos necesarios para su clúster HPC de manera automatizada y segura.

Paso a Paso:

Este blog se desglosa en los siguientes pasos:

  • Paso A: Crear una única instancia de Elastic Compute Cloud (EC2) , para preparar el entorno de la aplicación.
  • Paso B: Instale el software de nuestra elección en un sistema de archivos montado en un volumen de Elastic Block Store conectado a instancia de EC2 y cree una instantánea. Estaremos usando Palabos y sus prerrequisitos como ejemplo.
  • Paso C: Utilice AWS Cloud9 para crear un entorno Linux basado en navegador. (Opcionalmente, puede Instalar la CLI de AWS en su computadora).
  • Paso D: Configure AWS Parallel Cluster haciendo referencia a la instantánea de EBS con Palabos instalada en el paso B.
  • Paso E: Ejecutar una carga de trabajo de Palabos corriendo un script de peticion de ejecucion de tareas a SLURM.

Prerrequisitos

Para este tutorial, debes tener disponible lo siguiente:

  • Una cuenta de AWS.
  • Navegador web (es decir, Chrome, Edge, Safari o Firefox).
  • Opcional: Conocimientos básicos de Linux.

Pasos Detallados

Paso A: Crear una Instancia EC2.

1. En la barra de búsqueda de AWS Management Console, escriba EC2.

2. Elija EC2 para abrir el Panel de Control de EC2 y acceda a la sección Instancias . Ahora haga clic en el botón Lanzar instancias.

 

 

3. En el menú del lado izquierdo, haga clic en “AMI de la comunidad”.  En la barra de búsqueda escriba “aws-parallelcluster-2.9.1-amzn2-hvm-x86” y presione enter. Cuando aparezca la AMI, haga clic en Seleccionar.

4. Seleccione la instancia c5.2xlarge y, a continuación, elija Siguiente: Configurar Detalles de Instancia.

5. En la sección Red , seleccione el mismo ID de VPC y el mismo ID de subred de su instancia de AWS Cloud9.

6. Elegir Siguiente: Agregar Almacenamiento. Haga clic en Agregar Nuevo Volumen y en Tamaño escriba 100. En Tipo de Volumen Seleccionar SSD de propósito general.

 

 

7. Elegir Siguiente: Agregar Etiquetas.

8. Elija Agregar etiqueta, luego en el campo clave tecleé la palabra Nombre. y en el capo de valor teclee My HPC Blog Instance. Este nombre aparece como el nombre de su instancia.

9. Elegir Siguiente: Configurar grupos de seguridad.

10. Seleccionar el checkbox de Crear un nuevo grupo de seguridad y, si lo desea, cambie el nombre del grupo de seguridad. El tipo debe ser ssh, protocolo TCP, rango de puertos 22 y la fuente 0.0.0.0/0 ó de preferencia su dirección IP.

11. Elegir Revisar y Lanzar. Ignorar cualquier mensaje de advertencia.

12. En la página de revisión, elija Lanzar.

13. Se abrirá una nueva ventana que indica seleccionar un par de claves existente. Haz clic en el primer cuadro Combo y Seleccionar Crear un nuevo par de claves. En el par de claves escriba KeyPairHPCBlog. Haga clic en Descargar Par de claves y luego haga clic en Lanzar instancias. Asegúrate de almacenar tus claves en una carpeta conocida ya que las usarás para conectarte a la instancia más adelante.

 

 

Para obtener más información, vaya a la Configuración de documentación de AWS con Amazon EC2

Paso B. Preparar Software y adjuntar volumen a la instancia.

1. Vaya al panel de control de EC2. Selecciona la instancia que acabas de crear usando la casilla de la izquierda.

 

 

2. Hacer click en Acciones – Conectar

3. En la ventana Conectar , seleccione la pestaña CLIENTE SSH (más a la derecha). Encontrarás la dirección IP y el comando SSH para conectarte a tu instancia

 

 

4. Abre una ventana de terminal, esto se puede hacer en tu portátil o en Cloud9. Conéctese a la instancia usando ssh, especifique el nombre de las claves descargadas del paso anterior y la Dirección IP de la instancia.

 

ssh -i “KeyPairHPCblog.pem” ec2-user @instanceIP

 

Si estás usando Windows, puedes usar putty, o puedes usar Cloud9.

5. Enumere los volúmenes de su instancia mediante el comando lsblk Anote su nombre de volumen de 100 GB . (es decir, xvdb)

 

 

6. Crear un sistema de archivos en el volumen mediante el comando mkfs -t.  Especifique el nombre de su volumen.

 

sudo mkfs -t xfs /dev/volumename

 

7. Crear un directorio de punto de montaje para el volumen mediante el comando mkdir . El punto de montaje es donde se encuentra el volumen en el árbol del sistema de archivos y donde lees y escribes archivos después de montar el volumen. En el siguiente ejemplo se crea un directorio denominado /apps

 

sudo mkdir /apps

 

8. Utilice el siguiente comando para montar el volumen en el directorio que creó en el paso anterior.

 

sudo mount /dev/volumename /apps

 

9. Usa nuevamente el comando lsblk para verificar tu volumen y la partición /apps

 

 

10. Agrega permiso para que tu ec2-user escriba en el punto de montaje /apps

 

sudo chown -R ec2-user /apps

sudo chgrp -R ec2-user /apps

 

11. Cambia tu directorio a /apps usando el comando cd /apps.

  • Proceda con la instalación del software. Como se mencionó antes, para este blog, usaremos Palabos. Descargaremos un paquete fuente, lo compilaremos y Puedes encontrar un binario comprimido aquí en esta URL URL Eres bienvenido a elegir tu propia aplicación.
  • Descargue el software ejecutando el comando wget de la siguiente manera:
wget https://gitlab.com/unigespc/palabos/-/archive/v2.2.1/palabos-v2.2.1.tar.gz
  • Cuando termine la descarga, descomprime tu archivo ejecutando el comando tar
tar xvfz palabos-v2.2.1.tar.gz

12. Acude al siguiente directorio, y ejecuta los comandos cmake y make para compilar nuestro ejemplo.

Nota: Puedes escoger un ejemplo  diferente de Palaboos. Aquí utilizaremos la aproximación Bousinessq para la convección térmica 3D de Rayleigh Benard. Las corridas anteriores tardaron aproximadamente 1h:32 minutos en 20 nodos (c5n.18xlarge). Si te preocupa el costo, quizá quieras seleccionar un ejemplo más pequeño, como cylinder2d o cavity2d.

 Podrás saber más sobre Palabos y los ejemplos incluidos en esta guía del usuario

 

cd palabos-v2.2.1/examples/showCases/boussinesqThermal3d/build

cmake ..

make

 

13. Opcional. Para poder visualizar nuestros archivos directamente en la nube en AWS, vamos a descargar Paraview,una aplicación de visualización de codigo abierto, utilizando el siguiente comando:

 

wget -O - -q "https://www.paraview.org/paraview-downloads/download.php?submit=Download&version=v5.8&type=binary&os=Linux&downloadFile=ParaView-5.8.1-MPI-Linux-Python3.7-64bit.tar.gz" 
>> ParaView-5.8.1-MPI-Linux-Python3.7-64bit.tar.gz

 

  • Después de que finalice la descarga, utilice el siguiente comando tar para extraer Paraview del archivo.

 

tar xvfz ParaView-5.8.1-MPI-Linux-Python3.7-64bit.tar.gz

 

Nota: En caso de que haya optado por utilizar Paraview, debe colocarse en el mismo sistema de archivos que estamos utilizando para nuestro Volumen EBS. Hay otra aplicación llamada ImageMagick la cual necesitaremos para que la imagen resultante se convierta al formato GIF, sin embargo no la colocaremos en el volumen de EBS sino que la instalaremos usando comandos nativos de Linux al arrancar el maestro y todos los nodos de cómputos, utilizando un script de post instalación. (Ver Paso C, parte 7)

 

14. Crea una instantánea de tu volumen que contenga una copia de nuestro software listo para ser utilizado. Crea una instantánea de tu volumen.

  • EC2 Dashboard -> Elastic Block Store -> haga clic en Volúmenes. Busca tu volumen.

15. Seleccionar Volumen y haz clic en Acciones -> Crear instantánea. Usa una descripción para tu instantánea y luego haz clic en Crear instantánea.

Anote el id de la instantánea, lo usará en el Paso 4.

 

Para obtener más información, vaya a la Documentación de AWS Hacer que un volumen de Amazon EBS esté disponible para su uso en Linux

 

Paso C: Instale la interfaz de línea de comandos de AWS (CLI de AWS).

Te sugerimos crear un entorno AWS Cloud9 ya que algunos paquetes vienen preinstalados.

1. En AWS Management Console, localice Cloud9 utilizando la barra de búsqueda.

 

 

2. Elige Crear Entorno. Nombra su entorno MyCloud9HPCblogenv, haz clic en Siguiente Paso. Deje las opciones por defecto y haga clic en Siguiente Paso.

3. Revise y haga clic en Crear entorno. AWS Cloud9 Environment tardará unos minutos en terminar de configurar.

 

 

4. En la ventana de la terminal, instale la CLI de AWS ejecutando el siguiente comando

 

sudo pip3 install awscli -U --user

 

Si opta por no utilizar AWS Cloud9, puede instalar y configurar la interfaz de línea de comandos de AWS (CLI de AWS), python y pip en su máquina. Cuando termines, ve directamente al paso C.6 para crear un bucket S3 (este paso es opcional)

5. Cargue su Archivo Clave a su Cloud9 (ArchivoSubir Archivos Locales) Después de la carga, ejecute el siguiente comando en la terminal para cambiar los permisos

 

$ chmod 400 KeyPairHPCBlog.pem

 

6. Opcional. Ahora utilizaremos Amazon Simple Storage Service (S3), para almacenar para nuestro software. En una ventana de terminal, ejecute el siguiente comando.

 

$ aws s3api create-bucket --bucket myhpcblogs3bucket --region us-east-1
  • Se puede ver que la API respondió con el nombre de nuestro bucket creado.

 

 

  • También puedes hacer esto usando un navegador web yendo al servicio S3 mediante la siguiente URL y asi encontrarás el bucket.

 

 

  • Crea un archivo denominado sh para instalar ImageMagick, con el siguiente contenido.

 

#!/bin/bash

sudo yum install -y ImageMagick

 

  • Ejecuta el siguiente comando terminal para subir este archivo a tu bucket

 

aws s3 cp postInstall.sh s3://myhpcblogs3bucket/postInstall.sh

 

Paso D: Instalar y configurar AWS ParallelCluster:

  • En una ventana de terminal, ejecute el siguiente comando para instalar AWS

 

sudo pip3 install aws-parallelcluster --upgrade

 

  • Configurar AWS ParallelCluster.
pcluster configure

 

  • Este comando nos dará una configuración guiada donde elegirás los parametros del cluster. Para este ejercicio, utiliza los valores predeterminados ya que cambiaremos el archivo.
    • Abra su archivo de configuración. Modifique su archivo ~/.parallelcluster/config para definir los ajustes de configuración del volumen de Amazon EBS para la instantánea creada en el Paso B que contiene nuestro software. Además de definir el bucket opcional de S3.

 

El siguiente archivo de configuración creará un nodo principal con capacidad de tarjeta gráfica (g3.4xlarge) y tomara el script de post instalación del bucket de S3. Esto creará una VPC y una subred para nosotros. También especificaremos el ID de instantánea, así como el tipo de instancia de los nodos de cómputos y el número de nodos.

Observe que optamos por el tipo de instancias c5n.18xlarge como nuestros nodos computacionales, y habilitamos Elastic Fabric Adapter (EFA) para comunicaciones rápidas entre nodos. Por último, habilitamos el servidor NICE DCV para que se ejecutara en nuestro nodo principal.

*Nota: Consulta las áreas resaltadas y por favor sustituir sus valores en las letras de color verde.

[aws]
aws_region_name = us-east-1

[alias]
ssh = ssh {CFN_USER} @ {MASTER_IP} {ARGS}

[global]
cluster_template = default
update_check = true
sanity_check = true

[cluster default]
key_name =  KeyPairHPCBlog
base_os = alinux2
scheduler = slurm
s3_read_resource = arn:aws:s3። :myhpcblogs3bucket/*
post_install =s3://myhpcblogs3bucket/postInstall.sh
post_install_args = 'R curl wget'
master_instance_type =g3.4xlarge
vpc_settings = default
queue_settings = compute
ebs_settings = custom
dcv_settings = dcv

[vpc default]
vpc_id =vpc-xxx
master_subnet_id = subnet-xxx

[ebs custom]
shared_dir = Palabos
ebs_snapshot_id =snap-xxx
volume_type = gp2

[queue compute]
enable_efa = true
disable_hyperthreading = true 
placement_group =DYNAMIC
compute_resource_settings = default

[compute_resource default]
instance_type = c5n.18xlarge
max_count = 10
initial_count = 1 
min_count = 0 

[ dcv dcv]
enable = master
port = 8443
access_from = 0.0.0.0/0

 

  • Ahora comprueba que tu instantanea de EBS esté lista para ser utilizada y crea tu primer clúster HPC con el nombre mybloghpccluster ejecutando el comando:

 

pcluster create myhpcblogcluster

 

  • Después de esto, estamos listos para conectarnos a nuestro nodo principal usando ssh y así poder enviar nuestro trabajo de HPC al clúster utilizando slurm.

 

Paso E. Envío de su solicitud (para nosotros, Palabos).

1. Vaya al panel de control de EC2, seleccione la instancia “Master”. Conéctate a él usando SSH y tu clave (como se hizo anteriormente en el Paso B)

2.  Cree un archivo llamado “slurm-job.sh” utilizando el siguiente comando.

 

nano slurm-job.sh

 

3. Copia y pega el siguiente contenido.

Esto especificará ejecutar un trabajo por lotes con slurm utilizando 10 nodos de computación, con 36 tareas en cada nodo usando mpirun. Ajusta los números resaltados en amarillo si planeas ejecutar un modelo de ejemplo más pequeño.

 

#!/bin/bash
#SBATCH --job-name=PALABOS
#SBATCH --output=PALABOS_%j.out
#SBATCH --nodes=10 # Number of nodes
#SBATCH --ntasks=360 # Number of MPI ranks
#SBATCH --ntasks-per-node=36 # Number of MPI ranks per node
#SBATCH --cpus-per-task=1 # Number of OpenMP threads for each MPI process/rank
date;hostname;pwd
#export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
cd /Palabos/palabos-v2.2.1/examples/showCases/boussinesqThermal3d
mpirun -np 360 ./rayleighBenard3D 1000
date

 

Guarda el archivo.

4. Ejecuta el siguiente comando con el fin de ejecutar nuestro trabajo

 

sbatch slurm-job.sh

 

Si el envio de la tareafue exitosa, el sistema mostrará un jobid

5. Puede utilizar los siguientes comandos para tener información sobre su clúster

 

sinfo

squeue

 

6. Puede realizar un seguimiento del progreso leyendo el archivo.out utilizando el siguiente comando:

 

cat PALABOS_jobid.out

 

Verás la fecha que se imprime cuando termine. Si decides cancelar el trabajo, puedes hacerlo usando el jobid (devuelto del comando squeue) y usando el siguiente comando:

 

scancel jobid

 

Después de esto, puede terminar el clúster mediante el uso de los comandos de la sección de limpieza. No intentes detener las instancias en el panel de control de EC2.

7. Opcional. Ver los resultados usando DCV. Vaya a la instancia de cloud9 y escriba el siguiente comando con el fin de generar una URL de conexión.

 

pcluster dcv connect -k ~/environment/KeyPairHPCBlog.pem myhpcblogcluster

 

Esto te dará una URL para conectarte a DCV y será válida durante los próximos 30 segundos.

8. Cuando se abra la sesión, haga clic en  Archivos de Actividades. Ir a la carpeta Palabos.

Abre Paraview yendo a la carpeta bin y haciendo doble clic.

 

 

9. En Paraview, vaya a Archivo Búsqueda de los resultados en la carpeta palabos, es decir, palabos-v2.1/examples/showcases/bousinessthermal3D/tmp. Eelegir el grupo de archivos vti

 

 

10. En la sección de propiedades, haga clic en aplicar y luego seleccione temperatura y volumen. Ahora verás el volumen en la pantalla.

 

 

Para obtener más información, vaya a la documentación de AWS Introducción a AWS ParallelCluster.

 

Limpieza

Para evitar incurrir en cargos futuros, te recomendamos encarecidamente que elimines los recursos creados en este blog, Ya que usamos AWS Parallel Cluster es muy fácil de eliminar.

  1. Cluster: Desde usted Cloud9 Environment (o su PC), detenga y elimine el clúster mediante el uso de los siguientes comandos:

 

pcluster stop myhpcblogcluster

pcluster delet myhpcblogcluster

 

  1. Instancias EC2: Vaya a la consola de AWS. Seleccione su instancia de preparación (la instancia EC2 que utilizamos para instalar Palabos y Paraview y crear la instantánea de EBS) Hacer clic en Acciones  Esto eliminará la instancia sin posibilidad de retroceder.
  2. Volúmenes e instantáneas: Ir al Dashboard EC2 . En el menú de la izquierda, localiza la sección Elastic Block Store y haz click en Volúmenes . Cuando se cargue la página, busque su volumen, y haga clic en Acciones Eliminar volumen. Repita lo mismo pero haciendo click en la sección de instantáneas.
  3. Cloud9: Vaya al Panel de Servicios de Clou9. Selecciona tu instancia, Hacer click en el botón Eliminar.
  4. S3. Vaya al Panel S3. Selecciona tu cubo. Primero Vacíe el Bucket de S3 haciendo click en el botón Vacío. Entonces sí elimínelo.

Conclusión

Acabamos de mostrarte cómo crearun Cluster HPC, preparar, instalar y ejecutar aplicaciones y visualizar los resultados, todo sin necesidad de una sola pieza de hardware (sin contar tu laptop). Puede utilizar los mismos pasos para construir e instalar cualquier aplicación, o incluso varias aplicaciones, y “guardarlas” en una instantánea de EBS (en caso de que instale varias aplicaciones diferentes puede instalarla en la misma instantánea o varias diferentes), iniciar/detener un clúster varias veces utilizando la misma infraestructura y/o diferente dependiendo de las necesidades de su aplicación o modelo de entrada, aprovechando así la diversidad de la familia de instancias EC2 y todas las soluciones enfocadas en HPC de AWS.


Sobre el autor

 

José Lorenzo Cuéncar es Arquitecto de Soluciones Sr. en Amazon Web Services para el Sector Público Mundial. José ha ayudado a múltiples instituciones en México en la adopción de tecnologías en la nube en América Latina.

 

 

 

 

Nina Vogl es una Arquitecta Principal Especialista de Soluciones de HPC en Amazon Web Services en el Sector Público Mundial. Nina ha ayudado a muchos clientes de todo el mundo a ejecutar con éxito Pruebas de Concepto y Pruebas piloto de HPC en la nube.

 

 

Revisores

Alejandro Luna  es Arquitecto de Soluciones en Amazon Web Services para el Sector Público.

 

 

 

 

Gabriel Gasca es Arquitecto de soluciones en Sector Público, en Amazon Web Services México