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
| Modelo | RAM mínima | GPU VRAM | Velocidad CPU |
|---|---|---|---|
| 1B-3B | 4 GB RAM | 2 GB | Aceptable |
| 7B | 8 GB RAM | 4 GB | Lento |
| 13B | 16 GB RAM | 8 GB | Muy lento |
| 70B | 64 GB RAM | 40 GB | Impracticable |
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.


