Táboa de Contidos

Servidores de computación GPGPU

Descrición do servizo

Estes servidores están destinados á computación con GPU (GPGPU), orientados a tarefas de cálculo intensivo, aprendizaxe automática, procesamento de datos e simulación científica que requiran aceleración por hardware gráfico.

Servidores de acceso libre

Nestes servidores pode solicitar acceso calquera investigador/a do centro. O acceso concédese previa solicitude e validación.

Nodo Servidor CPU RAM GPUs Sistema Operativo Gestión de trabajos
ctgpgpu4 PowerEdge R730 2 × Intel Xeon E5-2623 v4 128 GB 2 × Nvidia GP102GL 24GB (Tesla P40, 2016) AlmaLinux 9.1
• CUDA 12.0
Slurm (uso obligatorio)

Servidores de acceso restrinxido

Nestes servidores o acceso está restrinxido a un grupo concreto, proxecto específico ou ben está máis controlado por cuestións de xestión e planificación de recursos.

É imprescindible comprobar a información actualizada en Xici no momento de solicitar o servizo, onde se detalla a casuística particular de cada servidor (criterios de acceso, prioridades, condicións de uso, etc.).

Nodo Servidor CPU RAM GPUs Sistema Operativo Xestión de traballos
ctgpgpu5 PowerEdge R730 2 × Intel Xeon E5-2623 v4 128 GB 2 × Nvidia GP102GL (Tesla P40) Ubuntu 22.04
• Driver Nvidia 590
• CUDA Toolkit 12.5 y 13.1 (por defecto)
n/a
ctgpgpu6 SIE LADON 4214 2 × Intel Xeon Silver 4214 192 GB Nvidia Quadro P6000 24GB (2018)
Nvidia Quadro RTX8000 48GB (2019)
2 × Nvidia A30 24GB (2020)
CentOS 7.9
• Driver Nvidia 535.86.10 (CUDA 12.2)
n/a
ctgpgpu9 Dell PowerEdge R750 2 × Intel Xeon Gold 6326 128 GB 2 × NVIDIA Ampere A100 80GB AlmaLinux 8.6
• Driver NVIDIA 515.48.07 (CUDA 11.7)
n/a
ctgpgpu11 Gigabyte G482-Z54 2 × AMD EPYC 7413 @2.65 GHz (24c) 256 GB 5 × NVIDIA Ampere A100 80GB AlmaLinux 9.1
• Driver NVIDIA 520.61.05 (CUDA 11.8)
n/a
ctgpgpu12 Dell PowerEdge R760 2 × Intel Xeon Silver 4410Y 384 GB 2 × NVIDIA Hopper H100 80GB AlmaLinux 9.2
• Driver NVIDIA 555.42.06 (CUDA 12.5)
n/a
ctgpgpu15 ⚠️ SIE LADON (Gigabyte) 2x AMD EPYC 9474F (48c) 768 GB 4 × NVIDIA H200 NVL AlmaLinux 9.6 gpuctl*
ctgpgpu16 ⚠️ SIE LADON (Gigabyte) 2x AMD EPYC 9474F (48c) 768 GB 4 × NVIDIA H200 NVL AlmaLinux 9.7 gpuctl*
ctgpgpu17 ⚠️ SIE LADON (Gigabyte) 2x AMD EPYC 9474F (48c) 768 GB 4 × NVIDIA H200 NVL AlmaLinux 9.7 gpuctl*
ctgpgpu18 ⚠️ SIE LADON (MegaRAC SP-X) 2x AMD EPYC 9335 (24c) 1536 GB 4 × NVIDIA H200 Ubuntu 22.04 gpuctl

⚠️ Os servidores ctgpgpu15, ctgpgpu16, ctgpgpu17 e ctgpgpu18 teñen unha instalación e asignacións temporais, e a súa configuración e accesos poderían verse alterados arredor de maio de 2026.

(*) Polo momento, estes servidores utilizan unicamente ts (task-spooler) pero está prevista unha migración pronto a un sistema baseado en gpuctl con uso de tsp (task-spooler) opcional.

Alta no servizo

Non todos os servidores están dispoñibles en todo momento para calqueira uso. Para acceder aos servidores, hai que solicitalo previamente a través do formulario de incidencias. Os usuarios que non teñan permiso de acceso recibirán unha mensaxe de contrasinal incorrecto.

