Cómo servir modelos de ML e IA (LLMs) en Kubernetes con KServe: Autoscaling Inteligente y Eficiencia en GPU
En este artículo te cuento cómo puedes montar una plataforma moderna para servir modelos de IA y LLMs sobre Kubernetes, aprovechar las novedades más recientes de KServe, y hacer que tu infraestructura escale según uso real y consumo de GPU.
¿Por qué servir modelos sobre Kubernetes?
Entrenar un modelo es sólo la mitad del camino. Lo difícil viene después: ponerlo a funcionar en producción de forma fiable, segura y escalable.
- Alta disponibilidad
- Autoescalado según carga real
- Seguridad, versionado, observabilidad
- Integración con pipelines CI/CD y orquestadores como Argo Workflows o Kubeflow
Antes de continuar… ¿Qué es Kubeflow y qué ofrece?
Kubeflow es una plataforma Open Source pensada para desplegar, escalar y gestionar flujos de trabajo de Machine Learning (ML) sobre Kubernetes. Su objetivo principal es llevar el desarrollo de modelos de ML a producción de forma reproducible, escalable y portátil.
Kubeflow no es una herramienta única, sino un conjunto de componentes modulares que cubren distintas etapas del ciclo de vida del modelo de Machine Learning:
- Kubeflow Pipelines: Orquestación de pipelines de ML (entrenamiento, preprocesado, validación, etcétera).
- Katib: AutoML y búsqueda de hiperparámetros.
- KServe (antes KFServing): Serving de modelos con escalado automático y despliegues sin downtime.
- Notebook Servers: Entornos Jupyter en Kubernetes, listos para trabajar con datos y modelos.
- Central Dashboard y Profiles: Gestión multiusuario, RBAC, y control de recursos por equipo o proyecto.
![]() |
Figura 4: Libro de Machine Learning aplicado a Ciberseguridad de Carmen Torrano, Fran Ramírez, Paloma Recuero, José Torres y Santiago Hernández |
KServe: servir modelos como si fueran microservicios
- Lo bueno: cada modelo es un InferenceService, y tú defines lo que necesita: CPU, GPU, versiones, etcétera.
- Lo brutal: KServe soporta escalado automático hasta cero réplicas, y las vuelve a levantar cuando hay tráfico. Nada de infra desperdiciada.
- Puedes escalar vertical y horizontalmente tus modelos en GPU.
- Mediante Prometheus Adapter + HPA Custom Metrics, se puede escalar según uso de memoria GPU, uso de batch o incluso peticiones por segundo.
- 1.- KServe por defecto usa Knative para autoescalar.
- Escala basándose en tráfico HTTP (requests por segundo).
- Esto no es suficiente cuando usas GPUs, ya que estas no se liberan con tráfico bajo.
- Además, los workloads con GPU suelen tener procesamiento batch o tiempos largos de inferencia, donde Knative no escala de forma óptima.
- 2.- Para modelos en GPU, muchas veces no se usa Knative, sino raw deployment mode en KServe, para tener más control.
- Aquí ya no dependes de Knative, sino de un Deployment + HPA.
- 3.- Prometheus Adapter + HPA con métricas personalizadas
- Prometheus Adapter permite exponer métricas personalizadas (por ejemplo: uso de memoria GPU, utilización del device, número de peticiones, etc.) como Custom Metrics API.
- Con eso puedes configurar un HPA (Horizontal Pod Autoscaler) para escalar los pods de inferencia según esas métricas.
- Esto se usa en entornos donde se necesita un autoscaling más inteligente y específico, especialmente con GPU.
- Es la capacidad de escalar a cero réplicas un modelo cuando no está recibiendo peticiones, y volver a levantarlo automáticamente (auto-scale up) cuando llega una nueva petición.
- Ahorro de costes brutal: Si tienes muchos modelos desplegados pero no todos se usan constantemente, con scale-to-zero no malgastas CPU ni RAM. Ideal en entornos cloud donde pagas por uso de recursos, como en clusters gestionados (EKS, GKE, AKS…).
- Optimización de recursos en el cluster: En vez de mantener todos los pods activos, los que no reciben tráfico se eliminan temporalmente, dejando espacio a otros workloads que sí lo necesitan. Ayuda a evitar sobrecargas y reduce la necesidad de sobredimensionar el cluster.
- Despliegue eficiente de muchos modelos: Puedes permitir que muchos equipos o usuarios publiquen sus propios modelos sin saturar el sistema. Esto habilita patrones como “multi-tenancy” eficiente para inferencias bajo demanda.
- Escalado bajo demanda: Si un modelo recibe tráfico repentino, KServe lo activa rápidamente. Esto es perfecto para modelos que solo se usan de vez en cuando o que funcionan como microservicios ML reactivos.
KServe soporta dividir tráfico entre versiones de modelo (v1, v2, etcétera). Por ejemplo puedes hacer un 90/10, observar métricas y logs, y luego promover o descartar la nueva versión. Pero… ¿qué es Canary rollout?
- Validar rendimiento y exactitud del modelo en producción.
- Detectar errores o regresiones antes de hacer el cambio completo.
- Observar métricas y logs reales sin impactar a todos los usuarios.
apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: sklearn-iris namespace: kserve-test spec: predictor: model: modelFormat: name: sklearn storageUri: "gs://kfserving-examples/models/sklearn/1.0/model-1" canaryTrafficPercent: 10 canary: model: modelFormat: name: sklearn storageUri: "gs://kfserving-examples/models/sklearn/1.0/model-2"
- storageUri: del bloque principal. Apunta a model-1, la versión actual y estable del modelo.
- canary: Define model-2 como la nueva versión que se quiere probar.
- canaryTrafficPercent: 10: indica que el 10% del tráfico entrante será dirigido a model-2, mientras que el 90% restante seguirá siendo servido por model-1.
Desde la versión v0.15.0, KServe ha incorporado mejoras significativas para el despliegue de modelos de lenguaje (LLMs), incluyendo soporte distribuido con vLLM, mejoras en el runtime de Hugging Face y optimizaciones para almacenamiento y readiness. Esto abre la puerta a escenarios como:
- Servir un modelo LLaMA o Falcon en múltiples nodos GPU.
- Integrar modelos de Hugging Face con pipelines existentes y autoscaling por demanda.
- Aprovechar técnicas avanzadas como RAG o agentes con herramientas directamente desde Kubernetes.
- Soporte para descarga de archivos individuales desde GCS Google Cloud Storage), lo que mejora los tiempos de inicio.
- Readiness probes más precisas, especialmente para modelos en transformers, mejorando la confiabilidad de despliegues en producción.
- Introducción de “KServe Guru” en Gurubase.io, un espacio para encontrar y compartir soluciones de la comunidad.
- KServe + Istio: para gestión de modelos como microservicios.
- Knative Serving: para escalado a 0, cold start optimizado.
- Prometheus + Grafana: para métricas personalizadas de GPU o latencia.
- Cert-Manager + Ingress Gateway: TLS automático para exposición segura.
- ArgoCD o Flux: GitOps para definir modelos como código.
- GPU Operator de NVIDIA: para gestionar drivers y nodos GPU
Aunque herramientas como KServe y Kubeflow son muy potentes, su configuración desde cero puede requerir tiempo, conocimientos avanzados de Kubernetes y una buena integración con infraestructura cloud o on-prem. Aquí es donde entran plataformas como Axebow.io, que están diseñadas para facilitar el despliegue de aplicaciones, entornos de Machine Learning e IA y plataformas completas sobre Kubernetes. Esto permite que equipos de IA y Data Science se enfoquen en desarrollar y servir modelos sin preocuparse por los detalles de infraestructura.
Autores: Miguel Angel Chuecos / Carlos García Blanco, CEO de Kumori