Compartir a través de


Seguimiento de modelos de Machine Learning con MLflow y Azure Machine Learning

SE APLICA A:SDK de Azure Machine Learning v1 para Python

Importante

En este artículo se proporciona información sobre el uso del SDK de Azure Machine Learning v1. EL SDK v1 está en desuso a partir del 31 de marzo de 2025. El soporte técnico finalizará el 30 de junio de 2026. Puede instalar y usar SDK v1 hasta esa fecha.

Se recomienda realizar la transición al SDK v2 antes del 30 de junio de 2026. Para más información sobre SDK v2, consulte ¿Qué es la CLI de Azure Machine Learning y el SDK de Python v2? y la referencia del SDK v2.

En este artículo, obtendrá información sobre cómo habilitar MLflow Tracking, para conectar Azure Machine Learning como el back-end de experimentos de MLflow.

MLflow es una biblioteca de código abierto para administrar el ciclo de vida de los experimentos de aprendizaje automático. MLFlow Tracking es un componente de MLflow que lleva a cabo un registro y un seguimiento de las métricas de ejecución de entrenamiento y de los artefactos del modelo, independientemente del entorno del experimento (localmente en su equipo, en un destino de proceso remoto, en una máquina virtual o en un clúster de Azure Databricks).

Consulte MLflow y Azure Machine Learning para ver todas las funcionalidades admitidas de MLflow y Azure Machine Learning, incluida la compatibilidad con MLflow Project (versión preliminar) y la implementación de modelos.

Sugerencia

Si desea realizar un seguimiento de los experimentos que se ejecutan en Azure Databricks o Azure Synapse Analytics, consulte los artículos dedicados Seguimiento de experimentos de Aprendizaje automático de Azure Databricks con MLflow y Azure Machine Learning o Seguimiento de experimentos de aprendizaje automático de Azure Synapse Analytics con MLflow y Azure Machine Learning.

Nota:

La información de este documento va destinada principalmente a aquellos científicos de datos y desarrolladores que deseen supervisar el proceso de entrenamiento del modelo. Los administradores que estén interesados en la supervisión del uso de recursos y eventos desde Azure Machine Learning, como cuotas, trabajos de entrenamiento completados o implementaciones de modelos completadas pueden consultar Supervisión de Azure Machine Learning.

Requisitos previos

Seguimiento de ejecuciones desde la máquina local o el proceso remoto

El seguimiento mediante MLflow con Azure Machine Learning permite almacenar las métricas registradas y las ejecuciones de artefactos que se ejecutaron en la máquina local en el área de trabajo de Azure Machine Learning.

Configuración del entorno de seguimiento

Para realizar un seguimiento de una ejecución que no se ejecuta en el proceso de Azure Machine Learning (a partir de ahora denominado "proceso local"), debe apuntar el proceso local al URI de seguimiento de MLflow de Azure Machine Learning.

Nota:

Cuando se ejecuta en Azure Compute (Azure Notebooks, Jupyter Notebooks hospedados en instancias de cálculo de Azure o clústeres de proceso), no hace falta configurar el URI de seguimiento. Se configura automáticamente.

SE APLICA A:SDK de Azure Machine Learning v1 para Python

Puede obtener el URI de seguimiento de MLflow de Azure Machine Learning mediante SDK de Azure Machine Learning v1 para Python. Asegúrese de que tiene instalada la biblioteca azureml-sdk en el clúster que usa. En el siguiente ejemplo, se obtiene la URI única de seguimiento de MLFLow asociada con su espacio de trabajo. A continuación, el método set_tracking_uri() apunta el URI de seguimiento de MLflow a ese URI.

  1. Uso del archivo de configuración del área de trabajo:

    from azureml.core import Workspace
    import mlflow
    
    ws = Workspace.from_config()
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

    Sugerencia

    Puede descargar el archivo de configuración del área de trabajo mediante los pasos siguientes:

    1. Vaya a Azure Machine Learning Studio.
    2. Haga clic en la esquina superior derecha de la página -> Descargar archivo de configuración.
    3. Guarde el archivo config.json en el mismo directorio en el que está trabajando.
  2. Uso del identificador de suscripción, el nombre del grupo de recursos y el nombre del área de trabajo:

    from azureml.core import Workspace
    import mlflow
    
    #Enter details of your Azure Machine Learning workspace
    subscription_id = '<SUBSCRIPTION_ID>'
    resource_group = '<RESOURCE_GROUP>'
    workspace_name = '<AZUREML_WORKSPACE_NAME>'
    
    ws = Workspace.get(name=workspace_name,
                       subscription_id=subscription_id,
                       resource_group=resource_group)
    
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

