Desplegar vLLM Kubernetes: Arquitectura y Setup

2026.02.06
Technology
651 Words
Desplegar vLLM Kubernetes: Arquitectura y Setup

Parte 1 de 6. Esta serie cubre el despliegue de vLLM en producción con Kubernetes en seis partes. Parte 2 → Despliegue Paso a Paso en Kubernetes

Desplegar vLLM en producción exige GPU scheduling, tensor parallelism, cuantización y observabilidad para servir LLMs a escala. Esta guía te entrega manifiestos hardened para producción, datos de benchmark reales y el checklist de 10 puntos que ejecuto en cada cluster antes de salir a producción.

De un Vistazo

AtributoDetalles
Ideal paraEquipos sirviendo 100+ usuarios concurrentes de LLM con SLOs de latencia bajo 500ms
Requisitos mínimos1x NVIDIA GPU (A10G 24GB), Kubernetes 1.28+, CUDA 12.1+
Configuración recomendada2x NVIDIA A100 80GB, Kubernetes 1.29+, CUDA 12.4+, red InfiniBand
ComplejidadAvanzado: requiere GPU operator, Prometheus Adapter, y habilidades de debug de NCCL
Tiempo al primer despliegue45–90 minutos
Costo estimado$2–8/hora por nodo GPU (cloud), o servidores GPU on-prem dedicados

¿Qué es vLLM y por qué usarlo para inferencia en producción?

vLLM es un motor de inferencia open-source diseñado para serving de LLM de alto rendimiento en GPUs NVIDIA. Tres innovaciones arquitectónicas lo diferencian de cualquier alternativa:

  • PagedAttention: Un algoritmo de gestión de memoria que divide el KV cache en bloques no contiguos, mejorando la utilización de memoria GPU por 2-4× comparado con la asignación estática.
  • Continuous batching: Agrega dinámicamente nuevas requests a los batches en ejecución a medida que se liberan slots de secuencia, entregando 3-5× mayor throughput versus el batching estático.
  • Tensor parallelism: Divide las capas del modelo entre múltiples GPUs vía NCCL all-reduce, permitiendo que modelos que exceden la VRAM de una sola GPU corran en nodos multi-GPU.

En tokens-por-segundo-por-dólar, los despliegues de vLLM production aplastan a los servidores de propósito general. La documentación oficial de vLLM profundiza en estos mecanismos.

Prerrequisitos para ejecutar vLLM en Kubernetes

Tu cluster necesita estar GPU-ready: drivers correctos, operators adecuados, red configurada. Un GPU operator faltante o una versión incorrecta de CUDA es la razón #1 de fallos en producción.

Requisitos de hardware y cluster

RequisitoMínimoRecomendadoComando de verificación
Kubernetes1.281.29+kubectl version
Nodos GPU1× NVIDIA A10G (24 GB)2× NVIDIA A100 80GBkubectl get nodes -l nvidia.com/gpu.present=true
CUDA12.112.4+nvidia-smi
GPU Operatorv23.9.1v24.xhelm list -n gpu-operator
Container Runtimecontainerd 1.7+containerd 1.7+kubectl get nodes -o yaml | grep containerRuntimeVersion
Almacenamiento100 GB efímero500 GB+ NVMe local SSDdf -h en nodo GPU
Red10 Gbps25 Gbps+ (InfiniBand para multi-nodo)iperf3

Verificación de software

Terminal window
# Verifica que el GPU operator y el device plugin estén corriendo
kubectl get pods -n gpu-operator
# Confirma que la capacidad de GPU se anuncia en los nodos
kubectl get nodes -o json | jq '.items[].status.capacity | select(has("nvidia.com/gpu"))'

También necesitarás Prometheus Adapter para HPA (cubierto en la Parte 2).

Almacenamiento de modelos

vLLM trae modelos de Hugging Face por defecto. En producción eso no sirve. Siempre precarga los pesos en un PersistentVolume local. Un modelo 70B en FP16 consume ~140 GB. Descargar eso en cada arranque destruirá tus SLOs.

Matriz de compatibilidad de versiones

Versiones desalineadas de vLLM, CUDA y Kubernetes producen errores crípticos en runtime. Consulta esta matriz para cada upgrade:

Versión vLLMCUDAKubernetesGPU OperatorPythontransformersNotas
0.8.412.41.29+v24.3+3.10–3.124.48.0Estable recomendada
0.8.312.41.28+v24.3+3.10–3.124.47.0Estable buena
0.8.212.11.28+v24.0+3.10–3.114.46.0Legacy
0.7.x12.11.27+v23.9+3.9–3.114.44.0No recomendada para nuevos despliegues

Regla de hierro: Actualiza vLLM y CUDA siempre juntos. Ejecutar vLLM 0.8.x con CUDA 12.1 provoca fallos de kernels FP8 en GPUs H100.

Visión general de la arquitectura para LLM Serving

La arquitectura es directa: Ingress enruta requests hacia Pods con GPU, Prometheus recolecta métricas, HPA escala según la cola de inferencia.

graph LR
A[Client] --> B[Ingress / NGINX]
B --> C[vLLM Service]
C --> D[vLLM Pod]
D --> E[GPU 0]
D --> F[GPU 1]
D --> G[GPU 2]
D --> H[GPU 3]
D --> I[Model PVC]
J[Prometheus] --> D
K[Grafana] --> J
L[HPA Controller] --> D

Flujo de datos:

  1. Un cliente envía una request chat/completions compatible con OpenAI a través de Ingress.
  2. El Service de Kubernetes la reenvía al Pod de vLLM.
  3. PagedAttention inserta la request en el batch activo.
  4. Tensor parallelism distribuye el cómputo entre GPUs mediante NCCL.
  5. Prometheus consulta /metrics para rastrear SLIs.
  6. HPA crea réplicas cuando vllm_num_requests_running cruza el umbral.

Continúa en Parte 2: Despliegue Paso a Paso en Kubernetes donde configurarás el namespace, los ConfigMaps, los Secrets y desplegarás vLLM en producción.

# Vllm # Kubernetes # IA # Gpu # Llm # produccion