Diferenzas

Isto amosa as diferenzas entre a revisión seleccionada e a versión actual da páxina.

Enlazar a esta vista de comparación

Both sides previous revisionPrevious revision
Next revision
Previous revision
centro:servizos:hpc [2022/03/16 10:25] – [Ejecución de contenedores de software] fernando.guillencentro:servizos:hpc [2024/03/13 10:36] (actual) – [Envío de un trabajo al sistema de colas] fernando.guillen
Liña 12: Liña 12:
 Hay un almacenamiento distribuido accesible desde todos los nodos con 220 TB de capacidad conectado mediante una doble red de fibra de 25Gb. \\ Hay un almacenamiento distribuido accesible desde todos los nodos con 220 TB de capacidad conectado mediante una doble red de fibra de 25Gb. \\
 \\ \\
-^  Nombre           ^  Modelo      ^  Procesador   ^  Memoria  ^  GPU  +^  Nombre                    ^  Modelo      ^  Procesador                                     ^  Memoria  ^  GPU                         
-   hpc-login2     |  Dell R440    |  1 x Intel Xeon Silver 4208 CPU @ 2.10GHz (8c)  |  16 GB  |  -  + hpc-login2                |  Dell R440   |  1 x Intel Xeon Silver 4208 CPU @ 2.10GHz (8c)  |  16 GB    |  -                           
-   hpc-node[1-2]  |  Dell R740    |  2 x Intel Xeon Gold 5220 @2,2 GHz (18c)  |  192 GB         + hpc-node[1-2]             |  Dell R740   |  2 x Intel Xeon Gold 5220 @2,2 GHz (18c)        |  192 GB                              
-   hpc-node[3-9]  |  Dell R740    |  2 x Intel Xeon Gold 5220R @2,2 GHz (24c)                       192 GB       |  -  + hpc-node[3-9]             |  Dell R740   |  2 x Intel Xeon Gold 5220R @2,2 GHz (24c)        192 GB   |  -                           
-   hpc-fat1       |  Dell R840    |  4 x Xeon Gold 6248 @ 2.50GHz (20c)                    1 TB       |  -   + hpc-fat1                  |  Dell R840   |  4 x Xeon Gold 6248 @ 2.50GHz (20c)              1 TB     |  -                           
-   hpc-gpu[1-2]   |  Dell R740    |  2 x Intel Xeon Gold 5220 CPU @ 2.20GHz (18c)            192 GB        2x Nvidia Tesla V100S  + hpc-gpu[1-2]  |  Dell R740   |  2 x Intel Xeon Gold 5220 CPU @ 2.20GHz (18c)    192 GB   |  2x Nvidia Tesla V100S       
-   hpc-gpu3       |  Dell R7525   |  2 x AMD EPYC 7543 @2,80 GHz (32c)       256 GB       |  2x Nvidia Ampere A100 40GB   + hpc-gpu3                  |  Dell R7525  |  2 x AMD EPYC 7543 @2,80 GHz (32c)               256 GB   |  2x Nvidia Ampere A100 40GB  
-   hpc-gpu4       |  Dell R7525   |  2 x AMD EPYC 7543 @2,80 GHz (32c)        256 GB       |  1x Nvidia Ampere A100 80GB   |+ hpc-gpu4                  |  Dell R7525  |  2 x AMD EPYC 7543 @2,80 GHz (32c)               256 GB   |  1x Nvidia Ampere A100 80GB  |
  
 ===== Conexión al sistema ===== ===== Conexión al sistema =====