Establecimiento del nombre del experimento

Todas las ejecuciones de MLflow se registran en el experimento activo. Las ejecuciones se registran de manera predeterminada en un experimento denominado Default que se crea automáticamente. Para configurar el experimento en el que desea trabajar, use el comando mlflow.set_experiment() de MLflow.

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Sugerencia

Al enviar trabajos mediante el SDK de Azure Machine Learning, puede establecer el nombre del experimento mediante la propiedad experiment_name al enviarlo. No es necesario configurarlo en el script de entrenamiento.

Iniciar ejecución de entrenamiento

Tras establecer el nombre del experimento de MLflow, puede iniciar la ejecución del entrenamiento con start_run(). A continuación, use log_metric() para activar la API de registro de MLflow y empezar a registrar las métricas de ejecución de entrenamiento.

import os
from random import random

with mlflow.start_run() as mlflow_run:
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")

Para más información sobre cómo registrar métricas, parámetros y artefactos en una ejecución mediante la vista de MLflow, consulte Registro y visualización de métricas.

Seguimiento de ejecuciones que se ejecutan en Azure Machine Learning

SE APLICA A:SDK de Azure Machine Learning v1 para Python

Las ejecuciones remotas (trabajos) permiten entrenar los modelos de forma más sólida y repetitiva. También pueden aprovechar computadoras más potentes, como los clústeres de cómputo de aprendizaje automático. Consulte Usar destinos de cómputo para el entrenamiento de modelos para obtener información sobre las distintas opciones de cómputo.

Al enviar ejecuciones, Azure Machine Learning configura automáticamente MLflow para que funcione con el área de trabajo en la que se ejecuta la ejecución. Esto significa que no es necesario configurar el URI de seguimiento de MLflow. Además, los experimentos se denominan automáticamente en función de los detalles de la realización del experimento.

Importante

Al enviar trabajos de entrenamiento a Azure Machine Learning, no es necesario configurar el URI de seguimiento de MLflow en la lógica de entrenamiento, ya que ya está configurado. No es necesario configurar el nombre del experimento en la rutina de entrenamiento.

Creación de una rutina de entrenamiento

En primer lugar, debe crear un subdirectorio src y crear un archivo con el código de entrenamiento en un archivo train.py en el subdirectorio src. Todo el código de entrenamiento entrará en el subdirectorio src, incluido train.py.

El código de entrenamiento se toma de este ejemplo de MLfLow en el repositorio de ejemplo de Azure Machine Learning.

Copie este código en el archivo:

# imports
import os
import mlflow

from random import random

# define functions
def main():
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")


# run functions
if __name__ == "__main__":
    # run main function
    main()

Configuración del experimento

Deberá usar Python para enviar el experimento a Azure Machine Learning. En un cuaderno o archivo de Python, configure el entorno de ejecución de proceso y entrenamiento con la clase Environment.

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies

env = Environment(name="mlflow-env")

# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
    conda_packages=["scikit-learn", "matplotlib"],
    pip_packages=["azureml-mlflow", "pandas", "numpy"]
    )

env.python.conda_dependencies = cd

A continuación, construya ScriptRunConfig con el proceso remoto como destino de proceso.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory="src",
                      script=training_script,
                      compute_target="<COMPUTE_NAME>",
                      environment=env)

Con esta configuración de ejecución de proceso y entrenamiento, use el método Experiment.submit() para enviar una ejecución. Este método establece automáticamente la URI de seguimiento de MLflow y redirige el registro de MLflow a tu área de trabajo.

