Contenido
Ejecutar trabajos
Drivers, planificadores y la plomería que lleva el trabajo a las GPUs
Un clúster solo sirve si la gente puede ponerle trabajo de forma confiable y justa. Este capítulo cubre la pila de software desde el driver del kernel hasta el framework, el planificador por lotes que usan la mayoría de los clústeres de HPC e IA, la biblioteca de comunicación que hace posible el entrenamiento con varias GPUs y los hábitos (checkpoints, fair share) que mantienen sana una máquina compartida.
2.1La pila de software CUDA
De abajo hacia arriba:
- Módulo del kernel (
nvidia.koy compañía). Controla el hardware, la gestión de memoria (incluida Unified Memory / UVM), las interrupciones y el reporte de errores. NVIDIA publica una versión de código abierto, open-gpu-kernel-modules, la predeterminada para Turing y posteriores. Los mensajes Xid que lees endmesgvienen de aquí. - Driver de modo usuario (
libcuda.so): la driver API de CUDA, incluida con el driver. - Runtime y toolkit de CUDA (
libcudart,nvcc): contra lo que compilan las aplicaciones. - Bibliotecas: cuBLAS, cuDNN, NCCL, CUTLASS.
- Frameworks: PyTorch, JAX y herramientas de más alto nivel.
Regla de compatibilidad: un driver más nuevo ejecuta runtimes de CUDA más viejos, pero no al revés. nvidia-smi muestra la versión del driver y la versión máxima de CUDA que soporta. Los contenedores traen su propio runtime pero deben usar el driver del host, inyectado por el NVIDIA Container Toolkit. Ver contenedores y GPUs.
2.2Slurm
Slurm convierte un montón de servidores en una máquina compartida. Conceptos clave:
- Particiones: grupos de nodos con nombre y límites (
sinfolas lista). - Trabajos: se envían con
sbatch script.sh. Las líneas#SBATCHdel script piden recursos:--nodes,--gpus-per-node,--time,--partition. - Asignación: el planificador elige nodos (backfill, prioridad, Planificación fair-share) y ejecuta el script en el primero.
srunlanza tareas en el resto. - Estados de nodo:
idle,alloc,drain(termina lo que corre, no acepta trabajo nuevo) ydown.
Comandos diarios del operador
squeue --me # qué corre / qué espera y por qué sacct # historial con códigos de salida scontrol show job <id> # todo sobre un trabajo scontrol update NodeName=node-3 State=DRAIN Reason="gpu5 fan" sinfo -R # por qué hay nodos en drain scontrol requeue <id> # reiniciar un trabajo (desde su checkpoint)
Hacer drain con un motivo claro es la forma educada de decir "este hardware es sospechoso" sin matar el trabajo de nadie.
$ sbatch train.sh sbatch: error: Batch job submission failed: Requested node configuration is not available
2.3NCCL
NCCL ("nickel") implementa las colectivas de las que depende el entrenamiento distribuido: all-reduce, all-gather, reduce-scatter, broadcast y send/recv. Descubre la topología (NVLink, NVSwitch, PCIe, NIC) y construye anillos y árboles para aprovecharla. Ver All-reduce (anillo y árbol).
Variables de entorno que conviene conocer
NCCL_DEBUG=INFOimprime el transporte y los canales elegidos. Léelo.NCCL_IB_DISABLE=1fuerza sockets TCP en lugar de InfiniBand. Útil en una laptop y un desastre en producción.NCCL_SOCKET_IFNAME/NCCL_IB_HCAeligen las interfaces.
Diagnóstico
all_reduce_perfde nccl-tests mide el bus bandwidth alcanzable. Córrelo en nodos libres para detectar enlaces malos antes que los usuarios.- Las colectivas colgadas terminan con un watchdog timeout de PyTorch. La causa suele ser un rango malo: un enlace caído, una GPU perdida o un straggler que dejó de responder.
2.4Checkpointing y tolerancia a fallas
Con miles de GPUs, algo falla cada pocas horas. El checkpointing limita el daño: ante una falla, reinicias desde el último estado guardado y pierdes como máximo un intervalo.
Cómo elegir el intervalo: muy frecuente desperdicia tiempo de E/S; muy espaciado desperdicia cómputo cuando hay fallas. Una aproximación clásica (Young/Daly) es intervalo ≈ √(2 × costo_del_checkpoint × MTBF).
Cómo abaratarlo
- Checkpoints repartidos: cada rango escribe su parte en paralelo.
- Checkpointing asíncrono: copia a la memoria del host y escribe en segundo plano.
- Guarda varios checkpoints recientes. Los guardados corruptos o parciales ocurren.
Integración con la operación: scontrol requeue o un bucle de reintento del trabajo, más un pool de repuestos encendidos, convierten "se murió una GPU" en una pausa de 5 minutos. Ese es el ciclo que practicas en Fallen Off the Bus y The Slow Lane.
2.5Kubernetes y el GPU Operator
Kubernetes no sabe nada de GPUs por defecto. El device plugin de NVIDIA anuncia nvidia.com/gpu como recurso planificable. El GPU Operator instala y gestiona toda la pila como contenedores: driver, container toolkit, device plugin, DCGM exporter y MIG manager.
Diferencias con Slurm que importan para entrenar
- Kubernetes planifica pods de uno en uno. El entrenamiento distribuido necesita gang scheduling (todo o nada), que aportan complementos como Kueue o Volcano.
- La conciencia de topología (mismo rack, mismo dominio NVLink) requiere configuración extra.
- Brilla en flotas mixtas: servicios de inferencia, notebooks y CI junto a trabajos por lotes, a menudo en slices MIG.
Muchas organizaciones usan ambos: Slurm para el entrenamiento grande y Kubernetes para todo lo demás, a veces sobre el mismo hardware.
Dos nodos, un trabajo
Tu primer trabajo de entrenamiento multinodo ni siquiera se puede enviar. Arregla el script.