-Para acceder al clúster, hay que solicitarlo previamente a través de [[https://citius.usc.es/uxitic/incidencias/add|formulario de incidencias]]. Los usuarios que no tengan permiso de acceso recibirán un mensaje de "contraseñal incorrecta".+Para acceder al clúster, hay que solicitarlo previamente a través de [[https://citius.usc.es/uxitic/incidencias/add|formulario de incidencias]]. Los usuarios que no tengan permiso de acceso recibirán un mensaje de "contraseña incorrecta".
  
 El acceso se realiza mediante una conexión SSH al nodo de login: El acceso se realiza mediante una conexión SSH al nodo de login:
Liña 34: Liña 34:
 Cada nodo tiene una partición local de 1 TB para scratch, que se borra al terminar cada trabajo. Se puede acceder mediante la variable de entorno %%$LOCAL_SCRATCH%% en los scripts. \\ Cada nodo tiene una partición local de 1 TB para scratch, que se borra al terminar cada trabajo. Se puede acceder mediante la variable de entorno %%$LOCAL_SCRATCH%% en los scripts. \\
 Para datos que deban ser compartidos por grupos de usuarios, hay que solicitar la creación de una carpeta en el almacenamiento compartido que solo será accesible por los miembros del grupo.\\ Para datos que deban ser compartidos por grupos de usuarios, hay que solicitar la creación de una carpeta en el almacenamiento compartido que solo será accesible por los miembros del grupo.\\
-^  Directorio   ^  Variable   ^  Punto de montaje    Capacidad +^  Directorio        ^  Variable               ^  Punto de montaje              Capacidad 
-|  Home       %%$HOME%%     |  /mnt/beegfs/home/<username>     220 TB*         +|  Home               %%$HOME%%              |  /mnt/beegfs/home/<username>  220 TB*    
-|  Scratch local  |  %%$LOCAL_SCRATCH%%         varía                 1 TB         +|  Scratch local     |  %%$LOCAL_SCRATCH%%      varía                         1 TB       
-|  Carpeta de grupo             a definir        |  /mnt/beegfs/groups/<nombre>      220 TB*    |+|  Carpeta de grupo   %% $GRUPOS/<nombre>%%  |  /mnt/beegfs/groups/<nombre>   220 TB*    |
 %%* el almacenamiento es compartido%% %%* el almacenamiento es compartido%%
 === AVISO IMPORTANTE === === AVISO IMPORTANTE ===
Liña 59: Liña 59:
 </code> </code>
   * Para desmontar la imagen usar el script //umount_image.py// (usando SUDO)   * Para desmontar la imagen usar el script //umount_image.py// (usando SUDO)
 +<code bash> 
 +sudo umount_image.py 
 +</code> 
 +<note warning> 
 +El fichero solo puede montarse desde un único nodo si se hace en modo readwrite, pero puede montarse desde cualquier número de nodos en modo readonly. 
 +</note>
 El script de montaje tiene estas opciones: El script de montaje tiene estas opciones:
 <code> <code>
Liña 110: Liña 115:
   * Python 3.6.8   * Python 3.6.8
   * Perl 5.26.3   * Perl 5.26.3
 +En los nodos con GPU, además: 
 +  * nVidia Driver 510.47.03 
 +  * CUDA 11.6 
 +  * libcudnn 8.7
 Para usar cualquier otro software no instalado en el sistema u otra versión del mismo hay tres opciones: Para usar cualquier otro software no instalado en el sistema u otra versión del mismo hay tres opciones:
   - Usar Modules con los módulos que ya están instalados (o solicitar la instalación de un nuevo módulo si no está disponible)   - Usar Modules con los módulos que ya están instalados (o solicitar la instalación de un nuevo módulo si no está disponible)
Liña 144: Liña 152:
 uDocker está instalado como un módulo, así que es necesario cargarlo en el entorno: uDocker está instalado como un módulo, así que es necesario cargarlo en el entorno:
 <code bash> <code bash>
-ml uDocker+ml udocker
 </code> </code>
  
 === Apptainer/Singularity === === Apptainer/Singularity ===
-[[ https://sylabs.io/guides/3.8/user-guide/ | Documentacion de Singularity ]] \\+[[ https://sylabs.io/guides/3.8/user-guide/ | Documentacion de Apptainer/Singularity ]] \\
 Apptainer/Singularity está instalado en el sistema de cada nodo, por lo que no es necesario hacer nada para usarlo. Apptainer/Singularity está instalado en el sistema de cada nodo, por lo que no es necesario hacer nada para usarlo.
  
Liña 160: Liña 168:
 # Instalarlo  # Instalarlo 
 sh Miniconda3-py39_4.11.0-Linux-x86_64.sh sh Miniconda3-py39_4.11.0-Linux-x86_64.sh
 +# Inicializar miniconda para el shell bash
 +~/miniconda3/bin/conda init bash
 </code> </code>
- 
 ===== Uso de SLURM ===== ===== Uso de SLURM =====
 El gestor de colas en el cluster es [[ https://slurm.schedmd.com/documentation.html | SLURM ]]. \\ El gestor de colas en el cluster es [[ https://slurm.schedmd.com/documentation.html | SLURM ]]. \\
Liña 167: Liña 176:
 == Recursos disponibles == == Recursos disponibles ==
 <code bash> <code bash>
 +hpc-login2 ~]# ver_estado.sh
 +=============================================================================================================
 +  NODO     ESTADO                        CORES EN USO                           USO MEM     GPUS(Uso/Total)
 +=============================================================================================================
 + hpc-fat1    up   0%[--------------------------------------------------]( 0/80) RAM:  0%     ---
 + hpc-gpu1    up   2%[||------------------------------------------------]( 1/36) RAM: 47%   V100S (1/2)
 + hpc-gpu2    up   2%[||------------------------------------------------]( 1/36) RAM: 47%   V100S (1/2)
 + hpc-gpu3    up   0%[--------------------------------------------------]( 0/64) RAM:  0%   A100_40 (0/2)
 + hpc-gpu4    up   1%[|-------------------------------------------------]( 1/64) RAM: 35%   A100_80 (1/1)
 + hpc-node1   up   0%[--------------------------------------------------]( 0/36) RAM:  0%     ---
 + hpc-node2   up   0%[--------------------------------------------------]( 0/36) RAM:  0%     ---
 + hpc-node3   up   0%[--------------------------------------------------]( 0/48) RAM:  0%     ---
 + hpc-node4   up   0%[--------------------------------------------------]( 0/48) RAM:  0%     ---
 + hpc-node5   up   0%[--------------------------------------------------]( 0/48) RAM:  0%     ---
 + hpc-node6   up   0%[--------------------------------------------------]( 0/48) RAM:  0%     ---
 + hpc-node7   up   0%[--------------------------------------------------]( 0/48) RAM:  0%     ---
 + hpc-node8   up   0%[--------------------------------------------------]( 0/48) RAM:  0%     ---
 + hpc-node9   up   0%[--------------------------------------------------]( 0/48) RAM:  0%     ---
 +=============================================================================================================
 +TOTALES: [Cores : 3/688] [Mem(MB): 270000/3598464] [GPU: 3/ 7]
 +
 hpc-login2 ~]$ sinfo -e -o "%30N  %20c  %20m  %20f  %30G " --sort=N hpc-login2 ~]$ sinfo -e -o "%30N  %20c  %20m  %20f  %30G " --sort=N
 # Hay un alias para este comando: # Hay un alias para este comando:
Liña 177: Liña 207:
 hpc-node[1-2]                   36                    187645                cpu_intel             (null)                          hpc-node[1-2]                   36                    187645                cpu_intel             (null)                         
 hpc-node[3-9]                   48                    187645                cpu_intel             (null) hpc-node[3-9]                   48                    187645                cpu_intel             (null)
 +
 +# Para ver el uso actual de los recursos: (CPUS (Allocated/Idle/Other/Total))
 +hpc-login2 ~]$ sinfo -N -r -O NodeList,CPUsState,Memory,FreeMem,Gres,GresUsed
 +# Hay un alias para este comando:
 +hpc-login2 ~]$ ver_uso
 +NODELIST            CPUS(A/I/O/T)       MEMORY              FREE_MEM            GRES                GRES_USED
 +hpc-fat1            80/0/0/80           1027273             900850              (null)              gpu:0,mps:0
 +hpc-gpu3            2/62/0/64           253282              226026              gpu:A100_40:      gpu:A100_40:2(IDX:0-
 +hpc-gpu4            1/63/0/64           253282              244994              gpu:A100_80:1(S:0)  gpu:A100_80:1(IDX:0)
 +hpc-node1           36/0/0/36           187645              121401              (null)              gpu:0,mps:0
 +hpc-node2           36/0/0/36           187645              130012              (null)              gpu:0,mps:0
 +hpc-node3           36/12/0/48          187645              126739              (null)              gpu:0,mps:0
 +hpc-node4           36/12/0/48          187645              126959              (null)              gpu:0,mps:0
 +hpc-node5           36/12/0/48          187645              128572              (null)              gpu:0,mps:0
 +hpc-node6           36/12/0/48          187645              127699              (null)              gpu:0,mps:0
 +hpc-node7           36/12/0/48          187645              127002              (null)              gpu:0,mps:0
 +hpc-node8           36/12/0/48          187645              128182              (null)              gpu:0,mps:0
 +hpc-node9           36/12/0/48          187645              127312              (null)              gpu:0,mps:0
 </code> </code>
 ==== Nodos ==== ==== Nodos ====
Liña 220: Liña 268:
 # Hay un alias que muestra solo la información más relevante: # Hay un alias que muestra solo la información más relevante:
 hpc-login2 ~]$ ver_colas hpc-login2 ~]$ ver_colas
