CreaRack-SL

Ollama / Gemma 4 — Self-Hosted AI Guide

Ollama / Gemma 4 — Self-Hosted AI Guide

Fecha evaluación: 06-04-2026 Estado: Validado localmente, pendiente despliegue en servidor dedicado Aplicable a: Auto-Plan AI (visión) + CNS/Sentinel (texto)


1. Contexto y Motivación

La API de Gemini Flash 3 es el proveedor principal de IA en CreaRack. Sin embargo:

  • Coste escalable: 4-5 EUR/mes en testing. Con N clientes SaaS, el coste crece linealmente (~5 EUR/cliente/mes).
  • Data leakage: Los planos de datacenter y datos SNMP de clientes viajan a servidores de Google.
  • Dependencia de vendor: Google ha subido precios recientemente y puede deprecar modelos.

Solución evaluada: Gemma 4 (modelo open-source de Google) corriendo en Ollama (self-hosted), con migración futura a vLLM para producción.


2. Resultados de la Evaluación

Subsistemas validados

SubsistemaTipoResultadoTiempo (CPU laptop)Tiempo estimado (EPYC server)
CNS/SentinelTexto (troubleshooting)Correcto1.7s (warm)<1s
Auto-PlanVisión (análisis de planos)Correcto2-3 min15-30s

Hardware de pruebas

  • Intel i7 13th Gen (16 hilos), sin GPU dedicada
  • Modelo: gemma4 Q4_K_M (8B params, 9.6 GB en disco)
  • RAM consumida: 4-5 GB sostenido, pico 7 GB en arranque
  • CPU: hasta 90% con perfil optimizado (14 threads)

Análisis de costes

EscenarioGemini APIOllama self-hosted (Hetzner CCX33)
1 cliente~5 EUR/mes35 EUR/mes (fijo)
7 clientes~35 EUR/mes35 EUR/mes (breakeven)
50 clientes~250 EUR/mes35 EUR/mes
200 clientes~1000 EUR/mes35 EUR/mes

Breakeven: 7 clientes activos.


3. Arquitectura Implementada

Toggle de proveedores (ya funcional)

                    .env
                     │
            ┌────────┴────────┐
            │                 │
     AUTOPLAN_PROVIDER   EDGE_AI_PROVIDER
     (Auto-Plan AI)      (CNS/Sentinel)
            │                 │
     ┌──────┼──────┐   ┌─────┼──────┐
     │      │      │   │     │      │
  gemini deepseek ollama  gemini claude ollama

Ambos subsistemas soportan cambio de proveedor via variables de entorno, sin cambios de código.

Archivos clave

ArchivoPropósito
monitoring/services/ai_providers/ollama.pyOllamaProvider para CNS (async, aiohttp)
monitoring/services/ai_providers/__init__.pyFactory con ollama registrado
blueprints/services/autoplan.py_analyze_with_ollama() para Auto-Plan (visión)
blueprints/api/autoplan.pySoporte provider ollama sin API key
config/settings/base.pyOLLAMA_BASE_URL, OLLAMA_MODEL
.env / .env.exampleToggle documentado

Variables de entorno

VariableValoresDefaultDescripción
AUTOPLAN_PROVIDERgemini, deepseek, ollamageminiProveedor para Auto-Plan AI
EDGE_AI_PROVIDERgemini, claude, ollama, staticgeminiProveedor para CNS/Sentinel
OLLAMA_BASE_URLURLhttp://localhost:11434Endpoint de Ollama
OLLAMA_MODELstringgemma4Modelo de Ollama a usar

4. Cómo Cambiar de Gemini a Ollama

Paso 1: Instalar Ollama y modelo

# Instalar Ollama (ver ollama.com)
# Descargar modelo base
ollama pull gemma4

# Crear perfil optimizado (16K contexto, 14 threads)
printf 'FROM gemma4\nPARAMETER num_ctx 16384\nPARAMETER num_thread 14' > Modelfile
ollama create gemma4-16k -f Modelfile

Paso 2: Configurar .env

# Cambiar providers
AUTOPLAN_PROVIDER=ollama
EDGE_AI_PROVIDER=ollama
OLLAMA_BASE_URL=http://host.docker.internal:11434  # Docker local
# OLLAMA_BASE_URL=http://10.0.0.X:11434            # Servidor dedicado
OLLAMA_MODEL=gemma4-16k

