Cómo solicitar recursos de GPU y CPU#
Comprenda cómo está configurado nuestro clúster"
- Para solicitar nodos de GPU o GPU primero debe comprender cómo está configurado su clúster, por este motivo, le recomendamos que consulte la página inicial donde tenemos una descripción del clúster que le puede ayudar.
- Básicamente hay 2 arquitecturas: icelake (nodos de GPU) y sandy (nodos de CPU).
- En base a estas arquitecturas se sólicitan los recursos dentro del cluster.
Principalmente, hay 2 formas de especificar que recurso que se usará al enviar un trabajo usando constraints y usando gres.
Constraints de slurm en TeideHPC#
Los nodos pueden tener features asignadas por los administradores de TeideHPC. Los usuarios pueden especificar cuáles de estas features son requeridas por su trabajo utilizando la opción de --constrains. Sólo los nodos que tengan características que coincidan con las restricciones del trabajo se utilizarán para satisfacer la solicitud.
Para obtener una explicación más detallada de las restricciones, puede consultar la [documentación oficial de slurm] (https://slurm.schedmd.com/sbatch.html#OPT_constraint)
En el caso de TeideHPC, para averiguar la lista de contrain definidas en el cluster sólo ha de mirar la columna AVAIL FEATURES después de ejecutar el siguiente comando.
NODELIST CPUS MEMORY AVAIL_FEATURES GRES
node18109-1 64 257214 ilk,gpu,a100 gpu:a100:8
node2204-[3-4] 20 31906 ivy (null)
node17109-1,node17110-1,node18110-1,node 64 257214 ilk,viz,t4 gpu:t4:1
node0303-2,node0304-[1-4],node1301-[1-4] 16 30000+ sandy (null)
node17102-1 64 257214 ilk,gpu,a100,3g.20gb,2g.10gb,1g.5gb gpu:3g.20gb:1(S:0),gpu:2g.10gb
node17101-1,node17103-1,node17104-1,node 64 257214 ilk,gpu,a100 gpu:a100:4(S:0-1)
constrains | Tipo | Definición |
---|---|---|
ilk | arquitetura nodos | Permite seleccionar un nodo tipo icelake (tienen GPU) |
sandy | arquitetura nodos | Permite seleccionar un nodo de cómputo con arquitectura sandy-bridge |
ivy | arquitetura nodos | Permite seleccionar un nodo de cómputo con arquitectura ivy-bridge |
viz | nodo de visualización | Permite seleccionar un nodo de GPU especializado en visualización (Nodos con Nvidia T4) |
gpu | nodos de gpu | Permite seleccionar un nodo gpu (Nodos con NVidia A100) |
a100 | modelo gpu | Permite seleccionar un nodo gpu con NVidia A100 directamente |
t4 | modelo gpu | Permite seleccionar un nodo gpu con NVidia T4 directamente |
Ejemplo de uso de constrains#
Los siguientes comandos de sesión interactiva tienen su equivalente en batch. Sólo necesita añadir la directiva #SBATCH --constraint=<constraint>
en tus scripts.
- Para un nodo de cómputo con arquitectura sandy (16 cores | 32/64 GB).
- Para un nodo de cómputo con arquitectura icelake (64 cores | 256 GB)..
- Para un nodo de GPU (icelake) con una GPU (Nvidia A100)
- Para un nodo de GPU especializado en visualización (Nvidia Tesla T4).
Recursos genéricos (Generic Resource) GRES#
En Slurm, GRES significa Recurso Genérico. GRES es una función que le permite especificar y administrar varios tipos de recursos genéricos, como GPU (Unidades de procesamiento de gráficos) dentro de un clúster informático.
La funcionalidad GRES de Slurm permite la asignación, la programación y el seguimiento eficientes de estos recursos para los trabajos enviados. Ayuda a garantizar que los recursos solicitados estén disponibles y sean utilizados correctamente por los trabajos que los requieren.
Para usar GRES de manera efectiva, debe comprender cómo está configurado su clúster, cómo se definen los tipos y cantidades de GRES disponibles y especificar los requisitos de GRES al enviar trabajos.
Para obtener los tipos de GRES definidos en el clúster, puede usar:
Para conocer la lista de GRES en TeideHPC mira la columna GRES después de ejecutar este comando.
NODELIST CPUS MEMORY AVAIL_FEATURES GRES
node18109-1 64 257214 ilk,gpu,a100 gpu:a100:8
node2204-[3-4] 20 31906 ivy (null)
node17109-1,node17110-1,node18110-1,node 64 257214 ilk,viz,t4 gpu:t4:1
node0303-2,node0304-[1-4],node1301-[1-4] 16 30000+ sandy (null)
node17102-1 64 257214 ilk,gpu,a100,3g.20gb,2g.10gb,1g.5gb gpu:3g.20gb:1(S:0),gpu:2g.10gb
node17101-1,node17103-1,node17104-1,node 64 257214 ilk,gpu,a100 gpu:a100:4(S:0-1)
Alternativamente, también se puede ver enumerando y filtrando el listado de nodos:
....
NodeName=node1315-4 Arch=x86_64 CoresPerSocket=8
NodeName=node2204-3 Arch=x86_64 CoresPerSocket=10
...
NodeName=node17101-1 Arch=x86_64 CoresPerSocket=32
CfgTRES=cpu=64,mem=257214M,billing=64,gres/gpu=4,gres/gpu:a100=4
NodeName=node17102-1 Arch=x86_64 CoresPerSocket=32
CfgTRES=cpu=64,mem=257214M,billing=64,gres/gpu=7,gres/gpu:1g.5gb=2,gres/gpu:2g.10gb=1,gres/gpu:3g.20gb=1,gres/gpu:a100=3
NodeName=node17103-1 Arch=x86_64 CoresPerSocket=32
CfgTRES=cpu=64,mem=257214M,billing=64,gres/gpu=4,gres/gpu:a100=4
NodeName=node17104-1 Arch=x86_64 CoresPerSocket=32
CfgTRES=cpu=64,mem=257214M,billing=64,gres/gpu=4,gres/gpu:a100=4
...
As you can see, each node in cluster may have a different definition. For example this node has 4 GPUs NVidia A100.
NodeName=node17104-1 Arch=x86_64 CoresPerSocket=32
CfgTRES=cpu=64,mem=257214M,billing=64,gres/gpu=4,gres/gpu:a100=4
and this node has 3 NVidia A100 and 1 partitioned GPU (Nvidia A100).
NodeName=node17102-1 Arch=x86_64 CoresPerSocket=32
CfgTRES=cpu=64,mem=257214M,billing=64,gres/gpu=7,gres/gpu:1g.5gb=2,gres/gpu:2g.10gb=1,gres/gpu:3g.20gb=1,gres/gpu:a100=3
Para entender cúal es el significado de gres/gpu:1g.5gb=2,gres/gpu:2g.10gb=1,gres/gpu:3g.20gb=1,gres/gpu:a100=3
primero debe entender qué es MIG
Ejemplos de uso de GRES#
- Para un nodo de GPU (icelake) con una GPU (Nvidia A100).
- Para una partición MIG de GPU (Nvidia A100) .
- Para GPUs especializadas en visualización (Nvidia Tesla T4).