-      Name   Priority           Flags UsageFactor                     MaxTRES     MaxWall     MaxTRESPU MaxJobsPU MaxSubmitPU  +      Name   Priority                        MaxTRES     MaxWall            MaxTRESPU MaxJobsPU MaxSubmitPU  
----------- ---------- --------------- ----------- --------------------------- ----------- ------------- --------- -----------  +---------- ---------- ------------------------------ ----------- -------------------- --------- -----------  
-   regular        100     DenyOnLimit    1.000000   cpu=200,gres/gpu=1,node=4  4-04:00:00                      10          50  +   regular        100      cpu=200,gres/gpu=1,node=4  4-04:00:00       cpu=200,node=4        10          50  
-interactive       200     DenyOnLimit    1.000000                      node=1    04:00:00        node=1                   1  +interacti+        200                         node=1    04:00:00               node=1                   1  
-    urgent        300     DenyOnLimit    2.000000           gres/gpu=1,node=1    04:00:00        cpu=36                  15  +    urgent        300              gres/gpu=1,node=1    04:00:00               cpu=36                  15  
-      long        100     DenyOnLimit    1.000000           gres/gpu=1,node=4  8-08:00:00                                      +      long        100              gres/gpu=1,node=4  8-04:00:00                                         
-     large        100     DenyOnLimit    1.000000          cpu=200,gres/gpu=2  4-04:00:00                      10          25  +     large        100             cpu=200,gres/gpu=2  4-04:00:00                                       10  
-     admin        500                    0.000000 +     admin        500                                                                                        
 +     small        100        cpu=6,gres/gpu=0,node=2  6-00:00:00              cpu=400        400         800  
 +     short        150                   cpu=6,node=2    04:00:00                              40         100 
 </code> </code>
 # Priority: es la prioridad relativa de cada cola. \\ # Priority: es la prioridad relativa de cada cola. \\