Manual de usuario

Conexión cos servidores

Para conectarse ós servidores, debes facelo a través de SSH. O nome e as direccións IP dos servidores son as seguintes:

Nodo FQDN IP
ctgpgpu4 ctgpgpu4.inv.usc.es 172.16.242.201
ctgpgpu5 ctgpgpu5.inv.usc.es 172.16.242.202
ctgpgpu6 ctgpgpu6.inv.usc.es 172.16.242.205
ctgpgpu9 ctgpgpu9.inv.usc.es 172.16.242.94
ctgpgpu11 ctgpgpu11.inv.usc.es 172.16.242.96
ctgpgpu12 ctgpgpu12.inv.usc.es 172.16.242.97
ctgpgpu15 ctgpgpu15.inv.usc.es 172.16.242.207
ctgpgpu16 ctgpgpu16.inv.usc.es 172.16.242.212
ctgpgpu17 ctgpgpu17.inv.usc.es 172.16.242.213
ctgpgpu18 ctgpgpu18.inv.usc.es 172.16.242.208

A conexión só está dispoñible dende a rede do centro. Para conectarse dende outras localizacións ou dende a rede da RAI é preciso facer uso da VPN ou da parasela SSH.

Xestión dos traballos con SLURM

Nos servidores nos que hai un xestor de colas Slurm é obrigatorio o seu uso para enviar traballos e así evitar conflitos entre procesos, xa que non se deben executar dous traballos ó mesmo tempo.

Para enviar un traballo á cola utilízase o comando srun:

srun programa_cuda argumentos_programa_cuda

O proceso srun agarda a que o traballo se execute para devolver o control ó usuario. Se non se quere agardar, pódense utilizar xestores de sesións de consola coma screen, e así poder deixar o traballo á espera e desconectar a sesión sen preocuparse e recuperar a saída de consola máis adiante.

Alternativamente, pódese utilizar nohup e pasar o traballo a segundo plano con &. Neste caso a saída gárdase no arquivo nohup.out:

nohup srun programa_cuda argumentos_programa_cuda &

Para ver o estado da cola utilízase o comando squeue. O comando mostra unha saída similar a esta:

JOBID PARTITION     NAME     USER  ST       TIME  NODES NODELIST(REASON)
9  servidore ca_water pablo.qu    PD       0:00      1 (Resources)
10 servidore ca_water pablo.qu    PD       0:00      1 (Priority)
11 servidore ca_water pablo.qu    PD       0:00      1 (Priority)
12 servidore ca_water pablo.qu    PD       0:00      1 (Priority)
13 servidore ca_water pablo.qu    PD       0:00      1 (Priority)
14 servidore ca_water pablo.qu    PD       0:00      1 (Priority)
 8 servidore ca_water pablo.qu     R       0:11      1 ctgpgpu2

Tamén pode obterse unha vista interactiva, actualizada cada segundo, co comando smap:

smap -i 1

Xestión dos traballos con TS

Nos servidores que empregan ts como xestor de traballos, é obrigatorio utilizalo para executar tarefas que empreguen GPU, co fin de evitar conflitos e garantir unha asignación correcta dos recursos.

Para solicitar unha GPU débese antepoñer a opción -G 1 (ou o número de GPUs necesarias):

ts -G 1 programa_cuda argumentos_programa_cuda

Por exemplo:

ts -G 1 python train.py --epochs 100

O sistema encargarase de poñer o traballo en cola e executalo cando haxa unha GPU dispoñible.

Para consultar exemplos máis avanzados (múltiples GPUs, recursos adicionais, opcións específicas, etc.) pódese empregar o comando:

usage-overview

Xestión das reservas e traballos con gpuctl

Nos servidores que empregan gpuctl, é preciso utilizar o comando gpu para solicitar GPU e poder executar traballos nelas.

O comando gpu non incorpora unha cola de traballos nin control de paralelismo. Pode empregarse de forma interactiva ou desde scripts, pero para encolar varios traballos ou executalos en paralelo cómpre usar ferramentas externas, como task-spooler (comando tsp).

Hai dous fluxos de traballo principais:

1. Reserva de GPU automática

Este método é o máis axeitado se só se quere executar un único comando. gpu exec actúa como un wrapper: encárgase de reclamar a GPU, preparar o contorno necesario para o comando e liberala ao rematar.

