4. Crear un Modelo Baseline - JhonyJacobi/Introduction-to-mlflow GitHub Wiki

Step 1: Creamos nuestro entorno de proyecto

  1. Clonamos en local nuestro repositorio remoto (basado en repo template https://github.com/JhonyJacobi/Introduction-to-mlflow.git)
  2. Desde VS Code nos dirigimos a nuestro directorio de repositorio
  3. Crear nuestro environment: Desde una terminal (bash) ejecutamos...
  • conda create -n basemodel-env python=3.12 -y
  • conda activate basemodel-env

Step 2: Resolvemos dependencias (librerias)

  1. Creamos nuestro archivo requirements.txt con las siguientes dependencias:
  • mlflow==2.22.0
  • xgboost==3.0.2
  • scikit-learn==1.6.1
  1. Instalamos las dependencias...
  • pip install -r requirements.txt

Step 3: Crear script test_autologging.py

import mlflow
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_diabetes
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
import mlflow.xgboost
import xgboost as xgb
import numpy as np


mlflow.set_tracking_uri("http://localhost:5000")

# Cargar datos
db = load_diabetes()
X_train, X_test, y_train, y_test = train_test_split(db.data, db.target, random_state=123)

# Mi primer experimento con mlflow.autolog()
mlflow.set_experiment("autolog_experiment")

with mlflow.start_run():
    mlflow.autolog() # Activa autologging para todas las librerías compatibles

    rf = RandomForestRegressor(n_estimators=100, max_depth=6, max_features=3)    
    rf.fit(X_train, y_train)

# Experimento con mlflow.sklearn.autolog()
mlflow.set_experiment("sklearn_autolog_experiment")

with mlflow.start_run():
    mlflow.sklearn.autolog() 

    rf = RandomForestRegressor(n_estimators=100, max_depth=6, max_features=3)    
    rf.fit(X_train, y_train)
    
    # Calcular RMSE en validación
    y_pred = rf.predict(X_test)
    rmse_test = np.sqrt(mean_squared_error(y_test, y_pred))
    
    # Registrar RMSE en MLflow
    mlflow.log_metric("validation_rmse", rmse_test)


# Experimento con mlflow.sklearn.autolog()
mlflow.set_experiment("xgboost_autolog_experiment")

with mlflow.start_run():
    # Activar autologging para XGBoost
    mlflow.xgboost.autolog()

    # Entrenar el modelo
    xgboost = xgb.XGBRegressor(objective="reg:squarederror", n_estimators=100, max_depth=3, learning_rate=0.1)
    xgboost.fit(X_train, y_train)
    
    # Calcular RMSE en validación
    y_pred = xgboost.predict(X_test)
    rmse_test = np.sqrt(mean_squared_error(y_test, y_pred))

    # Registrar RMSE en MLflow
    mlflow.log_metric("validation_rmse", rmse_test)

Step 4: Entrenamos nuestro modelo baseline y aplicamos autologging

  1. Entendamos y ejecutamos nuestro script test_autologging.py python test_autologging.py
  2. Revismos nuestras ejecuciones en la UI de MLflow mlflow ui

Nota: ¿Cómo puedo sincronizar mis cambios de mi repositorio con el repo template?

  • Agrega el repo original como upstream Si clonaste tu repo a partir de un template, Git no lo relaciona automáticamente con el repo original. Primero, debes agregar el repo original como upstream:

bash: git remote add upstream https://github.com/NOMBRE_DEL_REPO_TEMPLATE.git

  • Para asegurar de que upstream se agregó correctamente, ejecuta: git remote -v

Debe mostrar tanto origin (tu repo remoto) como upstream (el repo original).

  • Obtener los cambios del upstream Ahora puedes traer los cambios del repositorio original con: git fetch upstream
  • Fusionar los cambios en tu rama Si quieres actualizar tu rama principal (main o master) con los cambios del repo original:

git checkout main # Cambia a tu rama principal

git merge upstream/main # Fusiona los cambios del upstream en tu repo

Si el repo original usa master en vez de main, cambia upstream/main por upstream/master.

  • Resuelve conflictos (opcional) y sube los cambios: Si hay conflictos, resuélvelos manualmente en tu editor de código. Luego, guarda los cambios y sube la actualización a tu repo remoto

git push origin main

Con esto, tendrás los cambios del repo template en tu repositorio sin perder tus modificaciones.