Documentación

Desplegar un modelo

Sirve cualquier modelo de Hugging Face (texto, imagen, vídeo o voz) con vLLM, SGLang, vLLM-Omni o llama.cpp y tus propias opciones del motor: un endpoint al estilo de OpenAI con su propia clave de API, y SSH como root.

En la consola

  1. Abre Models en la consola.
  2. Escribe el nombre del modelo tal como aparece en Hugging Face, por ejemplo Qwen/Qwen3-8B, o pega su enlace.
  3. Elige el motor: vLLM o SGLang para modelos de texto, vLLM-Omni o SGLang para modelos de imagen y vídeo, vLLM-Omni para voz y sonido, llama.cpp para un archivo GGUF. Con llama.cpp, añade la cuantización después de dos puntos, por ejemplo unsloth/Qwen3-8B-GGUF:Q4_K_M.
  4. Pega tus propias opciones del motor si las tienes (más abajo).
  5. Para un modelo privado o con acceso restringido, añade un token de Hugging Face con acceso de lectura.
  6. Find GPUs consulta en Hugging Face el tamaño del modelo, muestra la línea de arranque que ejecutará la máquina y lista todas las GPU en las que cabe ahora, con el precio. Elige una y alquílala.

El motor descarga el modelo cuando arranca la máquina, así que el endpoint responde unos minutos después. Models muestra cuándo está listo, su dirección, su clave de API, código para llamarlo, una prueba para modelos de chat e imagen, y el registro del motor.

Tus opciones del motor

Pega las opciones que ajustaste, en la forma en que las guardes:

Shell
VLLM_USE_DEEP_GEMM=1 vllm serve Qwen/Qwen3-8B \
  --max-model-len 32768 --enable-prefix-caching \
  --speculative-config '{"method": "eagle3", "num_speculative_tokens": 3}'

Funcionan los flags sueltos, el comando completo y una línea de docker run, con variables delante y valores JSON entre comillas. Tú las eliges y las mantienes al día con las versiones de tu motor. Arrakis las lee sin shell y se las pasa al motor palabra por palabra, así que:

  • La sintaxis de shell (;, |, &&, $(...), $VARIABLES) se rechaza: nada la ejecutaría.
  • Dónde escucha el motor (--host, --port), su clave (--api-key) y el modelo quedan a cargo de Arrakis, así que el endpoint conserva su dirección y su clave. --served-model-name (--alias en llama.cpp) cambia el nombre del modelo que usan las solicitudes.
  • Tu paralelismo manda: con -tp, --tp o -dp en tus opciones, Arrakis no añade el suyo.
  • Los ajustes que eligen GPU (NVIDIA_*) y los del cargador (LD_*) se rechazan: una máquina usa las GPU que alquila.
  • Tu token de Hugging Face va en su propio campo, nunca en las opciones, para que no se guarde con ellas.

Desde la API

Shell
curl -X POST $ARRAKIS_URL/v1/deploy \
  -H "Authorization: Bearer ark_..." \
  -H "Content-Type: application/json" \
  -d '{"model": "black-forest-labs/FLUX.1-schnell", "engine": "omni", "termination_hours": 4,
       "extra_args": "--enforce-eager"}'

Sin node_id, Arrakis alquila la máquina mejor valorada que admite el modelo, con el menor número de GPU posible. POST /v1/deploy/plan lista primero, gratis, todas las GPU en las que cabe, y con extra_args revisa tus opciones y devuelve la línea de arranque. La respuesta trae el endpoint y su api_key; GET /v1/instances/{id}/endpoint los devuelve de nuevo, con ready cuando el modelo responde, y GET /v1/instances/{id}/endpoint/log el final del registro del motor. Los agentes usan la herramienta deploy_model por MCP.

Llámalo

El endpoint habla la API de OpenAI, así que cualquier cliente de OpenAI funciona. El nombre del modelo en una solicitud es su ID de Hugging Face, sin la cuantización, salvo que lo hayas renombrado.

Python
from openai import OpenAI

client = OpenAI(base_url="http://<address>/v1", api_key="sk-...")
reply = client.chat.completions.create(
    model="Qwen/Qwen3-8B",
    messages=[{"role": "user", "content": "Hello"}],
)
print(reply.choices[0].message.content)
El modelo generaPídeselo en
TextoPOST /v1/chat/completions, /v1/completions, /v1/embeddings
ImágenesPOST /v1/images/generations, /v1/images/edits
VídeoPOST /v1/videos, luego GET /v1/videos/{id} hasta que termine y GET /v1/videos/{id}/content
VozPOST /v1/audio/speech
Sonido y músicaPOST /v1/audio/generate
Texto a partir de vozPOST /v1/audio/transcriptions

La máquina es tuya

  • Es un alquiler normal: se factura por horas, se elimina al llegar su hora de eliminación y aparece en Instances.
  • Arranca con una imagen de Arrakis construida sobre la versión oficial del motor, con SSH como root. Ejecuta en ella arrakis-serve status, arrakis-serve logs o arrakis-serve restart.
  • Para probar otras opciones sin una máquina nueva, edita /etc/arrakis/serve/command (una palabra por línea) o /etc/arrakis/serve/env y ejecuta arrakis-serve restart. Cuando el motor se detiene, la máquina sigue encendida para que puedas arreglarlo.
  • El endpoint es la dirección de la máquina por HTTP simple. Un control de acceso en el puerto 8000 comprueba su clave de API (Authorization: Bearer <key>) antes de que una solicitud llegue al motor, que solo escucha dentro de la máquina; /health responde sin la clave y solo dice si el motor está en marcha. Para tráfico privado, abre un túnel SSH (ssh root@<host> -p <port> -N -L 8000:localhost:8000) y usa http://localhost:8000/v1.
  • Tu token de Hugging Face llega a la máquina como HF_TOKEN, y Arrakis no lo guarda. El host de la máquina puede leer lo que se ejecuta en ella, así que usa un token de solo lectura con permisos específicos (fine-grained).

¿Eres un agente? Esta página en Markdown.