Changes between Initial Version and Version 1 of dgx_task


Ignore:
Timestamp:
May 20, 2026, 2:55:39 PM (8 days ago)
Author:
i22balur
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • dgx_task

    v1 v1  
     1
     2== Uso de la Nvidia DGX ==
     3
     4Para hacer uso de la Nvidia DGX no basta con tener un usuario en el HPC, es necesario solicitar acceso a través del [https://cau.info.uco.es/servicedesk/customer/portal/3/group/10/create/65 CAU]. Para saber si un usuario está autorizado a usar la DGX basta con ejecutar el comando {{{sinfo}}} desde el login server. En caso de estarlo, le aparecerá la partición {{{gpu}}}:
     5
     6{{{#!bash
     7PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
     8normal*      up   infinite      4    mix x440-[01,15,17-18]
     9normal*      up   infinite      6  alloc x440-[09-14]
     10normal*      up   infinite     14   idle x440-[02-08,16,19-24]
     11fast         up   infinite      4   idle x440-[21-24]
     12fat          up   infinite      1   idle x808
     13gpu          up   infinite      1   idle averroes-dgx
     14}}}
     15
     16Aquellos usuarios con acceso a la DGX tendrán en su home del login server un directorio especial llamado {{{dgx}}} cuyo contenido estará almacenado localmente en los discos de la DGX. Solo el contenido de este directorio estará disponible para los trabajos que se manden a la DGX. El motivo de esto es aprovechar los discos de la DGX ya que tienen una mayor velocidad de lectura y escritura que los empleados en Lustre, los cuales pueden suponer un cuello de botellas en tareas de IA como el entrenamiento de redes neuronales.
     17
     18A continuación se muestra un script sencillo de Slurm que lanza un trabajo en la DGX:
     19
     20{{{#!bash
     21#!/bin/bash
     22#SBATCH --job-name=dgx_job
     23#SBATCH --partition=gpu
     24#SBATCH --chdir=/home/rbarbudo
     25#SBATCH --gres=gpu:2              # Número de GPUs
     26#SBATCH --cpus-per-task=4         # Cores de CPU
     27#SBATCH --mem=16G                 # Memoria RAM
     28#SBATCH --output=%j.out
     29
     30. miniconda3/bin/activate
     31conda activate vllm
     32python check_gpus.py
     33}}}
     34
     35Como se puede apreciar es muy similar a los que se utilizan para lanzar trabajos en el clúster y en el fat node, aunque hay una serie de puntos a considerar:
     36
     37- {{{#SBATCH --partition=gpu}}}: Indica que lo vamos a mandar a la cola en la que los nodos tienen GPUs, en nuestro caso a la DGX
     38- {{{#SBATCH --gres=gpu:2}}}: Indica el número de GPUs que se reservan. Los jobs que lancemos no podrán acceder a más GPUs de las que se hayan reservado
     39- {{{#SBATCH --chdir=/home/rbarbudo}}}: Es el directorio en el que vamos a trabajar dentro de la DGX. Hay que tener en cuenta que la ruta {{{/home/<usuario>/dgx}}} que se ve dentro del login server, en la DGX, se corresponde con {{{/home/<usuario>}}}. Por ejemplo, dentro del login server, el fichero {{{check_gpus.py}}} se encuentra dentro de {{{/home/rbarbudo/dgx}}}, aunque dentro de la DGX se encuentra en {{{/home/rbarbudo}}}. Se debe tener en cuenta que cuando mandamos un trabajo a la DGX está solo tiene acceso a los ficheros que están en sus discos.
     40
     41El script de python que se ejecuta en el shell script es el siguiente:
     42
     43{{{#!python
     44import torch
     45import os
     46
     47def main():
     48    print("--- Verificación de Recursos en DGX ---")
     49   
     50    # Información de Slurm
     51    job_id = os.environ.get('SLURM_JOB_ID', 'N/A')
     52    print(f"ID del Trabajo: {job_id}")
     53
     54    # Verificación de PyTorch y CUDA
     55    if torch.cuda.is_available():
     56        device_count = torch.cuda.device_count()
     57        print(f"GPUs reservadas por Slurm y vistas por PyTorch: {device_count}")
     58       
     59        for i in range(device_count):
     60            props = torch.cuda.get_device_properties(i)
     61            print(f"  -> GPU {i}: {props.name} ({props.total_memory / 1024**2:.0f} MB)")
     62    else:
     63        print("¡ERROR!: PyTorch no detecta GPUs. Verifica la reserva '--gres=gpu:X'.")
     64
     65if __name__ == "__main__":
     66    main()
     67}}}
     68
     69
     70Como se puede apreciar, estamos utilizando la librería {{{torch}}}, muy común en el contexto de IA, para imprimir el número de GPUs accesibles. Si ejecutásemos el script reservando dos GPUs tendríamos la siguiente salida:
     71
     72{{{
     73--- Verificación de Recursos en DGX ---
     74ID del Trabajo: 832796
     75GPUs reservadas por Slurm y vistas por PyTorch: 2
     76  -> GPU 0: Tesla V100-SXM3-32GB (32501 MB)
     77  -> GPU 1: Tesla V100-SXM3-32GB (32501 MB)
     78}}}