ARTICULO
Introducción
Si ejecutás workloads con GPU en Kubernetes —vLLM, Triton, jobs de entrenamiento o stacks de inferencia agentica—, probablemente hayas notado que el autoscaling por defecto solo considera CPU y memoria. Las GPUs, que hacen el trabajo pesado, quedan invisibles para el Horizontal Pod Autoscaler (HPA). Esto genera:
- Desperdicio de capacidad: GPUs subutilizadas sin escalar.
- Latencia alta: Los pods se quedan pendientes de recursos que no se liberan.
- Mayor consumo energético: Cada ciclo de GPU no aprovechado suma a las emisiones Scope 3.
Para resolverlo, necesitás un scaler que entienda métricas reales de GPU: utilización de cómputo, memoria, temperatura y consumo de energía. KEDA no puede hacerlo nativamente porque usa CGO_ENABLED=0, y las librerías de NVIDIA (como NVML) requieren CGO. La solución es un ExternalScaler personalizado que corra en cada nodo GPU y exponga métricas via gRPC, siguiendo el mismo patrón que los device plugins o el metrics-server.
En esta guía, implementarás un ExternalScaler que:
- Lee métricas de GPU usando go-nvml.
- Las sirve via gRPC usando la interfaz de KEDA.
- Permite escalar tu workload (ej: vLLM) en base a memoria usada, temperatura o utilización.
Qué es y para qué sirve
¿Por qué un ExternalScaler para GPUs?
KEDA soporta escalamiento basado en métricas externas (Prometheus, Kafka, etc.), pero no tiene un scaler nativo para GPUs porque:
- Restricción técnica: KEDA se compila con
CGO_ENABLED=0, pero NVML requiere CGO para interactuar con el driver de NVIDIA. - Acceso local: NVML solo puede leer métricas del GPU en el mismo nodo. No podés consultar el GPU 0 del nodo-A desde un pod en el nodo-B.
Arquitectura propuesta
graph LR
A[KEDA Operator] -->|HPA| B[ExternalScaler<br>(gRPC)]
B -->|DaemonSet| C[Nodo GPU 1<br>GPU A, B]
B -->|DaemonSet| D[Nodo GPU 2<br>GPU C]
C -->|go-nvml| E[Driver NVIDIA]
D -->|go-nvml| E- DaemonSet personalizado: Corre en cada nodo GPU y expone métricas via gRPC.
- KEDA Operator: Consume las métricas via el ExternalScaler y ajusta la réplica del HPA.
- go-nvml: Librería en Go que interactúa con NVML sin CGO (wrapper seguro).
Métricas disponibles
El scaler expone estas métricas por GPU (o agregadas por nodo):
| Métrica | Tipo | Descripción |
|---|---|---|
