🔎 Monitoreo de Eficiencia#

Una vez que se lanza un trabajo con Slurm, este reserva los recursos solicitados independientemente de si se usan en su totalidad. Es importante revisar los trabajos completados para verificar el uso real de los recursos asignados. Si se detecta baja eficiencia, ajustar los parámetros del job permitirá optimizar el uso del clúster, reduciendo el tiempo de espera de otros usuarios.

Advertencia

Slurm contabiliza los recursos reservados, no los realmente utilizados. Esto es importante a la hora de pagar por horas de cómputo.

Trabajos en ejecución#

Conviene revisar el job a los pocos minutos de que empiece a correr: si no está usando los recursos que pidió, es mejor cancelarlo y corregirlo que dejarlo correr horas desperdiciando cómputo.

htop#

La forma más directa es ingresar por SSH al nodo donde está corriendo el job y observar los procesos en tiempo real con htop. Solo es posible ingresar a los nodos en los que se tiene un job en ejecución.

Primero se identifica el nodo asignado (columna NODELIST) y luego se abre htop en ese nodo. Para salir se presiona q, lo que también cierra la sesión SSH.

$ squeue --me
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
12345     multi     test   fulano  R    1:50:00      1 rome01

$ ssh -t rome01 htop -u $USER

Qué observar: un job que aprovecha bien los recursos se ve así:

  • Barras de CPU en verde: si se pidieron 64 cores, las 64 barras llenas y en verde. El verde es tiempo de cómputo del programa; si predomina el rojo, el tiempo se va en el sistema operativo (comunicación, I/O, esperas activas) y no en cálculo.

  • Load average cercano a los cores pedidos: con 64 cores, alrededor de 64. Un valor mucho menor indica cores ociosos; uno mucho mayor, más procesos o hilos que cores, compitiendo entre sí.

  • Columna CPU% al 100% en cada proceso o hilo: con la tecla H se alterna entre ver los hilos por separado o agrupados por proceso (en ese caso, un proceso con 8 hilos debería mostrar cerca de 800%).

Nota

Si el nodo es compartido, las barras de CPU y el load average muestran el nodo completo, incluyendo los jobs de otros usuarios.

sstat#

Para consultar las métricas que Slurm registra de un job en ejecución se puede usar la herramienta sstat

$ sstat -j <JOB(.STEP)> -o <FIELD1,FIELD2>

Parámetros:

  • JOB(.STEP): ID del un job o job.step específico

  • FIELD1,FIELD2,...: Lista de campos a mostrar (separados por comas, sin espacios)

  • La flag --helpformat muestra todos los campos disponibles

  • La flag --allsteps lista información de todos los job steps

Más información, consultar la man page: man sstat

[ fulano@eulogia ] ~ $ sstat -o JobID,MaxRSS,MaxVMSize,AveCPU,MaxDiskRead,MaxDiskWrite --allsteps -j 987654
JobID            MaxRSS  MaxVMSize     AveCPU  MaxDiskRead MaxDiskWrite
------------ ---------- ---------- ---------- ------------ ------------
987654.batch     42468K     40556K   00:00:23      2748259     22582639
987655.0        626896K    620228K 3-00:32:44   4525852436   3186520762

Interpretación:

  • MaxRSS: Memoria RAM máxima utilizada

  • MaxVMSize: Memoria virtual máxima

  • AveCPU: Tiempo promedio de CPU consumido

  • MaxDiskRead/Write: Operaciones de I/O en bytes

Trabajos finalizados#

Una vez terminado el job, Slurm tiene el registro completo del uso de recursos. Con esta información se ajustan los parámetros de los próximos trabajos.

Advertencia

seff y sacct están pensados para trabajos completados. Si se ejecutan sobre un job que todavía está corriendo, muestran valores parciales que pueden llevar a conclusiones erróneas sobre el uso de recursos.

Nota

Las estadísticas para trabajos cancelados o interrumpidos por limite de tiempo pueden ser imprecisas.

seff#

La forma más fácil de verificar la eficiencia de jobs es utilizar la herramienta seff.

$ seff <JOB-ID>

Donde el <JOB-ID> es el ID del job que fue lanzado.

[ fulano@eulogia ] ~ $ seff 123456
Job ID: 123456
Cluster: knl
User/Group: fulano/fulano
State: COMPLETED (exit code 0)
Nodes: 1
Cores per node: 256
CPU Utilized: 95-04:15:55
CPU Efficiency: 23.85% of 399-01:48:48 core-walltime
Job Wall-clock time: 1-13:24:48
Memory Utilized: 90.50 GB
Memory Efficiency: 99.11% of 91.32 GB (91.32 GB/node)

sacct#

Otra herramienta útil y más completa es sacct.

$ sacct -j <JOB-ID> -o <FIELD1,FIELD2>

Parámetros:

  • JOB-ID: ID del job a consultar

  • FIELD1,FIELD2,...: Lista de campos a mostrar (separados por comas, sin espacios)

  • La flag --helpformat muestra todos los campos disponibles

  • La flag --units=G muestra las cantidades de memoria en GB

Más información, consultar la man page: man sacct

[ fulano@eulogia ] ~ $ sacct -j 123456 --units=G -o JobID,Cluster,User,Group,State,ExitCode,NNodes,NCPUs,TotalCPU,Elapsed,MaxRSS,ReqMem
JobID           Cluster      User     Group      State ExitCode   NNodes      NCPUS   TotalCPU    Elapsed     MaxRSS     ReqMem
------------ ---------- --------- --------- ---------- -------- -------- ---------- ---------- ---------- ---------- ----------
123456              knl    fulano    fulano  COMPLETED      0:0        1        256 95-04:15:+ 1-13:24:48                91.32G
123456.batch        knl                      COMPLETED      0:0        1        256 95-04:15:+ 1-13:24:48     90.50G

Interpretación de las métricas:

  • NNodes/NCPUS: Utilizó 1 nodo con 256 cores reservados

  • TotalCPU: 95-04:15 = 95 días, 4 horas y 15 minutos de tiempo de CPU consumido

  • Elapsed: 1-13:24:48 = tiempo real transcurrido (1 dia, 13 horas, 24 minutos, 48 segundos)

  • MaxRSS: 90.50G = memoria máxima utilizada

  • ReqMem: 91.32G = memoria reservada

Visualización en Grafana#

También se puede usar la herramienta jobmetrics. La cual genera un enlace a un dashboard de Grafana con métricas de uso de CPU y memoria del job indicado. Esto funciona tanto para jobs en ejecución como jobs ya finalizados.

$ jobmetrics $JOBID

Donde JOBID es el ID del trabajo que se desea inspeccionar.

Por defecto, se genera un enlace que cubre el rango de tiempo completo del job. En caso de que el job aún se esté ejecutando, el rango se extenderá hasta el momento actual. Si se desea monitorear su progreso en tiempo real, puede utilizar la opción --follow.

$ squeue --me
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
12345     multi     test   fulano  R    1:50:00      1 rome01

$ jobmetrics 12345
https://stats.ccad.unc.edu.ar/d/QFHyg4I7k/serafin?from=20250616T033428&to=20250617T135536&var-host=rome01.rome