== Uso de la Nvidia DGX == Para 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}}}: {{{#!bash PARTITION AVAIL TIMELIMIT NODES STATE NODELIST normal* up infinite 4 mix x440-[01,15,17-18] normal* up infinite 6 alloc x440-[09-14] normal* up infinite 14 idle x440-[02-08,16,19-24] fast up infinite 4 idle x440-[21-24] fat up infinite 1 idle x808 gpu up infinite 1 idle averroes-dgx }}} Aquellos 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. A continuación se muestra un script sencillo de Slurm que lanza un trabajo en la DGX: {{{#!bash #!/bin/bash #SBATCH --job-name=dgx_job #SBATCH --partition=gpu #SBATCH --chdir=/home/rbarbudo #SBATCH --gres=gpu:2 # Número de GPUs #SBATCH --cpus-per-task=4 # Cores de CPU #SBATCH --mem=16G # Memoria RAM #SBATCH --output=%j.out . miniconda3/bin/activate conda activate vllm python check_gpus.py }}} Como 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: - {{{#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 - {{{#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 - {{{#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//dgx}}} que se ve dentro del login server, en la DGX, se corresponde con {{{/home/}}}. 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. El script de python que se ejecuta en el shell script es el siguiente: {{{#!python import torch import os def main(): print("--- Verificación de Recursos en DGX ---") # Información de Slurm job_id = os.environ.get('SLURM_JOB_ID', 'N/A') print(f"ID del Trabajo: {job_id}") # Verificación de PyTorch y CUDA if torch.cuda.is_available(): device_count = torch.cuda.device_count() print(f"GPUs reservadas por Slurm y vistas por PyTorch: {device_count}") for i in range(device_count): props = torch.cuda.get_device_properties(i) print(f" -> GPU {i}: {props.name} ({props.total_memory / 1024**2:.0f} MB)") else: print("¡ERROR!: PyTorch no detecta GPUs. Verifica la reserva '--gres=gpu:X'.") if __name__ == "__main__": main() }}} Como 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: {{{ --- Verificación de Recursos en DGX --- ID del Trabajo: 832796 GPUs reservadas por Slurm y vistas por PyTorch: 2 -> GPU 0: Tesla V100-SXM3-32GB (32501 MB) -> GPU 1: Tesla V100-SXM3-32GB (32501 MB) }}}