Paso 3: Reiniciar

docker compose restart web

Volver a Gemini

Cambiar en .env:

AUTOPLAN_PROVIDER=gemini
EDGE_AI_PROVIDER=gemini

5. Configuración de Ollama

Contexto (num_ctx)

PerfilContextoRAM aprox.Uso recomendado
gemma4 (default)4K3.5 GBSolo CNS (texto corto)
gemma4-16k16K4-5 GBCNS + Auto-Plan
gemma4-32k32K5-7 GBNo recomendado en CPU (35s por query)

El contexto de 4K por defecto de Ollama es insuficiente para Auto-Plan (prompt largo + imagen). Usar siempre un perfil con 16K+.

Threads (num_thread)

Ollama por defecto usa ~5-6 hilos. Para aprovechar el hardware:

PARAMETER num_thread 14    # Para 16 hilos (dejar 2 para OS)

Cold start vs Warm

  • Cold start (modelo no cargado): 60-160s dependiendo del contexto
  • Warm (modelo en RAM): 1-2s para texto, 2-3 min para visión (CPU)

Ollama descarga el modelo tras 5 min de inactividad. Para evitarlo: keep_alive: -1 o llamada periódica.


6. Plan de Producción (Fase 2)

Servidor recomendado

OpciónSpecsPrecioRendimiento esperado
Hetzner CCX338 vCPU EPYC, 32 GB RAM~35 EUR/mes3-5x más rápido que laptop
Hetzner CCX4316 vCPU EPYC, 64 GB RAM~70 EUR/mesMargen para 2 modelos
GPU dedicadaNVIDIA A10/A30~200+ EUR/mes10-20x, visión en <15s

vLLM vs Ollama para producción

Edu ha decidido usar vLLM en lugar de Ollama para producción:

CaracterísticaOllamavLLM
Facilidad de usoExcelenteBuena
ConcurrenciaLimitadaContinuous batching
GPU utilizationBásicaPagedAttention (optimal)
APIOpenAI-compatibleOpenAI-compatible
Multi-requestSecuencialParalelo

Zero cambios de código: vLLM expone la misma API OpenAI-compatible. Solo cambia OLLAMA_BASE_URL.

Arquitectura de red recomendada

┌─────────────────────────────┐
│  Hetzner Server 1 (actual)  │
│  Django + PG + Valkey + VM  │
│           │                 │
│     Red privada Hetzner     │
│           │                 │
│  Hetzner Server 2 (nuevo)   │
│  vLLM + Gemma 4             │
│  http://10.x.x.x:8000/v1/  │
└─────────────────────────────┘

Comunicación por red privada: <1ms latencia, sin tráfico externo, sin coste de bandwidth.


7. Lecciones Aprendidas

  1. Contexto por defecto de Ollama = 4K: Insuficiente para prompts largos. Siempre crear perfiles custom.
  2. extra_body={"num_ctx": N} no funciona via endpoint /v1/ (OpenAI-compatible). Usar perfiles Ollama.
  3. Visión en CPU limitada por ancho de banda de RAM, no por cores. Más threads ayuda poco.
  4. Daphne application-close-timeout: Debe ser 300s si se usa Ollama (requests de visión tardan minutos).
  5. Gemma 4 envuelve JSON en triple backticks: El parser debe hacer strip de ```json ```.
  6. Precalentar modelo: Primera llamada tras carga = 60-160s. Llamadas posteriores = 1-2s (texto).

Mantenido por: Equipo CreaRack Última actualización: 06-04-2026

Véase también

  • [[crearack-tech—guides—gemini-api-setup]] — setup de Gemini API
  • [[decision—20260401—gemini-3-flash-preview]] — ADR modelo Gemini fijo
  • [[crearack-tech—backend—auto-plan-technical-reference]] — referencia técnica de Auto-Plan AI
  • [[crearack-tech—agents—dev-cns]] — perfil de subagente dev-cns
  • [[crearack-tech—agents—dev-map-editor]] — perfil de subagente dev-map-editor
  • [[crearack-tech—architecture—saas-strategy-2026]] — estrategia SaaS 2026