Saltar al contenido principal

mlops

Ver en Git


Guía de MLOps

Cómo se trackean, deployean e iteran los experimentos.


Stack General

Developer → git push → GitLab CI → build → test → experiment

MLflow tracking
(params + métricas + artifacts)

GitLab Model Registry
(mejor modelo versionado)
ComponenteRol
DockerAmbiente reproducible (GDAL, rasterio, geopandas, ultralytics)
GitLab CIPipeline automatizado de build, smoke test y experimentación
MLflowTracking de experimentos (params, métricas, GeoJSONs de output)
S3 (AWS)Storage de artifacts para MLflow
Planetary ComputerDescarga de imágenes Sentinel-2 sin autenticación

MLflow Tracking

Cada corrida de experimento se loguea automáticamente al server de MLflow.

Parámetros Trackeados

ParámetroDescripción
engineNombre del engine de detección
confThreshold de confianza YOLO
iouThreshold IoU de YOLO
tile_sizeTamaño de tile de inferencia (pixels)
n_scenesCantidad de escenas en el composite
start_dateFecha de inicio de búsqueda de imágenes
min_area_m2Filtro de área mínima de campo
deviceDispositivo de cómputo
detection_modeEstrategia de detección
Todos los postprocess_paramsConfiguración de post-procesamiento

Métricas Trackeadas

MétricaDescripción
reference_coverageTipo recall (intersección / área referencia)
prediction_precisionTipo precision (intersección / área predicha)
iouIntersection over Union
n_predictedCantidad de polígonos predichos
n_refCantidad de polígonos de referencia
elapsed_sTiempo de inferencia wall-clock (segundos)

Artifacts Trackeados

  • GeoJSON de output con los límites de campo predichos

Ver Resultados

El server de MLflow corre en la URI definida por MLFLOW_SERVER_URI:

# Si usa file store local como fallback
mlflow ui --backend-store-uri outputs/mlruns
# Abrir http://127.0.0.1:5000

Cambiar el Backend de Tracking

# Server MLflow remoto (default)
export MLFLOW_SERVER_URI=http://10.100.2.23:5000

# SQLite (persistencia local single-user)
export MLFLOW_SERVER_URI=sqlite:///mlflow.db

GitLab Model Registry

El GitLab Model Registry es compatible con MLflow y hostea las versiones registradas de modelos.

Después de un sweep, la mejor corrida (mayor IoU) se registra automáticamente como una nueva versión del modelo.

Setup

  1. Generá un token de acceso de proyecto/grupo/personal con scope api y rol Developer.
  2. Seteá las variables de entorno:
export MLFLOW_REGISTRY_URI="https://git.auravant.com/api/v4/projects/<project_id>/ml/mlflow"
export MLFLOW_TRACKING_TOKEN="<access_token>"
  1. Corré un sweep — el mejor resultado se registra automáticamente.

Dónde Ver los Resultados en GitLab

  • Deploy → Model experiments — todas las corridas trackeadas
  • Deploy → Model registry — versiones registradas del modelo

Consideraciones

  • Los artifacts se suben con artifact_path="" (sin subdirectorios). El framework maneja esto automáticamente cuando detecta el endpoint de GitLab.
  • create_model_version ignora run_id, source y run_link. Cada versión obtiene su propia corrida backing.
  • Las versiones del modelo se ordenan por SemVer. La versión se deriva de CI_COMMIT_TAG, con fallback a 0.1.<pipeline_id> en CI o 0.0.<timestamp> en local.

Pipeline de GitLab CI

Definido en .gitlab-ci.yml con tres stages:

build → test → experiment

Stages

JobTriggerQué hace
buildPush (cuando cambian Dockerfile, pyproject.toml o source)Buildea imagen Docker, pushea al GitLab Container Registry
testCada pushSmoke-tests de imports, config y mlflow dentro de la imagen
sweepCada push (después de test)Corre el experimento baseline, guarda el GeoJSON como artifact

Variables de CI/CD Requeridas

Seteadas automáticamente por GitLab:

VariableDescripción
CI_REGISTRY_USERUsername del container registry
CI_REGISTRY_PASSWORDPassword del container registry
CI_REGISTRYHostname del container registry
CI_REGISTRY_IMAGEPath completo de la imagen

Seteadas manualmente en Settings → CI/CD → Variables:

VariableRequeridaDescripción
MLFLOW_TRACKING_URINoEndpoint MLflow de GitLab (para registro de modelos)
MLFLOW_TRACKING_TOKENNoAccess token con scope api
MLFLOW_SERVER_URINoServer de tracking MLflow (default http://10.100.2.23:5000)
AWS_ACCESS_KEY_IDCredenciales del artifact store S3
AWS_SECRET_ACCESS_KEYCredenciales del artifact store S3
GITLAB_DEPLOY_USERUsuario para login al registry
GITLAB_DEPLOY_SECRETToken para login al registry

No se necesitan secrets adicionales para imágenes — Planetary Computer no requiere autenticación.

Descargar Artifacts del Pipeline

Después de una corrida del pipeline: GitLab → CI/CD → Pipelines → [job] → Download artifacts.

La carpeta outputs/ contiene los resultados de los experimentos y los GeoJSONs.


Agregar un Nuevo Experimento

  1. Creá un archivo YAML en experiments/:
experiment_name: "mi_experimento"
engine: "delineate-anything"
aoi_wkt: "POLYGON((......))"
reference_path: "data/input/reference_output.geojson"
device: "cpu"

engine_params:
conf: 0.05
iou: 0.5
tile_size: 1024
n_scenes: 5
start_date: "2025-01-01"

postprocess_params:
simplify_tolerance: 10.0
min_area_m2: 30000
buffer_distance: -5.0
merge_overlaps: true
  1. Correlo:
python3 -m model.cli run --config experiments/mi_experimento.yaml
  1. Compará contra la referencia:
python3 -m model.cli compare --result outputs/result_mi_experimento.geojson \
--reference data/input/reference_output.geojson
  1. Mirá en la UI de MLflow para comparar con otras corridas.

Actualizar el Output de Referencia

Para regenerar la referencia después de cambiar la escena o el ground-truth:

python3 scripts/convert_bounds.py

Commiteá la nueva referencia para que las futuras corridas de CI comparen contra ella.