OCI Free Tier como laboratorio MLOps
Fecha: 2026-09-20 Estado: plan aprobado para ejecutar por fases
Objetivo
Practicar MLOps de punta a punta sobre OCI Always Free, usando proyectos reales de ~/nef como casos de uso — no tutoriales. Una sola VM, todo lo demás se queda local o en Cloudflare.
Recurso base
- 1× VM Ampere A1.Flex (2 OCPU / 12 GB RAM, Ubuntu ARM, boot 100 GB)
- Home region fija desde el registro (Always Free solo vive ahí)
- Si aparece “out of host capacity”: reintentar en otro AD o scriptarlo
Stack elegido (ligero, nada de Kubernetes)
| Capa | Herramienta | Por qué |
|---|---|---|
| Orquestación | cron/systemd timers | Airflow no cabe ni se necesita en 2 OCPU. Cron primero, Dagster solo si cron duele |
| Versionado de datos | DVC | Git-based, remote = OCI Object Storage (20 GB) |
| Tracking + registro | MLflow self-hosted | SQLite como backend, artifacts en Object Storage vía API S3-compatible de OCI |
| Serving | FastAPI + Docker | Simple, ARM nativo |
| CI/CD | GitHub Actions → GHCR → docker compose pull en la VM | GHCR gratis evita gastar el Object Storage de 20 GB en imágenes de OCIR |
| Observabilidad | logs + healthcheck primero; Prometheus/Grafana solo en fase tardía | Scope down |
Caso de uso piloto: news-silo
Pipeline: ingesta de noticias → embeddings → HDBSCAN → modelo/artefacto servido. Es el proyecto con pipeline real y es el candidato natural.
Otros candidatos posteriores: fraud-analysis (batch scoring), retrato-hablado.
Fases (cada una termina en artefacto verificable)
- Fase 0 — infra: VM creada, Docker + compose, GHCR,
docker login. Verificación:docker run hello-world+ healthcheck del host. - Fase 1 — MLflow up: compose con MLflow, artifacts en Object Storage. Verificación: primer run logueado desde local apuntando a la VM.
- Fase 2 — DVC: datos de news-silo versionados, remote en OCI.
Verificación:
dvc push+dvc pulldesde la VM. - Fase 3 — pipeline nocturno: cron que corre el pipeline, loguea a MLflow, registra el modelo. Bonus: mantiene CPU > 20% p95 (evita la reclamación por idle de Oracle).
- Fase 4 — serving: FastAPI expone el clusterer; endpoint de salud. Verificación: request real con una noticia → cluster asignado.
- Fase 5 — (solo si hace falta): Dagster, Grafana, drift checks.
Lo que NO entra (requisitos duros)
- NO Kubernetes, NO Airflow inicial
- NO WordPress en OCI (micros de 1 GB no dan para Elementor)
- NO migrar Workers de Cloudflare (chat-hf, motor_estado_turismo) — se quedan
- NO gastar los $300 del trial: todo cabe en Always Free
- NO modelos pesados en la nube: embeddings/inferencia seria sigue en System76 + Ollama (la A1 orquesta, no infiere)
Advertencias registradas
- Reclamación por idle: CPU p95 < 20% en 7 días → Oracle borra la instancia. El cron de la Fase 3 lo resuelve.
- Object Storage: 20 GB compartidos entre DVC, artifacts MLflow y datasets. Vigilar con alerta de cuota.
- Puerto 25 bloqueado (email saliente) — no afecta este plan.