Liña 240: Liña 290:
 ==== Envío de un trabajo al sistema de colas ==== ==== Envío de un trabajo al sistema de colas ====
 == Especificación de recursos == == Especificación de recursos ==
-Por defecto, si se envía un trabajo sin especificar nada el sistema lo envia a la QOS por defecto (regular) y le asigna un nodo, una CPU y toda la memoria disponible. El límite de tiempo para la ejecución del trabajo es el de la cola (4 días y 4 horas). +Por defecto, si se envía un trabajo sin especificar nada el sistema lo envia a la QOS por defecto (regular) y le asigna un nodo, una CPU y 4 GB de RAM. El límite de tiempo para la ejecución del trabajo es el de la cola (4 días y 4 horas). 
 Esto es muy ineficiente, lo ideal es especificar en la medida de lo posible al menos tres parámetros a la hora de enviar los trabajos: Esto es muy ineficiente, lo ideal es especificar en la medida de lo posible al menos tres parámetros a la hora de enviar los trabajos:
   -  %%El número de nodos (-N o --nodes), tareas (-n o --ntasks) y/o CPU por tarea (-c o --cpus-per-task).%%   -  %%El número de nodos (-N o --nodes), tareas (-n o --ntasks) y/o CPU por tarea (-c o --cpus-per-task).%%
Liña 256: Liña 306:
  
 == Cómo se asignan los recursos == == Cómo se asignan los recursos ==
-Por defecto el método de asignación entre nodos es la asignación en bloque ( se asignan todos los cores disponibles en un nodo antes de usar otro). El método de asignación por defecto dentro de cada nodo es la asignación cíclica  (se van repartiendo por igual los cores requeridos entre los sockests disponibles en el nodo). +Por defecto el método de asignación entre nodos es la asignación en bloque ( se asignan todos los cores disponibles en un nodo antes de usar otro). El método de asignación por defecto dentro de cada nodo es la asignación cíclica  (se van repartiendo por igual los cores requeridos entre los sockets disponibles en el nodo). 
  
 == Calculo de la prioridad == == Calculo de la prioridad ==