from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()

experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)

run = exp.submit(src)

Ver métricas y artefactos en tu área de trabajo

Se realiza un seguimiento de las métricas y artefactos del registro de MLflow en el área de trabajo. Para verlos en cualquier momento, vaya al área de trabajo y busque el experimento por su nombre en el área de trabajo en Azure Machine Learning Studio. O bien, ejecute el código siguiente:

Recupere la métrica de ejecución usando get_run() de MLflow.

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

print(metrics,tags,params)

Para ver los artefactos de una ejecución, puede usar MlFlowClient.list_artifacts()

client.list_artifacts(run_id)

Para descargar un artefacto en el directorio actual, puede usar MLFlowClient.download_artifacts()

client.download_artifacts(run_id, "helloworld.txt", ".")

Para más información sobre cómo recuperar información de experimentos y ejecuciones en Azure Machine Learning mediante la vista de MLflow Administración de experimentos y ejecuciones con MLflow.

Comparación y consulta

Compare y consulte todas las ejecuciones de MLflow en el área de trabajo de Azure Machine Learning con el código siguiente. Obtenga más información sobre cómo consultar ejecuciones con MLflow.

from mlflow.entities import ViewType

all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)

runs.head(10)

Registro automático

Con Azure Machine Learning y MLFlow, los usuarios pueden registrar métricas, parámetros de modelo y artefactos de modelo automáticamente al entrenar un modelo. Se admiten diversas bibliotecas de aprendizaje automático populares.

Para habilitar el registro automático, inserte el código siguiente antes del código de entrenamiento:

mlflow.autolog()

Obtenga más información sobre el registro automático con MLflow.

Administración de modelos

Registre y realice un seguimiento de los modelos con el registro de modelos de Azure Machine Learning, que admite el registro de modelos de MLflow. Los modelos de Azure Machine Learning se alinean con el esquema de modelos de MLflow, lo que facilita la exportación e importación de estos modelos en diferentes flujos de trabajo. Los metadatos relacionados con MLflow, como la identificación de ejecución, también se supervisan con el modelo registrado para asegurar la trazabilidad. Los usuarios pueden enviar las ejecuciones de entrenamiento, registrar e implementar los modelos generados a partir de las ejecuciones de MLflow.

Si quiere implementar y registrar el modelo preparado para producción en un solo paso, consulte Implementación y registro de modelos de MLflow.

Para registrar y ver un modelo a partir de una ejecución, siga estos pasos:

  1. Una vez completada la ejecución, llame al método register_model().

    # the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml.
    model_path = "model"
    model_uri = 'runs:/{}/{}'.format(run_id, model_path) 
    mlflow.register_model(model_uri,"registered_model_name")
    
  2. Vea el modelo registrado en su área de trabajo con Azure Machine Learning Studio

    En el ejemplo siguiente, el modelo registrado my-model tiene etiquetados metadatos de seguimiento de MLflow.

    register-mlflow-model

  3. Seleccione la pestaña Artefactos para ver todos los archivos de modelo que se alinean con el esquema de modelos de MLflow (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. Seleccione MLmodel para ver el archivo MLmodel generado por la ejecución.

    MLmodel-schema

Limpieza de recursos

Si no tiene pensado usar los artefactos o las métricas registradas en el área de trabajo, la funcionalidad para eliminarlos de forma individual no está disponible actualmente. Por ello, deberá eliminar el grupo de recursos que contiene la cuenta de almacenamiento y el área de trabajo para no incurrir en cargos:

  1. En el portal de Azure, seleccione Grupos de recursos en el extremo izquierdo.

    Eliminación en Azure Portal

  2. En la lista, seleccione el grupo de recursos que creó.

  3. Seleccione Eliminar grupo de recursos.

  4. Escriba el nombre del grupo de recursos. A continuación, seleccione Eliminar.

Cuadernos de ejemplo

El MLflow con cuadernos de Azure Machine Learning demostrar y ampliar los conceptos presentados en este artículo. Consulte también el repositorio controlado por la comunidad, AzureML-Examples.

Pasos siguientes