¿Está desarrollando aplicaciones de modelos de lenguaje grandes (LLM) y se enfrenta a velocidades de inferencia lentas o limitaciones de memoria? vLLM es la solución que los principales ingenieros de API y backend están adoptando para acelerar el servicio de LLM, manejar alta concurrencia y reducir los costos de infraestructura. Esta guía práctica explica qué es vLLM, cómo funciona, cómo instalarlo y cómo usarlo tanto para inferencia por lotes como para API en tiempo real, para que su equipo pueda ofrecer funciones de IA rápidas y confiables a escala.
¿Qué es vLLM? ¿Por qué es importante para las API de LLM?
vLLM es un motor de inferencia de código abierto, de alto rendimiento y eficiente en memoria, diseñado para servir modelos de lenguaje grandes. Desarrollado por investigadores e ingenieros líderes, aborda dos de los mayores desafíos que enfrentan las implementaciones de LLM:
- Velocidades de inferencia lentas: Especialmente con muchos usuarios concurrentes o trabajos por lotes grandes.
- Alto uso de memoria: Los mecanismos de atención tradicionales desperdician memoria de GPU, limitando el tamaño y el número de modelos que puede servir.
Innovaciones clave de vLLM:
- PagedAttention: Optimiza la caché de clave-valor (KV), reduciendo drásticamente el desperdicio de memoria mediante el uso de un sistema de paginación similar a la memoria virtual de los sistemas operativos.
- Procesamiento por lotes continuo (Continuous batching): Agrupa dinámicamente las solicitudes a medida que llegan, maximizando la utilización de la GPU y minimizando los tiempos de espera del usuario.
Piense en vLLM como un motor de backend turboalimentado para las API de LLM, especialmente para desarrolladores que necesitan una inferencia escalable y lista para producción.
¿Por qué los desarrolladores de API e ingenieros de backend prefieren vLLM?
vLLM se está convirtiendo rápidamente en el motor de inferencia de LLM preferido por los equipos técnicos porque ofrece:
- Rendimiento de vanguardia: Sirve más solicitudes de usuario por segundo, procesa conjuntos de datos más grandes más rápido.
- Uso eficiente de la GPU: Adapta modelos más grandes a sus GPU, o reduce los costos de hardware para cargas de trabajo existentes.
- Agrupación dinámica (Dynamic batching): Se acabaron los tiempos de espera estáticos; vLLM se adapta al tráfico real, manteniendo sus GPU ocupadas.
- API compatible con OpenAI: Reemplace o complemente sin problemas los puntos finales de OpenAI con sus propios modelos autoalojados.
- API simples y flexibles: Tanto para trabajos por lotes fuera de línea como para servicio en vivo.
- Amplio soporte de modelos: Llama, Mistral, Qwen, OPT, Falcon y más de Hugging Face y ModelScope.
- Desarrollo de código abierto activo: Actualizaciones frecuentes, comunidad creciente y características de vanguardia.
Vea la lista completa de modelos soportados en la documentación de vLLM.
Consejo: Si está construyendo o probando API potenciadas por LLM, considere integrarse con Apidog. Apidog facilita el diseño, prueba y documentación de sus puntos finales de LLM —ya sea que use vLLM, OpenAI o backends personalizados— ayudando a los equipos a optimizar la colaboración y el control de calidad de la API.
LLM compatibles: ¿Qué modelos funcionan con vLLM?
vLLM soporta de forma nativa una amplia gama de modelos basados en transformadores, incluyendo:
- Serie Llama: Llama, Llama 2, Llama 3
- Mistral y Mixtral
- Qwen y Qwen2
- GPT-2, GPT-J, GPT-NeoX
- OPT
- Bloom
- Falcon
- MPT
- Y más, incluyendo modelos multimodales
La lista está creciendo. Para la compatibilidad más actual, consulte la Lista Oficial de Modelos Compatibles de vLLM.
Nota: Si su modelo no está en la lista pero comparte arquitectura con uno compatible, podría funcionar de todas formas; pruebe con cuidado. Las arquitecturas personalizadas pueden requerir contribuir código al proyecto original.
Conceptos clave: PagedAttention y Procesamiento por Lotes Continuo
Comprender estos dos conceptos le ayudará a optimizar sus implementaciones de LLM:
PagedAttention
- Problema: La atención tradicional utiliza memoria contigua para la caché KV, causando fragmentación y desperdicio de VRAM de la GPU.
- Solución: PagedAttention divide la caché KV en "páginas" flexibles, como la memoria virtual en los sistemas operativos. Esto puede reducir la sobrecarga de memoria hasta en un 90% y permite compartir memoria para prefijos de secuencia comunes.
Procesamiento por Lotes Continuo
- Problema: El procesamiento por lotes estático (esperar un lote completo antes de comenzar) provoca tiempo de inactividad de la GPU y alta latencia.
- Solución: El procesamiento por lotes continuo procesa instantáneamente nuevas solicitudes tan pronto como los recursos de la GPU se liberan, maximizando el rendimiento y minimizando los tiempos de espera del usuario.
Estas optimizaciones son la razón por la que vLLM supera a muchos otros frameworks de servicio de LLM.
Requisitos previos: Lo que necesita antes de instalar vLLM
Antes de comenzar, asegúrese de que su entorno cumpla con estos requisitos:
- Sistema Operativo: Linux recomendado (WSL2 y macOS posibles, pero Linux es el mejor soportado).
- Python: 3.9, 3.10, 3.11 o 3.12. Use un entorno virtual.
- GPU NVIDIA con CUDA: Para un mejor rendimiento. (vLLM se basa en CUDA; el soporte solo para CPU y otros aceleradores es limitado o experimental.)
- PyTorch: vLLM instala una versión compatible automáticamente, pero puede preinstalarlo para versiones de CUDA personalizadas.
Cómo instalar vLLM: Paso a paso
1. Usando pip (Recomendado)
python -m venv vllm-env
source vllm-env/bin/activate
# En Windows: vllm-env\\Scripts\\activate
pip install vllm
Esto instala vLLM y sus dependencias (incluido PyTorch).
2. Usando Conda
conda create -n vllm-env python=3.11 -y
conda activate vllm-env
pip install vllm
Consejo: Para versiones personalizadas de CUDA, instale PyTorch con conda primero y luego vLLM.
3. Usando uv (para instalaciones súper rápidas)
uv venv vllm-env --python 3.12 --seed
source vllm-env/bin/activate
uv pip install vllm
4. Verificar la instalación
python -c "import vllm; print(vllm.__version__)"
vllm --help
Debería ver la versión instalada y la ayuda de la línea de comandos.
Inferencia por Lotes sin Conexión con vLLM
La inferencia por lotes es ideal para ejecutar predicciones en una lista de prompts — excelente para evaluación, generación de conjuntos de datos o procesamiento masivo.
Ejemplo: Script de Inferencia por Lotes
from vllm import LLM, SamplingParams
# 1. Definir prompts
prompts = [
"La capital de Francia es",
"Explica la teoría de la relatividad en términos sencillos:",
"Escribe un poema corto sobre un día lluvioso:",
"Traduce '¡Hola, mundo!' al alemán:",
]
# 2. Establecer parámetros de muestreo
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.95,
max_tokens=150,
stop=["\n", " Human:", " Assistant:"]
)
# 3. Inicializar el motor vLLM (elija un modelo que su GPU pueda manejar)
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.1")
# 4. Generar salidas
outputs = llm.generate(prompts, sampling_params)
# 5. Mostrar resultados
for output in outputs:
print("-" * 20)
print(f"Prompt: {output.prompt!r}")
print(f"Texto generado: {output.outputs[0].text!r}")
print("-" * 20)
Consejos:
- vLLM utiliza por defecto los modelos de Hugging Face Hub. Para ModelScope, configure
VLLM_USE_MODELSCOPE=1. - Para anular la configuración de generación de un modelo, use
generation_config="vllm"en el constructor deLLM. - Para modelos cuantizados (AWQ, GPTQ, etc.), consulte la documentación de vLLM y las tarjetas de modelo de Hugging Face.
Ejecutar vLLM como un servidor de API compatible con OpenAI
¿Quiere servir LLM a través de una API tipo OpenAI? vLLM facilita el intercambio de puntos finales, la prueba de nuevos modelos y la integración con herramientas de API como Apidog para flujos de trabajo de diseño, simulación y control de calidad sin interrupciones.
Iniciar el Servidor vLLM
source vllm-env/bin/activate
vllm serve mistralai/Mistral-7B-Instruct-v0.1
# O, para otro modelo:
# vllm serve Qwen/Qwen2-1.5B-Instruct
Opciones clave:
-model <nombre_o_ruta_del_modelo>: Modelo a servir (obligatorio)-host 0.0.0.0: Enlazar a todas las interfaces (para acceso remoto)-port 8000: Especificar puerto-tensor-parallel-size <N>: Distribuir el modelo entre N GPUs-api-key <key>: Requerir clave API para las solicitudes (útil para producción)-generation-config vllm: Usar los parámetros de generación predeterminados de vLLM-chat-template <ruta>: Plantilla de chat personalizada (para uso avanzado)
El servidor se ejecuta en http://localhost:8000 por defecto.
Usando el Punto Final de la API de Completions
Ejemplo de cURL:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.1",
"prompt": "San Francisco es una ciudad en",
"max_tokens": 50,
"temperature": 0.7
}'
Ejemplo de Python (Cliente OpenAI):
from openai import OpenAI
client = OpenAI(
api_key="EMPTY", # O su clave API si está configurada
base_url="http://localhost:8000/v1"
)
completion = client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.1",
prompt="Explique los beneficios de usar vLLM:",
max_tokens=150,
temperature=0.5
)
print(completion.choices[0].text)
Usando el Punto Final de la API de Chat Completions
Ejemplo de cURL:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.1",
"messages": [
{"role": "system", "content": "Eres un asistente útil."},
{"role": "user", "content": "¿Cuál es la principal ventaja de PagedAttention en vLLM?"}
],
"max_tokens": 100,
"temperature": 0.7
}'
Ejemplo de Python:
chat_response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.1",
messages=[
{"role": "system", "content": "Eres un asistente de programación útil."},
{"role": "user", "content": "Escribe una función sencilla en Python para calcular el factorial."}
],
max_tokens=200,
temperature=0.5
)
print(chat_response.choices[0].message.content)
Con Apidog, puede diseñar, simular y probar rápidamente estos puntos finales de API, asegurando una integración fluida y un control de calidad automatizado para sus productos potenciados por LLM.
Backends de Atención de vLLM: FlashAttention, xFormers y FlashInfer
vLLM soporta múltiples backends de computación de atención para una velocidad y eficiencia de memoria óptimas:
- FlashAttention (1 y 2): El más rápido para la mayoría de las GPUs NVIDIA modernas, minimiza el uso de memoria.
- xFormers: Amplia compatibilidad; buena alternativa para hardware más antiguo o menos común.
- FlashInfer: Avanzado, añadido recientemente; requiere instalación manual.
Selección automática: vLLM elige el mejor backend para su hardware y modelo por defecto.
Anulación manual: Establezca la variable de entorno VLLM_ATTENTION_BACKEND a FLASH_ATTN, XFORMERS o FLASHINFER antes de ejecutar vLLM si desea forzar un backend.
Solución de Problemas Comunes de vLLM
1. Errores de Memoria Insuficiente de CUDA
- Intente con un modelo más pequeño (p. ej., OPT-1.3B)
- Reduzca las solicitudes concurrentes o el tamaño del lote
- Use modelos cuantizados (AWQ, GPTQ, etc.)
- Distribuya entre varias GPUs (
-tensor-parallel-size) - Verifique otros procesos de GPU con
nvidia-smi
2. Problemas de Instalación y Compatibilidad
- Asegúrese de que CUDA, PyTorch y los controladores NVIDIA sean compatibles (consulte la matriz de compatibilidad de PyTorch)
- Preinstale PyTorch si es necesario
- Use las imágenes oficiales de Docker de vLLM para una configuración sin problemas
3. Fallos al Cargar el Modelo
- Verifique el nombre del modelo (p. ej.,
mistralai/Mistral-7B-Instruct-v0.1) - Use
trust_remote_code=Truesi el modelo lo requiere - Use rutas locales para modelos previamente descargados
- Verifique el espacio en disco y la conectividad a internet
4. Inferencia Lenta
- Monitoree la utilización de la GPU (`nvidia-smi`)
- Actualice vLLM, las dependencias y los controladores
- Experimente con diferentes backends de atención
- Ajuste los parámetros de muestreo (`max_tokens`, etc.)
5. Salida Inesperada o Sin Sentido
- Asegúrese de un formato de prompt correcto (consulte la tarjeta del modelo)
- Ajuste los parámetros de muestreo (`temperature`, `top_p`)
- Pruebe con un modelo diferente para aislar el problema
- Verifique el uso de la plantilla de chat en el servidor
Próximos pasos: Mejore su flujo de trabajo de API de LLM
Con vLLM, puede implementar y escalar API potenciadas por LLM más rápido —y con Apidog, obtiene un conjunto de herramientas completo para el diseño, prueba y documentación de API. Esta combinación permite a los equipos:
- Desarrollar, simular y probar puntos finales de LLM con patrones de tráfico reales
- Automatizar el control de calidad tanto para vLLM como para API compatibles con OpenAI
- Colaborar entre equipos con documentación de API clara y actualizada
Explore las características avanzadas de vLLM (cuantificación, multi-LoRA, servicio distribuido, decodificación especulativa) en la documentación oficial, y impulse su ciclo de vida de desarrollo de LLM con Apidog para una gestión de API sin interrupciones.
