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/06/20 13:55] – [Uso de SLURM] fernando.guillencentro:servizos:hpc [2024/03/13 10:36] (actual) – [Envío de un trabajo al sistema de colas] fernando.guillen
Liña 17: Liña 17:
 |  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      -                           |
-|  <del>hpc-gpu1</del> |  Dell R740   |  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-gpu2   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  |
-* Es ctgpgpu8. Se integrará próximamente en cluster.+
 ===== 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ña 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".
Liña 60: 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 111: 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 145: 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>
  
Liña 161: 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 168: 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 239: 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 259: 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 275: 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 296: 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 335: 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 368: 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 409: 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: