Instalación de Ollama para Despliegue Local de LLMs

Ollama es la herramienta más sencilla para ejecutar grandes modelos de lenguaje (LLMs) localmente en tu servidor Linux, sin enviar datos a servicios externos ni pagar por uso. Con soporte para modelos como Llama 3, Mistral, Gemma y docenas más, Ollama gestiona automáticamente la descarga, el almacenamiento y la ejecución de los modelos con aceleración GPU si está disponible. Esta guía cubre la instalación, la gestión de modelos, la API y la integración con Open WebUI para una interfaz web completa.

Requisitos Previos

  • Servidor Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+)
  • Al menos 8 GB de RAM (16 GB recomendado para modelos 7B)
  • Suficiente espacio en disco (los modelos ocupan 4-40 GB cada uno)
  • GPU NVIDIA con drivers instalados (opcional pero muy recomendado)
  • Acceso root o sudo

Recursos necesarios por tamaño de modelo

ModeloRAM mínimaGPU VRAMVelocidad CPU
1B-3B4 GB RAM2 GBAceptable
7B8 GB RAM4 GBLento
13B16 GB RAM8 GBMuy lento
70B64 GB RAM40 GBImpracticable

Instalación de Ollama

Instalación automática (recomendada)

# El script oficial instala Ollama y configura el servicio systemd
curl -fsSL https://ollama.com/install.sh | sh

# Verificar la instalación
ollama --version

# Verificar que el servicio está activo
sudo systemctl status ollama

Instalación manual

# Descargar el binario directamente
curl -L https://ollama.com/download/ollama-linux-amd64 -o /usr/local/bin/ollama
chmod +x /usr/local/bin/ollama

# Crear usuario y directorio para Ollama
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama

# Crear el servicio systemd
sudo cat > /etc/systemd/system/ollama.service << 'EOF'
[Unit]
Description=Servidor de inferencia Ollama
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="OLLAMA_HOST=0.0.0.0"

[Install]
WantedBy=default.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl start ollama

Primeros Pasos con Modelos

# Descargar y ejecutar un modelo (se descarga automáticamente si no existe)
ollama run llama3.2

# Ejecutar un modelo más ligero para pruebas
ollama run llama3.2:1b

# Ejecutar Mistral
ollama run mistral

# Ejecutar Gemma de Google
ollama run gemma2:9b

# Ejecutar en modo no interactivo (una sola respuesta)
ollama run llama3.2 "¿Cuál es la capital de España?"

# Modo pipeline (desde stdin)
echo "Explica qué es Docker en 3 líneas" | ollama run llama3.2

Modelos populares disponibles

# Ver todos los modelos disponibles en ollama.com/library
# Algunos de los más usados:

ollama pull llama3.2        # Meta Llama 3.2 (3B) - buena relación calidad/velocidad
ollama pull llama3.1:8b     # Meta Llama 3.1 (8B) - más capaz
ollama pull mistral         # Mistral 7B - muy bueno para código
ollama pull codellama       # CodeLlama - especializado en código
ollama pull phi3            # Microsoft Phi-3 - eficiente, buena calidad
ollama pull qwen2.5         # Alibaba Qwen 2.5 - excelente en múltiples idiomas
ollama pull deepseek-r1     # DeepSeek R1 - razonamiento avanzado

Gestión de Modelos

# Listar los modelos descargados localmente
ollama list

# Ver la información de un modelo
ollama show llama3.2

# Descargar un modelo sin ejecutarlo
ollama pull llama3.2:latest

# Descargar una variante específica (quantización)
ollama pull llama3.1:8b-instruct-q4_0   # Q4 = más ligero, menor calidad
ollama pull llama3.1:8b-instruct-q8_0   # Q8 = más preciso, más pesado

# Eliminar un modelo para liberar espacio
ollama rm llama3.2

# Ver cuánto espacio ocupan los modelos
du -sh ~/.ollama/models/

Configuración del Servicio

# Ver la configuración actual del servicio
sudo systemctl cat ollama

# Personalizar la configuración (editar el override)
sudo systemctl edit ollama

Variables de entorno importantes para Ollama:

# Configurar en /etc/systemd/system/ollama.service.d/override.conf
sudo mkdir -p /etc/systemd/system/ollama.service.d/
sudo cat > /etc/systemd/system/ollama.service.d/override.conf << 'EOF'
[Service]
# Escuchar en todas las interfaces (para acceso desde la red local)
Environment="OLLAMA_HOST=0.0.0.0:11434"

# Directorio donde se almacenan los modelos
Environment="OLLAMA_MODELS=/var/lib/ollama/models"

# Número máximo de modelos cargados simultáneamente
Environment="OLLAMA_MAX_LOADED_MODELS=2"

# Memoria máxima de CPU a usar
Environment="OLLAMA_NUM_PARALLEL=4"

# Tiempo antes de descargar un modelo inactivo de la memoria
Environment="OLLAMA_KEEP_ALIVE=5m"
EOF

sudo systemctl daemon-reload
sudo systemctl restart ollama

Uso de la API REST

Ollama expone una API REST en el puerto 11434 compatible (parcialmente) con la API de OpenAI.

