OCTOO AI Laboratorio independiente de IA

Notas de campo

Cómo ejecutamos un LLM con vLLM en un servidor GPU de Hetzner

Servimos un modelo de pesos abiertos, Qwen3-14B, desde una GPU de 20 GB alquilada en Hetzner, en Alemania. Aquí tienes el comando que usamos, en qué se va la memoria, a qué velocidad responde y cuánto cuesta un servidor GPU en Hetzner.

Por Actualizado 5 min de lectura

28,8 tokens por segundo con una petición en nuestro Hetzner GEX44 en Alemania: Qwen3-14B en AWQ de 4 bits, servido con vLLM en una GPU de 20 GB al 73 % de uso.

Desde julio de 2026 tenemos funcionando un LLM de pesos abiertos, Qwen3-14B, con vLLM en un servidor GPU alquilado en Hetzner, en Alemania. Entre una pregunta y su respuesta no hay ningún proveedor de modelos, y el modelo no tiene endpoint público.

El servidor: un Hetzner GEX44 con 20 GB de VRAM

Nuestro servidor es un GEX44 de Hetzner con una NVIDIA RTX 4000 SFF Ada, una tarjeta compacta de 70 vatios con 20 GB de memoria gráfica (VRAM). La acompañan un Intel Core i5-13500, 64 GB de RAM y dos discos NVMe. En un chat, la cifra que más pesa es el ancho de banda de la memoria. Esta tarjeta mueve 280 GB/s, y eso es lo que marca la velocidad. La CPU y la RAM apenas trabajan.

El modelo: Qwen3-14B en AWQ de 4 bits

Usamos la versión AWQ del propio equipo de Qwen: 14 800 millones de parámetros, pesos abiertos y licencia Apache 2.0. Con 16 bits por peso, el modelo por sí solo necesitaría unos 29,6 GB, más de lo que tiene la tarjeta. AWQ (activation-aware weight quantization) guarda los pesos en 4 bits y protege los pocos que más influyen, así que el modelo cabe en unos 10 GB. El resto de la tarjeta queda para la caché KV, la memoria de trabajo de las conversaciones en curso.

Los pesos están en el servidor, fijados en una versión: un reinicio nunca descarga otra más nueva. GGUF, el formato de llama.cpp y Ollama, sigue siendo experimental en vLLM (más en Ollama o vLLM). Qué otros modelos abiertos caben en 20, 24 o 96 GB: guía de VRAM.

El comando vllm serve

La ruta, el nombre del modelo y el puerto son de ejemplo. Los ajustes son los que usamos.

vllm serve /path/to/model \
  --served-model-name my-model \
  --host 127.0.0.1 --port 8000 \
  --max-model-len 8192 \
  --max-num-seqs 2 \
  --max-num-batched-tokens 2048 \
  --gpu-memory-utilization 0.75 \
  --enforce-eager \
  --no-enable-log-requests \
  --disable-uvicorn-access-log

Qué hace cada ajuste:

  • Host 127.0.0.1, la dirección interna (loopback) del servidor: desde internet nada responde en el puerto del modelo.
  • 8192 tokens por petición, prompt y respuesta juntos. Sin este límite, vLLM contaría con los 40 960 completos del modelo; con él caben dos conversaciones completas, y sobra sitio.
  • Dos peticiones a la vez. Una tercera espera en la cola. Los prompts largos se procesan en trozos de hasta 2048 tokens.
  • El 75 % de la memoria de la GPU para vLLM, en lugar del 92 % por defecto. Así queda margen en una tarjeta de 20 GB.
  • El modo eager desactiva los CUDA graphs. Ahorra memoria y cuesta algo de velocidad.
  • Sin registros de peticiones: vLLM no escribe una línea por petición, y su servidor web integrado no escribe líneas de acceso. Los prompts no acaban en ningún registro.
Barra apilada con los 20 475 MiB de la tarjeta: pesos del modelo, unos 9515 MiB; caché KV, unos 4988 MiB; ejecución y otros procesos, unos 405 MiB; libre, 5567 MiB. El límite del 75 % para vLLM termina en 15 356 MiB.
Así se reparte la memoria de nuestra tarjeta de 20 GB mientras el modelo funciona.

En nuestra tarjeta, los pesos ocupan casi la mitad de la memoria y la caché KV, alrededor de una cuarta parte: sitio para casi cuatro conversaciones completas de 8192 tokens. Para otros modelos y tarjetas tienes la calculadora de VRAM.

El modo de razonamiento de Qwen3 también cuenta

Qwen3 arranca en modo de razonamiento (thinking). Lo que razona sale de la misma ventana de 8192 tokens y consume tiempo. Para un chat normal, desactívalo como indica la ficha del modelo antes de subir el límite.

vLLM como servicio systemd, cerrado a internet

