Macaulay2 en ClusterUY, usando un Contenedor de Singularity
Macaulay2 es un programa para “investigación en geometría algebraica y álgebra conmutativa”.
En esta área de la matemática, los cálculos computacionales suelen requerir varias horas de ejecución, muchos procesadores, y sobretodo mucha memoria RAM. Por este motivo, suele ser necesario utilizar M2 en un “cluster” de computadoras.
En este tipo de arquitectura, que suelen ser compartidas por varios usuarios, es muy probable que no contemos con permisos de superusuario como para instalar nuevos programas (en particular M2). Una alternativa consiste en ejecutar M2 desde un “contenedor”, lo cual no requiere permisos especiales. Veamos cómo podemos hacer esto en el ClusterUY, usando un contendor de Singularity.
Conseguir una imagen
Lo primero que tenemos que hacer es conseguir una imagen del contenedor de Macaulay2 a instalar. Un lugar donde podemos buscar es en la página de Singularity Container Services (SCS): https://cloud.sylabs.io/library. (también es posible crear nuestra propia imagen en una computadora en la que tengamos permisos de superusuario).
En este caso voy a usar la siguiente imagen de Macaulay2: https://cloud.sylabs.io/library/youngsu-kim/cas/macaulay2. Esta imagen fue creada en 12/23, y contiene la versión 1.19.1 de Macaulay2 (al momento de escribir este post, en 05/24).
Descargar la imagen al clusteruy
Una vez identificada la imagen, la vamos a descargar en el ClusterUY.
Primero nos conectamos al cluster mediante ssh. Luego iniciamos una sesión interactiva:
$ interactivo -g
Una vez iniciada la sesión interactiva, queda disponible el uso de Singularity. Ahora descargamos la imagen mediante el comando “pull” de Singularity:
$ singularity pull library://youngsu-kim/cas/macaulay2
Esto descarga la imagen en un archivo de nombre “macaulay2_latest.sif”.
Cargar la imagen en un contenedor y ejecutar M2
Una vez descargada la imagen, cargamos un “contenedor” de dicha imagen mediante:
$ singularity shell macaulay2_latest.sif
Ahora estamos en una línea de comandos de Singularity, asociada al contendor de Macaulay2 de la imagen que descargamos. Esta línea de comandos se muestra de la siguiente forma:
Singularity>
Allí podemos iniciar Macaulay2 mediante el comando usual:
Singularity> M2
Ejecutar un archivo M2
También podemos ejecutar un archivo con código de Macaulay2. Por ejemplo, supongamos que tenemos un archivo de nombre prueba.m2, con el siguiente contenido:
time a = 2^1206 -- calcular una potencia grande
print a -- mostrar el valor calculado
Podemos ejecutar el código de este archivo en el contenedor de M2 mediante:
Singularity> M2 prueba.m2
Para salir del contenedor, usamos el comando exit (primero salir de M2 con exit):
Singularity> exit
Información de la imagen
Podemos ver información sobre la imagen de Macaulay2 descargada, inspeccionando el archivo de definición de dicha imagen. Para esto ejecutamos:
$ singularity inspect --deffile macaulay2_latest.sif
Esto muestra que la imagen contiene la versión de M2 disponible para Ubuntu 22.04 (en la fecha en que la imagen fue creada).
Ejecutar en modo batch
En lo anterior estuvimos usando los contenedores en una sesión interactiva. Sin embargo, al ejecutar una tarea en el cluster, por lo general lo hacemos en modo “bash”. Esto es: mediante un archivo .sh, donde indicamos los recursos de hardware que requiere nuestro trabajo, y los comandos a ejecutar.
La forma de utilizar los contenedores en modo bash es mediante la creación de “instancias”. Veamos cómo ejecutar el contenido del archivo prueba.m2 usando una instancia.
Primero creamos una instancia con la imagen Singularity de Macaulay2 (la misma que descargamos antes):
$ singularity instance start ~/macaulay2_latest.sif instancia_m2
La instancia creada tiene el nombre “instancia_m2”, y se encuentra ejecutando en segundo plano. Podemos ver una lista de las instancias que tenemos en ejeución mediante:
$ singularity instance list
Podemos ejecutar el código de Macaulay2 en la instancia creada:
$ singularity exec instance://instancia_m2 M2 prueba.m2
Para finalizar detenemos la instancia:
$ singularity instance stop instancia_m2
Esta secuencia de comandos se debe incluir en el archivo .sh, junto con una solicitud de recursos de hardware. El siguiente archivo contiene un ejemplo completo de un archivo .sh para ejecutar en el clusteruy. Este se ejecuta mediante:
$ sbatch ejecutar_m2_singularity.sh
Referencias
-
Macaulay2. https://macaulay2.com/
-
Clusteruy. ¿Cómo usar Singularity?. https://www.cluster.uy/ayuda/singularity/
-
Imagen de Macaulay2 en Singularity Container Services (SCS). https://cloud.sylabs.io/library/youngsu-kim/cas/macaulay2. Descargada en 05/24.
-
Inspecting SIF Files. SCS. https://sylabs.github.io/singularity101/inspecting.html
-
Running Services. Singularity User Guide. https://docs.sylabs.io/guides/3.4/user-guide/running_services.html