> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monostate.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Servir Modelos

> Sirve modelos entrenados como APIs

# Servir Modelos

Sirve tus modelos entrenados para inferencia en producción.

## Interfaz de Chat

La forma más simple de probar e interactuar con modelos:

```bash theme={null}
aitraining chat
```

Abre una interfaz web en `http://localhost:7860/inference`. El Chat UI te permite cargar cualquier modelo local o del Hub para pruebas interactivas.

### Puerto Personalizado

```bash theme={null}
aitraining chat --port 3000
```

### Host Personalizado

```bash theme={null}
aitraining chat --host 0.0.0.0
```

## Servidor de API

El servidor de API es un **ejecutor de entrenamiento**, no un servidor de inferencia. Expone endpoints mínimos para verificaciones de salud mientras ejecuta trabajos de entrenamiento.

### Iniciar Servidor de API

```bash theme={null}
aitraining api
```

Inicia la API de entrenamiento en `http://127.0.0.1:7860` por defecto.

### Parámetros

| Parameter | Description            | Default     |
| --------- | ---------------------- | ----------- |
| `--port`  | Port to run the API on | `7860`      |
| `--host`  | Host to bind to        | `127.0.0.1` |
| `--task`  | Task to run (optional) | `None`      |

### Puerto/Host Personalizados

```bash theme={null}
aitraining api --port 8000 --host 0.0.0.0
```

### Variables de Entorno

El servidor de API lee la configuración de variables de entorno:

| Variable             | Description                           |
| -------------------- | ------------------------------------- |
| `HF_TOKEN`           | Hugging Face token for authentication |
| `AUTOTRAIN_USERNAME` | Username for training                 |
| `PROJECT_NAME`       | Name of the project                   |
| `TASK_ID`            | Task identifier                       |
| `PARAMS`             | Training parameters (JSON)            |
| `DATA_PATH`          | Path to training data                 |
| `MODEL`              | Model to use                          |

### Endpoints

| Endpoint      | Description                     |
| ------------- | ------------------------------- |
| `GET /`       | Returns training status message |
| `GET /health` | Health check (returns "OK")     |

<Note>
  El servidor de API se apaga automáticamente cuando no hay trabajos de entrenamiento activos. Para inferencia en producción, usa vLLM o TGI en su lugar.
</Note>

## Despliegue en Producción

### Usando vLLM

Para servir de nivel de producción con alto rendimiento:

```bash theme={null}
pip install vllm

python -m vllm.entrypoints.openai.api_server \
  --model ./my-trained-model \
  --port 8000
```

### Usando Text Generation Inference (TGI)

```bash theme={null}
docker run --gpus all -p 8080:80 \
  -v ./my-model:/model \
  ghcr.io/huggingface/text-generation-inference:latest \
  --model-id /model
```

### API Compatible con OpenAI

Tanto vLLM como TGI proporcionan endpoints compatibles con OpenAI:

```python theme={null}
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="dummy"  # Not needed for local
)

response = client.chat.completions.create(
    model="my-model",
    messages=[
        {"role": "user", "content": "Hello!"}
    ]
)
```

## Despliegue Docker

### Ejemplo de Dockerfile

```dockerfile theme={null}
FROM python:3.10-slim

WORKDIR /app

# Install dependencies
RUN pip install aitraining torch

# Expose port
EXPOSE 7860

# Run chat server
CMD ["aitraining", "chat", "--host", "0.0.0.0", "--port", "7860"]
```

Construir y ejecutar:

```bash theme={null}
docker build -t my-model-server .
docker run -p 7860:7860 my-model-server
```

### Con GPU

```bash theme={null}
docker run --gpus all -p 7860:7860 my-model-server
```

## Prueba de Carga

### Usando hey

```bash theme={null}
hey -n 100 -c 10 \
  -m POST \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Hello", "max_tokens": 50}' \
  http://localhost:8000/generate
```

### Usando locust

```python theme={null}
# locustfile.py
from locust import HttpUser, task

class ModelUser(HttpUser):
    @task
    def generate(self):
        self.client.post("/generate", json={
            "prompt": "Hello, how are you?",
            "max_tokens": 50
        })
```

```bash theme={null}
locust -f locustfile.py --host http://localhost:8000
```

## Monitorización

### Métricas Prometheus

Si usas vLLM o TGI, las métricas están disponibles en `/metrics`.

### Logging

```bash theme={null}
aitraining api --port 8000 2>&1 | tee server.log
```

## Próximos Pasos

<CardGroup cols={2}>
  <Card title="Benchmarking" href="/cli/benchmarking">
    Mide el rendimiento del modelo
  </Card>

  <Card title="Interfaz de Chat" href="/chat/launching">
    Pruebas interactivas
  </Card>
</CardGroup>
