Ollama en local es simple: instalas, ejecutas, listo. Desplegarlo en un servidor para que múltiples servicios o usuarios lo usen requiere configuración adicional: systemd, exposición de red, seguridad y monitorización.

Instalación en servidor Linux

# Instalar Ollama
curl -fsSL https://ollama.com/install.sh | sh

# Verificar que el servicio está corriendo
systemctl status ollama

Ollama crea automáticamente un servicio systemd que se inicia con el sistema.

Descargar modelos en el servidor

# Descargar Llama 3.1 8B (la versión más popular para servidores)
ollama pull llama3.1

# Descargar Mistral 7B
ollama pull mistral

# Listar modelos disponibles
ollama list

Los modelos se guardan en /usr/share/ollama/.ollama/models/.

Exponer la API a la red local

Por defecto, Ollama escucha solo en localhost:11434. Para que otros servicios en la red puedan acceder, hay que cambiar la configuración:

# Editar la configuración del servicio systemd
sudo systemctl edit ollama

En el editor que abre:

[Service]
Environment="OLLAMA_HOST=0.0.0.0"
sudo systemctl daemon-reload
sudo systemctl restart ollama

Atención: Esto expone la API sin autenticación. Solo hazlo si la red está protegida por firewall o si añades un proxy inverso con autenticación delante.

Proxy inverso con nginx y autenticación básica

# Instalar nginx
sudo apt install nginx apache2-utils

# Crear usuario con contraseña
sudo htpasswd -c /etc/nginx/.htpasswd ollama_user

# Configuración nginx
sudo nano /etc/nginx/sites-available/ollama
server {
    listen 443 ssl;
    server_name tu-servidor.com;

    ssl_certificate /etc/ssl/certs/tu-cert.pem;
    ssl_certificate_key /etc/ssl/private/tu-key.pem;

    location / {
        proxy_pass http://localhost:11434;
        proxy_set_header Host $host;
        
        auth_basic "Ollama API";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Usar la API desde tu aplicación

La API de Ollama es compatible con el formato de OpenAI:

from openai import OpenAI

# Apuntar al servidor Ollama en lugar de a api.openai.com
client = OpenAI(
    base_url="http://tu-servidor:11434/v1",
    api_key="ollama",  # Ollama no requiere key, pero el campo es obligatorio
)

response = client.chat.completions.create(
    model="llama3.1",
    messages=[
        {"role": "user", "content": "Explica qué es un deadlock en bases de datos"}
    ]
)

print(response.choices[0].message.content)

Monitorización

# Ver logs en tiempo real
journalctl -u ollama -f

# Ver uso de GPU
watch -n 1 nvidia-smi

# Ver modelos cargados en memoria
ollama ps

Gestión de memoria GPU

Por defecto, Ollama carga el modelo en GPU cuando hay memoria disponible y lo descarga después de 5 minutos de inactividad. Puedes ajustar esto:

# Mantener el modelo en memoria indefinidamente
OLLAMA_KEEP_ALIVE=-1 ollama serve

# O por model al hacer la petición
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.1",
  "keep_alive": -1,
  "prompt": "Hola"
}'

Hardware mínimo recomendado para servidor

ModeloVRAM GPURAM CPU (si no hay GPU)
Llama 3.1 8B Q46 GB8 GB
Mistral 7B Q45 GB7 GB
Llama 3.1 70B Q440 GB48 GB

Fuentes: Documentación oficial de Ollama, repositorio GitHub de Ollama, guías de la comunidad en /r/LocalLLaMA.