¿Cómo utilizar Mathematica en un clúster gestionado de alto rendimiento?
Información de contexto
Los clústeres de computación de mayor tamaño constan de muchos nodos, y cada nodo está compuesto por múltiples núcleos de CPU. Además, a menudo en el clúster se encuentra disponible software especializado como Mathematica. Los usuarios solicitan estos recursos iniciando sesión en un nodo principal y enviando trabajos por lotes al gestor del clúster. El trabajo se ejecuta cuando los recursos están disponibles. Dos gestores de clúster comunes son TORQUE y Slurm.
La paralelización en Mathematica utiliza el modelo de centro y conexiones (“hub-and-spoke”), en el cual un kernel de control gestiona una cantidad de kernels subordinados (subkernels). En un entorno de clúster, el cliente ejecuta el kernel de control y los hosts proporcionan subkernels. El gestor del clúster determina el nodo que actúa como cliente y los nodos que actúan como hosts.
Existen dos beneficios al ejecutar Mathematica en un clúster: la cantidad de núcleos de CPU disponibles, incluso en un solo nodo, suele ser mayor que en una computadora de escritorio, y la velocidad de cada núcleo de CPU es individualmente superior a la de los núcleos en una computadora de escritorio.
Cómo ejecutar una interfaz remota de Mathematica
Una interfaz remota requiere que el usuario mantenga el control sobre los recursos del trabajo. Esto se conoce como una sesión interactiva.
Aunque generalmente hay una ventaja en la velocidad de CPU en comparación con una computadora de escritorio, la interfaz mediante una sesión interactiva es más lenta que la ejecución de una versión local de la interfaz. Esto se debe a que la interfaz se ejecuta en el clúster mientras que la interfaz se reenvía a la computadora del usuario remoto.
Una sesión interactiva no está diseñada para realizar cálculos de uso intensivo de CPU, sino que se utiliza para probar y diagnosticar código. Es común solicitar únicamente los recursos de un nodo.
- Inicie sesión en el nodo principal mediante SSH con reenvío de ventanas X habilitado.
- Inicie una sesión interactiva, solicitando todos los recursos en un solo nodo.
- Inicie una sesión de Mathematica.
Desde un cuaderno de Mathematica, al utilizar el comando LaunchKernels[] o cualquier otra funcionalidad paralela, ahora se incluirán subkernels que se ejecutan desde el clúster.
Cómo ejecutar un script remoto de Mathematica
Se asume que:
- Usted está familiarizado con iniciar subkernels remotos
- El clúster es un entorno de Linux
- El clúster utiliza un sistema de archivos clonado de manera que Mathematica se ejecute mediante el mismo ejecutable en todos los nodos
Si alguna de las suposiciones anteriores no es cierta, lo siguiente deberá ser modificado, pero la idea general se mantiene:
- Consulte al sistema para encontrar los nombres de los nodos asignados al trabajo, y cuántos núcleos por nodo están disponibles
- Inicie kernels remotos manualmente
Para Slurm, en un script de Mathematica o Wolfram Language tendría:
(* get host names *)
hosts = ReadList["!scontrol show hostname $SLURM_JOB_NODELIST", String]
masternode = Environment["SLURM_NODENAME"]
njobs = ToExpression[Environment["SLURM_CPUS_ON_NODE"]]
hosts = DeleteCases[hosts, masternode]; Length[hosts]
(* launch kernels on each host *)
kernels =
KernelConfiguration[#, "KernelCount" -> njobs] & /@ hosts;
LaunchKernels[kernels]
Al adquirir los nombres de los nodos, también puede usar SLURM_NODELIST
en lugar de SLURM_JOB_NODELIST
para compatibilidad retroactiva.
El formato devuelto del número de tareas por nodo no es adecuado para interpretación en Wolfram Language. Por lo tanto, la expresión se analiza manualmente en una expresión de lista.
TORQUE
Para TORQUE, en un script de Mathematica o Wolfram Language podría tener:
(* get association of resources *)
hosts = Counts[ReadList[Environment["PBS_NODEFILE"], "String"]];
(* launch subkernels and connect them to the controlling Wolfram Kernel *)
kernels=
Map[KernelConfiguration[#,"KernelCount" -> hosts[#]] &, Keys[hosts]]
LaunchKernels[kernels]
PBS_NODEFILE
es una variable del sistema que lista cada nombre de nodo una vez por cada núcleo de CPU disponible. Counts convierte esta lista en una instancia de Association, con el nombre de nodo como la clave y el número de núcleos de CPU como el valor. Para mayor simplicidad, todos los subkernels serán tratados como kernels remotos incluso cuando algunos se estarían ejecutando en el mismo nodo que la instancia local de Mathematica.
Limpieza después del cálculo
Cuando el código paralelo esté completo, es una buena práctica cerrar los kernels de Wolfram.
CloseKernels[];
[English]
Contacte a soporte técnico
Estamos listos para ayudarlo a resolver sus preguntas sobre facturación, activación o problemas técnicos.
1-800-WOLFRAM (+1-217-398-0700 para usuarios internacionales)
Soporte al cliente
Lunes–viernes
8am–5pm hora estándar del centro
- Registro o activación del producto
- Información y ordenes de preventas
- Ayuda con la instalación y primera ejecución
Soporte técnico avanzado (para clientes admisibles)
Lunes–Jueves
8am–7pm hora estándar del centro
Viernes
8:30–10am y 11am–5pm hora estándar del centro
- Soporte técnico prioritario
- Asistencia sobre el producto por expertos Wolfram
- Ayuda con la programación de Wolfram Language
- Soporte de instalación avanzado