vLLM

Sirva un LLM de pesos abiertos con vLLM en una máquina Node Lodge. Instálelo con uv, inicie el servidor compatible con OpenAI y consúltelo por un túnel SSH.

Sirva un modelo de pesos abiertos detrás de una API compatible con OpenAI.

GPU: 24 GB de VRAM o más para el modelo 7B de abajo. Consulte Inferencia de LLM para el dimensionamiento.

1. Verifique la GPU

nvidia-smi

El encabezado muestra el driver y la versión de CUDA más alta que admite.

2. Instale

curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env

uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto

--torch-backend=auto selecciona la compilación de PyTorch que corresponde al driver instalado.

3. Sirva

Inicie el servidor dentro de tmux para que sobreviva a las desconexiones:

tmux new -s vllm
source .venv/bin/activate
vllm serve Qwen/Qwen2.5-7B-Instruct --max-model-len 8192

Separe la sesión de tmux con Ctrl+b d. El primer inicio descarga los pesos en ~/.cache/huggingface. El servidor está listo cuando registra que escucha en el puerto 8000.

Opciones útiles:

Flag Uso
--tensor-parallel-size 2 Reparte el modelo entre 2 GPU en las ofertas multi-GPU
--max-model-len 8192 Limita la longitud de contexto para que la caché KV quepa en la VRAM
--gpu-memory-utilization 0.90 Proporción de VRAM que puede usar vLLM
--api-key <secret> Exige un token Bearer en cada solicitud

Los modelos con acceso restringido (Llama, Gemma) necesitan un token de Hugging Face:

export HF_TOKEN=hf_...

4. Consulte desde la máquina

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen2.5-7B-Instruct",
    "messages": [{"role": "user", "content": "Say hello in five words."}],
    "max_tokens": 32
  }'

5. Consulte desde su computadora

Solo SSH está abierto en entrada. Redirija el puerto 8000:

ssh -N -L 8000:localhost:8000 ubuntu@203.0.113.42

Luego apunte cualquier cliente compatible con OpenAI a http://localhost:8000/v1:

from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")
reply = client.chat.completions.create(
    model="Qwen/Qwen2.5-7B-Instruct",
    messages=[{"role": "user", "content": "Say hello in five words."}],
)
print(reply.choices[0].message.content)

Asigne su secreto a api_key si inició el servidor con --api-key.

6. Termine

Copie lo que necesite y seleccione End session. Los pesos descargados se eliminan con la máquina.

Referencia: documentación de vLLM.

Forma parte de un caso de uso: Inferencia de LLM, con lo que garantiza una sesión.

Los resultados aparecen mientras escribe. Las flechas permiten recorrerlos.