Cómo no romper los límites, cómo crear una buena arquitectura y cómo hacer un buen mantenimiento

Introducción al High Performance Computing (HPC)

Introducción a la computación de alto rendimiento (HPC)

Cuando hablamos de HPCHigh Performance Computing o Computación de Alto Rendimiento hacemos referencia a un campo de la computación actual que da solución a problemas tecnológicos muy complejos y que involucran un gran volumen de cálculos o de coste computacional. Para ello, nos apoyamos en tecnologías como superordenadores, clusters o la computación paralela, de la que vamos a hablar en en este post.

Entre sus aplicaciones están el modelado de riesgos financieros, el análisis de datos de clima e hidrología, el análisis de secuencias genéticas, pruebas de software… en definitiva, podemos generalizar que su enfoque es realizar grandes cálculos en lote (o batch) de cualquier algoritmo o lógica que se pueda paralelizar.

No obstante, lo que le está dando mucha relevancia y actualidad a dicho campo es el auge de la nube, y con soluciones como la de Azure Batch que posteriormente veremos, ya que esto nos aporta una serie de ventajas frente a realizar la misma operativa en nuestros servidores dedicados:

  • Mayor escalabilidad. Podemos crecer en el número de nodos o elementos de cálculo tanto como queramos, así como disminuirlo cuando no necesitemos tanta potencia. Todo ello sin necesidad de inversión a nivel de hardware. También tenemos escalabilidad en cuanto al tamaño de las máquinas, pudiendo elegir máquinas más o menos potentes en base a nuestras necesidades.
  • Menor coste. Esto se deriva de lo anterior, ya que pagamos en cada momento únicamente por lo que estamos utilizando.
  • Mayor sencillez operativa. No necesitamos preocuparnos de configurar, actualizar o administrar el sistema operativo que está funcionando por debajo.

Azure Batch

Una de las herramientas que nos proporciona Microsoft Azure para implementarnos nuestro propio entorno de HPC es, como hemos dicho, Azure Batch. No obstante, y como veremos posteriormente, para poder integrar y automatizar todo el entorno de cálculo, con toda probabilidad necesitaremos apoyarnos en otros servicios de Azure adicionales.

Azure Batch, como su propio nombre indica, es una herramienta que nos ayuda a programar trabajos y administrar procesos, todo ello por lotes. Además de todas las ventajas y capacidades anteriores, en Azure Batch podemos elegir el sistema operativo de nuestras máquinas (nodos en adelante), entre varias versiones de Windows y Linux, así como configurar políticas de escalado manuales o automáticas.

En Azure Batch dispondremos de uno o varios Pools o grupos de nodos de proceso. Cada uno de estos Pools tendrá una configuración única de tamaño y sistema operativo de las máquinas, de escalado…

Cuando queramos realizar operaciones sobre él, tendremos que crear un trabajo (o Job), el cuál consistirá en una serie de tareas (Tasks) que deben ejecutarse, y que estará asociado a un Pool concreto en el que se va a ejecutar. Estas tareas llevarán información sobre qué algoritmo, lógica, o en definitiva qué fichero van a ejecutar, qué ficheros o recursos adicionales necesita para ello… Por su parte, el trabajo tendrá una serie de configuraciones a su vez, como por ejemplo su prioridad, o su programación (cuándo debe ejecutarse).

En cuanto a los nodos de proceso, hay de dos tipos:

  • Nodos dedicados
  • Nodos de prioridad baja. Éstos  hacen uso de la capacidad sobrante de Azure para ejecutar nuestros trabajos, por lo que, aunque son más baratos, no garantizan un tiempo de finalización del trabajo predecible.

En ambos casos, dentro del pool, podemos configurar una tarea de inicio para los nodos, la cual se ejecutará cuando se instancien, pudiendo a través de ella copiar ficheros a los nodos, o realizar configuraciones.

Como podemos imaginar, si queremos realizar un uso sencillo de esta infraestructura, nos van a ayudar mucho otros dos servicios de Azure:

  • Por un lado, nos va a ser muy útil disponer de un Blob Storage accesible desde Azure Batch, ya que en él podremos tener almacenados de forma sencilla todos nuestros ejecutables, nuestros paquetes de nuestras aplicaciones de cálculo… incluso podemos usar contenedores de blob para almacenar las propias entradas y salidas de nuestros cálculos si fuera necesario.
  • Por otro lado, si queremos automatizar un poco toda la creación y ejecución de nuestros trabajos, una forma muy sencilla y práctica es mediante Azure Functions. Con una o varias functions, nos podemos crear un endpoint web que, por ejemplo, cuando subamos un fichero a una ubicación determinada de nuestro blob storage, se ejecute, realice los procesados que sean necesarios, y desencadene la creación y ejecución del trabajo de Azure Batch correspondiente.

Los ejecutables o algoritmos que podemos introducir y usar en Azure Batch, realmente no son únicamente lo que entendemos por ejecutable (fichero .exe), sino que en la práctica puede ser cualquier script o programa que pueda ser lanzado por línea de comandos y que esté soportado por el sistema operativo de la máquina de destino.

Conclusión

Como podemos ver, Azure Batch nos facilita una potencia y flexibilidad de cálculo muy grande, y todo ello desde la nube y gestionado de una forma sencilla y muy integrada con el resto de servicios de Azure. En otros artículos, entraremos en detalle en la parte técnica, para ver qué aspecto y características tiene un Job o un Pool, como podemos crearlos programáticamente, y realizar algún ejemplo de cálculo con un ejecutable sencillo.

Tabla de contenidos

mm

Sobre Adrián Del Rincón López

Ingeniero Superior de Telecomunicaciones por la Universidad Politécnica de Valencia. Desde hace varios años trabajo en el departamento de desarrollo de ENCAMINA. Sobre todo, me apasiona estar al tanto de lo último en tecnología, y si es en el mundo/ecosistema Microsoft y .NET, mejor que mejor. Además, también participo de las redes sociales, si quieres encontrarme, búscame con el usuario @adderin
Esta entrada ha sido publicada en Azure. Enlace permanente.
ENCAMINA, piensa en colores