← Todas las recetasReceta · 12 de septiembre de 2025

Monta tu API de IA estilo OpenAI con vLLM (para toda la casa)

Sirve un LLM en tu servidor con API compatible OpenAI: toda tu casa y tus apps lo usan como si fuera ChatGPT, pero gratis y tuyo.

Dificultadmedia
Tiempo30 min
IngredientesvLLM · Docker · Qwen2.5

Cuando el chat de terminal se te queda corto, toca servir inferencia en serio: una API HTTP en tu red local que consumen todas tus apps (y las de tu familia). El estándar de facto es la API de OpenAI; con vLLM la clonas en casa.

Ingredientes

  • Linux con GPU (o Apple Silicon con MLX), o un servidor con 16GB+ de RAM
  • Docker instalado
  • Un modelo GGUF o los pesos originales

Pasos

  1. Lanza vLLM con Docker:

    docker run -d --name llm-api --gpus all \
      -v ~/.cache/huggingface:/root/.cache/huggingface \
      -p 8000:8000 \
      vllm/vllm-openai:latest \
      --model Qwen/Qwen2.5-7B-Instruct \
      --max-model-len 16384 \
      --port 8000

    (Sin GPU: usa --device cpu con la imagen vllm/vllm-openai:cpu y paciencia.)

  2. Prueba que responde:

    curl http://localhost:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "Qwen/Qwen2.5-7B-Instruct",
        "messages": [{"role": "user", "content": "¿Por qué la IA local es mejor?"}]
      }'
  3. Punta tus apps a tu servidor: en cualquier app que use OpenAI, cambia:

    • Base URL: http://TU-IP:8000/v1
    • API key: cualquiera (vLLM no la comprueba por defecto)
  4. Añade seguridad básica si sale de tu red: un reverse proxy con nginx y una API key real, o docker network aislada.

Resultado esperado

Una API con el mismo formato que OpenAI: /v1/chat/completions, /v1/models, streaming incluido. Tus apps no notan la diferencia (excepto la factura: 0€).

Trucos

  • --max-model-len: el contexto. Cada token de contexto come VRAM en la KV cache. No pongas 128K si no lo usas.
  • --quantization awq (o gptq) si el modelo te queda grande.
  • Monitoriza con nvidia-smi mientras sirves: la KV cache crece con las conversaciones largas.
  • Para clusters multi-máquina: llama.cpp server con --rpc o EXL3 distribuido (receta avanzada, la contaremos con nuestras dos sparks).