En pocas palabras
Motor para ejecutar y servir modelos de lenguaje con alto rendimiento, optimizando memoria y agrupando solicitudes concurrentes.
Qué problema resuelve
Aprovechamiento insuficiente del hardware y costos elevados al atender muchas peticiones de inferencia.
Cuándo utilizarlo
Alojamiento propio de modelos compatibles, en nube o infraestructura local. Ejemplo: desplegar un modelo abierto como servicio interno para búsqueda de conocimiento o asistencia de programación.
De la idea a la práctica
Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.
Cómo funciona
vLLM agrupa solicitudes de forma continua y gestiona la memoria de atención para aprovechar el acelerador. Sus capacidades dependen de la arquitectura del modelo y del hardware disponible.
Ejemplo: servir un modelo compatible
Con vLLM instalado y hardware y memoria adecuados para el modelo:
vllm serve Qwen/Qwen2.5-7B-Instruct \
--host 127.0.0.1 \
--port 8000
El servicio puede ser consumido mediante su API de inferencia. La primera ejecución puede descargar los pesos; verifica previamente los requisitos y la licencia del modelo.
Técnicas que explican su rendimiento
| Técnica | Efecto |
|---|---|
| PagedAttention | Gestiona la caché KV en bloques, como memoria virtual; casi sin desperdicio |
| Continuous batching | Incorpora peticiones nuevas en cada paso de generación, sin esperar a que termine el lote |
| Prefix caching | Reutiliza la caché de prefijos comunes (system prompts, documentos) |
| Chunked prefill | Mezcla el procesamiento de prompts largos con la generación de otros |
| Speculative decoding | Un modelo pequeño propone tokens que el grande valida |
| Cuantización | FP8, AWQ, GPTQ y otros para reducir memoria |
Parámetros de despliegue
vllm serve meta-llama/Llama-3.1-8B-Instruct \
--max-model-len 16384 \
--gpu-memory-utilization 0.90 \
--tensor-parallel-size 2 \
--enable-prefix-caching \
--enable-auto-tool-choice --tool-call-parser llama3_json \
--api-key "$VLLM_API_KEY"
| Parámetro | Decisión |
|---|---|
--max-model-len |
Contexto máximo; reducirlo libera memoria para más peticiones concurrentes |
--gpu-memory-utilization |
Fracción de memoria para pesos y caché KV |
--tensor-parallel-size |
Repartir un modelo grande entre varias GPU de un nodo |
--max-num-seqs |
Concurrencia máxima por réplica |
--enable-lora |
Servir varios adaptadores LoRA sobre el mismo modelo base |
API compatible con OpenAI
from openai import OpenAI
cliente = OpenAI(base_url="http://vllm:8000/v1", api_key=VLLM_API_KEY)
res = cliente.chat.completions.create(
model="meta-llama/Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": "Clasifica: 'no me llegó el desembolso'"}],
response_format={"type": "json_schema", "json_schema": {"name": "c", "schema": esquema}},
)
Admite chat, completions, embeddings y salida estructurada guiada por gramática (structured output), de modo que se puede poner detrás de LiteLLM junto a proveedores comerciales.
Métricas
El endpoint /metrics expone en formato Prometheus las peticiones en curso y en espera, el uso de la caché KV, el tiempo hasta el primer token, la latencia entre tokens y el throughput. Una caché KV cerca del 100 % y una cola creciente indican que hacen falta más réplicas o menos contexto. Para la GPU, combina con NVIDIA DCGM Exporter.
Uso offline por lotes
from vllm import LLM, SamplingParams
llm = LLM(model="Qwen/Qwen2.5-7B-Instruct")
salidas = llm.generate(prompts, SamplingParams(temperature=0, max_tokens=200))
Para procesar grandes volúmenes (clasificar millones de textos), el modo offline aprovecha todo el batching sin la sobrecarga del servidor HTTP. En Kubernetes, proyectos como KServe, llm-d o el production stack de vLLM añaden enrutamiento consciente de la caché y autoescalado.
Criterios de implementación
Mide tokens por segundo, tiempo hasta el primer token y latencia bajo concurrencia. Ajusta el tamaño de contexto y memoria con cargas reales. Para exponerlo fuera del equipo, configura autenticación, límites y supervisión operativa.
Continúa en las fuentes
Documentación oficial para verificar detalles y explorar más.