Servicio de Alto Rendimiento con vLLM en Ubuntu

laptop_mac macOS Sonoma Intermediate schedule 8 min read
Author by Alex Rivera • May 14, 2024

Si estás construyendo una aplicación con múltiples usuarios concurrentes, Ollama y LM Studio no serán suficientes. Necesitas un motor de inferencia de nivel empresarial. Necesitas vLLM.

Step 1 Introducción

vLLM es un motor de servicio de LLM de alto rendimiento y memoria eficiente. Utiliza una técnica denominada PagedAttention para gestionar eficazmente las claves y valores de atención, lo que produce un rendimiento entre 2 y 4 veces superior al de los Transformers estándar de HuggingFace.

Esta guía asume que estás ejecutando un servidor Linux con al menos una GPU NVIDIA de gama alta (p. ej., RTX 3090, 4090 o A100).

Step 2 Requisitos Previos

vLLM requiere Python y CUDA. Recomendamos encarecidamente el uso de un entorno virtual como conda o el estándar venv.

Terminal
sudo apt update
sudo apt install python3-pip python3-venv

# Create and activate environment
python3 -m venv vllm-env
source vllm-env/bin/activate

Step 3 Instalación de vLLM

Instala vLLM directamente desde PyPI. Esto descargará automáticamente PyTorch y las dependencias CUDA necesarias.

Terminal
pip install vllm

Step 4 Ejecución de un Servidor Compatible con OpenAI

vLLM soporta de forma nativa el protocolo de la API de OpenAI. Puedes servir un modelo directamente desde la línea de comandos. Utilizaremos Llama 3 8B como ejemplo.

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-8B-Instruct   --dtype auto   --api-key your-secret-key   --port 8000

Parámetros Clave Explicados: - --model: El ID del repositorio de HuggingFace. vLLM lo descargará automáticamente. - --dtype auto: Utiliza automáticamente bfloat16 o float16 para el máximo rendimiento. - --api-key: Protege tu endpoint para que usuarios aleatorios de internet no puedan saturar tu GPU.

Step 5 Conexión a la API

Ahora puedes conectarte a este servidor utilizando el SDK estándar de Python de OpenAI, simplemente intercambiando el base_url.

Terminal
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="your-secret-key"
)

response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    messages=[
        {"role": "user", "content": "Explain PagedAttention."}
    ],
)

print(response.choices[0].message.content)

Step 6 Optimización para Producción

Si dispones de múltiples GPUs (p. ej., dos RTX 3090), puedes distribuir un modelo grande de 70B entre ellas mediante paralelismo tensorial. Simplemente añade el flag --tensor-parallel-size:

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-70B-Instruct   --tensor-parallel-size 2

Con vLLM en ejecución, tu servidor Linux es ahora capaz de gestionar decenas de solicitudes concurrentes de forma simultánea sin ninguna degradación en la latencia.