wiki:accounting_slurm

Version 1 (modified by tonin, 2 years ago) (diff)

--

Accounting e informes de slurm

Slurm consta de un sistema de accounting y reporting que permite a los administradores y a los usuarios tener información restropectiva sobre el uso que se ha hecho del sistema HPC.

Es importante saber que slurm cuenta con dos entidades necesarias para estas actividades:

  • Account: Es la entidad propia de slurm que permite controlar el acceso y el uso a los recursos para un usuario o grupos de usuarios. Es interna de slurm y no tiene ninguna correspondencia con ningún directorio ni sistema de autenticación.
  • User: Es la entidad que mapea el usuario de slurm al usuario propio de linux correspondiente a la cuenta de usuario, que estará definido en los servicios de directorio o de autenticación de linux.

Para entenderlo prácticamente podriamos pensar en que account se corresponde con nuestro grupo de investigación y que user es el usuario que cada uno de los miembros del grupo tiene en el HPC.

De esa forma un account puede tener varios usuarios, y también un usuario puede pertenecer a varios account. A la hora de contar los recursos del HPC empleados, podremos hacerlo por account, por user o por una combinación de ambos.

Sobre los account y los user se pueden generar informes de uso. Pondremos aquí solo algunos ejemplos que pueden ser de interés desde el punto de vista del usuario.

El comando para generar los informes es sreport y por defecto genera informes sobre lo sucedido en las últimas 24 horas. Si queremos especificar otro rango temporal debemos usar los argumentos Start y End, que admiten los siguientes formatos:

              HH:MM[:SS] [AM|PM]
              MMDD[YY] o MM/DD[/YY] o MM.DD[.YY]
              MM/DD[/YY]-HH:MM[:SS]
              YYYY-MM-DD[THH:MM[:SS]]

La información completa del comando sreport se encuentra aquí

Muestra los usuarios que más han consumido desde el 1 de enero de 2023

(base) [root@admin01 logs]$ sreport user topuser start=2023-01-01
--------------------------------------------------------------------------------
Top 10 Users 2023-01-01T00:00:00 - 2023-05-07T23:59:59 (10969200 secs)
Usage reported in CPU Minutes
--------------------------------------------------------------------------------
  Cluster     Login     Proper Name         Account     Used   Energy 
--------- --------- --------------- --------------- -------- -------- 
    linux     user1                              si    47072        0 
    linux     user2                              si    11179        0 

Como se ve ambos usuarios corresponden al mismo account. Used nos indica el tiempo de cómputo usado por dichos usuarios.

Muestra la distribución de trabajos en función del número de cpus

(base) [root@admin01 logs]$ sreport  job SizesByAccount start=2023-01-01 -t percent Format=account Grouping=5,9
--------------------------------------------------------------------------------
Job Sizes 2023-01-01T00:00:00 - 2023-05-07T23:59:59 (10969200 secs)
Time reported in Percentage of Total
--------------------------------------------------------------------------------
  Account      0-4 CPUs      5-8 CPUs     >= 9 CPUs % of cluster 
--------- ------------- ------------- ------------- ------------ 
     root        27.25%        72.75%         0.00%      100.00% 

Aquí vemos que el 27.25% han consumido menos de 5 cpus, y el resto entre 5 y 8. Cambiando los valores de Grouping podemos cambiar dichos umbrales.

Ver la utilización del cluster

(base) [root@admin01 logs]$ sreport cluster utilization Start=2023-01-01
--------------------------------------------------------------------------------
Cluster Utilization 2023-01-01T00:00:00 - 2023-05-07T23:59:59
Usage reported in CPU Minutes
--------------------------------------------------------------------------------
  Cluster Allocate      Down PLND Dow       Idle Reserved   Reported 
--------- -------- --------- -------- ---------- -------- ---------- 
    linux    58251   7135949        0   40486311    37291   47717802 

Este informe nos muestra el consumo en minutos en cada uno de los estados de nuestro cluster, los estados son:

  • Allocate: Los que han usado nuestros trabajos.
  • Down: Los que no se han podido usar porque determinados nodos estaban fuera de servicio o en mantenimiento.
  • Idle: Los minutos que estaban disponibles pero no se han usado.
  • Reserved: Los minutos que se han reservado para que determinado/s usuario/s ejecuten sus trabajos en un momento dado.
  • Reported: El total de minutos de nuestro sistema.

Muestra una lista de trabajos pasados

Con el comando sacct es posible mostrar una lista de trabajos pasados y otra información no tan sumarizada como hace el sreport. Aquí tenemos un ejemplo de las primeras filas del listado de los trabajos del cluster desde el 1 de Enero de 2023:

(base) [root@admin01 logs]$ sacct -S2023-01-01 | head
       JobID    JobName  Partition    Account  AllocCPUS      State ExitCode 
------------ ---------- ---------- ---------- ---------- ---------- -------- 
3003_1            hello     normal         si          1  COMPLETED      0:0 
3003_1.batch      batch                    si          1  COMPLETED      0:0 
3003_1.0         python                    si          1  COMPLETED      0:0 
3003_2            hello     normal         si          1  COMPLETED      0:0 
3003_2.batch      batch                    si          1  COMPLETED      0:0 
3003_2.0         python                    si          1  COMPLETED      0:0 
3003_3            hello     normal         si          1  COMPLETED      0:0 
3003_3.batch      batch                    si          1  COMPLETED      0:0 

Si quisiéramos ver por ejemplo las cpus usadas por el trabajo con id 5000, usariamos este comando:

(base) [tonin@admin01 logs]$ sacct --jobs 5000 --allocations
       JobID    JobName  Partition    Account  AllocCPUS      State ExitCode 
------------ ---------- ---------- ---------- ---------- ---------- -------- 
5000         BioHub_Ba+     normal         si          5  COMPLETED      0:0 

Hay muchas posibilidades usando los argumentos del comando sacct que están explicados aquí