gpu exec python ./train.py

Esta é a opción recomendada para execucións simples, xa que evita ter que xestionar manualmente a reserva e a liberación da GPU.

2. Reserva de GPU manual

Este método é o máis axeitado se se quere manter unha reserva activa entre varios comandos, xa sexa nunha sesión interactiva ou nun fluxo de traballo con varias execucións consecutivas.

gpu claim
gpu exec python ./train.py
gpu release

Ou, de xeito alternativo:

gpu claim
eval "$(gpu env --shell)"
python ./train.py
gpu release

Se xa existe unha reserva activa, gpu exec reutilízaa e prepara automaticamente o contorno axeitado para o comando.

É importante lembrar que, despois de crear ou modificar unha reserva, hai que executar de novo eval "$(gpu env --shell)" se se van lanzar os comandos directamente desde o shell. Como alternativa, pode empregarse gpu exec, que prepara o contorno en cada execución.

Vida das reservas

As reservas mantéñense mentres se detecte actividade real de cómputo na GPU.

Se unha GPU permanece reservada sen actividade durante un tempo prolongado, a reserva pode perderse automaticamente por inactividade. Polo tanto, se despois diso se intenta executar un traballo asumindo que a reserva segue activa, o traballo poderá fallar.

A reserva non se mantén simplemente por ter unha terminal aberta, senón por actividade real na GPU.

Os tempos de expiración sen actividade real na GPU están configurados do seguinte xeito:

Comprobación do estado da reserva

Se estás a traballar cunha reserva manual e queres comprobar se aínda segue activa, podes usar:

gpu mine

Ou ben, se queres ver información xeral sobre todas as GPU, o momento en que se capturou un uso real de cada unha e o tempo configurado actual de expiración, podes executar:

gpu status

Isto é especialmente recomendable se pasou tempo desde a última execución ou se a GPU puido quedar sen uso durante un período longo.

Reserva dunha segunda GPU oportunista

Ademais da reserva principal, que se realiza con prioridade na cola guaranteed, é posible reservar unha segunda GPU na cola burst_preemptible.

Esta segunda GPU poderá utilizarse sempre que estea libre, pero non está garantida: pode perderse mesmo no medio dun traballo se outro usuario necesita esa GPU para a súa reserva principal.

Isto permite aproveitar capacidade libre adicional cando a haxa, pero os traballos que dependan desta segunda GPU deben estar preparados para tolerar a súa perda.

Para solicitar esta segunda GPU, abonda con executar gpu claim unha segunda vez:

gpu claim
gpu claim

Tamén pode especificarse o número de GPU explicitamente:

gpu claim --numgpus 2

Neste caso, o comando agardará ata poder reservar o número de GPU solicitado.

Hai que ter en conta que estas dúas formas non son exactamente equivalentes:

É importante lembrar que, despois de facer calquera reserva, hai que executar de novo eval "$(gpu env --shell)" ou facer as execucións con gpu exec.

Se a segunda GPU se perde máis adiante por ser preemptible, os traballos que a estean usando poderían fallar ou verse interrompidos.

Por tanto:

Uso de task-spooler (tsp)

Como gpu non incorpora unha cola de traballos nin control de paralelismo, unha opción práctica para encolar execucións é empregar task-spooler, co comando tsp, combinado con gpu.

Executar varios traballos en serie coa mesma reserva
gpu claim
tsp gpu exec python ./train1.py
tsp gpu exec python ./train2.py
tsp gpu exec python ./train3.py
tsp gpu release

Este método permite reutilizar a mesma reserva para varios traballos consecutivos encolados en tsp.

Executar varios traballos en paralelo

Se se queren executar varios traballos ao mesmo tempo, pódese aumentar o número de slots de tsp:

gpu claim
tsp -S 2
tsp gpu exec python ./train1.py
tsp gpu exec python ./train2.py
tsp gpu exec python ./train3.py
tsp gpu exec python ./train4.py
tsp -w
tsp -S 1
gpu release

Neste caso, hai que ter coidado de non executar gpu release antes de que rematen todos os traballos. Primeiro hai que asegurarse de que a cola terminou, e só despois liberar a GPU.

