🔎 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 teclaHse 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íficoFIELD1,FIELD2,...: Lista de campos a mostrar (separados por comas, sin espacios)La flag
--helpformatmuestra todos los campos disponiblesLa flag
--allstepslista 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 utilizadaMaxVMSize: Memoria virtual máximaAveCPU: Tiempo promedio de CPU consumidoMaxDiskRead/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 consultarFIELD1,FIELD2,...: Lista de campos a mostrar (separados por comas, sin espacios)La flag
--helpformatmuestra todos los campos disponiblesLa flag
--units=Gmuestra 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 consumidoElapsed:
1-13:24:48= tiempo real transcurrido (1 dia, 13 horas, 24 minutos, 48 segundos)MaxRSS:
90.50G= memoria máxima utilizadaReqMem:
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