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_IDSíCredenciales del artifact store S3
AWS_SECRET_ACCESS_KEYSíCredenciales del artifact store S3
GITLAB_DEPLOY_USERSíUsuario para login al registry
GITLAB_DEPLOY_SECRETSíToken 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.