Computación GPU en TeideHPC#
El clúster TeideHPC tiene una serie de nodos que tienen conectadas unidades de procesamiento de gráficos de propósito general (GPGPU) de NVIDIA. Es posible usar herramientas CUDA para ejecutar trabajo computacional en ellas y, en algunos casos de uso, ver aceleraciones muy significativas.
Como explicamos en la sección cómo ejecutar trabajos podemos utilizar 3 formas diferentes de enviar un trabajo a la cola de trabajos: utilizando una sesión interactiva, iniciando la aplicación en tiempo real o medio de un script de ejecución.
GPU en Slurm#
Para solicitar una sola GPU en slurm simplemente agregue la directiva #SBATCH --gres=gpu:<model>
a su script de envío de trabajo y le dará acceso a una GPU. Para solicitar varias GPU, agregue #SBATCH --gres=gpu:<modelo>:n
, donde ‘n’ es la cantidad de GPU.
Entonces, si desea 1 CPU y 2 GPU de nuestros nodos GPU de uso general en la partición 'gpu', debe especificar:
Si prefiere usar una sesión interactiva, puede usar:
Mientras está en el nodo GPU, puede ejecutar nvidia-smi para obtener información sobre las GPU asignadas.
Especificación del tipo de GPU o partición MIG a usar.#
Los modelos de GPU actualmente disponibles en nuestro clúster se pueden encontrar aquí pero como explicamos en MIG section podemos especificar el tipo de GPU o la partición MIG para usar.
Hay dos métodos que se pueden usar. Visite la página de solicitud recurso GPU y computo para una explición más detallada:
Select GPU using --constraint= #
Seleccionar GPU usando --gres=gpu::1 or --gres=gpu::1 #
Tenga en cuenta que --gres especifica los recursos por nodo, por lo que para el trabajo de varios nodos solo necesita especificar cuántos gpus necesita por nodo.
Listar modelos de GPU y particiones MIG#
Para averiguar qué tipos específicos de gpus están disponibles en una partición, muestre la definición de una partición con scontrol busque en la categoría TRES.
scontrol show partition express
PartitionName=express
...
MaxNodes=UNLIMITED MaxTime=03:00:00 MinNodes=0 LLN=NO MaxCPUsPerNode=UNLIMITED
Nodes=node0303-2,node0304-[1-4],node1301-[1-4],node1302-[1-4],node1303-[1-4],
....
State=UP TotalCPUs=2424 TotalNodes=88 SelectTypeParameters=NONE
...
DefMemPerNode=UNLIMITED MaxMemPerNode=UNLIMITED
TRES=cpu=2424,mem=7565306M,node=88,billing=2424,gres/gpu=79,gres/gpu:1g.5gb=2,gres/gpu:2g.10gb=1,gres/gpu:3g.20gb=1,gres/gpu:a100=71,gres/gpu:t4=4
Nvidia A100
gpu:a100
a100-mig
- gpu:1g.5gb
- gpu:2g.10gb
- gpu:3g.20gb
Nvidia Tesla T4
- gpu:t4
Scripts de ejemplo para un trabajo de GPU:#
- Ejemplo usando una GPU Nvidia A100 compleata
#!/bin/bash
#SBATCH --partition=batch
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --gres=gpu:a100:1
#SBATCH --mem=8G
#SBATCH --time=1:00:00
module purge
module load CUDA/12.0.0
nvidia-smi
sleep 20
- Ejemplo usando una partición MIG en una Nvidia A100
#!/bin/bash
#SBATCH --partition=batch
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --gres=gpu:2g.10gb:1
#SBATCH --mem=16G
#SBATCH --time=1:00:00
module purge
module load NVHPC/22.11-CUDA-11.8.0
nvidia-smi
sleep 20
Más ejemplos.#
Visita nuestro github https://github.com/hpciter/user_codes