vLLM funciona como un servicio systemd que arranca con el sistema y tiene límites de memoria. Nuestros propios sistemas llegan a él por un túnel restringido; desde internet no hay forma de llegar a él. Si tú abres un puerto, no confíes solo en la opción de clave API de vLLM. Su guía de seguridad enumera rutas que la clave no protege y recomienda un proxy inverso que solo deje pasar los endpoints que necesitas. Desactiva también las estadísticas de uso, que vLLM recoge por defecto.

Medido: tokens por segundo en el GEX44

Con una petición, el modelo escribe 28,8 tokens por segundo, y el primer token llega en unos 54 ms. Con dos a la vez, cada una va a 28,3 tokens por segundo, 56,4 en total: la segunda viaja casi gratis.

Gráfico de barras: el ancho de banda de la memoria limita una respuesta a unos 33 tokens por segundo; medido, 28,8 con una petición y 56,4 en total con dos a la vez. Primer token: unos 54 ms con un prompt corto, 1090 ms con uno de 1701 tokens y 63 ms al enviarlo de nuevo.
Qwen3-14B con vLLM en nuestro GEX44, medido en el propio servidor.

El límite de una sola respuesta lo pone el ancho de banda de la memoria: por cada token, la tarjeta lee casi todos los pesos una vez, y con 280 GB/s eso da para unos 33 tokens por segundo. Los prompts largos solo cuestan tiempo una vez: con 1701 tokens, el primer token tardó 1,09 s, y con el mismo prompt otra vez, 63 ms, porque la caché de prefijos de vLLM guarda lo que ya ha leído. En un chat se nota, porque cada mensaje reenvía la conversación entera.

Precio de un servidor GPU de Hetzner

Para un modelo de 14B en 4 bits y pocos usuarios bastan 20 GB, como muestra nuestro GEX44. Para trabajos más grandes está el GEX131, con una NVIDIA RTX PRO 6000 Blackwell: 96 GB de VRAM y 1792 GB/s, por hasta 1199 € al mes más 599 € de instalación. Es la clase para modelos de 30B en 16 bits, grandes modelos de mezcla de expertos (MoE), varios modelos a la vez o ajuste fino. Precios sin IVA.

Nuestro servidor está en Alemania, así que los prompts se procesan allí. Qué significa eso para la protección de datos: IA privada y RGPD.

Si quieres un modelo así en un servidor tuyo, sin tener que gestionarlo tú, para eso está IA privada. Montamos un servidor GPU dedicado en Hetzner, en Alemania, instalamos y adaptamos un modelo de pesos abiertos, lo probamos con tus propias preguntas y mantenemos la máquina. Recibes una interfaz de chat privada y una API, y con cada cliente firmamos un contrato de encargo del tratamiento. La primera llamada es gratuita.

Preguntas frecuentes

¿Qué es vLLM?

Una biblioteca de código abierto para ejecutar y servir modelos de lenguaje (LLM). El comando vllm serve levanta un servidor HTTP con una API compatible con la de OpenAI, así que las herramientas hechas para esa API suelen funcionar con tu propio modelo. Nosotros servimos con él Qwen3-14B desde una GPU de 20 GB.

¿Qué hardware necesito para alojar mi propio LLM?

Sobre todo, memoria de GPU suficiente. Un modelo de 14B en 4 bits funciona con 20 GB de VRAM, como demuestra nuestro propio servidor. Para modelos de la clase de 30B en 16 bits, modelos grandes de mezcla de expertos o ajuste fino, cuenta con 96 GB.

¿Qué velocidad tiene Qwen3-14B en un Hetzner GEX44?

En nuestra medición, 28,8 tokens por segundo con una petición, con el primer token a los 54 ms, más o menos. Con dos a la vez, 28,3 cada una y 56,4 en total. El ancho de banda de la memoria pone el techo de una sola respuesta en unos 33.

¿Qué hace gpu-memory-utilization en vLLM?

Fija la parte de la memoria de la GPU con la que vLLM cuenta para el modelo, su memoria de trabajo y la caché KV. El valor por defecto es 0,92. Nosotros usamos 0,75 en nuestra tarjeta de 20 GB, y así queda libre más de una cuarta parte de la memoria.

¿Cuánto cuesta un servidor GPU en Hetzner?

El GEX131 de Hetzner, con 96 GB de VRAM, cuesta hasta 1199 € al mes más 599 € de instalación, sin IVA. Para un modelo de 14B en 4 bits y pocos usuarios basta un servidor de 20 GB como nuestro GEX44.

Fuentes

  1. Documentación de vLLM: argumentos del motor (engine arguments) docs.vllm.ai
  2. Documentación de vLLM: seguridad docs.vllm.ai
  3. Ficha del modelo Qwen3-14B-AWQ (Hugging Face) huggingface.co
  4. Hetzner: servidores dedicados con GPU hetzner.com
  5. Hetzner Docs: ajuste de precios de los servidores dedicados docs.hetzner.com

vLLM, Ollama, NVIDIA y Hetzner son marcas de sus respectivos titulares. Mencionarlas no implica respaldo ni relación comercial con OCTOO AI.