Si caminas por el campus de la Universidad Politécnica de Cataluña en Barcelona, puedes toparte con la capilla de la Torre Girona en un hermoso parque. Construido en el siglo XIX, cuenta con una enorme cruz, arcos altos y vidrieras. Pero dentro de la sala principal, encerrada en una enorme caja de vidrio iluminada, se encuentra un tipo de arquitectura diferente.
Esta es la sede histórica de MareNostrum. Si bien los bastidores originales de 2004 permanecen en exhibición en la capilla como pieza de museo, la versión más reciente, MareNostrum V, una de las quince supercomputadoras más poderosas del mundo, ocupa una instalación dedicada y fuertemente refrigerada justo al lado.
La mayoría de los científicos de datos están acostumbrados a crear una instancia EC2 pesada en AWS o utilizar marcos distribuidos como Spark o Ray. La Computación de Alto Rendimiento (HPC) a nivel de supercomputadora es una bestia completamente diferente. Opera con diferentes reglas arquitectónicas, diferentes programadores y una escala que es difícil de comprender hasta que lo usas.
Recientemente tuve la oportunidad de utilizar MareNostrum V para generar cantidades masivas de datos sintéticos para un modelo sustituto de aprendizaje automático. Lo que sigue es una mirada bajo el capó de una máquina de 200 millones de euros: qué es, por qué su arquitectura se ve como se ve y cómo se interactúa realmente con ella.
La arquitectura: por qué debería preocuparse por el cableado
El modelo mental que causa mayor confusión al abordar HPC es este: no se alquila tiempo en una sola computadora increíblemente poderosa. Está enviando un trabajo para distribuirlo en miles de computadoras independientes que comparten una red extremadamente rápida.
¿Por qué un científico de datos debería preocuparse por las redes físicas? Porque si alguna vez intentó entrenar una red neuronal masiva en múltiples instancias de AWS y vio sus costosas GPU inactivas mientras esperaba que se transfiriera un lote de datos, sabrá que en la informática distribuida, la red es la computadora.
Para evitar cuellos de botella, MareNostrum V utiliza un tejido InfiniBand NDR200 dispuesto en una topología de árbol gordo. En una red de oficina estándar, cuando varias computadoras intentan comunicarse a través del mismo conmutador principal, el ancho de banda se congestiona. Una topología de árbol grueso resuelve esto aumentando el ancho de banda de los enlaces a medida que se asciende en la jerarquía de la red, haciendo literalmente las "ramas" más gruesas cerca del "troncal". Esto garantiza un ancho de banda sin bloqueo: cualquiera de los 8.000 nodos puede comunicarse con cualquier otro nodo exactamente con la misma latencia mínima.
La máquina en sí representa una inversión conjunta de la Empresa Conjunta EuroHPC, España, Portugal y Turquía, dividida en dos particiones computacionales principales:
Partición de Propósito General (GPP):
Está diseñado para tareas de CPU altamente paralelas. Contiene 6.408 nodos, cada uno con 112 núcleos Intel Sapphire Rapids, con un rendimiento máximo combinado de 45,9 PFlops. Este es el que utilizará con más frecuencia para las tareas informáticas "generales".
Partición acelerada (ACC):
Éste es más especializado y está diseñado teniendo en cuenta el entrenamiento de IA, la dinámica molecular y demás. Contiene 1120 nodos, cada uno con cuatro GPU NVIDIA H100 SXM. Considerando que un solo H100 se vende por aproximadamente $25,000, el costo de la GPU por sí solo supera los $110 millones.
Las GPU le otorgan un rendimiento máximo mucho mayor que el del GPP, alcanzando hasta 260 PFlops.
También hay un tipo especial de nodos llamados Nodos de inicio de sesión. Estos actúan como la puerta de entrada a la supercomputadora. Cuando ingresas por SSH a Mare Nostrum, aquí es donde aterrizas. Los nodos de inicio de sesión son estrictamente para tareas livianas: mover archivos, compilar código y enviar scripts de trabajo al programador. No son para informática.
Infraestructura cuántica: los nodos clásicos ya no son el único hardware dentro de la caja de cristal. Mare Nostrum 5 se ha integrado recientemente física y lógicamente con los primeros ordenadores cuánticos de España. Esto incluye un sistema cuántico basado en puertas digitales y el recién adquirido MareNostrum-Ona, un recocido cuántico de última generación basado en qubits superconductores. En lugar de reemplazar a la supercomputadora clásica, estas unidades de procesamiento cuántico (QPU) actúan como aceleradores altamente especializados.
Cuando la supercomputadora encuentra problemas de optimización tremendamente complejos o simulaciones de química cuántica que ahogarían incluso las GPU H100, puede descargar esos cálculos específicos al hardware cuántico, creando una enorme potencia híbrida de computación cuántica clásica.
Airgaps, cuotas y la realidad de HPC
Comprender el hardware es sólo la mitad de la batalla. Las reglas operativas de una supercomputadora son completamente diferentes a las de un proveedor de nube comercial. Mare Nostrum V es un recurso público compartido, lo que significa que el entorno está fuertemente restringido para garantizar la seguridad y el juego limpio.
The Airgap: Una de las mayores sorpresas para los científicos de datos que hacen la transición a HPC es la restricción de la red. Puede acceder a la supercomputadora desde el mundo exterior a través de SSH, pero los nodos de computación no pueden acceder al mundo exterior en absoluto. No hay conexión a Internet saliente. No puede instalar una biblioteca faltante, obtener un conjunto de datos o conectarse a un repositorio externo de HuggingFace como mejor le parezca. Todo lo que su script necesita debe descargarse previamente, compilarse y guardarse en su directorio de almacenamiento antes de enviar su trabajo.
En realidad, es un problema menor de lo que parece, ya que los administradores de Marenostrum proporcionan la mayoría de las bibliotecas y el software que pueda necesitar a través de un sistema de módulos.
Mover datos: debido a este límite estricto, la entrada y salida de datos se realiza a través de scp o rsync a través de los nodos de inicio de sesión. Inserta sus conjuntos de datos sin procesar a través de SSH, espera a que los nodos de cómputo analicen las simulaciones y retira los tensores procesados a su máquina local. Un aspecto sorprendente de esta restricción es que, dado que el cálculo real puede ser increíblemente rápido, el cuello de botella es extraer los resultados finales a su máquina local para su posprocesamiento y visualización.
Límites y Cuotas: No se puede simplemente lanzar mil trabajos y monopolizar la máquina. A su proyecto se le asigna un presupuesto específico de horas de CPU. Además, existen límites estrictos sobre la cantidad de trabajos simultáneos que un solo usuario puede tener en ejecución o en cola en un momento dado.
También debe especificar un límite de tiempo estricto para cada trabajo que envíe. Las supercomputadoras no toleran la holgazanería; si solicita dos horas de tiempo de cómputo y su script necesita dos horas y un segundo, el programador eliminará despiadadamente su proceso a mitad de cálculo para dejar espacio para el siguiente investigador.
Iniciar sesión en la oscuridad: debido a que envía estos trabajos a un programador y se marcha, no hay una salida de terminal en vivo para mirar. En cambio, toda la salida estándar (stdout) y el error estándar (stderr) se redirigen automáticamente a archivos de registro (por ejemplo, sim_12345.out y sim_12345.err). Cuando se completa su trabajo, o si falla durante la noche, debe revisar estos archivos de texto generados para verificar los resultados o depurar su código. Sin embargo, tiene herramientas para monitorear el estado de los trabajos enviados, como colar o hacer el clásico tail -f en los archivos de registro.
Comprensión del administrador de carga de trabajo SLURM
Cuando finalmente obtengas la aprobación de tu asignación de investigación e inicies sesión en MareNostrum V a través de SSH, tu recompensa será… un aviso de terminal Linux completamente estándar.
Después de meses de redactar propuestas para acceder a una máquina de 200 millones de euros, es, francamente, un poco decepcionante. No hay luces intermitentes, ni barras de progreso holográficas, ni nada que indique cuán potente es el motor detrás del volante.
Debido a que miles de investigadores están usando la máquina simultáneamente, no se puede simplemente ejecutar un script pesado de Python o C++ directamente en la terminal. Si lo hace, se ejecutará en el "nodo de inicio de sesión", deteniéndolo rápidamente para todos los demás y obteniendo un correo electrónico increíblemente educado pero bastante firme y enojado por parte de los administradores del sistema.
En cambio, HPC se basa en un administrador de carga de trabajo llamado SLURM. Escribe un script bash que detalla exactamente qué hardware necesita, qué entornos de software cargar y qué código ejecutar. SLURM pone su trabajo en una cola, encuentra el hardware cuando está disponible, ejecuta su código y libera los nodos.
SLURM significa Utilidad simple de Linux para la gestión de recursos y es un software gratuito y de código abierto que maneja la programación de trabajos en muchos grupos de computadoras y supercomputadoras.
Antes de analizar una canalización compleja, es necesario comprender cómo comunicarse con el programador. Esto se hace usando las directivas #SBATCH ubicadas en la parte superior del script de envío. Estas directivas actúan como su lista de compras de recursos:
–nodos: la cantidad de máquinas físicas distintas que necesita. –ntasks: el número total de procesos (tareas) MPI separados que desea generar. SLURM se encarga de distribuir estas tareas entre los nodos solicitados. –time: El límite de tiempo estricto del reloj de pared para su trabajo. Las supercomputadoras no toleran la holgazanería; Si su secuencia de comandos se ejecuta aunque sea un segundo por encima de este límite, SLURM acaba sin piedad con el trabajo. –cuenta: el ID del proyecto específico que se facturará por sus horas de CPU. –qos: La “Calidad de servicio” o cola específica a la que se dirige. Por ejemplo, el uso de una cola de depuración otorga un acceso más rápido pero lo limita a tiempos de ejecución cortos para las pruebas.
Un ejemplo práctico: orquestar un barrido OpenFOAM
Para fundamentar esto en la realidad, así es como usé realmente la máquina. Estaba construyendo un modelo sustituto de ML para predecir la carga aerodinámica, que requería datos reales de 50 simulaciones de dinámica de fluidos computacional (CFD) de alta fidelidad en 50 mallas 3D diferentes.
Aquí está el script de trabajo SLURM real para un único caso de CFD de OpenFOAM en la partición de uso general:
#!/bin/bash #SBATCH –job-name=cfd_sweep #SBATCH –output=logs/sim_%j.out #SBATCH –error=logs/sim_%j.err #SBATCH –qos=gp_debug #SBATCH –time=00:30:00 #SBATCH –nodes=1 #SBATCH –ntasks=6 #SBATCH –account=nct_293 carga del módulo de purga del módulo OpenFOAM/11-foss-2023a fuente $FOAM_BASH # Los lanzadores MPI manejan el mapeo central automáticamente srun –mpi=pmix SurfaceFeatureExtract srun –mpi=pmix blockMesh srun –mpi=pmix decomposePar -force srun –mpi=pmix snappyHexMesh -parallel -overwrite srun –mpi=pmix potencialFoam -parallel srun –mpi=pmix simpleFoam -srun paralelo –mpi=pmix reconstructPar
En lugar de enviar esto manualmente 50 veces e inundar el programador, utilicé dependencias SLURM para encadenar cada trabajo detrás del anterior. Esto crea una canalización de datos limpia y automatizada:
#!/bin/bash PREV_JOB_ID="" para CASE_DIR en casos/case_*; hacer cd $CASE_DIR si [ -z "$PREV_JOB_ID" ]; luego OUT=$(sbatch run_all.sh) else OUT=$(sbatch –dependency=afterany:$PREV_JOB_ID run_all.sh) fi PREV_JOB_ID=$(echo $OUT | awk '{print $4}') cd ../.. hecho
Este orquestador coloca una cadena de 50 trabajos en la cola en segundos. Me fui y, a la mañana siguiente, mis 50 evaluaciones aerodinámicas fueron procesadas, registradas y listas para ser formateadas en tensores para el entrenamiento de ML.
Límites del paralelismo: ley de Amdahl
Una pregunta común de los recién llegados es: si tiene 112 núcleos por nodo, ¿por qué solo solicitó 6 tareas (ntasks=6) para su simulación CFD?
La respuesta es la Ley de Amdahl. Cada programa tiene una fracción serial que no se puede paralelizar. Establece explícitamente que la aceleración teórica de la ejecución de un programa en múltiples procesadores está estrictamente limitada por la fracción del código que debe ejecutarse en serie. Es una ley muy intuitiva y, matemáticamente, se expresa como:
[
S=frac{1}{(1-p)+frac{p}{N}}
]
[insertar]https://www.youtube.com/watch?v=1eYhRaH-7l4[/embed]
Donde S es la aceleración general, p es la proporción del código que se puede paralelizar, 1-p es la fracción estrictamente en serie y N es el número de núcleos de procesamiento.
Debido a ese término (1−p) en el denominador, te enfrentas a un techo insuperable. Si sólo el 5% de tu programa es fundamentalmente secuencial, la máxima aceleración teórica que puedes conseguir, incluso si utilizas cada núcleo de MareNostrum V, es 20x.
Además, dividir una tarea entre demasiados núcleos aumenta la sobrecarga de comunicación en la red InfiniBand que analizamos anteriormente. Si los núcleos dedican más tiempo a pasarse condiciones límite entre sí que a hacer cálculos reales, agregar más hardware ralentiza el programa.
Como se muestra en esta figura, al simular un sistema pequeño (N=100), el tiempo de ejecución aumenta después de 16 subprocesos. Sólo a escalas masivas (N=10k+) el hardware se vuelve completamente productivo. Escribir código para una supercomputadora es un ejercicio de gestión de esta relación computación-comunicación.
El acceso al aviso
A pesar del asombroso coste del hardware, el acceso a MareNostrum V es gratuito para los investigadores, ya que el tiempo de cálculo se trata como un recurso científico financiado con fondos públicos.
Si estás afiliado a una institución española, puedes postularte a través de la Red Española de Supercomputación (RES). Para los investigadores del resto de Europa, la Empresa Común EuroHPC realiza llamadas de acceso periódicas. Su pista de "Acceso al desarrollo" está diseñada específicamente para proyectos que portan código o comparan modelos de aprendizaje automático, lo que lo hace altamente accesible para los científicos de datos.
Cuando te sientas en tu escritorio mirando ese aviso SSH completamente anodino, es fácil olvidar lo que realmente estás mirando. Lo que ese cursor parpadeante no muestra son los 8.000 nodos a los que se conecta, el tejido de árbol grueso que enruta mensajes entre ellos a 200 Gb/s o el programador que coordina cientos de trabajos simultáneos de investigadores de seis países.
La imagen de la “única computadora poderosa” persiste en nuestras cabezas porque es más simple. Pero la realidad distribuida es lo que hace posible la informática moderna, y es mucho más accesible de lo que la mayoría de la gente cree.
Referencias
[1]Centro de Supercomputación de Barcelona, Especificaciones Técnicas MareNostrum 5 (2024), Sala de Prensa del BSC. https://towardsdatascience.com/what-it-actually-takes-to-run-code-on-200me-supercomputer/
[2]Empresa Conjunta EuroHPC, Detalles de la inauguración de MareNostrum 5 (2023), EuroHPC JU. https://towardsdatascience.com/what-it-actually-takes-to-run-code-on-200me-supercomputer/