Actualizado: 2026-07-12

Puntos clave

  • Ollama 0.5+ corre Llama 3.3 70B Q4 cómodamente en una RTX 4090 (24 GB VRAM); Mistral Large 2 cuantizado entra en la misma máquina.

  • Open WebUI sustituye al ollama CLI para usuarios no técnicos; mismo ecosistema, UI moderna.

  • Lo que separa una demo en el portátil de un servicio real es la exposición tras Traefik con TLS y autenticación por IP o usuario: ese es el segundo bloque de este tutorial.

  • Cuantización Q4_K_M ofrece el mejor trade-off calidad/memoria en 2026; bajar a Q3 sólo si la GPU es estrecha.

Requisitos previos: Ubuntu 24.04 + drivers NVIDIA

Hardware mínimo razonable:

  • GPU NVIDIA con ≥16 GB VRAM (RTX 4080/4090, A4000, RTX 5000 Ada).

  • 32 GB RAM, 1 TB NVMe.

  • Ubuntu 24.04 LTS Server.

Drivers NVIDIA + CUDA:

sudo ubuntu-drivers autoinstall
sudo reboot
nvidia-smi   # verificar que la GPU aparece

Docker + nvidia-container-toolkit (sigue como-instalar-docker-en-ubuntu-22-04 pero pasos equivalentes en 24.04):

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
distribution=$(. /etc/os-release; echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | 
  sudo sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | 
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update && sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Verificar: docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi.

Instalar Ollama y verificar GPU

curl -fsSL https://ollama.com/install.sh | sh
sudo systemctl enable --now ollama
ollama --version    # debe decir 0.5+ a fecha de 2026-06

Comprobación de GPU detectada:

journalctl -u ollama | grep -i "gpu|cuda" | head -10

Debe aparecer cuda y compute capability para confirmar que Ollama usa la GPU. Si dice using cpu, repasar nvidia-smi y nvidia-container-toolkit.

Descargar Llama 3.3 y Mistral cuantizados

Modelos recomendados en 2026:

ollama pull llama3.3:70b-instruct-q4_K_M    # ~40 GB descarga, ~24 GB VRAM
ollama pull mistral-large:latest             # ~70 GB descarga, requiere 48 GB VRAM o offload
ollama pull qwen2.5-coder:32b-instruct-q4_K_M # gran modelo de código

Probar:

ollama run llama3.3:70b-instruct-q4_K_M "Explica qué es MCP en una frase."

Latencia esperada: ~30-50 tokens/s en una RTX 4090 con un prompt corto.

Open WebUI con docker compose

# docker-compose.yml
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    extra_hosts:
      - host.docker.internal:host-gateway
    environment:
      OLLAMA_BASE_URL: http://host.docker.internal:11434
      WEBUI_SECRET_KEY: "${WEBUI_SECRET_KEY}"
    ports:
      - "127.0.0.1:3000:8080"
    volumes:
      - open-webui-data:/app/backend/data

volumes:
  open-webui-data:

docker compose up -d. Acceso local: http://127.0.0.1:3000. Crea cuenta admin la primera vez.

Exponer detrás de Traefik con TLS

Si ya tienes Traefik (sigue como-instalar-traefik-con-docker-compose), añade etiquetas:

services:
  open-webui:
    networks: [traefik]
    labels:
      - traefik.enable=true
      - traefik.http.routers.openwebui.rule=Host(`llm.tu-dominio.com`)
      - traefik.http.routers.openwebui.entrypoints=websecure
      - traefik.http.routers.openwebui.tls.certresolver=letsencrypt
      - traefik.http.services.openwebui.loadbalancer.server.port=8080
networks:
  traefik:
    external: true

Quita el ports: localhost cuando uses Traefik.

Limitar acceso por IP y por usuario

Capa 1: IP allowlist en Traefik.

labels:
  - traefik.http.middlewares.openwebui-ipallow.ipallowlist.sourcerange=10.0.0.0/8,192.168.1.0/24,TU.IP.PUBLICA/32
  - traefik.http.routers.openwebui.middlewares=openwebui-ipallow@docker

Capa 2: autenticación nativa de Open WebUI. En Settings → Users, marca "Require email verification" y fija ENABLE_SIGNUP=false para que solo el admin invite gente nueva.

Capa 3: auditoría. Configura WEBUI_LOG_LEVEL=info y manda los registros a Loki o Elasticsearch para saber quién pregunta qué; en una empresa, sobre todo con datos sensibles, la trazabilidad no es opcional.

Si los modelos genéricos se quedan cortos, el ajuste fino queda para el próximo bloque de Phase 3 sobre LoRA y Unsloth. Para ver cómo este mismo Ollama encaja en una pila RAG completa, tengo RAG con Postgres + pgvector.

Este tutorial también existe en la versión en inglés.

Fuentes

  1. Ollama, sitio oficial
  2. Open WebUI, repositorio en GitHub
  3. Traefik, documentación oficial
  4. NVIDIA Container Toolkit, guía de instalación
  5. Mistral AI: anuncio de Mistral Large 2
  6. Meta Llama 3.3 70B, model card