<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://wiki.nlhpc.cl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eguerra</id>
	<title>NLHPC - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nlhpc.cl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eguerra"/>
	<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/Especial:Contribuciones/Eguerra"/>
	<updated>2026-04-16T22:30:27Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=SISTEMA_GESTOR_DE_RECURSOS&amp;diff=987</id>
		<title>SISTEMA GESTOR DE RECURSOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=SISTEMA_GESTOR_DE_RECURSOS&amp;diff=987"/>
		<updated>2025-06-26T21:54:59Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SLURM Workload Manager ==&lt;br /&gt;
Es un sistema de programación de trabajos y gestión de clústeres de código abierto, tolerante a fallas y altamente escalable para clústeres Linux grandes y pequeños.&lt;br /&gt;
&lt;br /&gt;
Como administrador de carga de trabajo de clúster, Slurm tiene tres funciones clave. Primero, asigna acceso exclusivo y / o no exclusivo a los recursos (nodos de cómputo) a los usuarios durante un período de tiempo para que puedan realizar el trabajo. En segundo lugar, proporciona un marco para iniciar, ejecutar y monitorear el trabajo (normalmente un trabajo paralelo) en el conjunto de nodos asignados. Finalmente, arbitra la contención de recursos mediante la gestión de una cola de trabajo pendiente.&lt;br /&gt;
&lt;br /&gt;
SLURM es el gestor de colas instalado en muchos de los súper computadores del [https://www.top500.org/ TOP500], y también en el clúster del NLHPC. Si Ud. quiere lanzar tareas dentro de Leftaru, debe hacerlo a través de Slurm.&lt;br /&gt;
&lt;br /&gt;
== Conceptos clave ==&lt;br /&gt;
SLURM gestiona trabajos de usuario que tienen las siguientes características clave:&lt;br /&gt;
&lt;br /&gt;
* Conjunto de recursos solicitados:&lt;br /&gt;
** Número de recursos informáticos: nodos (incluidas todas sus CPUs y núcleos) o CPUs (incluidos todos sus núcleos) o solo núcleos&lt;br /&gt;
** Cantidad de memoria: por nodo o por CPU (lógica)&lt;br /&gt;
** Tiempo necesario para que las tareas del usuario completen su trabajo&lt;br /&gt;
* Una partición de nodo solicitada (cola de trabajos)&lt;br /&gt;
* Un nivel de calidad de servicio (QoS) solicitado que otorga a los usuarios accesos específicos&lt;br /&gt;
* Una cuenta solicitada con recursos limitados&lt;br /&gt;
&lt;br /&gt;
De manera predeterminada, los usuarios envían trabajos a una partición particular (marcada como tal para todos los usuarios) y bajo una cuenta particular (preestablecida por usuario).&lt;br /&gt;
&lt;br /&gt;
== Particiones SLURM ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 60%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Nombre Particion&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Nodos&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;CPUs&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;RAM&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Descripción&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;main&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;27&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;256&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;768GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;general&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;48&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;44&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;187GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;largemem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;44&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;765GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;v100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;44&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;187GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;4 GPUs Nvidia Tesla V100.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mi100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;128&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;502GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2 GPUs AMD Instinct MI100.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mi210&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;24&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1457GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 GPUs AMD Instinct MI210.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;debug&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;48&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;768GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Destinados a pruebas de máximo 30 minutos.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introducción a los comandos slurm ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 60%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Comando SLURM&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Descripción&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;srun&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ejecutar un comando en nodos de cómputo asignados.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;sbatch&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;presentar un script de trabajo&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;squeue&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Mostrar estado de los trabajos en la cola.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;scancel&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eliminar un trabajo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;sinfo&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Muestra el estado de los nodos de cómputo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
Estos son los comandos básicos utilizados para realizar la mayoría de las operaciones básicas con SLURM.&lt;br /&gt;
&lt;br /&gt;
=== Estado de nodos ===&lt;br /&gt;
Para consultar el uso de nuestra infraestructura y qué particiones están más libres, le recomendamos el comando sinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;# sinfo&amp;lt;small&amp;gt;&lt;br /&gt;
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST&lt;br /&gt;
main*        up   infinite      1  idle mn[016,018]&lt;br /&gt;
main*        up   infinite     21    mix mn[001-003,005,007-011,013,015,017,019-027]&lt;br /&gt;
main*        up   infinite      4  alloc mn[004,006,012,014]&lt;br /&gt;
general      up   infinite      1  drain sn041&lt;br /&gt;
general      up   infinite     16    mix sn[005-007,012-015,019-021,030-031,043-048]&lt;br /&gt;
general      up   infinite     31  alloc sn[001-004,008-011,016-018,022-029,032-040]&lt;br /&gt;
largemem     up   infinite      1    mix fn006&lt;br /&gt;
largemem     up   infinite      8  alloc fn[001-005,007-009]&lt;br /&gt;
debug        up   infinite      2   idle leftraru[1-2]&lt;br /&gt;
v100         up   infinite      2    mix gn[001-002]&lt;br /&gt;
mi100        up   infinite      1   idle gn003&lt;br /&gt;
mi210        up   infinite      1    mix gn004&lt;br /&gt;
mi210        up   infinite      1   idle gn005&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fijándose en el texto resaltado de la salida del comando sinfo, se puede comprobar que en la partición main hay 20 nodos que están completamente ocupados (estado alloc), 7 nodos que están libres (idle); por otro lado, en la partición general hay 22 nodos completamente ocupados, 4 parcialmente ocupados y 22 libres. Dado este escenario, está claro que debería de lanzar sus ejecuciones en los nodos de la partición general, por las razones anteriormente expuestas.&lt;br /&gt;
&lt;br /&gt;
Para lanzar en la partición general, debe tener en cuenta que tiene que indicar en su script que se use dicha partición en vez de, probablemente, main. Por supuesto, en esta partición cambian las características técnicas, se pasan a tener 44 cores por nodo (en vez de 256 en main) y una capacidad RAM de 187GB (en vez de 768GB en main). Puede ver más información de las particiones en este link(agregar link), donde podrá revisar que con la inclusión de Guacolda hemos añadido nodos con hasta 765GB de memoria RAM y nodos con GPUs Nvidia Tesla V100 y AMD Instinct MI100 .&lt;br /&gt;
&lt;br /&gt;
Para ver los nodos disponibles y poder determinar en que partición lanzar los trabajos se recomienda utilizar el siguiente comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[prueba@leftraru1 ~]$ sinfo -o &amp;quot;%10P %6D %10t %10m %c&amp;quot; -t idle| egrep &amp;quot;PARTITION|main|general|largemem|v100|mi100|mi210&amp;quot;&lt;br /&gt;
PARTITION  NODES  STATE      MEMORY     CPUS&lt;br /&gt;
PARTITION  NODES  STATE      MEMORY     CPUS&lt;br /&gt;
main*      2      idle       727000     256&lt;br /&gt;
general    0      n/a        0          0&lt;br /&gt;
largemem   0      n/a        0          0&lt;br /&gt;
v100       0      n/a        0          0&lt;br /&gt;
mi100      1      idle       485000     128&lt;br /&gt;
mi210      1      idle       1457000    48&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
El comando anterior muestra que main tiene 27 nodos libres, en este caso es recomendado lanzar en en main para evitar que el trabajo quede en cola por falta de recursos en otros nodos.&lt;br /&gt;
&lt;br /&gt;
Otro Ejemplo, se muestra sólo una partición específica&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[prueba@leftraru1 ~]$ sinfo -p main&lt;br /&gt;
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST&lt;br /&gt;
main*        up   infinite     15    mix mn[001-008,014-020]&lt;br /&gt;
main*        up   infinite     12   idle mn[009-013,021-027]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comprobación del estado de tareas ===&lt;br /&gt;
squeue - Muestra el estatus de los trabajos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;squeue                  # tus trabajos&lt;br /&gt;
squeue -u &amp;amp;lt;username&amp;amp;gt;    # trabajos por usuario &amp;amp;lt;username&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
squeue: Comprobar estados de los trabajos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;&amp;quot; class=&amp;quot;mw-highlight mw-content-ltr&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  JOBID        PARTITION     NAME     USER    ST       TIME  	NODES 	NODELIST(REASON)&lt;br /&gt;
13951858_1     general	     test1    test1    R   1-18:35:14      2    cn[009-010]&lt;br /&gt;
13951857_2     general       test2    test1    R   1-18:36:11      2    cn[099-100]&lt;br /&gt;
13956453       gpu           test3    test3    R   1-03:42:08      1    cn039&lt;br /&gt;
13956449       largemem      test4    test4    R   1-05:42:08      1    cn044&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puede utilizar squeue para saber el estado de una o varias de sus tareas&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -o &amp;quot;%.15i %.6P %.8j %.20S %.11M %.11L %.20V %.10Q %.4C %.2D %.6m&amp;quot; -S -t,-Q&lt;br /&gt;
 JOBID   PARTIT     NAME      START_TIME          TIME      TIME_LEFT     SUBMIT_TIME       PRIORITY CPUS NO MIN_ME&lt;br /&gt;
10837561 general   TEST1   2018-06-18T18:51:01    19:00:31  2-04:59:29  2018-06-18T18:51:01  119972    1  1  1000M&lt;br /&gt;
10838562 general   TEST2   2018-06-19T11:30:47    2:20:45   2-21:39:15  2018-06-19T11:30:46  119946    1  1  1000M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
para mas opciones puede revisar con el comando [https://slurm.schedmd.com/squeue.html man squeue] las opciones restantes.&lt;br /&gt;
&lt;br /&gt;
=== Códigos de ESTADO de los trabajos ===&lt;br /&gt;
&lt;br /&gt;
Los trabajos suelen pasar por varios estados durante su ejecución. Los estados típicos son PENDIENTE, EN EJECUCIÓN, SUSPENDIDO, FINALIZANDO y TERMINADO. A continuación se explica cada estado.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BF&#039;&#039;&#039; BOOT_FAIL&lt;br /&gt;
    Trabajo finalizado debido a un fallo de arranque, normalmente debido a un fallo de hardware (por ejemplo, no se puede arrancar el nodo o bloque y el trabajo no se puede volver a poner en cola). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CA&#039;&#039;&#039; CANCELADO&lt;br /&gt;
    El trabajo ha sido cancelado explícitamente por el usuario o el administrador del sistema. El trabajo puede haberse iniciado o no. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CD&#039;&#039;&#039; TERMINADO&lt;br /&gt;
    El trabajo ha terminado todos los procesos en todos los nodos con un código de salida de cero. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CF&#039;&#039;&#039; CONFIGURANDO&lt;br /&gt;
    Al trabajo se le han asignado recursos, pero están esperando a que estén listos para su uso (por ejemplo, arrancando). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CG&#039;&#039;&#039; COMPLETANDO&lt;br /&gt;
    El trabajo está en proceso de finalización. Algunos procesos en algunos nodos pueden estar aún activos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DL&#039;&#039;&#039; FECHA LÍMITE&lt;br /&gt;
    El trabajo ha finalizado en la fecha límite. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;F&#039;&#039;&#039; FALLÓ&lt;br /&gt;
    Trabajo finalizado con un código de salida distinto de cero u otra condición de fallo. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NF&#039;&#039;&#039; NODO_FAIL&lt;br /&gt;
    Trabajo finalizado debido al fallo de uno o más nodos asignados. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OOM&#039;&#039;&#039; OUT_OF_MEMORY&lt;br /&gt;
    El trabajo ha experimentado un error de memoria insuficiente. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PD&#039;&#039;&#039; PENDIENTE&lt;br /&gt;
    El trabajo está pendiente de asignación de recursos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PR&#039;&#039;&#039; PREEMPTED&lt;br /&gt;
    El trabajo ha finalizado debido a una espera. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; EN MARCHA&lt;br /&gt;
    El trabajo tiene actualmente una asignación. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RD&#039;&#039;&#039; RESV_DEL_HOLD&lt;br /&gt;
    El trabajo se está reteniendo después de que se eliminara la reserva solicitada. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RF&#039;&#039;&#039; REQUEUE_FED&lt;br /&gt;
    El trabajo está siendo solicitado por una federación. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RH&#039;&#039;&#039; REQUEUE_HOLD&lt;br /&gt;
    Se está volviendo a poner en cola un trabajo retenido. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RQ&#039;&#039;&#039; REQUEUED&lt;br /&gt;
    Se está poniendo en cola un trabajo que se está completando. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RS&#039;&#039;&#039; CAMBIO DE TAMAÑO&lt;br /&gt;
    El trabajo está a punto de cambiar de tamaño. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RV&#039;&#039;&#039; REVOCADO&lt;br /&gt;
    El trabajo se ha retirado del clúster debido a que otro clúster ha iniciado el trabajo. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SI&#039;&#039;&#039; SEÑALANDO&lt;br /&gt;
    El trabajo está siendo señalizado. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SE&#039;&#039;&#039; SPECIAL_EXIT&lt;br /&gt;
    El trabajo se ha puesto en cola en un estado especial. Este estado puede ser establecido por los usuarios, normalmente en EpilogSlurmctld, si el trabajo ha terminado con un valor de salida particular. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SO&#039;&#039;&#039; STAGE_OUT&lt;br /&gt;
    El trabajo está preparando los archivos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ST&#039;&#039;&#039; PARADO&lt;br /&gt;
    El trabajo tiene una asignación, pero la ejecución se ha detenido con la señal SIGSTOP. Los CPUS han sido retenidos por este trabajo. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039; SUSPENDIDO&lt;br /&gt;
    El trabajo tiene una asignación, pero se ha suspendido la ejecución y se han liberado CPUs para otros trabajos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TO&#039;&#039;&#039; TIMEOUT&lt;br /&gt;
    El trabajo ha finalizado al alcanzar su límite de tiempo.&lt;br /&gt;
&lt;br /&gt;
=== Cancelar un trabajo ===&lt;br /&gt;
Con scancel se puede cancelar un trabajo en ejecución&lt;br /&gt;
&amp;lt;pre&amp;gt;scancel &amp;amp;lt;jobID&amp;amp;gt;         # Matar proceso &amp;amp;lt;jobID&amp;amp;gt;. (puede obtener el ID del job con &amp;quot;squeue&amp;quot;)&lt;br /&gt;
scancel -u &amp;amp;lt;username&amp;amp;gt;   # Matar proceso por usuario &amp;amp;lt;username&amp;amp;gt;. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;[prueba@leftraru1 ~]$ squeue -u prueba&lt;br /&gt;
 JOBID  PARTITION    NAME     USER    ST   TIME  NODES  NODELIST(REASON)&lt;br /&gt;
 45594    main       TEST    prueba   R    0:59   3     mn[001-003]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;[prueba@leftraru1 ~]$ scancel 45594&lt;br /&gt;
[prueba@leftraru1 ~]$ squeue -u prueba&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
[prueba@leftraru1 ~]$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ver estado de trabajos ===&lt;br /&gt;
Para revisar el detalle de las opciones de un trabajo: scontrol show job&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show job 10837561&lt;br /&gt;
JobId=10837561 JobName=TEST1&lt;br /&gt;
   UserId=usuario(1000) GroupId=group(1000) MCS_label=N/A&lt;br /&gt;
   Priority=1100 Nice=0 Account=account QOS=120&lt;br /&gt;
   JobState=RUNNING Reason=None Dependency=(null)&lt;br /&gt;
   Requeue=0 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0&lt;br /&gt;
   DerivedExitCode=0:0&lt;br /&gt;
   RunTime=19:03:08 TimeLimit=3-00:00:00 TimeMin=N/A&lt;br /&gt;
   SubmitTime=2018-06-18T18:51:01 EligibleTime=2018-06-18T18:51:01&lt;br /&gt;
   StartTime=2018-06-18T18:51:01 EndTime=2018-06-21T18:51:01 Deadline=N/A&lt;br /&gt;
   PreemptTime=None SuspendTime=None SecsPreSuspend=0&lt;br /&gt;
   Partition=main AllocNode:Sid=leftraru2:5471&lt;br /&gt;
   ReqNodeList=(null) ExcNodeList=(null)&lt;br /&gt;
   NodeList=cn021&lt;br /&gt;
   BatchHost=cn021&lt;br /&gt;
   NumNodes=1 NumCPUs=1 NumTasks=1 CPUs/Task=1 ReqB:S:C:T=0:0:*:*&lt;br /&gt;
   TRES=cpu=1,mem=1000M,node=1&lt;br /&gt;
   Socks/Node=* NtasksPerN:B:S:C=1:0:*:* CoreSpec=*&lt;br /&gt;
     Nodes=cn021 CPU_IDs=1 Mem=1000 GRES_IDX=&lt;br /&gt;
   MinCPUsNode=1 MinMemoryCPU=1000M MinTmpDiskNode=0&lt;br /&gt;
   Features=(null) DelayBoot=00:00:00&lt;br /&gt;
   Gres=(null) Reservation=(null)&lt;br /&gt;
   OverSubscribe=OK Contiguous=0 Licenses=matlab Network=(null)&lt;br /&gt;
   Command=/home/usuario/script.sh&lt;br /&gt;
   WorkDir=/home/usuario/&lt;br /&gt;
   StdErr=/home/usuario/10837561_%x.err&lt;br /&gt;
   StdIn=/dev/null&lt;br /&gt;
   StdOut=/home/usuario/10837561_%x.out&lt;br /&gt;
   Power=&lt;br /&gt;
   BatchScript=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para ver el script asociado a un trabajo: scontrol write batch_script &amp;lt;job_id&amp;gt; -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol write batch_script 10837561 -&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -J nombre_del_trabajo&lt;br /&gt;
#SBATCH -p main&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --mail-user=usaurio@correo.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o nombre_del_trabajo%j_%x.out&lt;br /&gt;
#SBATCH -e nombre_del_trabajo%j_%x.err&lt;br /&gt;
#SBATCH --license=matlab &lt;br /&gt;
 &lt;br /&gt;
ml MATLAB/2017a&lt;br /&gt;
&lt;br /&gt;
matlab -nodisplay -nosplash -nodesktop &amp;lt; programa.m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejecutando trabajos ==&lt;br /&gt;
Actualmente contamos con 2 metodos de enviar trabajos bajo SLURM: &#039;&#039;&#039;sbatch&#039;&#039;&#039; and &#039;&#039;&#039;srun&#039;&#039;&#039;. A veces puede ser ventajoso ejecutar un solo comando en el clúster como prueba o realizar rápidamente una operación con recursos adicionales. &#039;srun&#039; permite a los usuarios hacer esto, y comparte las mismas variables que &#039;sbatch&#039; . STDOUT y STDERR para un trabajo &#039;srun&#039; serán redirigidos a la pantalla del usuario. Ctrl-C cancelará un trabajo srun. &#039;&#039;&#039;sbatch&#039;&#039;&#039; enviará un script de trabajo para que lo ejecute el clúster. Los scripts de trabajo bajo SLURM son simplemente scripts de shell (* .sh) con un conjunto de solicitudes de recursos en la parte superior del script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Uso básico de srun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun &amp;lt;algúnComando&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ejemplo de salida (ejecutando el comando &amp;quot;hostname&amp;quot; para saber en que nodo se está ejecutando):&lt;br /&gt;
&amp;lt;pre&amp;gt; $ srun hostname&lt;br /&gt;
  cn003&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para enviar un script de trabajo a SLURM:&lt;br /&gt;
&amp;lt;pre&amp;gt;sbatch nombreScript.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example output:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch test-job.sh&lt;br /&gt;
Submitted batch job 1169&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables Slurm ===&lt;br /&gt;
Las variables en esta sección son obligatorias, y SLURM las determina para determinar dónde y cuándo se ejecutarán sus trabajos. Si no asigna un valor para estos, el planificador asignará a sus trabajos el valor predeterminado. Si no solicita específicamente recursos para un trabajo, se le asignará un conjunto de recursos predeterminados. Para obtener una lista de todas las variables disponibles, consulte la documentación de SLURM en http://slurm.schedmd.com/sbatch.html. Las variables de este artículo estaban cubiertas porque eran las más relevantes para los casos de uso típicos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Comando SLURM&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Descripción&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;--mem-per-cpu=&amp;amp;lt;megabytes&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Memoria requerida para el trabajo por CPU (en MegaBytes). El valor predeterminado es 1024 MB.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-p &amp;amp;lt;partition&amp;amp;gt;, --partition=&amp;amp;lt;partition&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enviar un trabajo a una partición específica.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-n, --ntasks=&amp;amp;lt;cantidad de tareas&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Número de tareas que serán asignadas para el trabajo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-c &amp;amp;lt;cpus&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Esta es la cantidad de CPU que necesita su trabajo. Tenga en cuenta que SLURM es relativamente generoso con las CPU, y el valor especificado aquí es el número &amp;quot;mínimo&amp;quot; de CPU que se asignará a su trabajo. Si hay CPU adicionales disponibles en un nodo más allá de lo solicitado, su trabajo recibirá esas CPU hasta que otros trabajos las necesiten. El valor predeterminado es 1 CPU. Intentar usar más CPU de las que se le asignaron dará como resultado que sus procesos adicionales se turnen en la misma CPU (ralentizando su trabajo).&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-J &amp;amp;lt;name&amp;amp;gt;, --jobname=&amp;amp;lt;name&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Especifica un nombre a tu trabajo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;--mail-type=BEGIN,END,FAIL,ALL&amp;lt;b&amp;gt; and &amp;lt;/b&amp;gt;--mail-user=&amp;amp;lt;emailAddress&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enviar por correo electrónico cuando su trabajo comienza / termina / falla. Puede especificar varios valores para esto (separados por comas) si es necesario.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-o &amp;amp;lt;STDOUT_log&amp;amp;gt;, --output=&amp;amp;lt;STDOUT_log&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Redirija la salida a los archivos de registro que especifique. Por defecto, ambos, STDOUT and STDERR son enviados a este archivo. Puedes especificar %j como parte del nombre de archivo de registro para indicar la ID del trabajo (como ejemplo, &amp;quot;#SBATCH -o ouptut_%j.o&amp;quot; redirigiría la salida a &amp;quot;output_123456.o&amp;quot;).&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-e &amp;amp;lt;STDERR_log&amp;amp;gt;, --error=&amp;amp;lt;STDERR_log&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Redireccionar STDERR a un archivo separado. Funciona exactamente igual que &amp;quot;-o&amp;quot;.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-t &amp;amp;lt;days-hours:minutes:seconds&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Walltime para tu trabajo. La duración del Walltime es el tiempo que espera que su trabajo se ejecute.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-a, --array=&amp;amp;lt;índices&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Envía una lista (arreglo) de trabajos identicos. Solo aplica para sbatch.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los scripts de trabajo especifican los recursos solicitados y otras consideraciones especiales con comentarios especiales &amp;quot;#SBATCH&amp;quot; en la parte superior de un script de trabajo. Aunque muchas de estas opciones son opcionales, las varibles que se ocupan de solicitudes de recursos (CPU, memoria y tiempo) son obligatorias. Todas las variables deben agregarse a sus scripts de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#SBATCH &amp;lt;variable&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Para especificar un nombre al job, por ejemplo, debe agregar lo siguiente a su secuencia de comandos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#SBATCH --job-name=nombreDeTrabajo&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Enviar un script===&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #SBATCH -J example&lt;br /&gt;
 #SBATCH -p general&lt;br /&gt;
 #SBATCH -n 1&lt;br /&gt;
 #SBATCH --output=example_%j.out&lt;br /&gt;
 #SBATCH --error=example_%j.err&lt;br /&gt;
 #SBATCH --mail-user=user@example.com&lt;br /&gt;
 #SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como debe comenzar un script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la partición donde desea ejecutar el Job:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o example_%j.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e example_%j.err&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=user@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enviar correo en todos casos (verificar opciones arriba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programar tarea (uso de scrontab) ===&lt;br /&gt;
&#039;&#039;&#039;scrontab&#039;&#039;&#039; es una implementación del clásico planificador de tareas de linux &#039;&#039;&#039;crontab&#039;&#039;&#039; donde se guarda un listado de comandos a ejecutar en un tiempo determinado por el usuario.&lt;br /&gt;
&lt;br /&gt;
Para acceder a scrontab utilice el siguiente comando:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ scrontab -e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto le permitirá editar su archivo scrontab, asignando recursos como también el momento en que desea ejecutar su tarea. La estructura base a utilizar es la siguiente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SCRON -J mi_tarea&lt;br /&gt;
#SCRON -p main&lt;br /&gt;
#SCRON -n 1&lt;br /&gt;
#SCRON -c 1&lt;br /&gt;
#SCRON --mem-per-cpu=2300&lt;br /&gt;
#SCRON --mail-user=foo@bar.com&lt;br /&gt;
#SCRON --mail-type=ALL&lt;br /&gt;
#SCRON -o mi_tarea_%j.out&lt;br /&gt;
#SCRON -e mi_tarea_%j.err&lt;br /&gt;
# Example of job definition:&lt;br /&gt;
# .---------------- minute (0 - 59)&lt;br /&gt;
# |  .------------- hour (0 - 23)&lt;br /&gt;
# |  |  .---------- day of month (1 - 31)&lt;br /&gt;
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...&lt;br /&gt;
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat&lt;br /&gt;
# |  |  |  |  |&lt;br /&gt;
# *  *  *  *  *     command to be executed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;minute&#039;&#039;&#039; - Corresponde al minuto en que se va a ejecutar el script, valor de 0 a 59.&lt;br /&gt;
* &#039;&#039;&#039;hour&#039;&#039;&#039; - Hora de ejecución, formato 24 horas, valor de 0 a 23, donde 0 son las 12:00 AM.&lt;br /&gt;
* &#039;&#039;&#039;day of month&#039;&#039;&#039; - Día del mes, la tarea se puede ejecutar cada x día, valor de 1 a 31.&lt;br /&gt;
* &#039;&#039;&#039;month&#039;&#039;&#039; - La tarea se puede ejecutar cada x mes, valor de 1 a 12.&lt;br /&gt;
* &#039;&#039;&#039;day of week&#039;&#039;&#039; - Día de la semana, valor de 0 a 6, donde 0 es Domingo.&lt;br /&gt;
* &#039;&#039;&#039;command to be executed&#039;&#039;&#039; - Script a ejecutar por el usuario.&lt;br /&gt;
 &lt;br /&gt;
Ejemplo envío de trabajo slurm:&lt;br /&gt;
&lt;br /&gt;
Para la asignación de recursos, utilizaremos la directriz &#039;&#039;&#039;#SCRON&#039;&#039;&#039;, que utiliza los mismos parámetros usados por &#039;&#039;&#039;#SBATCH&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Luego de asignar los recursos debemos especificar el tiempo, en este caso la tarea será ejecutada todos los días cada 20 minutos, luego debemos indicar el script enviado por el usuario y guardamos los cambios en el archivo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*/20 * * * * /home/prueba/ejemplo/script.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es importante destacar que el script a lanzar &#039;&#039;&#039;/home/prueba/ejemplo/script.sh&#039;&#039;&#039; debe tener permisos de ejecución.&lt;br /&gt;
&lt;br /&gt;
Para revisar el listado de tareas existentes en nuestro scrontab, ejecutamos el comando:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ scrontab -l&lt;br /&gt;
*/20 * * * * /home/prueba/ejemplo/script.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para borrar el contenido de nuestro scrontab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ scrontab -r&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Información a considerar:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Generar archivos de salida correctamente&lt;br /&gt;
** Para que el archivo error y out de tu script se generen en el directorio solicitado, ejemplo, /home/prueba/ejemplo/ en tu script debe estar presente el comando cd “/home/prueba/ejemplo”, esto hará que scrontab se posicione dentro del directorio de salida.&lt;br /&gt;
* Es distinto el tiempo de programar el envío de una tarea (scrontab) a que una tarea inicie en el clúster (running), ya que esto dependerá de los recursos libres que existan en ese momento en el clúster.&lt;br /&gt;
* Para revisar las tareas programadas debe ejecutar en cualquier nodo login el comando &#039;&#039;&#039;scrontab -l&#039;&#039;&#039; o revisar con el comando &#039;&#039;&#039;squeue&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ squeue&lt;br /&gt;
24293471     main /home/eg  prueba PD       0:00      1 (BeginTime)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Checkpointing ==&lt;br /&gt;
Es la acción de guardar el estado de un proceso en ejecución en un archivo de imagen de punto de control. Este proceso se puede reiniciar más tarde desde el archivo del punto de control, continuando la ejecución desde donde se detuvo, en la misma computadora o en una diferente.&lt;br /&gt;
&lt;br /&gt;
=== ¿Por qué utilizarlo? ===&lt;br /&gt;
* Permite ejecuciones de tarea largas que superen el tiempo de ejecución permitido en el cluster (30 días)&lt;br /&gt;
* Estar preparados ante fallas del sistema que nos puedan hacer perder resultados de nuestras simulaciones&lt;br /&gt;
&lt;br /&gt;
=== Utilización ===&lt;br /&gt;
Lo primero que debemos hacer en nuestro script es cargar el módulo de Mana:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ml mana/3.0.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Este módulo provee 3 ejecutables que necesitaremos:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mana_coordinator:&#039;&#039;&#039; Coordina los checkpoints entre los distintos procesos&lt;br /&gt;
* &#039;&#039;&#039;mana_launch:&#039;&#039;&#039; Inicia un proceso con checkpoint&lt;br /&gt;
* &#039;&#039;&#039;mana_restart:&#039;&#039;&#039; Reinicia la ejecución desde una imagen del checkpoint&lt;br /&gt;
&lt;br /&gt;
Necesitaremos 2 scripts para trabajar con checkpoints: Inicio y reinicio&lt;br /&gt;
&lt;br /&gt;
=== Script de inicio (inicio.sh) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
##---------------SLURM Parameters - NLHPC ----------------&lt;br /&gt;
#SBATCH -J Testcheckpoint&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4363&lt;br /&gt;
#SBATCH --mail-user=test@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o Testcheckpoint_%j.out&lt;br /&gt;
#SBATCH -e Testcheckpoint_%j.err&lt;br /&gt;
&lt;br /&gt;
# ----------------Modules----------------------------&lt;br /&gt;
ml mana/3.0.0&lt;br /&gt;
# ----------------Command--------------------------&lt;br /&gt;
#Checkpointing cada 1 hora&lt;br /&gt;
mana_cooridinator -i3600&lt;br /&gt;
#Ejecutamos nuestra tarea con checkpointing&lt;br /&gt;
srun mana_launch ./ejecutable&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Script de reinicio (reinicio.sh) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
##---------------SLURM Parameters - NLHPC ----------------&lt;br /&gt;
#SBATCH -J Testcheckpoint&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4363&lt;br /&gt;
#SBATCH --mail-user=test@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o Testcheckpoint_%j.out&lt;br /&gt;
#SBATCH -e Testcheckpoint_%j.err&lt;br /&gt;
&lt;br /&gt;
# ----------------Modules----------------------------&lt;br /&gt;
ml mana/3.0.0&lt;br /&gt;
# ----------------Command--------------------------&lt;br /&gt;
#Checkpointing cada 1 hora&lt;br /&gt;
mana_cooridinator -i3600&lt;br /&gt;
#Reiniciar nuestra tarea desde los archivos de checkpoint&lt;br /&gt;
srun mana_restart&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para correr estos scripts se puede hacer utilizando la funcionalidad de dependencias de SLURM:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[test@leftraru2 test]$ sbatch inicio.sh&lt;br /&gt;
Submitted batch job 23574685&lt;br /&gt;
[test@leftraru2 test]$ sbatch --dependency=afterok:23574685 reinicio.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Trabajos ==&lt;br /&gt;
=== Trabajos paralelos ===&lt;br /&gt;
Muchos de los trabajos que se ejecutan en un clúster de producción implicarán más de un procesador (CPU, núcleo). Dichos trabajos paralelos deben solicitar la cantidad de recursos necesarios a través de opciones adicionales. Los más comunes son:&lt;br /&gt;
&lt;br /&gt;
Para diferentes tipos de trabajos paralelos, se especificarán diferentes opciones. Los trabajos paralelos más comunes son trabajos de MPI (memoria distribuida), trabajos de subprocesos múltiples (memoria compartida) y los llamados híbridos que son una combinación de los dos. Analicemos por separado con un n ejemplo para cada uno.&lt;br /&gt;
&lt;br /&gt;
=== Ejecución de programas con MPI ===&lt;br /&gt;
MPI (interfaz de paso de mensajes) es la API de comunicación estándar para trabajos paralelos de memoria distribuida capaz de implementarse en un clúster. Para programar dicho trabajo, es necesario especificar la cantidad de nodos del clúster que se utilizarán y la cantidad de procesos (tareas) que se ejecutarán en cada nodo.&lt;br /&gt;
&lt;br /&gt;
El siguiente es un ejemplo de ejecución de un programa compilado con Open MPI:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #SBATCH -J example_mpi&lt;br /&gt;
 #SBATCH -p general&lt;br /&gt;
 #SBATCH -n 264&lt;br /&gt;
 #SBATCH --ntasks-per-node=44&lt;br /&gt;
 #SBATCH --output=example_%j.out&lt;br /&gt;
 #SBATCH --error=example_%j.err&lt;br /&gt;
 #SBATCH --mail-user=user@example.com&lt;br /&gt;
 #SBATCH --mail-type=ALL&lt;br /&gt;
 &lt;br /&gt;
 srun ./mpi_test&lt;br /&gt;
A continuacion se explica línea por líneael script.&lt;br /&gt;
&lt;br /&gt;
Como empieza un shell script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre del Job:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J example_mpi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la particion donde se desea ejecutar el trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas. Debe de ser un número múltiplo del número de CPUs máximo que tenga un node de la partición donde se lanza:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 264&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con esto se fuerza a que se lancen 44 tareas MPI en cada uno de los nodos, ocupando de este modo nodos completos. En este caso 6 nodos completos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o example_%j.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e example_%j.err&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=user@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Envía correo en todos los casos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programa para ejecutar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun ./mpi_test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nota&#039;&#039;&#039;: no se carga específicamente el módulo &amp;quot;mpi&amp;quot; ya que se carga siempre por defecto.&lt;br /&gt;
&lt;br /&gt;
Para enviarlo al clúster debe ejecutar el comando: &#039;&#039;sbatch script.sh&#039;&#039;. El ejemplo anterior ejecutará una tarea OpenMPI con 264 procesos reservando 264 cores para ello.&lt;br /&gt;
&lt;br /&gt;
=== Trabajos multiproceso OpenMP ===&lt;br /&gt;
Los trabajos paralelos diseñados para ejecutarse en un sistema multi-core (shared-memory) suelen ser &amp;quot;multi-threaded&amp;quot;. La programación de un job de este tipo requiere especificar el número de núcleos que se utilizan para acomodar los subprocesos.&lt;br /&gt;
&lt;br /&gt;
OpenMP es el conjunto común de variables de compilación para facilitar el desarrollo de programas multi-threaded. Un script típico de SLURM para un programa de este tipo se ve así:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #SBATCH -J OMPtest&lt;br /&gt;
 #SBATCH -p general&lt;br /&gt;
 #SBATCH -n 1&lt;br /&gt;
 #SBATCH -c 44&lt;br /&gt;
 #SBATCH --ntasks-per-node=44&lt;br /&gt;
 #SBATCH --mem-per-cpu=1024&lt;br /&gt;
 #SBATCH -o example_%j.out&lt;br /&gt;
 #SBATCH -e example_%j.err&lt;br /&gt;
 #SBATCH --mail-user=user@example.com&lt;br /&gt;
 #SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
 OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK time ./omp-program&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como debe comenzar un script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre del Job:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J OMPtest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la particion donde desea ejecutar el Job:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de trabajos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -c 44&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con esto se fuerza a que se agrupen las 44 tareas en un nodo (en OpenMP no hay comunicación entre nodos, por lo que todas las tareas deben estar en el mismo nodo o no funcionaría):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Memoria por core (MBytes):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=1024&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o example_%j.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e example_%j.err&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=user@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enviar correo en todos los casos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programa para ejecutar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK time ./omp-program &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cuando se utiliza un programa OpenMP, el número de subprocesos (y, por lo tanto, el número requerido de núcleos) se especifica a través de la variable de entorno OMP_NUM_THREADS que, por lo tanto, aparece en el script frente a la llamada al programa. Lo estamos configurando en la variable interna SLURM_CPUS_PER_TASK que se establece a través de la opción &amp;quot;-c&amp;quot; (a 44 en nuestro ejemplo, que sería el número total de cores de un nodo de la partición &amp;quot;general&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
La opción &amp;quot;-n&amp;quot; se mantiene en 1 para indicar un único trabajo principal que tiene 44 tareas. Para asegurarnos que todas las tareas se ejecutan en el mismo nodo, se añade la opción &amp;quot;--ntasks-per-node&amp;quot; con el máximo número de cores que tiene un nodo de la partición donde se está lanzando el trabajo.&lt;br /&gt;
&lt;br /&gt;
=== Ejecución de tareas en GPUs ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -J ejemplo_gpus&lt;br /&gt;
#SBATCH -p v100&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH -o ejemplo_%j.out&lt;br /&gt;
#SBATCH -e ejemplo_%j.err&lt;br /&gt;
#SBATCH --mail-user=correo@gmail.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mem-per-cpu=4300&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
&lt;br /&gt;
./programa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inicio de un bash script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J ejemplo_gpus&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la partición donde se ejecuta el trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=v100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o ejemplo_%j.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e ejemplo_%j.err&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=user@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enviar correo en todos los casos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Memoria por CPU (MB):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=4365&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cantidad utilizada de GPUs. El parámetro gpu:1 indica la cantidad de tarjetas a utilizar (cada nodo tiene 2 GPUs):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programa para ejecutar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./programa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Job Arrays ===&lt;br /&gt;
Cuando se ejecutan cientos o miles de simulaciones que utilizan la misma cantidad de recursos, puede ser una ventaja ejecutar estas simulaciones como un &amp;quot;job array&amp;quot;. Los job array le permiten enviar miles de dichos trabajos (llamados &amp;quot;job steps&amp;quot;) con un solo script. A cada simulación se le asignará un valor único para la variable de entorno SLURM_ARRAY_TASK_ID. Puede usar esta variable para leer parámetros para pasos individuales de una línea dada de un archivo.&lt;br /&gt;
&lt;br /&gt;
=== Caso de uso de un Script Job Array (Gaussian) ===&lt;br /&gt;
Tenemos usuarios que actualmente envían varias simulaciones al clúster que son similares en cuanto al uso de recursos, pero, la diferencia es que solo cambia la entrada que le entregan al programa. Para esta situación, recomendamos hacer uso de un script Job Array.&lt;br /&gt;
&lt;br /&gt;
En este ejemplo crearemos un script job array para el software Gaussian, el cual, realizará 63 simulaciones, cada una de estas utilizará 8 cores y podrá alcanzar un uso máximo de 8 Gb de memoria ram. Para este caso utilizaremos la partición general donde cada nodo tiene 46 Gb de memoria ram y 20 cores.&lt;br /&gt;
&lt;br /&gt;
Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J prueba&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH -c 8&lt;br /&gt;
#SBATCH --mem-per-cpu=1000&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --array=1-63&lt;br /&gt;
#SBATCH -o prueba_%A_%a.out&lt;br /&gt;
#SBATCH -e prueba_%A_%a.err&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
ml purge&lt;br /&gt;
ml intel/2019b&lt;br /&gt;
# ----------------Módulos-----------------------------&lt;br /&gt;
ml g16/B.01&lt;br /&gt;
# ----------------Comandos--------------------------&lt;br /&gt;
file=$(ls Child_10_*.com | sed -n ${SLURM_ARRAY_TASK_ID}p)&lt;br /&gt;
srun g16 $file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Descripción de comandos utilizados en script:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Inicio de un bash script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre de la simulación:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J prueba&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la partición donde se ejecuta la simulación:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas (1 tarea va a ejecutar 63 simulaciones):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Core’s por tareas (cada tarea utilizará un máximo 8 cores):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -c 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Memoria ram por cpu (cada tarea utilizará un máximo 8 Gb de ram):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH –mem-per-cpu=1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para activar el envío de notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Permitir envío de notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se generan 63 simulaciones diferentes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --array=1-63&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida: (ejemplo: prueba_18455017_1.out)&lt;br /&gt;
&lt;br /&gt;
* %A corresponde al Job ID de nuestra tarea que le asignará Slurm → 18455017.&lt;br /&gt;
* %a corresponde a la simulación X de nuestra tarea que le asignará Slurm → 1.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o prueba_%A_%a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de errores: (ejemplo: prueba_18455017_1.err)&lt;br /&gt;
&lt;br /&gt;
* %A corresponde al Job ID de nuestra tarea que le asignará Slurm → 18455017.&lt;br /&gt;
* %a corresponde a la simulación X de nuestra tarea que le asignará Slurm → 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e prueba_%A_%a.err&lt;br /&gt;
Toolchain: en este apartado, limpiaremos nuestro entorno de software no deseados y luego escogemos la herramienta informática con la cual está compilado el software Gaussian (nosotros utilizamos el compilador Intel/2019b).&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
ml purge&lt;br /&gt;
ml intel/2019b&lt;br /&gt;
Módulos: cargamos el software Gaussian versión 16/B.0.&lt;br /&gt;
&lt;br /&gt;
# ----------------Módulos-----------------------------&lt;br /&gt;
ml g16/B.01&lt;br /&gt;
Comandos: aquí definimos los comandos a ejecutar.&lt;br /&gt;
&lt;br /&gt;
# ----------------Comandos--------------------------&lt;br /&gt;
file=$(ls Child_10_*.com | sed -n ${SLURM_ARRAY_TASK_ID}p)&lt;br /&gt;
srun g16 $file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
file= variable que va a listar los archivos de entrada que comiencen por Child_10_ y terminen en .com&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Child.png|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sed -n ${SLURM_ARRAY_TASK_ID}p) ← Sed imprimirá las líneas de cada archivo de entrada y la variable $SLURM_ARRAY_TASK_ID asumirá estas entradas como matriz de simulación en nuestro job array, en este ejemplo tenemos 63 archivos de entrada.&lt;br /&gt;
&lt;br /&gt;
Para más detalles sobre los archivos stdin, stdout y stderr de una simulación % A será reemplazado por el valor de SLURM_ARRAY_JOB_ID que es el Job ID de nuestra tarea y %a será reemplazado por el valor de SLURM_ARRAY_TASK_ID que corresponde a la simulación X de nuestra tarea.&lt;br /&gt;
&lt;br /&gt;
Srun g16 $file: ejecutará el comando gaussian g16 interpretando la variable $file en los nodos de cómputo asignados.&lt;br /&gt;
&lt;br /&gt;
Enviar el script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ sbatch prueba.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución de una tarea que ocupa mucha RAM por CPU ===&lt;br /&gt;
Debemos tener en cuenta que la RAM que SLURM reserva por defecto son 1000 MB. Un típico error de cancelación de tarea por falta de memoria es el siguiente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/tmp/slurmd/job136839939/slurm_script: line 15: 23547 Killed                  ./programa.sh&lt;br /&gt;
slurmstepd: error: Detected 1 oom-kill event(s) in step 136839939.batch cgroup. Some of your processes &lt;br /&gt;
may have been killed by the cgroup out-of-memory handler.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si su tarea ocupa más de la memoria por defecto, puede utilizar el siguiente parámetro:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=2300 #Máxima RAM por CPU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Esto hará que SLURM reserve más RAM por CPU para sus tareas.&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que nuestros nodos tienen 46 GB de memoria RAM (Partición slims), 187 GB (Partición general) y 765 GB (Partición largemem) por nodo. [https://wiki.nlhpc.cl/Hardware_Disponible Más información].&lt;br /&gt;
&lt;br /&gt;
Otra forma de reservar memoria es utilizando el siguiente parámetro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem=2300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En este caso SLURM realizará una reserva de memoria de 2300 MB pero por la totalidad del trabajo.&lt;br /&gt;
&lt;br /&gt;
Los parámetros anteriores al igual que el número de CPUs que se van a usar, hay que afinarlos lo mejor posible. Para ello lo que se puede hacer es hacer pruebas en los nodos logins, sin lanzar en las colas, y así estudiar el uso de RAM y CPU por parte de sus procesos.&lt;br /&gt;
&lt;br /&gt;
=== Ejecución de una tarea con Dependencias ===&lt;br /&gt;
Las dependencias de trabajos se utilizan para aplazar el inicio de un trabajo hasta que se satisfagan las dependencias especificadas. Se especifican con la opción --dependency en el siguiente formato:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch --dependency=&amp;lt;type:job_id[:job_id][,type:job_id[:job_id]]&amp;gt; ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Los tipos de dependencias son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;after&#039;&#039;&#039;:jobid[:jobid...] - el trabajo puede empezar después de que los trabajos especificados comiencen&lt;br /&gt;
* &#039;&#039;&#039;afterany&#039;&#039;&#039;:jobid[:jobid...] - el trabajo puede empezar después de que los trabajos especificados terminen&lt;br /&gt;
* &#039;&#039;&#039;afternotok&#039;&#039;&#039;:jobid[:jobid...] - el trabajo puede empezar después que los trabajos especificados terminan fallidamente&lt;br /&gt;
* &#039;&#039;&#039;afterok&#039;&#039;&#039;:jobid[:jobid...] - el trabajo puede empezar después que los trabajos especificados terminan exitósamente&lt;br /&gt;
&lt;br /&gt;
La manera más simple de usar una dependencia del tipo afterok:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ sbatch job1.sh&lt;br /&gt;
Submitted batch job 21363626&lt;br /&gt;
[prueba@leftraru1 ~]$ sbatch --dependency=afterok:21363626 job2.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora cuando job1.sh termine correctamente, el job2.sh entrará en ejecución. Si job1.sh termina fallidamente, job2.sh no entrará en ejecución nunca pero sí quedará en cola (debe cancelarse manualmente el trabajo).&lt;br /&gt;
&lt;br /&gt;
==== Capturando el Job ID para facilitar la ejecución de varias tareas con dependencias ====&lt;br /&gt;
Es posible capturar en una variable el Job ID de cada tarea para poder lanzar varias tareas sin conocer el Job ID previamente.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si se desea lanzar 4 tareas que sean dependientes con la anterior, se comenzará lanzando la primera tarea y capturando en la variable &#039;&#039;&#039;$JOB1&#039;&#039;&#039;, el que será utilizado como dependencia en la tarea &#039;&#039;&#039;$JOB2&#039;&#039;&#039;, y así sucesivamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
JOB1=$(sbatch job_1.sbatch 2&amp;gt;&amp;amp;1 | awk &#039;{print $4}&#039;)&lt;br /&gt;
JOB2=$(sbatch --dependency=afterok:$JOB1 job_2.sbatch 2&amp;gt;&amp;amp;1 | awk &#039;{print $4}&#039;)&lt;br /&gt;
JOB3=$(sbatch --dependency=afterok:$JOB2 job_3.sbatch 2&amp;gt;&amp;amp;1 | awk &#039;{print $4}&#039;)&lt;br /&gt;
JOB4=$(sbatch --dependency=afterok:$JOB3 job_4.sbatch 2&amp;gt;&amp;amp;1 | awk &#039;{print $4}&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prioridad de tarea ==&lt;br /&gt;
Cómo ver la prioridad del trabajo. Los factores que determinan la prioridad del trabajo, incluyendo la fórmula y pesos.&lt;br /&gt;
&lt;br /&gt;
=== Factores que determinan prioridad de tarea ===&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 60%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Comando SLURM&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Descripción&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Edad&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;la cantidad de tiempo que el trabajo ha estado esperando en la cola.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Tamaño de la tarea&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;número de nodos solicitados por el trabajo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Partición&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;prioridad para una partición determinada.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prioridad Baja&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Mientras más tareas se ejecuten en el cluster, menor será la prioridad.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prioridad Alta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Mientras menos tareas se ejecuten en el clúster, más alta es la prioridad.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prioridad de tarea ==&lt;br /&gt;
Cómo ver la prioridad del trabajo. Los factores que determinan la prioridad del trabajo, incluyendo la fórmula y pesos.&lt;br /&gt;
&lt;br /&gt;
=== Factores que determinan prioridad de tarea ===&lt;br /&gt;
* Edad - la cantidad de tiempo que el trabajo ha estado esperando en la cola&lt;br /&gt;
* Tamaño Oficio - número de nodos solicitados por el trabajo&lt;br /&gt;
* Partición - prioridad para una partición determinada&lt;br /&gt;
* Contribución de prioridades basada en los recursos informáticos utilizados por los miembros de un grupo de investigación en los últimos 30 días - Fairshare.&lt;br /&gt;
* Mientras más tareas se ejecuten en el cluster, menor será la prioridad.&lt;br /&gt;
* Mientras menos tareas se ejecuten en el clúster, más alta es la prioridad.&lt;br /&gt;
Fórmula Prioridad de tarea&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Job_priority =&lt;br /&gt;
  (PriorityWeightAge) * (age_factor) +&lt;br /&gt;
  (PriorityWeightFairshare) * (fair-share_factor) +&lt;br /&gt;
  (PriorityWeightJobSize) * (job_size_factor) +&lt;br /&gt;
  (PriorityWeightPartition) * (partition_factor) +&lt;br /&gt;
  (PriorityWeightQOS) * (QOS_factor)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visualización de sus Tareas ==&lt;br /&gt;
Si Ud. necesita visualizar información acerca de sus tareas de forma interactiva, puede utilizar el comando smap:&lt;br /&gt;
&lt;br /&gt;
smap -i 3&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Smap.png|no|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De esta forma, tendrá una actualización cada 3 segundos de sus tareas en ejecución incluyendo los nodos en los cuales se encuentran ejecutándose.&lt;br /&gt;
&lt;br /&gt;
= Uso del parámetro &amp;lt;code&amp;gt;--time&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;) en SLURM =&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;--time&amp;lt;/code&amp;gt; (o &amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;) en SLURM permite especificar el &#039;&#039;&#039;tiempo máximo de ejecución&#039;&#039;&#039; para un trabajo. Su uso correcto mejora la eficiencia del scheduler y permite aplicar estrategias como &#039;&#039;backfilling&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Formato general ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--time=D-HH:MM:SS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: días (opcional)&lt;br /&gt;
* &#039;&#039;&#039;HH&#039;&#039;&#039;: horas (0–23)&lt;br /&gt;
* &#039;&#039;&#039;MM&#039;&#039;&#039;: minutos (0–59)&lt;br /&gt;
* &#039;&#039;&#039;SS&#039;&#039;&#039;: segundos (0–59)&lt;br /&gt;
&lt;br /&gt;
También puede usarse en formato corto con &amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ejemplos ==&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 1 hora ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=01:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -t 01:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 4 horas y 30 minutos ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=04:30:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 2 días ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=2-00:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 15 minutos ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=00:15:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 3 días, 5 horas y 45 segundos ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=3-05:00:45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejemplo en script &amp;lt;code&amp;gt;job.sh&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=mi_trabajo&lt;br /&gt;
#SBATCH --partition=general&lt;br /&gt;
#SBATCH --ntasks=8&lt;br /&gt;
#SBATCH --time=01:30:00   # 1 hora y 30 minutos&lt;br /&gt;
#SBATCH --mem=16G&lt;br /&gt;
&lt;br /&gt;
srun ./mi_simulacion&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recomendaciones ==&lt;br /&gt;
&lt;br /&gt;
* Estima lo mejor posible el tiempo necesario.&lt;br /&gt;
* No omitas &amp;lt;code&amp;gt;--time&amp;lt;/code&amp;gt;: si lo haces, SLURM asumirá un valor por defecto (como 5 días).&lt;br /&gt;
* Para pruebas cortas, usa tiempos pequeños (por ejemplo, 10 minutos) para permitir el uso eficiente del scheduler mediante &#039;&#039;backfilling&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
[https://slurm.schedmd.com/sbatch.html#OPT_time Documentación oficial de SLURM sobre el parámetro --time]&lt;br /&gt;
&lt;br /&gt;
== Bibliografía ==&lt;br /&gt;
[http://slurm.schedmd.com/documentation.html Manual Oficial de Slurm]&lt;br /&gt;
&lt;br /&gt;
[https://slurm.schedmd.com/scrontab.html Documentación scrontab]&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=SISTEMA_GESTOR_DE_RECURSOS&amp;diff=986</id>
		<title>SISTEMA GESTOR DE RECURSOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=SISTEMA_GESTOR_DE_RECURSOS&amp;diff=986"/>
		<updated>2025-06-26T21:54:35Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SLURM Workload Manager ==&lt;br /&gt;
Es un sistema de programación de trabajos y gestión de clústeres de código abierto, tolerante a fallas y altamente escalable para clústeres Linux grandes y pequeños.&lt;br /&gt;
&lt;br /&gt;
Como administrador de carga de trabajo de clúster, Slurm tiene tres funciones clave. Primero, asigna acceso exclusivo y / o no exclusivo a los recursos (nodos de cómputo) a los usuarios durante un período de tiempo para que puedan realizar el trabajo. En segundo lugar, proporciona un marco para iniciar, ejecutar y monitorear el trabajo (normalmente un trabajo paralelo) en el conjunto de nodos asignados. Finalmente, arbitra la contención de recursos mediante la gestión de una cola de trabajo pendiente.&lt;br /&gt;
&lt;br /&gt;
SLURM es el gestor de colas instalado en muchos de los súper computadores del [https://www.top500.org/ TOP500], y también en el clúster del NLHPC. Si Ud. quiere lanzar tareas dentro de Leftaru, debe hacerlo a través de Slurm.&lt;br /&gt;
&lt;br /&gt;
== Conceptos clave ==&lt;br /&gt;
SLURM gestiona trabajos de usuario que tienen las siguientes características clave:&lt;br /&gt;
&lt;br /&gt;
* Conjunto de recursos solicitados:&lt;br /&gt;
** Número de recursos informáticos: nodos (incluidas todas sus CPUs y núcleos) o CPUs (incluidos todos sus núcleos) o solo núcleos&lt;br /&gt;
** Cantidad de memoria: por nodo o por CPU (lógica)&lt;br /&gt;
** Tiempo necesario para que las tareas del usuario completen su trabajo&lt;br /&gt;
* Una partición de nodo solicitada (cola de trabajos)&lt;br /&gt;
* Un nivel de calidad de servicio (QoS) solicitado que otorga a los usuarios accesos específicos&lt;br /&gt;
* Una cuenta solicitada con recursos limitados&lt;br /&gt;
&lt;br /&gt;
De manera predeterminada, los usuarios envían trabajos a una partición particular (marcada como tal para todos los usuarios) y bajo una cuenta particular (preestablecida por usuario).&lt;br /&gt;
&lt;br /&gt;
== Particiones SLURM ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 60%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Nombre Particion&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Nodos&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;CPUs&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;RAM&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Descripción&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;main&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;27&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;256&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;768GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;general&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;48&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;44&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;187GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;largemem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;44&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;765GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;v100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;44&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;187GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;4 GPUs Nvidia Tesla V100.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mi100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;128&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;502GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2 GPUs AMD Instinct MI100.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mi210&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;24&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1457GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6 GPUs AMD Instinct MI210.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;debug&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;48&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;768GB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Destinados a pruebas de máximo 30 minutos.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introducción a los comandos slurm ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 60%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Comando SLURM&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Descripción&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;srun&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ejecutar un comando en nodos de cómputo asignados.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;sbatch&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;presentar un script de trabajo&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;squeue&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Mostrar estado de los trabajos en la cola.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;scancel&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;eliminar un trabajo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;sinfo&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Muestra el estado de los nodos de cómputo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
Estos son los comandos básicos utilizados para realizar la mayoría de las operaciones básicas con SLURM.&lt;br /&gt;
&lt;br /&gt;
=== Estado de nodos ===&lt;br /&gt;
Para consultar el uso de nuestra infraestructura y qué particiones están más libres, le recomendamos el comando sinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;# sinfo&amp;lt;small&amp;gt;&lt;br /&gt;
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST&lt;br /&gt;
main*        up   infinite      1  idle mn[016,018]&lt;br /&gt;
main*        up   infinite     21    mix mn[001-003,005,007-011,013,015,017,019-027]&lt;br /&gt;
main*        up   infinite      4  alloc mn[004,006,012,014]&lt;br /&gt;
general      up   infinite      1  drain sn041&lt;br /&gt;
general      up   infinite     16    mix sn[005-007,012-015,019-021,030-031,043-048]&lt;br /&gt;
general      up   infinite     31  alloc sn[001-004,008-011,016-018,022-029,032-040]&lt;br /&gt;
largemem     up   infinite      1    mix fn006&lt;br /&gt;
largemem     up   infinite      8  alloc fn[001-005,007-009]&lt;br /&gt;
debug        up   infinite      2   idle leftraru[1-2]&lt;br /&gt;
v100         up   infinite      2    mix gn[001-002]&lt;br /&gt;
mi100        up   infinite      1   idle gn003&lt;br /&gt;
mi210        up   infinite      1    mix gn004&lt;br /&gt;
mi210        up   infinite      1   idle gn005&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fijándose en el texto resaltado de la salida del comando sinfo, se puede comprobar que en la partición main hay 20 nodos que están completamente ocupados (estado alloc), 7 nodos que están libres (idle); por otro lado, en la partición general hay 22 nodos completamente ocupados, 4 parcialmente ocupados y 22 libres. Dado este escenario, está claro que debería de lanzar sus ejecuciones en los nodos de la partición general, por las razones anteriormente expuestas.&lt;br /&gt;
&lt;br /&gt;
Para lanzar en la partición general, debe tener en cuenta que tiene que indicar en su script que se use dicha partición en vez de, probablemente, main. Por supuesto, en esta partición cambian las características técnicas, se pasan a tener 44 cores por nodo (en vez de 256 en main) y una capacidad RAM de 187GB (en vez de 768GB en main). Puede ver más información de las particiones en este link(agregar link), donde podrá revisar que con la inclusión de Guacolda hemos añadido nodos con hasta 765GB de memoria RAM y nodos con GPUs Nvidia Tesla V100 y AMD Instinct MI100 .&lt;br /&gt;
&lt;br /&gt;
Para ver los nodos disponibles y poder determinar en que partición lanzar los trabajos se recomienda utilizar el siguiente comando.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[prueba@leftraru1 ~]$ sinfo -o &amp;quot;%10P %6D %10t %10m %c&amp;quot; -t idle| egrep &amp;quot;PARTITION|main|general|largemem|v100|mi100|mi210&amp;quot;&lt;br /&gt;
PARTITION  NODES  STATE      MEMORY     CPUS&lt;br /&gt;
PARTITION  NODES  STATE      MEMORY     CPUS&lt;br /&gt;
main*      2      idle       727000     256&lt;br /&gt;
general    0      n/a        0          0&lt;br /&gt;
largemem   0      n/a        0          0&lt;br /&gt;
v100       0      n/a        0          0&lt;br /&gt;
mi100      1      idle       485000     128&lt;br /&gt;
mi210      1      idle       1457000    48&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
El comando anterior muestra que main tiene 27 nodos libres, en este caso es recomendado lanzar en en main para evitar que el trabajo quede en cola por falta de recursos en otros nodos.&lt;br /&gt;
&lt;br /&gt;
Otro Ejemplo, se muestra sólo una partición específica&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[prueba@leftraru1 ~]$ sinfo -p main&lt;br /&gt;
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST&lt;br /&gt;
main*        up   infinite     15    mix mn[001-008,014-020]&lt;br /&gt;
main*        up   infinite     12   idle mn[009-013,021-027]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comprobación del estado de tareas ===&lt;br /&gt;
squeue - Muestra el estatus de los trabajos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;squeue                  # tus trabajos&lt;br /&gt;
squeue -u &amp;amp;lt;username&amp;amp;gt;    # trabajos por usuario &amp;amp;lt;username&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
squeue: Comprobar estados de los trabajos&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;&amp;quot; class=&amp;quot;mw-highlight mw-content-ltr&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  JOBID        PARTITION     NAME     USER    ST       TIME  	NODES 	NODELIST(REASON)&lt;br /&gt;
13951858_1     general	     test1    test1    R   1-18:35:14      2    cn[009-010]&lt;br /&gt;
13951857_2     general       test2    test1    R   1-18:36:11      2    cn[099-100]&lt;br /&gt;
13956453       gpu           test3    test3    R   1-03:42:08      1    cn039&lt;br /&gt;
13956449       largemem      test4    test4    R   1-05:42:08      1    cn044&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puede utilizar squeue para saber el estado de una o varias de sus tareas&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ squeue -o &amp;quot;%.15i %.6P %.8j %.20S %.11M %.11L %.20V %.10Q %.4C %.2D %.6m&amp;quot; -S -t,-Q&lt;br /&gt;
 JOBID   PARTIT     NAME      START_TIME          TIME      TIME_LEFT     SUBMIT_TIME       PRIORITY CPUS NO MIN_ME&lt;br /&gt;
10837561 general   TEST1   2018-06-18T18:51:01    19:00:31  2-04:59:29  2018-06-18T18:51:01  119972    1  1  1000M&lt;br /&gt;
10838562 general   TEST2   2018-06-19T11:30:47    2:20:45   2-21:39:15  2018-06-19T11:30:46  119946    1  1  1000M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
para mas opciones puede revisar con el comando [https://slurm.schedmd.com/squeue.html man squeue] las opciones restantes.&lt;br /&gt;
&lt;br /&gt;
=== Códigos de ESTADO de los trabajos ===&lt;br /&gt;
&lt;br /&gt;
Los trabajos suelen pasar por varios estados durante su ejecución. Los estados típicos son PENDIENTE, EN EJECUCIÓN, SUSPENDIDO, FINALIZANDO y TERMINADO. A continuación se explica cada estado.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BF&#039;&#039;&#039; BOOT_FAIL&lt;br /&gt;
    Trabajo finalizado debido a un fallo de arranque, normalmente debido a un fallo de hardware (por ejemplo, no se puede arrancar el nodo o bloque y el trabajo no se puede volver a poner en cola). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CA&#039;&#039;&#039; CANCELADO&lt;br /&gt;
    El trabajo ha sido cancelado explícitamente por el usuario o el administrador del sistema. El trabajo puede haberse iniciado o no. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CD&#039;&#039;&#039; TERMINADO&lt;br /&gt;
    El trabajo ha terminado todos los procesos en todos los nodos con un código de salida de cero. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CF&#039;&#039;&#039; CONFIGURANDO&lt;br /&gt;
    Al trabajo se le han asignado recursos, pero están esperando a que estén listos para su uso (por ejemplo, arrancando). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CG&#039;&#039;&#039; COMPLETANDO&lt;br /&gt;
    El trabajo está en proceso de finalización. Algunos procesos en algunos nodos pueden estar aún activos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DL&#039;&#039;&#039; FECHA LÍMITE&lt;br /&gt;
    El trabajo ha finalizado en la fecha límite. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;F&#039;&#039;&#039; FALLÓ&lt;br /&gt;
    Trabajo finalizado con un código de salida distinto de cero u otra condición de fallo. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NF&#039;&#039;&#039; NODO_FAIL&lt;br /&gt;
    Trabajo finalizado debido al fallo de uno o más nodos asignados. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OOM&#039;&#039;&#039; OUT_OF_MEMORY&lt;br /&gt;
    El trabajo ha experimentado un error de memoria insuficiente. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PD&#039;&#039;&#039; PENDIENTE&lt;br /&gt;
    El trabajo está pendiente de asignación de recursos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PR&#039;&#039;&#039; PREEMPTED&lt;br /&gt;
    El trabajo ha finalizado debido a una espera. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R&#039;&#039;&#039; EN MARCHA&lt;br /&gt;
    El trabajo tiene actualmente una asignación. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RD&#039;&#039;&#039; RESV_DEL_HOLD&lt;br /&gt;
    El trabajo se está reteniendo después de que se eliminara la reserva solicitada. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RF&#039;&#039;&#039; REQUEUE_FED&lt;br /&gt;
    El trabajo está siendo solicitado por una federación. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RH&#039;&#039;&#039; REQUEUE_HOLD&lt;br /&gt;
    Se está volviendo a poner en cola un trabajo retenido. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RQ&#039;&#039;&#039; REQUEUED&lt;br /&gt;
    Se está poniendo en cola un trabajo que se está completando. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RS&#039;&#039;&#039; CAMBIO DE TAMAÑO&lt;br /&gt;
    El trabajo está a punto de cambiar de tamaño. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RV&#039;&#039;&#039; REVOCADO&lt;br /&gt;
    El trabajo se ha retirado del clúster debido a que otro clúster ha iniciado el trabajo. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SI&#039;&#039;&#039; SEÑALANDO&lt;br /&gt;
    El trabajo está siendo señalizado. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SE&#039;&#039;&#039; SPECIAL_EXIT&lt;br /&gt;
    El trabajo se ha puesto en cola en un estado especial. Este estado puede ser establecido por los usuarios, normalmente en EpilogSlurmctld, si el trabajo ha terminado con un valor de salida particular. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SO&#039;&#039;&#039; STAGE_OUT&lt;br /&gt;
    El trabajo está preparando los archivos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ST&#039;&#039;&#039; PARADO&lt;br /&gt;
    El trabajo tiene una asignación, pero la ejecución se ha detenido con la señal SIGSTOP. Los CPUS han sido retenidos por este trabajo. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039; SUSPENDIDO&lt;br /&gt;
    El trabajo tiene una asignación, pero se ha suspendido la ejecución y se han liberado CPUs para otros trabajos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TO&#039;&#039;&#039; TIMEOUT&lt;br /&gt;
    El trabajo ha finalizado al alcanzar su límite de tiempo.&lt;br /&gt;
&lt;br /&gt;
=== Cancelar un trabajo ===&lt;br /&gt;
Con scancel se puede cancelar un trabajo en ejecución&lt;br /&gt;
&amp;lt;pre&amp;gt;scancel &amp;amp;lt;jobID&amp;amp;gt;         # Matar proceso &amp;amp;lt;jobID&amp;amp;gt;. (puede obtener el ID del job con &amp;quot;squeue&amp;quot;)&lt;br /&gt;
scancel -u &amp;amp;lt;username&amp;amp;gt;   # Matar proceso por usuario &amp;amp;lt;username&amp;amp;gt;. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;[prueba@leftraru1 ~]$ squeue -u prueba&lt;br /&gt;
 JOBID  PARTITION    NAME     USER    ST   TIME  NODES  NODELIST(REASON)&lt;br /&gt;
 45594    main       TEST    prueba   R    0:59   3     mn[001-003]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;[prueba@leftraru1 ~]$ scancel 45594&lt;br /&gt;
[prueba@leftraru1 ~]$ squeue -u prueba&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
[prueba@leftraru1 ~]$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ver estado de trabajos ===&lt;br /&gt;
Para revisar el detalle de las opciones de un trabajo: scontrol show job&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol show job 10837561&lt;br /&gt;
JobId=10837561 JobName=TEST1&lt;br /&gt;
   UserId=usuario(1000) GroupId=group(1000) MCS_label=N/A&lt;br /&gt;
   Priority=1100 Nice=0 Account=account QOS=120&lt;br /&gt;
   JobState=RUNNING Reason=None Dependency=(null)&lt;br /&gt;
   Requeue=0 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0&lt;br /&gt;
   DerivedExitCode=0:0&lt;br /&gt;
   RunTime=19:03:08 TimeLimit=3-00:00:00 TimeMin=N/A&lt;br /&gt;
   SubmitTime=2018-06-18T18:51:01 EligibleTime=2018-06-18T18:51:01&lt;br /&gt;
   StartTime=2018-06-18T18:51:01 EndTime=2018-06-21T18:51:01 Deadline=N/A&lt;br /&gt;
   PreemptTime=None SuspendTime=None SecsPreSuspend=0&lt;br /&gt;
   Partition=main AllocNode:Sid=leftraru2:5471&lt;br /&gt;
   ReqNodeList=(null) ExcNodeList=(null)&lt;br /&gt;
   NodeList=cn021&lt;br /&gt;
   BatchHost=cn021&lt;br /&gt;
   NumNodes=1 NumCPUs=1 NumTasks=1 CPUs/Task=1 ReqB:S:C:T=0:0:*:*&lt;br /&gt;
   TRES=cpu=1,mem=1000M,node=1&lt;br /&gt;
   Socks/Node=* NtasksPerN:B:S:C=1:0:*:* CoreSpec=*&lt;br /&gt;
     Nodes=cn021 CPU_IDs=1 Mem=1000 GRES_IDX=&lt;br /&gt;
   MinCPUsNode=1 MinMemoryCPU=1000M MinTmpDiskNode=0&lt;br /&gt;
   Features=(null) DelayBoot=00:00:00&lt;br /&gt;
   Gres=(null) Reservation=(null)&lt;br /&gt;
   OverSubscribe=OK Contiguous=0 Licenses=matlab Network=(null)&lt;br /&gt;
   Command=/home/usuario/script.sh&lt;br /&gt;
   WorkDir=/home/usuario/&lt;br /&gt;
   StdErr=/home/usuario/10837561_%x.err&lt;br /&gt;
   StdIn=/dev/null&lt;br /&gt;
   StdOut=/home/usuario/10837561_%x.out&lt;br /&gt;
   Power=&lt;br /&gt;
   BatchScript=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para ver el script asociado a un trabajo: scontrol write batch_script &amp;lt;job_id&amp;gt; -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ scontrol write batch_script 10837561 -&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -J nombre_del_trabajo&lt;br /&gt;
#SBATCH -p main&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --mail-user=usaurio@correo.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o nombre_del_trabajo%j_%x.out&lt;br /&gt;
#SBATCH -e nombre_del_trabajo%j_%x.err&lt;br /&gt;
#SBATCH --license=matlab &lt;br /&gt;
 &lt;br /&gt;
ml MATLAB/2017a&lt;br /&gt;
&lt;br /&gt;
matlab -nodisplay -nosplash -nodesktop &amp;lt; programa.m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejecutando trabajos ==&lt;br /&gt;
Actualmente contamos con 2 metodos de enviar trabajos bajo SLURM: &#039;&#039;&#039;sbatch&#039;&#039;&#039; and &#039;&#039;&#039;srun&#039;&#039;&#039;. A veces puede ser ventajoso ejecutar un solo comando en el clúster como prueba o realizar rápidamente una operación con recursos adicionales. &#039;srun&#039; permite a los usuarios hacer esto, y comparte las mismas variables que &#039;sbatch&#039; . STDOUT y STDERR para un trabajo &#039;srun&#039; serán redirigidos a la pantalla del usuario. Ctrl-C cancelará un trabajo srun. &#039;&#039;&#039;sbatch&#039;&#039;&#039; enviará un script de trabajo para que lo ejecute el clúster. Los scripts de trabajo bajo SLURM son simplemente scripts de shell (* .sh) con un conjunto de solicitudes de recursos en la parte superior del script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Uso básico de srun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun &amp;lt;algúnComando&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ejemplo de salida (ejecutando el comando &amp;quot;hostname&amp;quot; para saber en que nodo se está ejecutando):&lt;br /&gt;
&amp;lt;pre&amp;gt; $ srun hostname&lt;br /&gt;
  cn003&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para enviar un script de trabajo a SLURM:&lt;br /&gt;
&amp;lt;pre&amp;gt;sbatch nombreScript.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example output:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbatch test-job.sh&lt;br /&gt;
Submitted batch job 1169&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables Slurm ===&lt;br /&gt;
Las variables en esta sección son obligatorias, y SLURM las determina para determinar dónde y cuándo se ejecutarán sus trabajos. Si no asigna un valor para estos, el planificador asignará a sus trabajos el valor predeterminado. Si no solicita específicamente recursos para un trabajo, se le asignará un conjunto de recursos predeterminados. Para obtener una lista de todas las variables disponibles, consulte la documentación de SLURM en http://slurm.schedmd.com/sbatch.html. Las variables de este artículo estaban cubiertas porque eran las más relevantes para los casos de uso típicos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Comando SLURM&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Descripción&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;--mem-per-cpu=&amp;amp;lt;megabytes&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Memoria requerida para el trabajo por CPU (en MegaBytes). El valor predeterminado es 1024 MB.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-p &amp;amp;lt;partition&amp;amp;gt;, --partition=&amp;amp;lt;partition&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enviar un trabajo a una partición específica.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-n, --ntasks=&amp;amp;lt;cantidad de tareas&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Número de tareas que serán asignadas para el trabajo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-c &amp;amp;lt;cpus&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Esta es la cantidad de CPU que necesita su trabajo. Tenga en cuenta que SLURM es relativamente generoso con las CPU, y el valor especificado aquí es el número &amp;quot;mínimo&amp;quot; de CPU que se asignará a su trabajo. Si hay CPU adicionales disponibles en un nodo más allá de lo solicitado, su trabajo recibirá esas CPU hasta que otros trabajos las necesiten. El valor predeterminado es 1 CPU. Intentar usar más CPU de las que se le asignaron dará como resultado que sus procesos adicionales se turnen en la misma CPU (ralentizando su trabajo).&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-J &amp;amp;lt;name&amp;amp;gt;, --jobname=&amp;amp;lt;name&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Especifica un nombre a tu trabajo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;--mail-type=BEGIN,END,FAIL,ALL&amp;lt;b&amp;gt; and &amp;lt;/b&amp;gt;--mail-user=&amp;amp;lt;emailAddress&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enviar por correo electrónico cuando su trabajo comienza / termina / falla. Puede especificar varios valores para esto (separados por comas) si es necesario.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-o &amp;amp;lt;STDOUT_log&amp;amp;gt;, --output=&amp;amp;lt;STDOUT_log&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Redirija la salida a los archivos de registro que especifique. Por defecto, ambos, STDOUT and STDERR son enviados a este archivo. Puedes especificar %j como parte del nombre de archivo de registro para indicar la ID del trabajo (como ejemplo, &amp;quot;#SBATCH -o ouptut_%j.o&amp;quot; redirigiría la salida a &amp;quot;output_123456.o&amp;quot;).&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-e &amp;amp;lt;STDERR_log&amp;amp;gt;, --error=&amp;amp;lt;STDERR_log&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Redireccionar STDERR a un archivo separado. Funciona exactamente igual que &amp;quot;-o&amp;quot;.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-t &amp;amp;lt;days-hours:minutes:seconds&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Walltime para tu trabajo. La duración del Walltime es el tiempo que espera que su trabajo se ejecute.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-a, --array=&amp;amp;lt;índices&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Envía una lista (arreglo) de trabajos identicos. Solo aplica para sbatch.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los scripts de trabajo especifican los recursos solicitados y otras consideraciones especiales con comentarios especiales &amp;quot;#SBATCH&amp;quot; en la parte superior de un script de trabajo. Aunque muchas de estas opciones son opcionales, las varibles que se ocupan de solicitudes de recursos (CPU, memoria y tiempo) son obligatorias. Todas las variables deben agregarse a sus scripts de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#SBATCH &amp;lt;variable&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Para especificar un nombre al job, por ejemplo, debe agregar lo siguiente a su secuencia de comandos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#SBATCH --job-name=nombreDeTrabajo&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Enviar un script===&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #SBATCH -J example&lt;br /&gt;
 #SBATCH -p general&lt;br /&gt;
 #SBATCH -n 1&lt;br /&gt;
 #SBATCH --output=example_%j.out&lt;br /&gt;
 #SBATCH --error=example_%j.err&lt;br /&gt;
 #SBATCH --mail-user=user@example.com&lt;br /&gt;
 #SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como debe comenzar un script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J example&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la partición donde desea ejecutar el Job:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o example_%j.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e example_%j.err&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=user@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enviar correo en todos casos (verificar opciones arriba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programar tarea (uso de scrontab) ===&lt;br /&gt;
&#039;&#039;&#039;scrontab&#039;&#039;&#039; es una implementación del clásico planificador de tareas de linux &#039;&#039;&#039;crontab&#039;&#039;&#039; donde se guarda un listado de comandos a ejecutar en un tiempo determinado por el usuario.&lt;br /&gt;
&lt;br /&gt;
Para acceder a scrontab utilice el siguiente comando:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ scrontab -e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto le permitirá editar su archivo scrontab, asignando recursos como también el momento en que desea ejecutar su tarea. La estructura base a utilizar es la siguiente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SCRON -J mi_tarea&lt;br /&gt;
#SCRON -p main&lt;br /&gt;
#SCRON -n 1&lt;br /&gt;
#SCRON -c 1&lt;br /&gt;
#SCRON --mem-per-cpu=2300&lt;br /&gt;
#SCRON --mail-user=foo@bar.com&lt;br /&gt;
#SCRON --mail-type=ALL&lt;br /&gt;
#SCRON -o mi_tarea_%j.out&lt;br /&gt;
#SCRON -e mi_tarea_%j.err&lt;br /&gt;
# Example of job definition:&lt;br /&gt;
# .---------------- minute (0 - 59)&lt;br /&gt;
# |  .------------- hour (0 - 23)&lt;br /&gt;
# |  |  .---------- day of month (1 - 31)&lt;br /&gt;
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...&lt;br /&gt;
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat&lt;br /&gt;
# |  |  |  |  |&lt;br /&gt;
# *  *  *  *  *     command to be executed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;minute&#039;&#039;&#039; - Corresponde al minuto en que se va a ejecutar el script, valor de 0 a 59.&lt;br /&gt;
* &#039;&#039;&#039;hour&#039;&#039;&#039; - Hora de ejecución, formato 24 horas, valor de 0 a 23, donde 0 son las 12:00 AM.&lt;br /&gt;
* &#039;&#039;&#039;day of month&#039;&#039;&#039; - Día del mes, la tarea se puede ejecutar cada x día, valor de 1 a 31.&lt;br /&gt;
* &#039;&#039;&#039;month&#039;&#039;&#039; - La tarea se puede ejecutar cada x mes, valor de 1 a 12.&lt;br /&gt;
* &#039;&#039;&#039;day of week&#039;&#039;&#039; - Día de la semana, valor de 0 a 6, donde 0 es Domingo.&lt;br /&gt;
* &#039;&#039;&#039;command to be executed&#039;&#039;&#039; - Script a ejecutar por el usuario.&lt;br /&gt;
 &lt;br /&gt;
Ejemplo envío de trabajo slurm:&lt;br /&gt;
&lt;br /&gt;
Para la asignación de recursos, utilizaremos la directriz &#039;&#039;&#039;#SCRON&#039;&#039;&#039;, que utiliza los mismos parámetros usados por &#039;&#039;&#039;#SBATCH&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Luego de asignar los recursos debemos especificar el tiempo, en este caso la tarea será ejecutada todos los días cada 20 minutos, luego debemos indicar el script enviado por el usuario y guardamos los cambios en el archivo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*/20 * * * * /home/prueba/ejemplo/script.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es importante destacar que el script a lanzar &#039;&#039;&#039;/home/prueba/ejemplo/script.sh&#039;&#039;&#039; debe tener permisos de ejecución.&lt;br /&gt;
&lt;br /&gt;
Para revisar el listado de tareas existentes en nuestro scrontab, ejecutamos el comando:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ scrontab -l&lt;br /&gt;
*/20 * * * * /home/prueba/ejemplo/script.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para borrar el contenido de nuestro scrontab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ scrontab -r&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Información a considerar:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Generar archivos de salida correctamente&lt;br /&gt;
** Para que el archivo error y out de tu script se generen en el directorio solicitado, ejemplo, /home/prueba/ejemplo/ en tu script debe estar presente el comando cd “/home/prueba/ejemplo”, esto hará que scrontab se posicione dentro del directorio de salida.&lt;br /&gt;
* Es distinto el tiempo de programar el envío de una tarea (scrontab) a que una tarea inicie en el clúster (running), ya que esto dependerá de los recursos libres que existan en ese momento en el clúster.&lt;br /&gt;
* Para revisar las tareas programadas debe ejecutar en cualquier nodo login el comando &#039;&#039;&#039;scrontab -l&#039;&#039;&#039; o revisar con el comando &#039;&#039;&#039;squeue&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ squeue&lt;br /&gt;
24293471     main /home/eg  prueba PD       0:00      1 (BeginTime)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Checkpointing ==&lt;br /&gt;
Es la acción de guardar el estado de un proceso en ejecución en un archivo de imagen de punto de control. Este proceso se puede reiniciar más tarde desde el archivo del punto de control, continuando la ejecución desde donde se detuvo, en la misma computadora o en una diferente.&lt;br /&gt;
&lt;br /&gt;
=== ¿Por qué utilizarlo? ===&lt;br /&gt;
* Permite ejecuciones de tarea largas que superen el tiempo de ejecución permitido en el cluster (30 días)&lt;br /&gt;
* Estar preparados ante fallas del sistema que nos puedan hacer perder resultados de nuestras simulaciones&lt;br /&gt;
&lt;br /&gt;
=== Utilización ===&lt;br /&gt;
Lo primero que debemos hacer en nuestro script es cargar el módulo de Mana:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ml mana/3.0.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Este módulo provee 3 ejecutables que necesitaremos:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mana_coordinator:&#039;&#039;&#039; Coordina los checkpoints entre los distintos procesos&lt;br /&gt;
* &#039;&#039;&#039;mana_launch:&#039;&#039;&#039; Inicia un proceso con checkpoint&lt;br /&gt;
* &#039;&#039;&#039;mana_restart:&#039;&#039;&#039; Reinicia la ejecución desde una imagen del checkpoint&lt;br /&gt;
&lt;br /&gt;
Necesitaremos 2 scripts para trabajar con checkpoints: Inicio y reinicio&lt;br /&gt;
&lt;br /&gt;
=== Script de inicio (inicio.sh) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
##---------------SLURM Parameters - NLHPC ----------------&lt;br /&gt;
#SBATCH -J Testcheckpoint&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4363&lt;br /&gt;
#SBATCH --mail-user=test@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o Testcheckpoint_%j.out&lt;br /&gt;
#SBATCH -e Testcheckpoint_%j.err&lt;br /&gt;
&lt;br /&gt;
# ----------------Modules----------------------------&lt;br /&gt;
ml mana/3.0.0&lt;br /&gt;
# ----------------Command--------------------------&lt;br /&gt;
#Checkpointing cada 1 hora&lt;br /&gt;
mana_cooridinator -i3600&lt;br /&gt;
#Ejecutamos nuestra tarea con checkpointing&lt;br /&gt;
srun mana_launch ./ejecutable&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Script de reinicio (reinicio.sh) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
##---------------SLURM Parameters - NLHPC ----------------&lt;br /&gt;
#SBATCH -J Testcheckpoint&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4363&lt;br /&gt;
#SBATCH --mail-user=test@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o Testcheckpoint_%j.out&lt;br /&gt;
#SBATCH -e Testcheckpoint_%j.err&lt;br /&gt;
&lt;br /&gt;
# ----------------Modules----------------------------&lt;br /&gt;
ml mana/3.0.0&lt;br /&gt;
# ----------------Command--------------------------&lt;br /&gt;
#Checkpointing cada 1 hora&lt;br /&gt;
mana_cooridinator -i3600&lt;br /&gt;
#Reiniciar nuestra tarea desde los archivos de checkpoint&lt;br /&gt;
srun mana_restart&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para correr estos scripts se puede hacer utilizando la funcionalidad de dependencias de SLURM:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[test@leftraru2 test]$ sbatch inicio.sh&lt;br /&gt;
Submitted batch job 23574685&lt;br /&gt;
[test@leftraru2 test]$ sbatch --dependency=afterok:23574685 reinicio.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Trabajos ==&lt;br /&gt;
=== Trabajos paralelos ===&lt;br /&gt;
Muchos de los trabajos que se ejecutan en un clúster de producción implicarán más de un procesador (CPU, núcleo). Dichos trabajos paralelos deben solicitar la cantidad de recursos necesarios a través de opciones adicionales. Los más comunes son:&lt;br /&gt;
&lt;br /&gt;
Para diferentes tipos de trabajos paralelos, se especificarán diferentes opciones. Los trabajos paralelos más comunes son trabajos de MPI (memoria distribuida), trabajos de subprocesos múltiples (memoria compartida) y los llamados híbridos que son una combinación de los dos. Analicemos por separado con un n ejemplo para cada uno.&lt;br /&gt;
&lt;br /&gt;
=== Ejecución de programas con MPI ===&lt;br /&gt;
MPI (interfaz de paso de mensajes) es la API de comunicación estándar para trabajos paralelos de memoria distribuida capaz de implementarse en un clúster. Para programar dicho trabajo, es necesario especificar la cantidad de nodos del clúster que se utilizarán y la cantidad de procesos (tareas) que se ejecutarán en cada nodo.&lt;br /&gt;
&lt;br /&gt;
El siguiente es un ejemplo de ejecución de un programa compilado con Open MPI:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #SBATCH -J example_mpi&lt;br /&gt;
 #SBATCH -p general&lt;br /&gt;
 #SBATCH -n 264&lt;br /&gt;
 #SBATCH --ntasks-per-node=44&lt;br /&gt;
 #SBATCH --output=example_%j.out&lt;br /&gt;
 #SBATCH --error=example_%j.err&lt;br /&gt;
 #SBATCH --mail-user=user@example.com&lt;br /&gt;
 #SBATCH --mail-type=ALL&lt;br /&gt;
 &lt;br /&gt;
 srun ./mpi_test&lt;br /&gt;
A continuacion se explica línea por líneael script.&lt;br /&gt;
&lt;br /&gt;
Como empieza un shell script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre del Job:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J example_mpi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la particion donde se desea ejecutar el trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas. Debe de ser un número múltiplo del número de CPUs máximo que tenga un node de la partición donde se lanza:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 264&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con esto se fuerza a que se lancen 44 tareas MPI en cada uno de los nodos, ocupando de este modo nodos completos. En este caso 6 nodos completos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o example_%j.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e example_%j.err&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=user@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Envía correo en todos los casos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programa para ejecutar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun ./mpi_test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nota&#039;&#039;&#039;: no se carga específicamente el módulo &amp;quot;mpi&amp;quot; ya que se carga siempre por defecto.&lt;br /&gt;
&lt;br /&gt;
Para enviarlo al clúster debe ejecutar el comando: &#039;&#039;sbatch script.sh&#039;&#039;. El ejemplo anterior ejecutará una tarea OpenMPI con 264 procesos reservando 264 cores para ello.&lt;br /&gt;
&lt;br /&gt;
=== Trabajos multiproceso OpenMP ===&lt;br /&gt;
Los trabajos paralelos diseñados para ejecutarse en un sistema multi-core (shared-memory) suelen ser &amp;quot;multi-threaded&amp;quot;. La programación de un job de este tipo requiere especificar el número de núcleos que se utilizan para acomodar los subprocesos.&lt;br /&gt;
&lt;br /&gt;
OpenMP es el conjunto común de variables de compilación para facilitar el desarrollo de programas multi-threaded. Un script típico de SLURM para un programa de este tipo se ve así:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #SBATCH -J OMPtest&lt;br /&gt;
 #SBATCH -p general&lt;br /&gt;
 #SBATCH -n 1&lt;br /&gt;
 #SBATCH -c 44&lt;br /&gt;
 #SBATCH --ntasks-per-node=44&lt;br /&gt;
 #SBATCH --mem-per-cpu=1024&lt;br /&gt;
 #SBATCH -o example_%j.out&lt;br /&gt;
 #SBATCH -e example_%j.err&lt;br /&gt;
 #SBATCH --mail-user=user@example.com&lt;br /&gt;
 #SBATCH --mail-type=ALL&lt;br /&gt;
&lt;br /&gt;
 OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK time ./omp-program&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como debe comenzar un script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre del Job:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J OMPtest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la particion donde desea ejecutar el Job:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de trabajos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -c 44&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Con esto se fuerza a que se agrupen las 44 tareas en un nodo (en OpenMP no hay comunicación entre nodos, por lo que todas las tareas deben estar en el mismo nodo o no funcionaría):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Memoria por core (MBytes):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=1024&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o example_%j.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e example_%j.err&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=user@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enviar correo en todos los casos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programa para ejecutar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK time ./omp-program &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cuando se utiliza un programa OpenMP, el número de subprocesos (y, por lo tanto, el número requerido de núcleos) se especifica a través de la variable de entorno OMP_NUM_THREADS que, por lo tanto, aparece en el script frente a la llamada al programa. Lo estamos configurando en la variable interna SLURM_CPUS_PER_TASK que se establece a través de la opción &amp;quot;-c&amp;quot; (a 44 en nuestro ejemplo, que sería el número total de cores de un nodo de la partición &amp;quot;general&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
La opción &amp;quot;-n&amp;quot; se mantiene en 1 para indicar un único trabajo principal que tiene 44 tareas. Para asegurarnos que todas las tareas se ejecutan en el mismo nodo, se añade la opción &amp;quot;--ntasks-per-node&amp;quot; con el máximo número de cores que tiene un nodo de la partición donde se está lanzando el trabajo.&lt;br /&gt;
&lt;br /&gt;
=== Ejecución de tareas en GPUs ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -J ejemplo_gpus&lt;br /&gt;
#SBATCH -p v100&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH -o ejemplo_%j.out&lt;br /&gt;
#SBATCH -e ejemplo_%j.err&lt;br /&gt;
#SBATCH --mail-user=correo@gmail.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mem-per-cpu=4300&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
&lt;br /&gt;
./programa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inicio de un bash script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J ejemplo_gpus&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la partición donde se ejecuta el trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=v100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o ejemplo_%j.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e ejemplo_%j.err&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=user@example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enviar correo en todos los casos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Memoria por CPU (MB):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=4365&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cantidad utilizada de GPUs. El parámetro gpu:1 indica la cantidad de tarjetas a utilizar (cada nodo tiene 2 GPUs):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programa para ejecutar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./programa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Job Arrays ===&lt;br /&gt;
Cuando se ejecutan cientos o miles de simulaciones que utilizan la misma cantidad de recursos, puede ser una ventaja ejecutar estas simulaciones como un &amp;quot;job array&amp;quot;. Los job array le permiten enviar miles de dichos trabajos (llamados &amp;quot;job steps&amp;quot;) con un solo script. A cada simulación se le asignará un valor único para la variable de entorno SLURM_ARRAY_TASK_ID. Puede usar esta variable para leer parámetros para pasos individuales de una línea dada de un archivo.&lt;br /&gt;
&lt;br /&gt;
=== Caso de uso de un Script Job Array (Gaussian) ===&lt;br /&gt;
Tenemos usuarios que actualmente envían varias simulaciones al clúster que son similares en cuanto al uso de recursos, pero, la diferencia es que solo cambia la entrada que le entregan al programa. Para esta situación, recomendamos hacer uso de un script Job Array.&lt;br /&gt;
&lt;br /&gt;
En este ejemplo crearemos un script job array para el software Gaussian, el cual, realizará 63 simulaciones, cada una de estas utilizará 8 cores y podrá alcanzar un uso máximo de 8 Gb de memoria ram. Para este caso utilizaremos la partición general donde cada nodo tiene 46 Gb de memoria ram y 20 cores.&lt;br /&gt;
&lt;br /&gt;
Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J prueba&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH -c 8&lt;br /&gt;
#SBATCH --mem-per-cpu=1000&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --array=1-63&lt;br /&gt;
#SBATCH -o prueba_%A_%a.out&lt;br /&gt;
#SBATCH -e prueba_%A_%a.err&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
ml purge&lt;br /&gt;
ml intel/2019b&lt;br /&gt;
# ----------------Módulos-----------------------------&lt;br /&gt;
ml g16/B.01&lt;br /&gt;
# ----------------Comandos--------------------------&lt;br /&gt;
file=$(ls Child_10_*.com | sed -n ${SLURM_ARRAY_TASK_ID}p)&lt;br /&gt;
srun g16 $file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Descripción de comandos utilizados en script:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Inicio de un bash script en Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre de la simulación:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -J prueba&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nombre la partición donde se ejecuta la simulación:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Número de tareas (1 tarea va a ejecutar 63 simulaciones):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Core’s por tareas (cada tarea utilizará un máximo 8 cores):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -c 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Memoria ram por cpu (cada tarea utilizará un máximo 8 Gb de ram):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH –mem-per-cpu=1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Correo para activar el envío de notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Permitir envío de notificaciones:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se generan 63 simulaciones diferentes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --array=1-63&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de salida: (ejemplo: prueba_18455017_1.out)&lt;br /&gt;
&lt;br /&gt;
* %A corresponde al Job ID de nuestra tarea que le asignará Slurm → 18455017.&lt;br /&gt;
* %a corresponde a la simulación X de nuestra tarea que le asignará Slurm → 1.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -o prueba_%A_%a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Log de errores: (ejemplo: prueba_18455017_1.err)&lt;br /&gt;
&lt;br /&gt;
* %A corresponde al Job ID de nuestra tarea que le asignará Slurm → 18455017.&lt;br /&gt;
* %a corresponde a la simulación X de nuestra tarea que le asignará Slurm → 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -e prueba_%A_%a.err&lt;br /&gt;
Toolchain: en este apartado, limpiaremos nuestro entorno de software no deseados y luego escogemos la herramienta informática con la cual está compilado el software Gaussian (nosotros utilizamos el compilador Intel/2019b).&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
ml purge&lt;br /&gt;
ml intel/2019b&lt;br /&gt;
Módulos: cargamos el software Gaussian versión 16/B.0.&lt;br /&gt;
&lt;br /&gt;
# ----------------Módulos-----------------------------&lt;br /&gt;
ml g16/B.01&lt;br /&gt;
Comandos: aquí definimos los comandos a ejecutar.&lt;br /&gt;
&lt;br /&gt;
# ----------------Comandos--------------------------&lt;br /&gt;
file=$(ls Child_10_*.com | sed -n ${SLURM_ARRAY_TASK_ID}p)&lt;br /&gt;
srun g16 $file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
file= variable que va a listar los archivos de entrada que comiencen por Child_10_ y terminen en .com&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Child.png|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sed -n ${SLURM_ARRAY_TASK_ID}p) ← Sed imprimirá las líneas de cada archivo de entrada y la variable $SLURM_ARRAY_TASK_ID asumirá estas entradas como matriz de simulación en nuestro job array, en este ejemplo tenemos 63 archivos de entrada.&lt;br /&gt;
&lt;br /&gt;
Para más detalles sobre los archivos stdin, stdout y stderr de una simulación % A será reemplazado por el valor de SLURM_ARRAY_JOB_ID que es el Job ID de nuestra tarea y %a será reemplazado por el valor de SLURM_ARRAY_TASK_ID que corresponde a la simulación X de nuestra tarea.&lt;br /&gt;
&lt;br /&gt;
Srun g16 $file: ejecutará el comando gaussian g16 interpretando la variable $file en los nodos de cómputo asignados.&lt;br /&gt;
&lt;br /&gt;
Enviar el script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ sbatch prueba.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución de una tarea que ocupa mucha RAM por CPU ===&lt;br /&gt;
Debemos tener en cuenta que la RAM que SLURM reserva por defecto son 1000 MB. Un típico error de cancelación de tarea por falta de memoria es el siguiente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/tmp/slurmd/job136839939/slurm_script: line 15: 23547 Killed                  ./programa.sh&lt;br /&gt;
slurmstepd: error: Detected 1 oom-kill event(s) in step 136839939.batch cgroup. Some of your processes &lt;br /&gt;
may have been killed by the cgroup out-of-memory handler.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si su tarea ocupa más de la memoria por defecto, puede utilizar el siguiente parámetro:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=2300 #Máxima RAM por CPU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Esto hará que SLURM reserve más RAM por CPU para sus tareas.&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que nuestros nodos tienen 46 GB de memoria RAM (Partición slims), 187 GB (Partición general) y 765 GB (Partición largemem) por nodo. [https://wiki.nlhpc.cl/Hardware_Disponible Más información].&lt;br /&gt;
&lt;br /&gt;
Otra forma de reservar memoria es utilizando el siguiente parámetro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem=2300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En este caso SLURM realizará una reserva de memoria de 2300 MB pero por la totalidad del trabajo.&lt;br /&gt;
&lt;br /&gt;
Los parámetros anteriores al igual que el número de CPUs que se van a usar, hay que afinarlos lo mejor posible. Para ello lo que se puede hacer es hacer pruebas en los nodos logins, sin lanzar en las colas, y así estudiar el uso de RAM y CPU por parte de sus procesos.&lt;br /&gt;
&lt;br /&gt;
=== Ejecución de una tarea con Dependencias ===&lt;br /&gt;
Las dependencias de trabajos se utilizan para aplazar el inicio de un trabajo hasta que se satisfagan las dependencias especificadas. Se especifican con la opción --dependency en el siguiente formato:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch --dependency=&amp;lt;type:job_id[:job_id][,type:job_id[:job_id]]&amp;gt; ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Los tipos de dependencias son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;after&#039;&#039;&#039;:jobid[:jobid...] - el trabajo puede empezar después de que los trabajos especificados comiencen&lt;br /&gt;
* &#039;&#039;&#039;afterany&#039;&#039;&#039;:jobid[:jobid...] - el trabajo puede empezar después de que los trabajos especificados terminen&lt;br /&gt;
* &#039;&#039;&#039;afternotok&#039;&#039;&#039;:jobid[:jobid...] - el trabajo puede empezar después que los trabajos especificados terminan fallidamente&lt;br /&gt;
* &#039;&#039;&#039;afterok&#039;&#039;&#039;:jobid[:jobid...] - el trabajo puede empezar después que los trabajos especificados terminan exitósamente&lt;br /&gt;
&lt;br /&gt;
La manera más simple de usar una dependencia del tipo afterok:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ sbatch job1.sh&lt;br /&gt;
Submitted batch job 21363626&lt;br /&gt;
[prueba@leftraru1 ~]$ sbatch --dependency=afterok:21363626 job2.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora cuando job1.sh termine correctamente, el job2.sh entrará en ejecución. Si job1.sh termina fallidamente, job2.sh no entrará en ejecución nunca pero sí quedará en cola (debe cancelarse manualmente el trabajo).&lt;br /&gt;
&lt;br /&gt;
==== Capturando el Job ID para facilitar la ejecución de varias tareas con dependencias ====&lt;br /&gt;
Es posible capturar en una variable el Job ID de cada tarea para poder lanzar varias tareas sin conocer el Job ID previamente.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si se desea lanzar 4 tareas que sean dependientes con la anterior, se comenzará lanzando la primera tarea y capturando en la variable &#039;&#039;&#039;$JOB1&#039;&#039;&#039;, el que será utilizado como dependencia en la tarea &#039;&#039;&#039;$JOB2&#039;&#039;&#039;, y así sucesivamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
JOB1=$(sbatch job_1.sbatch 2&amp;gt;&amp;amp;1 | awk &#039;{print $4}&#039;)&lt;br /&gt;
JOB2=$(sbatch --dependency=afterok:$JOB1 job_2.sbatch 2&amp;gt;&amp;amp;1 | awk &#039;{print $4}&#039;)&lt;br /&gt;
JOB3=$(sbatch --dependency=afterok:$JOB2 job_3.sbatch 2&amp;gt;&amp;amp;1 | awk &#039;{print $4}&#039;)&lt;br /&gt;
JOB4=$(sbatch --dependency=afterok:$JOB3 job_4.sbatch 2&amp;gt;&amp;amp;1 | awk &#039;{print $4}&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prioridad de tarea ==&lt;br /&gt;
Cómo ver la prioridad del trabajo. Los factores que determinan la prioridad del trabajo, incluyendo la fórmula y pesos.&lt;br /&gt;
&lt;br /&gt;
=== Factores que determinan prioridad de tarea ===&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 60%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Comando SLURM&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Descripción&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Edad&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;la cantidad de tiempo que el trabajo ha estado esperando en la cola.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Tamaño de la tarea&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;número de nodos solicitados por el trabajo.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Partición&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;prioridad para una partición determinada.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prioridad Baja&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Mientras más tareas se ejecuten en el cluster, menor será la prioridad.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prioridad Alta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Mientras menos tareas se ejecuten en el clúster, más alta es la prioridad.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prioridad de tarea ==&lt;br /&gt;
Cómo ver la prioridad del trabajo. Los factores que determinan la prioridad del trabajo, incluyendo la fórmula y pesos.&lt;br /&gt;
&lt;br /&gt;
=== Factores que determinan prioridad de tarea ===&lt;br /&gt;
* Edad - la cantidad de tiempo que el trabajo ha estado esperando en la cola&lt;br /&gt;
* Tamaño Oficio - número de nodos solicitados por el trabajo&lt;br /&gt;
* Partición - prioridad para una partición determinada&lt;br /&gt;
* Contribución de prioridades basada en los recursos informáticos utilizados por los miembros de un grupo de investigación en los últimos 30 días - Fairshare.&lt;br /&gt;
* Mientras más tareas se ejecuten en el cluster, menor será la prioridad.&lt;br /&gt;
* Mientras menos tareas se ejecuten en el clúster, más alta es la prioridad.&lt;br /&gt;
Fórmula Prioridad de tarea&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Job_priority =&lt;br /&gt;
  (PriorityWeightAge) * (age_factor) +&lt;br /&gt;
  (PriorityWeightFairshare) * (fair-share_factor) +&lt;br /&gt;
  (PriorityWeightJobSize) * (job_size_factor) +&lt;br /&gt;
  (PriorityWeightPartition) * (partition_factor) +&lt;br /&gt;
  (PriorityWeightQOS) * (QOS_factor)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visualización de sus Tareas ==&lt;br /&gt;
Si Ud. necesita visualizar información acerca de sus tareas de forma interactiva, puede utilizar el comando smap:&lt;br /&gt;
&lt;br /&gt;
smap -i 3&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Smap.png|no|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De esta forma, tendrá una actualización cada 3 segundos de sus tareas en ejecución incluyendo los nodos en los cuales se encuentran ejecutándose.&lt;br /&gt;
&lt;br /&gt;
== Time Limit ==&lt;br /&gt;
&lt;br /&gt;
= Uso del parámetro &amp;lt;code&amp;gt;--time&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;) en SLURM =&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;--time&amp;lt;/code&amp;gt; (o &amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;) en SLURM permite especificar el &#039;&#039;&#039;tiempo máximo de ejecución&#039;&#039;&#039; para un trabajo. Su uso correcto mejora la eficiencia del scheduler y permite aplicar estrategias como &#039;&#039;backfilling&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Formato general ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--time=D-HH:MM:SS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: días (opcional)&lt;br /&gt;
* &#039;&#039;&#039;HH&#039;&#039;&#039;: horas (0–23)&lt;br /&gt;
* &#039;&#039;&#039;MM&#039;&#039;&#039;: minutos (0–59)&lt;br /&gt;
* &#039;&#039;&#039;SS&#039;&#039;&#039;: segundos (0–59)&lt;br /&gt;
&lt;br /&gt;
También puede usarse en formato corto con &amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ejemplos ==&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 1 hora ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=01:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH -t 01:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 4 horas y 30 minutos ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=04:30:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 2 días ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=2-00:00:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 15 minutos ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=00:15:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trabajo de 3 días, 5 horas y 45 segundos ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --time=3-05:00:45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejemplo en script &amp;lt;code&amp;gt;job.sh&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=mi_trabajo&lt;br /&gt;
#SBATCH --partition=general&lt;br /&gt;
#SBATCH --ntasks=8&lt;br /&gt;
#SBATCH --time=01:30:00   # 1 hora y 30 minutos&lt;br /&gt;
#SBATCH --mem=16G&lt;br /&gt;
&lt;br /&gt;
srun ./mi_simulacion&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recomendaciones ==&lt;br /&gt;
&lt;br /&gt;
* Estima lo mejor posible el tiempo necesario.&lt;br /&gt;
* No omitas &amp;lt;code&amp;gt;--time&amp;lt;/code&amp;gt;: si lo haces, SLURM asumirá un valor por defecto (como 5 días).&lt;br /&gt;
* Para pruebas cortas, usa tiempos pequeños (por ejemplo, 10 minutos) para permitir el uso eficiente del scheduler mediante &#039;&#039;backfilling&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
[https://slurm.schedmd.com/sbatch.html#OPT_time Documentación oficial de SLURM sobre el parámetro --time]&lt;br /&gt;
&lt;br /&gt;
== Bibliografía ==&lt;br /&gt;
[http://slurm.schedmd.com/documentation.html Manual Oficial de Slurm]&lt;br /&gt;
&lt;br /&gt;
[https://slurm.schedmd.com/scrontab.html Documentación scrontab]&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=801</id>
		<title>Apptainer</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=801"/>
		<updated>2024-05-28T14:59:16Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Apptainer es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Apptainer es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Apptainer se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Apptainer y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Apptainer puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Apptainer y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Apptainer&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Apptainer&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml aocc/4.2.0&lt;br /&gt;
* ml apptainer/1.3.1&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Apptainer ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Apptainer hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml aocc/4.2.0&lt;br /&gt;
 prueba@leftraru1:~$ ml apptainer/1.3.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun apptainer run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Apptainer convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Apptainer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor CP2K ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J testamd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 16&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o testamd_%j.out&lt;br /&gt;
#SBATCH -e testamd_%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
apptainer exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor Tensorflow ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J tensorflow_amd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o tensorflow_amd_%j.out&lt;br /&gt;
#SBATCH -e tensorflow_amd%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
apptainer exec $IMAGES/tensorflow_latest.sif python script.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor PyTorch ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J pytorch_amd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o pytorch_amd_%j.out&lt;br /&gt;
#SBATCH -e pytorch_amd%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
apptainer exec $IMAGES/pytorch_latest.sif python script.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Más información pueden encontrar en https://github.com/amd/InfinityHub-CI/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=800</id>
		<title>Apptainer</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=800"/>
		<updated>2024-05-28T14:17:04Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Apptainer es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Apptainer es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Apptainer se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Apptainer y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Apptainer puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Apptainer y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Apptainer&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Apptainer&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml aocc/4.2.0&lt;br /&gt;
* ml apptainer/1.3.1&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Apptainer ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Apptainer hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml aocc/4.2.0&lt;br /&gt;
 prueba@leftraru1:~$ ml apptainer/1.3.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun apptainer run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Apptainer convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Apptainer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor CP2K ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J testamd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 16&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o testamd_%j.out&lt;br /&gt;
#SBATCH -e testamd_%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
apptainer exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor Tensorflow ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J tensorflow_amd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o tensorflow_amd_%j.out&lt;br /&gt;
#SBATCH -e tensorflow_amd%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
apptainer exec $IMAGES/tensorflow_latest.sif python script.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Más información pueden encontrar en https://github.com/amd/InfinityHub-CI/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=787</id>
		<title>Apptainer</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=787"/>
		<updated>2024-05-14T20:05:51Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Apptainer es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Apptainer es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Apptainer se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Apptainer y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Apptainer puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Apptainer y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Apptainer&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Apptainer&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml aocc/4.2.0&lt;br /&gt;
* ml apptainer/1.3.1&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Apptainer ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Apptainer hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml aocc/4.2.0&lt;br /&gt;
 prueba@leftraru1:~$ ml apptainer/1.3.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun apptainer run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Apptainer convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Apptainer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor CP2K ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J testamd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 16&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o testamd_%j.out&lt;br /&gt;
#SBATCH -e testamd_%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.3.1&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
apptainer exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más información pueden encontrar en https://github.com/amd/InfinityHub-CI/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=786</id>
		<title>Apptainer</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=786"/>
		<updated>2024-05-14T19:57:37Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Apptainer es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Apptainer es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Apptainer se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Apptainer y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Apptainer puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Apptainer y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Apptainer&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Apptainer&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml aocc/4.2.0&lt;br /&gt;
* ml apptainer/1.1.9&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Apptainer ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Apptainer hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml aocc/4.2.0&lt;br /&gt;
 prueba@leftraru1:~$ ml apptainer/1.1.9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.1.9&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun apptainer run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Apptainer convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Apptainer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.1.9 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor CP2K ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J testamd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 16&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o testamd_%j.out&lt;br /&gt;
#SBATCH -e testamd_%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.1.9&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
apptainer exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más información pueden encontrar en https://github.com/amd/InfinityHub-CI/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=785</id>
		<title>Apptainer</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=785"/>
		<updated>2024-05-14T19:56:38Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Apptainer es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Apptainer es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Apptainer se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Singularity y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Apptainer puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Apptainer y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Singularity&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Apptainer&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml aocc/4.2.0&lt;br /&gt;
* ml apptainer/1.1.9&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Apptainer ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Apptainer hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml aocc/4.2.0&lt;br /&gt;
 prueba@leftraru1:~$ ml apptainer/1.1.9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.1.9&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun singularity run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Apptainer convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Apptainer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.1.9 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor CP2K ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J testamd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 16&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o testamd_%j.out&lt;br /&gt;
#SBATCH -e testamd_%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.1.9&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
apptainer exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más información pueden encontrar en https://github.com/amd/InfinityHub-CI/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=784</id>
		<title>Apptainer</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Apptainer&amp;diff=784"/>
		<updated>2024-05-14T19:00:23Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: Página creada con «== ¿Qué es? == Apptainer es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.  Uno de los principales usos de Singularity es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).  Los contenedores de Apptainer se pueden usar para empaquetar flujos de trabajo científicos comple…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Apptainer es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Singularity es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Apptainer se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Singularity y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Apptainer puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Apptainer y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Singularity&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Apptainer&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml aocc/4.2.0&lt;br /&gt;
* ml apptainer/1.1.9&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Apptainer ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Apptainer hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml aocc/4.2.0&lt;br /&gt;
 prueba@leftraru1:~$ ml apptainer/1.1.9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Apptainer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ apptainer run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.1.9&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun singularity run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Apptainer convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Apptainer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.1.9 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor CP2K ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J testamd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 16&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o testamd_%j.out&lt;br /&gt;
#SBATCH -e testamd_%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml aocc/4.2.0&lt;br /&gt;
ml apptainer/1.1.9&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
apptainer exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más información pueden encontrar en https://github.com/amd/InfinityHub-CI/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Singularity&amp;diff=773</id>
		<title>Singularity</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Singularity&amp;diff=773"/>
		<updated>2024-04-30T15:50:03Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Singularity es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Singularity es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Singularity se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Singularity y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Singularity puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Singularity y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Singularity&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Singularity&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml purge&lt;br /&gt;
* ml intel/2022.00&lt;br /&gt;
* ml singularityCE&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Singularity ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Singularity hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Singularity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml intel/2022.00&lt;br /&gt;
 prueba@leftraru1:~$ ml singularityCE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Singularity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ singularity pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ singularity run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml purge&lt;br /&gt;
ml intel/2022.00&lt;br /&gt;
ml singularityCE&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun singularity run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Singularity convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Singularity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml singularityCE/3.10.3 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor CP2K ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J testamd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 16&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 4&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o testamd_%j.out&lt;br /&gt;
#SBATCH -e testamd_%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml singularityCE/3.10.3&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
singularity exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más información pueden encontrar en https://github.com/amd/InfinityHub-CI/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Singularity&amp;diff=772</id>
		<title>Singularity</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Singularity&amp;diff=772"/>
		<updated>2024-04-30T15:48:58Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Singularity es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Singularity es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Singularity se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Singularity y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Singularity puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Singularity y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Singularity&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Singularity&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml purge&lt;br /&gt;
* ml intel/2022.00&lt;br /&gt;
* ml singularityCE&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Singularity ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Singularity hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Singularity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml intel/2022.00&lt;br /&gt;
 prueba@leftraru1:~$ ml singularityCE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Singularity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ singularity pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ singularity run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml purge&lt;br /&gt;
ml intel/2022.00&lt;br /&gt;
ml singularityCE&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun singularity run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Singularity convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Singularity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml singularityCE/3.10.3 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor CP2K ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J testamd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 1&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o testamd_%j.out&lt;br /&gt;
#SBATCH -e testamd_%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml singularityCE/3.10.3&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
singularity exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más información pueden encontrar en https://github.com/amd/InfinityHub-CI/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Singularity&amp;diff=771</id>
		<title>Singularity</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Singularity&amp;diff=771"/>
		<updated>2024-04-30T15:45:35Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Singularity es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Singularity es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Singularity se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Singularity y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Singularity puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Singularity y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Singularity&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Singularity&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml purge&lt;br /&gt;
* ml intel/2022.00&lt;br /&gt;
* ml singularityCE&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Singularity ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Singularity hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Singularity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml intel/2022.00&lt;br /&gt;
 prueba@leftraru1:~$ ml singularityCE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Singularity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ singularity pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ singularity run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml purge&lt;br /&gt;
ml intel/2022.00&lt;br /&gt;
ml singularityCE&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun singularity run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Singularity convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Singularity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml singularityCE/3.10.3 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo contenedor CP2K ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#---------------Script SBATCH - NLHPC ----------------&lt;br /&gt;
#SBATCH -J testamd&lt;br /&gt;
#SBATCH -p mi210&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH --gres=gpu:1&lt;br /&gt;
#SBATCH -c 1&lt;br /&gt;
#SBATCH --mem-per-cpu=30354&lt;br /&gt;
#SBATCH --mail-user=test@correo.com&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o testamd_%j.out&lt;br /&gt;
#SBATCH -e testamd_%j.err&lt;br /&gt;
&lt;br /&gt;
#-----------------Toolchain---------------------------&lt;br /&gt;
# ----------------Modulos----------------------------&lt;br /&gt;
ml singularityCE/3.10.3&lt;br /&gt;
# ----------------Comando--------------------------&lt;br /&gt;
&lt;br /&gt;
singularity exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Singularity&amp;diff=770</id>
		<title>Singularity</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Singularity&amp;diff=770"/>
		<updated>2024-04-30T15:09:21Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es? ==&lt;br /&gt;
Singularity es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.&lt;br /&gt;
&lt;br /&gt;
Uno de los principales usos de Singularity es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).&lt;br /&gt;
&lt;br /&gt;
Los contenedores de Singularity se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Singularity y ejecutarlo.&lt;br /&gt;
&lt;br /&gt;
El software Singularity puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.&lt;br /&gt;
&lt;br /&gt;
¿Necesitas compartir tu código? Póngalo en un contenedor de Singularity y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede &amp;quot;cambiar&amp;quot; el sistema operativo de su host por otro diferente dentro de un contenedor de Singularity&lt;br /&gt;
&lt;br /&gt;
== Modulos ==&lt;br /&gt;
Para el uso de &#039;&#039;&#039;Singularity&#039;&#039;&#039; debe cargar los módulos:&lt;br /&gt;
&lt;br /&gt;
* ml purge&lt;br /&gt;
* ml intel/2022.00&lt;br /&gt;
* ml singularityCE&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de Lanzador ==&lt;br /&gt;
=== Importar imagen de Singularity ===&lt;br /&gt;
Para este ejemplo utilizaremos la imagen de Singularity hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~$ mkdir Ejemplo&lt;br /&gt;
prueba@leftraru1:~$ cd Ejemplo/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cargar módulo de Singularity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ ml purge&lt;br /&gt;
 prueba@leftraru1:~$ ml intel/2022.00&lt;br /&gt;
 prueba@leftraru1:~$ ml singularityCE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crear carpeta temporal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importar imagen de Singularity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ singularity pull shub://singularityhub/hello-world&lt;br /&gt;
INFO:    Downloading shub image&lt;br /&gt;
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 57344&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejecutando imagen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ singularity run hello-world_latest.sif&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede observar el resultado de ejecutar el contenedor es la palabra: &#039;&#039;&#039;Tacotacotaco&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Generando Script ===&lt;br /&gt;
Ejemplo de script para lanzar en la partición general.&lt;br /&gt;
&lt;br /&gt;
Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 Gb de Ram declarados en el script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo de Script Slurm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# ----------------SLURM Parameters----------------&lt;br /&gt;
#SBATCH -J Hello-world&lt;br /&gt;
#SBATCH -p general&lt;br /&gt;
#SBATCH -n 44&lt;br /&gt;
#SBATCH --ntasks-per-node=44&lt;br /&gt;
#SBATCH --mem-per-cpu=4250&lt;br /&gt;
#SBATCH --mail-user=prueba@nlhpc.cl&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH -o hello-world_%j.out&lt;br /&gt;
#SBATCH -e hello-world_%j.err&lt;br /&gt;
 &lt;br /&gt;
#Modulos Necesarios&lt;br /&gt;
ml purge&lt;br /&gt;
ml intel/2022.00&lt;br /&gt;
ml singularityCE&lt;br /&gt;
&lt;br /&gt;
#Creación de carpeta&lt;br /&gt;
mkdir -p /tmp/singularityce/singularity/mnt/session&lt;br /&gt;
&lt;br /&gt;
#Comandos&lt;br /&gt;
srun singularity run hello-world_latest.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lanzar script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh&lt;br /&gt;
Submitted batch job 19051335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado del trabajo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
  JOBID   PARTITION     NAME   USER  ST  TIME  NODES  NODELIST(REASON)&lt;br /&gt;
19051335   general  Hello-wo  prueba  R  0:12    1    sn045&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Revisar estado de simulación: (trabajo finalizado correctamente)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ squeue&lt;br /&gt;
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de inicio del trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Inicio Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revisión de finalización de trabajo mediante correo:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Finalización Trabajo 19051335.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarea fue ejecutada en 3 minutos con 04 segundos.&lt;br /&gt;
&lt;br /&gt;
Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ ll&lt;br /&gt;
total 61204&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err&lt;br /&gt;
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif&lt;br /&gt;
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.out:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out&lt;br /&gt;
44 hello-world_19051335.out&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
Tacotacotaco&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resumen de archivo hello-world_19051335.err:&lt;br /&gt;
&lt;br /&gt;
Aquí podemos ver que Singularity convirtió la imagen 44 veces y limpio la imagen 44 veces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err&lt;br /&gt;
88 hello-world_19051335.err&lt;br /&gt;
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err&lt;br /&gt;
Resumen&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Convert SIF file to sandbox...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
INFO:    Cleaning up image...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contenedores GPU AMD MI210 ==&lt;br /&gt;
Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Singularity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
ml singularityCE/3.10.3 &lt;br /&gt;
[modules@leftraru1 ~]$ ls $IMAGES&lt;br /&gt;
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif&lt;br /&gt;
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif&lt;br /&gt;
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif&lt;br /&gt;
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif&lt;br /&gt;
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif&lt;br /&gt;
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif&lt;br /&gt;
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Tutorial_de_acceso_a_Leftraru_via_SSH&amp;diff=511</id>
		<title>Tutorial de acceso a Leftraru via SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Tutorial_de_acceso_a_Leftraru_via_SSH&amp;diff=511"/>
		<updated>2023-01-11T13:40:07Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejemplos de conexión ==&lt;br /&gt;
Para realizar una conexión desde un sistema GNU/Linux o MacOSX, use el comando SSH (ejemplo con usuario &amp;quot;prueba&amp;quot;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh prueba@leftraru.nlhpc.cl&lt;br /&gt;
prueba@leftraru.nlhpc.cl password: &lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
prueba@leftraru4:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para conectar desde sistemas Windows, se recomienda usar Putty como cliente SSH:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Putty.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se usará el usuario &amp;quot;prueba&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Accesologin1.png|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El password es ingresado sin mostrar ningún carácter en la pantalla.&lt;br /&gt;
&lt;br /&gt;
== Acceso utilizando llaves (Recomendado) ==&lt;br /&gt;
La autenticación con clave pública es un método de seguridad alternativo a las contraseñas, mucho más difícil de hackear y, por lo tanto, más seguro. Este método de autenticación es recomendable usarlo para acceder a servidores.&lt;br /&gt;
&lt;br /&gt;
La clave SSH consiste en la generación de un par de claves que proporcionan dos largas cadenas de caracteres, una pública y una privada. La clave pública se instala en cualquier servidor y luego se desbloquea mediante la conexión con un cliente SSH que hace uso de la clave privada. Si las dos claves coinciden, el servidor SSH permite el acceso sin necesidad de utilizar una contraseña. No obstante, para añadir una capa de seguridad adicional, siempre podemos aumentar la protección de la clave privada usando una contraseña.&lt;br /&gt;
&lt;br /&gt;
Para crear el par de claves utilice el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ ssh-keygen -t ed25519&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tras ejecutar el comando obtendremos la siguiente respuesta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Generating public/private ed25519 key pair.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez ejecutada la instrucción para generar las claves, se nos pedirá que indiquemos la ruta en la que queremos almacenar la clave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter file in which to save the key (/home/prueba/.ssh/id_ed25519):&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tras indicar la ruta en la que se almacenará la clave, lo siguiente que tendremos que hacer es indicar una contraseña (puede dejar vacío para acceso directo):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter passphrase (empty for no passphrase):&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente debemos copiar nuestra llave pública al cluster:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~] ssh-copy-id leftraru.nlhpc.cl&lt;br /&gt;
Number of key(s) added:        1&lt;br /&gt;
&lt;br /&gt;
Now try logging into the machine, with:   &amp;quot;ssh &#039;leftraru.nlhpc.cl&#039;&amp;quot;&lt;br /&gt;
and check to make sure that only the key(s) you wanted were added.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora ya podremos conectarnos directamente con nuestras llaves:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~] ssh leftraru.nlhpc.cl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cambiar contraseña ==&lt;br /&gt;
Para cambiar la contraseña de usuario, es necesario que esta cumpla con ciertos requisitos como por ejemplo:&lt;br /&gt;
&lt;br /&gt;
* El mínimo de caracteres son 10.&lt;br /&gt;
* Debe ser alfanumérica.&lt;br /&gt;
* Tener 3 caracteres especiales (al menos 1 mayúscula – 1 minúscula y 1 número).&lt;br /&gt;
&lt;br /&gt;
Para ejecutar esta acción, utilice el siguiente comando:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ passwd&lt;br /&gt;
&lt;br /&gt;
Changing password for user prueba.&lt;br /&gt;
(current) LDAP Password: &amp;lt;- Ingrese su contraseña actual.&lt;br /&gt;
&lt;br /&gt;
New password: ********* &amp;lt;- Ingrese su nueva contraseña.&lt;br /&gt;
&lt;br /&gt;
Retype new password: Reingrese su nueva contraseña.&lt;br /&gt;
&lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirmación de cambio de clave exitoso, le recomendamos cerrar su sesión e ingresar nuevamente a nuestro sistema ingresando su nueva contraseña.&lt;br /&gt;
&lt;br /&gt;
== Conexión a nodos actualmente utilizados ==&lt;br /&gt;
Algunas veces, por distintas circunstancias, sería deseable tener la posibilidad de ingresar al nodo donde se estén ejecutando nuestras tareas con tal de verificar su estado, comprobar ciertos valores, etc.&lt;br /&gt;
&lt;br /&gt;
Pensado en la comodidad de los usuarios, se ha implementado un módulo del gestor que colas SLURM que permite esta funcionalidad. Por tanto, el login será permitido en todas aquellas máquinas donde actualmente exista un trabajo nuestro.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo; nuestra tarea de prueba &#039;tarea_test.sh&#039; ha sido enviada a la cola y ha ingresado con el ID &#039;3469576&#039;. Slurm reservó el nodo &#039;cn053&#039; para llevar a cabo la ejecución, por tanto el usuario tiene permitido el ingreso mediante ssh al nodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
leftraru$ sbatch tarea_test.sh&lt;br /&gt;
leftraru$ squeue&lt;br /&gt;
&lt;br /&gt;
 JOBID    PARTITION     NAME     USER   ST    TIME  NODES  NODELIST(REASON)&lt;br /&gt;
3469576     slims      Prueba    test   R     1:57    1        cn053&lt;br /&gt;
&lt;br /&gt;
leftraru$ ssh cn053&lt;br /&gt;
Last login: today 2016 from leftraru.nlhpc.cl&lt;br /&gt;
cn053$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que aún se mantiene la restricción de ingreso para el resto de los nodos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
leftraru$ ssh cn001&lt;br /&gt;
Access denied: user test (uid=000) has no active jobs on this node.&lt;br /&gt;
leftraru$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nodos Login ==&lt;br /&gt;
Aunque disponemos de 4 nodos para el acceso al clúster por parte de los usuarios, en general, hay que usar el nombre:&lt;br /&gt;
&lt;br /&gt;
* leftraru.nlhpc.cl&lt;br /&gt;
&lt;br /&gt;
A la hora de conectarse por SSH al clúster. Al acceder a esa dirección se consigue que los usuarios queden conectados aleatoriamente a los nodos login.&lt;br /&gt;
&lt;br /&gt;
Pero si resultara necesario, se puede acceder a un nodo login específicamente usando su nombre a la hora de realizar la conexión SSH:&lt;br /&gt;
&lt;br /&gt;
* leftraru1.nlhpc.cl&lt;br /&gt;
* leftraru2.nlhpc.cl&lt;br /&gt;
* leftraru3.nlhpc.cl&lt;br /&gt;
* leftraru4.nlhpc.cl&lt;br /&gt;
&lt;br /&gt;
== Notas ==&lt;br /&gt;
Debido a que leftraru balancea la carga de los nodos Login se debe evitar el uso de screen, ya que no se garantiza el acceso al mismo nodo que tenía la sesión screen abierta una vez que el usuario cierra su sesión.&lt;br /&gt;
&lt;br /&gt;
Un usuario sólo podrá acceder por ssh a los cuatro nodos logins y a los nodos de cómputo en los cuales tenga alguna tarea en ejecución mediante nuestro sistema gestor de colas SLURM.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Si falla muchas veces el intento de login por SSH o genera muchas conexiones, su IP podría ser bloqueada. Contacte por correo electrónico con Soporte si tiene problemas de conexión: &#039;&#039;&#039;[mailto:soporte@nlhpc.cl soporte@nlhpc.cl]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Tutorial_de_acceso_a_Leftraru_via_SSH&amp;diff=510</id>
		<title>Tutorial de acceso a Leftraru via SSH</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Tutorial_de_acceso_a_Leftraru_via_SSH&amp;diff=510"/>
		<updated>2023-01-11T11:41:55Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejemplos de conexión ==&lt;br /&gt;
Para realizar una conexión desde un sistema GNU/Linux o MacOSX, use el comando SSH (ejemplo con usuario &amp;quot;prueba&amp;quot;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh prueba@leftraru.nlhpc.cl&lt;br /&gt;
prueba@leftraru.nlhpc.cl password: &lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
prueba@leftraru4:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para conectar desde sistemas Windows, se recomienda usar Putty como cliente SSH:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Putty.jpg|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, se usará el usuario &amp;quot;prueba&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Accesologin1.png|no]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El password es ingresado sin mostrar ningún carácter en la pantalla.&lt;br /&gt;
&lt;br /&gt;
== Acceso utilizando llaves (Recomendado) ==&lt;br /&gt;
La autenticación con clave pública es un método de seguridad alternativo a las contraseñas, mucho más difícil de hackear y, por lo tanto, más seguro. Este método de autenticación es recomendable usarlo para acceder a servidores.&lt;br /&gt;
&lt;br /&gt;
La clave SSH consiste en la generación de un par de claves que proporcionan dos largas cadenas de caracteres, una pública y una privada. La clave pública se instala en cualquier servidor y luego se desbloquea mediante la conexión con un cliente SSH que hace uso de la clave privada. Si las dos claves coinciden, el servidor SSH permite el acceso sin necesidad de utilizar una contraseña. No obstante, para añadir una capa de seguridad adicional, siempre podemos aumentar la protección de la clave privada usando una contraseña.&lt;br /&gt;
&lt;br /&gt;
Para crear el par de claves utilice el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ ssh-keygen -t ed25519&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tras ejecutar el comando obtendremos la siguiente respuesta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Generating public/private ed25519 key pair.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez ejecutada la instrucción para generar las claves, se nos pedirá que indiquemos la ruta en la que queremos almacenar la clave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter file in which to save the key (/home/prueba/.ssh/id_ed25519):&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tras indicar la ruta en la que se almacenará la clave, lo siguiente que tendremos que hacer es indicar una contraseña (se recomienda dejar vacio para acceso directo):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enter passphrase (empty for no passphrase):&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente debemos copiar nuestra llave pública al cluster:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~] ssh-copy-id leftraru.nlhpc.cl&lt;br /&gt;
Number of key(s) added:        1&lt;br /&gt;
&lt;br /&gt;
Now try logging into the machine, with:   &amp;quot;ssh &#039;leftraru.nlhpc.cl&#039;&amp;quot;&lt;br /&gt;
and check to make sure that only the key(s) you wanted were added.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora ya podremos conectarnos directamente con nuestras llaves:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~] ssh leftraru.nlhpc.cl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cambiar contraseña ==&lt;br /&gt;
Para cambiar la contraseña de usuario, es necesario que esta cumpla con ciertos requisitos como por ejemplo:&lt;br /&gt;
&lt;br /&gt;
* El mínimo de caracteres son 10.&lt;br /&gt;
* Debe ser alfanumérica.&lt;br /&gt;
* Tener 3 caracteres especiales (al menos 1 mayúscula – 1 minúscula y 1 número).&lt;br /&gt;
&lt;br /&gt;
Para ejecutar esta acción, utilice el siguiente comando:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[prueba@leftraru1 ~]$ passwd&lt;br /&gt;
&lt;br /&gt;
Changing password for user prueba.&lt;br /&gt;
(current) LDAP Password: &amp;lt;- Ingrese su contraseña actual.&lt;br /&gt;
&lt;br /&gt;
New password: ********* &amp;lt;- Ingrese su nueva contraseña.&lt;br /&gt;
&lt;br /&gt;
Retype new password: Reingrese su nueva contraseña.&lt;br /&gt;
&lt;br /&gt;
passwd: all authentication tokens updated successfully.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirmación de cambio de clave exitoso, le recomendamos cerrar su sesión e ingresar nuevamente a nuestro sistema ingresando su nueva contraseña.&lt;br /&gt;
&lt;br /&gt;
== Conexión a nodos actualmente utilizados ==&lt;br /&gt;
Algunas veces, por distintas circunstancias, sería deseable tener la posibilidad de ingresar al nodo donde se estén ejecutando nuestras tareas con tal de verificar su estado, comprobar ciertos valores, etc.&lt;br /&gt;
&lt;br /&gt;
Pensado en la comodidad de los usuarios, se ha implementado un módulo del gestor que colas SLURM que permite esta funcionalidad. Por tanto, el login será permitido en todas aquellas máquinas donde actualmente exista un trabajo nuestro.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo; nuestra tarea de prueba &#039;tarea_test.sh&#039; ha sido enviada a la cola y ha ingresado con el ID &#039;3469576&#039;. Slurm reservó el nodo &#039;cn053&#039; para llevar a cabo la ejecución, por tanto el usuario tiene permitido el ingreso mediante ssh al nodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
leftraru$ sbatch tarea_test.sh&lt;br /&gt;
leftraru$ squeue&lt;br /&gt;
&lt;br /&gt;
 JOBID    PARTITION     NAME     USER   ST    TIME  NODES  NODELIST(REASON)&lt;br /&gt;
3469576     slims      Prueba    test   R     1:57    1        cn053&lt;br /&gt;
&lt;br /&gt;
leftraru$ ssh cn053&lt;br /&gt;
Last login: today 2016 from leftraru.nlhpc.cl&lt;br /&gt;
cn053$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que aún se mantiene la restricción de ingreso para el resto de los nodos:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
leftraru$ ssh cn001&lt;br /&gt;
Access denied: user test (uid=000) has no active jobs on this node.&lt;br /&gt;
leftraru$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nodos Login ==&lt;br /&gt;
Aunque disponemos de 4 nodos para el acceso al clúster por parte de los usuarios, en general, hay que usar el nombre:&lt;br /&gt;
&lt;br /&gt;
* leftraru.nlhpc.cl&lt;br /&gt;
&lt;br /&gt;
A la hora de conectarse por SSH al clúster. Al acceder a esa dirección se consigue que los usuarios queden conectados aleatoriamente a los nodos login.&lt;br /&gt;
&lt;br /&gt;
Pero si resultara necesario, se puede acceder a un nodo login específicamente usando su nombre a la hora de realizar la conexión SSH:&lt;br /&gt;
&lt;br /&gt;
* leftraru1.nlhpc.cl&lt;br /&gt;
* leftraru2.nlhpc.cl&lt;br /&gt;
* leftraru3.nlhpc.cl&lt;br /&gt;
* leftraru4.nlhpc.cl&lt;br /&gt;
&lt;br /&gt;
== Notas ==&lt;br /&gt;
Debido a que leftraru balancea la carga de los nodos Login se debe evitar el uso de screen, ya que no se garantiza el acceso al mismo nodo que tenía la sesión screen abierta una vez que el usuario cierra su sesión.&lt;br /&gt;
&lt;br /&gt;
Un usuario sólo podrá acceder por ssh a los cuatro nodos logins y a los nodos de cómputo en los cuales tenga alguna tarea en ejecución mediante nuestro sistema gestor de colas SLURM.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Si falla muchas veces el intento de login por SSH o genera muchas conexiones, su IP podría ser bloqueada. Contacte por correo electrónico con Soporte si tiene problemas de conexión: &#039;&#039;&#039;[mailto:soporte@nlhpc.cl soporte@nlhpc.cl]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
	<entry>
		<id>https://wiki.nlhpc.cl/index.php?title=Sumario&amp;diff=499</id>
		<title>Sumario</title>
		<link rel="alternate" type="text/html" href="https://wiki.nlhpc.cl/index.php?title=Sumario&amp;diff=499"/>
		<updated>2022-11-30T11:54:58Z</updated>

		<summary type="html">&lt;p&gt;Eguerra: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Información para nuevos usuarios ==&lt;br /&gt;
Esta es la wiki de usuarios de Leftraru, el clúster HPC del NLHPC. Aquí encontrará información útil para:&lt;br /&gt;
&lt;br /&gt;
* Ingresar al clúster&lt;br /&gt;
* Descripción del hardware&lt;br /&gt;
* Lanzar tareas en el gestor de recursos Slurm&lt;br /&gt;
* Preguntas Frecuentes&lt;br /&gt;
* Para más información puede visitar [https://wiki.nlhpc.cl/Informaci%C3%B3n_para_nuevos_usuarios Aquí]&lt;br /&gt;
&lt;br /&gt;
== Recursos computacionales de leftraru ==&lt;br /&gt;
Leftraru cuenta actualmente con 5 particiones: general, largemem, gpus, slims y debug.&lt;br /&gt;
&lt;br /&gt;
Las caracterísiticas de estas particiones pueden encontrarse en [https://wiki.nlhpc.cl/Hardware_Disponible Recursos Computacionales NLHPC]&lt;br /&gt;
&lt;br /&gt;
== Creación de cuentas ==&lt;br /&gt;
El proceso de creación de cuentas es relativamente fácil. Para poder crear una cuenta debe seguir las instrucciones del siguiente [http://www.nlhpc.cl/es/servicios enlace] y luego postular a una cuenta rellenando información en un formulario online.&lt;br /&gt;
&lt;br /&gt;
== Software instalado en el Clúster ==&lt;br /&gt;
Leftraru cuenta con una amplia gama de software.&lt;br /&gt;
&lt;br /&gt;
Para saber el software que está instalado en nuestro clúster, vaya al siguiente link: [https://wiki.nlhpc.cl/Lmod Lmod]&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta que el NLHPC no entrega licencias de software, por lo que es responsabilidad de cada usuario o grupo de usuarios el adquirir estas licencias.&lt;br /&gt;
&lt;br /&gt;
== Accediendo a Leftraru ==&lt;br /&gt;
Leftraru está basado en la distribución Centos Linux. Uiliza el protocolo [https://es.wikipedia.org/wiki/Secure_Shell SSH] para conectase remotamente. Puede conectarse a Leftraru en la siguiente dirección:&lt;br /&gt;
&lt;br /&gt;
 leftraru.nlhpc.cl &lt;br /&gt;
&lt;br /&gt;
Puede encontrar mayor información en [https://wiki.nlhpc.cl/Tutorial_de_acceso_a_Leftraru_via_SSH Tutorial de acceso a Leftraru via SSH]. Para facilitar la copia de archivos en Leftraru, vea el [https://wiki.nlhpc.cl/Tutorial_de_acceso_a_archivos Tutorial de acceso a archivos]&lt;br /&gt;
&lt;br /&gt;
== MFA o autenticación multifactor == &lt;br /&gt;
MFA o autenticación multifactor agrega una capa de protección al proceso de inicio de sesión. En el caso del NLHPC, se ha decidido integrar MFA adicionalmente al uso de contraseñas y llaves. El proceso de creación de MFA se ejecutará automáticamente cuando inicie sesión y es necesario que tenga a la mano su celular con la aplicación Google Authenticator o Authy instalada. Cuando inicie sesión, se mostrará un código qr que deberá escanear en alguna de estas aplicaciones. También se mostrarán un “secret key” que le permitirá recuperar el acceso en el caso de extravío de su celular. La próxima vez que inicie sesión en su cuenta se pedirá tanto la contraseña de acceso como el código generado por la aplicación multifactor.&lt;br /&gt;
&lt;br /&gt;
== Slurm, sistema de gestión de recursos ==&lt;br /&gt;
Leftraru utiliza [https://slurm.schedmd.com/ Slurm] como gestor de recursos. Slurm provee de un framework para encolar trabajos, asignación de nodos de cómputo, reserva de tiempo de CPU, ejecución y gestión de trabajos dentro de clúster. Nuestros nodos de cómputo se encuentran agrupados en particiones, dentro de las cuales los usuarios pueden ejecutar sus trabajos dependiendo de sus necesidades.&lt;br /&gt;
&lt;br /&gt;
Para ver más información acerca de cómo trabajar con Slurm en el clúster, por favor visite el tutorial de [https://wiki.nlhpc.cl/SISTEMA_GESTOR_DE_RECURSOS ejecución de tareas dentro de Leftaru.]&lt;br /&gt;
&lt;br /&gt;
== Lustre, sistema de archivos distribuido ==&lt;br /&gt;
[https://es.wikipedia.org/wiki/Lustre_%28sistema_de_archivos%29 Lustre] es un conocido [https://es.wikipedia.org/wiki/Sistema_de_archivos_distribuido sistema de archivos distribuido] de alta disponibilidad que permite usar una red de computadores para construir un espacio de almacenamiento amplio, escalable y mantenible en el que se pueden definir cuotas de utilización por usuario.&lt;br /&gt;
&lt;br /&gt;
Lustre es open source, pero debido a su envergadura y dificultad para constituirlo, se ha optado por contratar una solución privada (a la empresa [http://www.ddn.com/ DDN]) que incluye tanto infraestructura como configuraciones optimizadas de tal manera de contar con una opción de almacenamiento acorde a las necesidades del NLHPC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Limitaciones y excepciones de Lustre:&#039;&#039;&#039; A pesar de tener muchas características sobresalientes, y en pos de aumentar el rendimiento de la lectura y escritura de archivos, Lustre no permite bloquear un archivo ([https://en.wikipedia.org/wiki/File_locking file locking] en inglés). Esto implica que muchos de los motores de bases de datos más conocidos (MySQL, Postgres, etc.) e incluso algunas aplicaciones que hacen uso de esta característica no funcionen o se caigan en su ejecución. Se recomienda realizar esa parte del trabajo en la partición /mnt/flock/usuario.&lt;br /&gt;
&lt;br /&gt;
== Tutoriales ==&lt;br /&gt;
[https://wiki.nlhpc.cl/Tutorial_de_acceso_a_Leftraru_via_SSH Tutorial de acceso a Leftraru via SSH]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.nlhpc.cl/SISTEMA_GESTOR_DE_RECURSOS Ejecución de tareas dentro de Leftaru]&lt;br /&gt;
&lt;br /&gt;
Presentación uso Leftraru&lt;br /&gt;
&lt;br /&gt;
[https://wiki.nlhpc.cl/Escalamiento Escalamiento de Aplicaciones]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.nlhpc.cl/Monitoreo_De_Tareas Monitoreo De Tareas]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.nlhpc.cl/Categor%C3%ADa:Software Documentación de temas relacionados con el software del clúster]&lt;/div&gt;</summary>
		<author><name>Eguerra</name></author>
	</entry>
</feed>