# Endpoint de generación (API nativa de Ollama)
curl http://localhost:11434/api/generate \
  -d '{
    "model": "llama3.2",
    "prompt": "¿Qué es Kubernetes?",
    "stream": false
  }' | python3 -m json.tool

# Con streaming (respuesta token por token)
curl http://localhost:11434/api/generate \
  -d '{
    "model": "llama3.2",
    "prompt": "Escribe un haiku sobre Linux",
    "stream": true
  }'

# Chat completions (compatible con API de OpenAI)
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.2",
    "messages": [
      {"role": "system", "content": "Eres un asistente técnico experto en Linux."},
      {"role": "user", "content": "¿Cómo verifico qué proceso usa más CPU?"}
    ]
  }' | python3 -m json.tool

# Listar modelos disponibles vía API
curl http://localhost:11434/api/tags | python3 -m json.tool

# Ver el estado del servidor
curl http://localhost:11434/api/version

Uso con Python

#!/usr/bin/env python3
# Ejemplo de uso de Ollama con Python

import requests
import json

def preguntar_ollama(prompt, modelo="llama3.2"):
    """Enviar una pregunta a Ollama y obtener la respuesta completa."""
    respuesta = requests.post(
        "http://localhost:11434/api/generate",
        json={
            "model": modelo,
            "prompt": prompt,
            "stream": False
        }
    )
    return respuesta.json()["response"]

# Ejemplo de uso
if __name__ == "__main__":
    resultado = preguntar_ollama("Explica qué es una VPN en términos simples")
    print(resultado)

# Usando la librería oficial de Ollama
# pip install ollama
import ollama

respuesta = ollama.chat(model='llama3.2', messages=[
    {'role': 'user', 'content': '¿Cuáles son los comandos más útiles de Linux?'}
])
print(respuesta['message']['content'])

Aceleración GPU

# Verificar si Ollama detecta la GPU correctamente
ollama run llama3.2 "test" 2>&1 | head -5
# Debería mostrar información sobre la GPU

# Ver los logs de Ollama para confirmar el uso de GPU
sudo journalctl -u ollama -f

# En los logs debería aparecer:
# "llm server loading model" y luego:
# "ggml_cuda_init: found X CUDA devices"

# Monitorizar el uso de VRAM durante la inferencia
nvidia-smi -l 1  # Actualizar cada segundo

Forzar el uso de GPU o CPU

# Forzar el uso solo de CPU (si hay problemas con la GPU)
CUDA_VISIBLE_DEVICES="" ollama run llama3.2

# Especificar qué GPU usar (en sistemas multi-GPU)
CUDA_VISIBLE_DEVICES=0 ollama run llama3.2  # Primera GPU
CUDA_VISIBLE_DEVICES=1 ollama run llama3.2  # Segunda GPU

Crear Modelos Personalizados

Puedes crear variantes personalizadas de modelos con parámetros del sistema y configuraciones propias.

# Crear un archivo Modelfile
cat > /tmp/MiAsistenteLinux << 'EOF'
FROM llama3.2

# Temperatura (0.0-1.0): valores bajos = más preciso, valores altos = más creativo
PARAMETER temperature 0.3

# Contexto máximo (en tokens)
PARAMETER num_ctx 4096

# Mensaje de sistema personalizado
SYSTEM """
Eres un experto en administración de sistemas Linux y DevOps.
Proporciona respuestas concisas, precisas y con ejemplos de comandos cuando sea relevante.
Responde siempre en español.
"""
EOF

# Crear el modelo personalizado
ollama create asistente-linux -f /tmp/MiAsistenteLinux

# Ejecutar el modelo personalizado
ollama run asistente-linux "¿Cómo monitorizaría el uso de disco en un servidor?"

# Ver los modelos creados
ollama list

Solución de Problemas

Ollama no inicia

# Ver los logs detallados
sudo journalctl -u ollama -n 50 --no-pager

# Verificar que el puerto no está ocupado
sudo ss -tlnp | grep 11434

# Iniciar manualmente para ver errores en tiempo real
sudo -u ollama ollama serve

La GPU no es detectada

# Verificar los drivers NVIDIA
nvidia-smi

# El usuario ollama debe pertenecer al grupo video/render
sudo usermod -a -G video,render ollama
sudo systemctl restart ollama

La descarga de modelos es muy lenta o se interrumpe

# Ollama continúa la descarga desde donde la dejó
ollama pull llama3.2  # Simplemente volver a ejecutar

# Ver el progreso de descarga
ollama pull llama3.2 2>&1

La respuesta es muy lenta (inferencia CPU)

# Usar un modelo más pequeño para CPU
ollama run llama3.2:1b  # Modelo de 1B en lugar del de 3B

# Verificar la cuantización del modelo (q4 es más rápido)
ollama pull mistral:7b-instruct-q4_0

Conclusión

Ollama simplifica enormemente el despliegue de LLMs en servidores Linux, ofreciendo desde una interfaz de línea de comandos hasta una API REST compatible con OpenAI. Con GPU aceleración y la capacidad de crear modelos personalizados con instrucciones de sistema específicas, Ollama es la solución ideal para aplicaciones de IA privadas, asistentes internos o experimentación con LLMs de código abierto sin dependencia de servicios externos.