Desplegar vLLM Kubernetes: Arquitectura y Setup
Tabla de contenidos
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
| Atributo | Detalles |
|---|---|
| Ideal para | Equipos sirviendo 100+ usuarios concurrentes de LLM con SLOs de latencia bajo 500ms |
| Requisitos mínimos | 1x NVIDIA GPU (A10G 24GB), Kubernetes 1.28+, CUDA 12.1+ |
| Configuración recomendada | 2x NVIDIA A100 80GB, Kubernetes 1.29+, CUDA 12.4+, red InfiniBand |
| Complejidad | Avanzado: requiere GPU operator, Prometheus Adapter, y habilidades de debug de NCCL |
| Tiempo al primer despliegue | 45–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
| Requisito | Mínimo | Recomendado | Comando de verificación |
|---|---|---|---|
| Kubernetes | 1.28 | 1.29+ | kubectl version |
| Nodos GPU | 1× NVIDIA A10G (24 GB) | 2× NVIDIA A100 80GB | kubectl get nodes -l nvidia.com/gpu.present=true |
| CUDA | 12.1 | 12.4+ | nvidia-smi |
| GPU Operator | v23.9.1 | v24.x | helm list -n gpu-operator |
| Container Runtime | containerd 1.7+ | containerd 1.7+ | kubectl get nodes -o yaml | grep containerRuntimeVersion |
| Almacenamiento | 100 GB efímero | 500 GB+ NVMe local SSD | df -h en nodo GPU |
| Red | 10 Gbps | 25 Gbps+ (InfiniBand para multi-nodo) | iperf3 |
Verificación de software
# Verifica que el GPU operator y el device plugin estén corriendokubectl get pods -n gpu-operator
# Confirma que la capacidad de GPU se anuncia en los nodoskubectl 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 vLLM | CUDA | Kubernetes | GPU Operator | Python | transformers | Notas |
|---|---|---|---|---|---|---|
| 0.8.4 | 12.4 | 1.29+ | v24.3+ | 3.10–3.12 | 4.48.0 | Estable recomendada |
| 0.8.3 | 12.4 | 1.28+ | v24.3+ | 3.10–3.12 | 4.47.0 | Estable buena |
| 0.8.2 | 12.1 | 1.28+ | v24.0+ | 3.10–3.11 | 4.46.0 | Legacy |
| 0.7.x | 12.1 | 1.27+ | v23.9+ | 3.9–3.11 | 4.44.0 | No 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] --> DFlujo de datos:
- Un cliente envía una request
chat/completionscompatible con OpenAI a través de Ingress. - El Service de Kubernetes la reenvía al Pod de vLLM.
- PagedAttention inserta la request en el batch activo.
- Tensor parallelism distribuye el cómputo entre GPUs mediante NCCL.
- Prometheus consulta
/metricspara rastrear SLIs. - HPA crea réplicas cuando
vllm_num_requests_runningcruza 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.