Atención: executar varios traballos en paralelo non implica reservar varias GPU. Se só hai unha GPU reservada, todos os procesos compartirán esa mesma GPU e competirán polos seus recursos, como memoria e tempo de cómputo.

Cómpre lembrar tamén que a reserva só se mantén mentres se detecte actividade real de cómputo na GPU. Se os traballos pasan demasiado tempo sen usala, a reserva pode caducar automaticamente por inactividade.

Uso de tmux

O uso de tmux permite manter sesións de terminal, desconectarse delas e recuperalas máis adiante, permitindo deste xeito manter unha sesión interactiva sen ter que manter a conexión aberta. O feito de desconectarse tampouco envía HUP aos procesos.

Para iniciar unha sesión de tmux ou reconectarse a ela se xa existe, recoméndase usar un nome fixo:

tmux new -A -s main

Isto crea a sesión main se non existe, ou reconecta a ela se xa estaba creada.

Unha vez dentro de tmux, para desconectarse mantendo a sesión activa hai que pulsar Control+b, soltar, e despois pulsar d.

Neste punto xa te podes desconectar da máquina sen interromper os procesos. Para volver á mesma sesión, abonda con executar de novo o comando anterior.

Se se quere terminar a sesión completamente desde fóra:

tmux kill-session -t main

Partición dunha GPU con perfís MIG

gpuctl permite particionar unha GPU en varias instancias MIG para illar recursos e executar cargas máis pequenas en paralelo nunha soa GPU física de forma máis controlada.

Esta funcionalidade só está dispoñible en GPU compatibles, en caso contrario non se poderá utilizar. Polo de agora, só as GPUs NVIDIA H200 teñen esta función activada.

Para reservar unha GPU e activala en modo MIG:

gpu claim --mig half
gpu claim --mig third
gpu claim --mig quarter

Esto partirá a GPU en dous, tres ou catro particións, elexindo os perfís MIG máis indicados segundo a gráfica compatible. Ten en conta que este parámetro --mig só se pode usar cando se reclama exactamente unha GPU.

Unha vez creada a reserva MIG, gpu exec e gpu env xa preparan automaticamente CUDA_VISIBLE_DEVICES cos UUID MIG correspondentes.

Notificacións por correo

gpuctl permite configurar o envío de notificacións por correo electrónico relacionadas co estado das reservas e co uso das GPU.

Ver a configuración actual
gpu notify
Activar ou desactivar as notificacións
gpu notify --mode off
gpu notify --mode email
gpu notify --mode telegram
gpu notify --mode both

Cando as notificacións están activadas, envíanse correos ou mensaxes de Telegram nos seguintes casos:

Non se envían notificacións en caso de que se faga unha reserva e a reserva se conceda no momento sen necesidade de agarda, ou se a GPU é liberada de xeito manual con release ou ao rematar un exec que fixo unha reserva automática.

Configurar un correo personalizado
gpu notify --email tu.correo@dominio

Se non se configura un correo personalizado, utilizarase por defecto o enderezo obtido desde LDAP. Para volver ao correo por defecto:

gpu notify --clear-email
Emparexar conta de Telegram

Tras executar o seguinte comando:

gpu notify --pair-telegram

Segue as instrucións para rematar o proceso de emparellamento. Para eliminar o emparellamento:

gpu notify --unpair-telegram
Envío de notificacións personalizadas

O usuario pode enviar notificacións personalizadas en distintos puntos do seu fluxo de traballo mediante:

gpu notify --send "contido da mensaxe"

Isto pode resultar útil para recibir avisos propios ao comezo ou ao final dun experimento, tras completar unha fase do procesado, ou en calquera outro punto relevante do fluxo de traballo.

Utilizarase o método de notificación preferido que estea configurado, ou o correo electrónico en caso de que ningún dos dous estea configurado.

Reportes de uso

Para consultar un resumo do histórico recente de uso da GPU por proceso, pode empregarse:

 gpu report 

Isto mostra os PID rexistrados, o número de mostras dispoñibles e métricas agregadas de uso de GPU, CPU e memoria.

Se se queren ver os datos dun proceso concreto, con gráficas ASCII e a liña temporal das mostras almacenadas, pode usarse:

 gpu report --pid PID 

Se hai moitas mostras, a saída pode aparecer resumida. Para ver a serie completa:

 gpu report --pid PID --all-samples 

Recomendacións prácticas