Liña 277: Liña 327:
  
 == Envío de trabajos == == Envío de trabajos ==
 +  - sbatch
   - salloc   - salloc
   - srun   - srun
-  - sbatch 
  
-1. SALLOC \\ + 
-Sirve para obtener de forma inmediata una asignación de recursos (nodos). En cuanto se obtiene se ejecuta el comando especificado o una shell en su defecto.  +1. SBATCH \\
-<code bash> +
-# Obtener 5 nodos y lanzar un trabajo. +
-hpc-login2 ~]$ salloc -N5 myprogram +
-# Obtener acceso interactivo a un nodo (Pulsar Ctrl+D para terminar el acceso): +
-hpc-login2 ~]$ salloc -N1  +
-</code> +
-2. SRUN \\ +
-Sirve para lanzar un trabajo paralelo ( es preferible a usar mpirun ). Es interactivo y bloqueante. +
-<code bash> +
-# Lanzar un hostname en 2 nodos +
-hpc-login2 ~]$ srun -N2 hostname +
-hpc-node1 +
-hpc-node2 +
-</code> +
-3. SBATCH \\+
 Sirve para enviar un script al sistema de colas. Es de procesamiento por lotes y no bloqueante. Sirve para enviar un script al sistema de colas. Es de procesamiento por lotes y no bloqueante.
 <code bash> <code bash>
Liña 316: Liña 351:
 hpc-login2 ~]$ sbatch trabajo_ejemplo.sh  hpc-login2 ~]$ sbatch trabajo_ejemplo.sh 
 </code> </code>
 +2. SALLOC \\
 +Sirve para obtener de forma inmediata una asignación de recursos (nodos). En cuanto se obtiene se ejecuta el comando especificado o una shell en su defecto. 
 +<code bash>
 +# Obtener 5 nodos y lanzar un trabajo.
 +hpc-login2 ~]$ salloc -N5 myprogram
 +# Obtener acceso interactivo a un nodo (Pulsar Ctrl+D para terminar el acceso):
 +hpc-login2 ~]$ salloc -N1 
 +# Obtener acceso interactivo a un nodo DE FORMA EXCLUSIVA
 +hpc-login2 ~]$ salloc -N1 --exclusive
 +</code>
 +3. SRUN \\
 +Sirve para lanzar un trabajo paralelo ( es preferible a usar mpirun ). Es interactivo y bloqueante.
 +<code bash>
 +# Lanzar un hostname en 2 nodos
 +hpc-login2 ~]$ srun -N2 hostname
 +hpc-node1
 +hpc-node2
 +</code>
 +
  
 ==== Uso de los nodos con GPU ==== ==== Uso de los nodos con GPU ====
Liña 349: Liña 403:
 ## Ver el uso de recursos de un trabajo en ejecución: ## Ver el uso de recursos de un trabajo en ejecución:
 hpc-login2 ~]$ sstat <JOBID> hpc-login2 ~]$ sstat <JOBID>
 +
 </code> </code>
 ==== Controlar la salida de los trabajos ==== ==== Controlar la salida de los trabajos ====
Liña 390: Liña 445:
 JOBID PARTITION     NAME     USER      STATE       TIME  NODES NODELIST(REASON) JOBID PARTITION     NAME     USER      STATE       TIME  NODES NODELIST(REASON)
 6547  defaultPa  example <username>  RUNNING   22:54:55      1 hpc-fat1 6547  defaultPa  example <username>  RUNNING   22:54:55      1 hpc-fat1
 +
 +## Ver estado de uso de las colas del cluster:
 +hpc-login2 ~]$ estado_colas.sh
 +JOBS PER USER:
 +--------------
 +       usuario.uno:  3
 +       usuario.dos:  1
 +
 +JOBS PER QOS:
 +--------------
 +             regular:  3
 +                long:  1
 +
 +JOBS PER STATE:
 +--------------
 +             RUNNING:  3
 +             PENDING:  1
 +==========================================
 +Total JOBS in cluster:  4
 </code> </code>
 Estados (STATE) más comunes de un trabajo: Estados (STATE) más comunes de un trabajo: