Condividi tramite


Tenere traccia dei modelli di Machine Learning con MLflow e Azure Machine Learning

Si applica a: Python SDK azureml v1

Questo articolo illustra come abilitare MLflow Tracking per connettere Azure Machine Learning come back-end degli esperimenti di MLflow.

MLflow è una libreria open source per la gestione del ciclo di vita degli esperimenti di apprendimento automatico. MLflow Tracking è un componente di MLflow che registra e tiene traccia delle metriche di esecuzione del training e degli elementi del modello, indipendentemente dall'ambiente dell'esperimento, localmente nel computer, in una destinazione di calcolo remota, in una macchina virtuale o in un cluster di Azure Databricks.

Per informazioni su tutte le funzionalità di MLflow e Azure Machine Learning supportate, tra cui il supporto di MLflow Project (anteprima) e la distribuzione del modello, vedere MLflow e Azure Machine Learning.

Suggerimento

Per tenere traccia degli esperimenti in esecuzione in Azure Databricks o Azure Synapse Analytics, vedere gli articoli dedicati Tenere traccia degli esperimenti di Azure Databricks ML con MLflow e Azure Machine Learning o Tenere traccia degli esperimenti di apprendimento automatico di Azure Synapse Analytics con MLflow e Azure Machine Learning.

Nota

Le informazioni contenute in questo documento sono destinate principalmente a data scientist e sviluppatori che desiderano monitorare il processo di training del modello. Gli amministratori interessati al monitoraggio dell'utilizzo delle risorse e degli eventi da Azure Machine Learning, come ad esempio quote, processi di training o distribuzioni modelli completati, possono consultare la sezione Monitoraggio di Azure Machine Learning.

Prerequisiti

Tenere traccia delle esecuzioni dal computer locale o dall'ambiente di calcolo remoto

Il rilevamento tramite MLflow con Azure Machine Learning consente di archiviare nell'area di lavoro di Azure Machine Learning le metriche registrate e le esecuzioni degli artefatti completate nel computer locale.

Configurare l'ambiente di rilevamento

Per tenere traccia di un'esecuzione che non viene eseguita nell'ambiente di calcolo di Azure Machine Learning (da ora in poi denominato "ambiente di calcolo locale"), è necessario che l'ambiente di calcolo locale faccia riferimento all'URI di MLflow Tracking per Azure Machine Learning.

Nota

In caso di esecuzione in Calcolo di Azure (Azure Notebooks, Jupyter Notebooks ospitati in istanze di ambiente di calcolo di Azure o cluster di elaborazione) non è necessario configurare l'URI di rilevamento. Viene configurato automaticamente per l'utente.

Si applica a: Python SDK azureml v1

È possibile ottenere l'URI di MLflow Tracking per Azure Machine Learning usando Azure Machine Learning SDK v1 per Python. Assicurarsi di avere installato la libreria azureml-sdk nel cluster in uso. L'esempio seguente ottiene l'URI di MLflow Tracking univoco associato all'area di lavoro. Il metodo set_tracking_uri() fa quindi in modo che l'URI di MLflow Tracking faccia riferimento a tale URI.

  1. Con il file di configurazione dell'area di lavoro:

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

    Suggerimento

    Per scaricare il file di configurazione dell'area di lavoro, seguire questa procedura:

    1. Passare allo Studio di Azure Machine Learning
    2. Fare clic sull'angolo superiore destro della pagina -> Scaricare il file di configurazione.
    3. Salvare il file config.json nella stessa directory in cui si sta lavorando.
  2. Con l'ID sottoscrizione, del nome del gruppo di risorse e del nome dell'area di lavoro:

    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())
    

Impostare il nome dell'esperimento

Tutte le esecuzioni di MLflow vengono registrate nell'esperimento attivo. Per impostazione predefinita, le esecuzioni vengono registrate in un esperimento denominato Default creato automaticamente. Per configurare l'esperimento su cui si vuole lavorare, usare il comando mlflow.set_experiment() di MLflow.

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Suggerimento

Quando si inviano processi usando Azure Machine Learning SDK, è possibile impostare il nome dell'esperimento usando la proprietà experiment_name quando viene inviato. Non è necessario configurarlo nello script di training.

Avviare l'esecuzione del training

Dopo aver impostato il nome dell'esperimento di MLflow, è possibile avviare l'esecuzione del training con start_run(). Usare quindi log_metric() per attivare l'API di registrazione MLflow e iniziare la registrazione delle metriche di esecuzione del training.

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")

Per informazioni dettagliate su come registrare metriche, parametri e artefatti in un'esecuzione usando MLflow, vedere Come registrare e visualizzare le metriche.

Tenere traccia delle esecuzioni in esecuzione in Azure Machine Learning

Si applica a: Python SDK azureml v1

Le esecuzioni remote (processi) consentono di eseguire il training dei modelli in modo più affidabile e ripetitivo. Possono anche sfruttare ambienti di calcolo più potenti, ad esempio il cluster dell'ambiente di calcolo di Machine Learning. Per informazioni sulle diverse opzioni per l'ambiente di calcolo, vedere la sezione Configurare le destinazioni di calcolo per il training del modello.

Quando si inviano esecuzioni, Azure Machine Learning configura automaticamente MLflow per l'uso con l'area di lavoro in cui è in esecuzione l'esecuzione. Ciò significa che non è necessario configurare l'URI di MLflow Tracking. Gli esperimenti vengono inoltre denominati automaticamente in base ai dettagli dell'invio dell'esperimento.

Importante

Quando si inviano processi di training ad Azure Machine Learning, non è necessario configurare l'URI di MLflow Tracking nella logica di training perché è già configurato automaticamente. Non è inoltre necessario configurare il nome dell'esperimento nella routine di training.

Creazione di una routine di training

È prima di tutto necessario creare una sottodirectory src e creare un file con il codice di training in un file train.py nella sottodirectory src. Tutto il codice di training, incluso train.py, verrà inserito nella sottodirectory src.

Il codice di training viene tratto da questo esempio di MLflow nel repository di esempi di Azure Machine Learning.

Copiare questo codice nel file:

# 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()

Configurazione dell'esperimento

È necessario usare Python per inviare l'esperimento ad Azure Machine Learning. In un notebook o in un file Python configurare l'ambiente di calcolo e di esecuzione di training con la classe 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

Creare quindi ScriptRunConfig con l'ambiente di calcolo remoto come destinazione di calcolo.

from azureml.core import ScriptRunConfig

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

Con questa configurazione di esecuzione di calcolo e training, usare il metodo Experiment.submit() per inviare un'esecuzione. Questo metodo imposta automaticamente l'URI di Rilevamento MLflow e indirizza la registrazione da MLflow all'area di lavoro.

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)

Visualizzare le metriche e gli artefatti nell'area di lavoro

Le metriche e gli artefatti dalla registrazione di MLflow vengono rilevati nell'area di lavoro. Per visualizzarli in qualsiasi momento, passare all'area di lavoro e individuare l'esperimento in base al nome presente nell'area di lavoro in Azure Machine Learning Studio. In alternativa, eseguire il comando seguente.

Recuperare la metrica di esecuzione usando get_run() di 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)

Per visualizzare gli artefatti di un'esecuzione, è possibile usare MlFlowClient.list_artifacts()

client.list_artifacts(run_id)

Per scaricare un artefatto nella directory corrente, è possibile usare MLFlowClient.download_artifacts()

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

Per altre informazioni su come recuperare informazioni da esperimenti ed esecuzioni in Azure Machine Learning usando MLflow, vedere Gestire esperimenti ed esecuzioni con MLflow.

Confrontare ed eseguire query

Confrontare ed eseguire query su tutte le esecuzioni di MLflow nell'area di lavoro di Azure Machine Learning con il codice seguente. Altre informazioni su come eseguire query 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)

Registrazione automatica

Con Azure Machine Learning e MLFlow, gli utenti possono registrare automaticamente metriche, parametri del modello e artefatti del modello durante il training di un modello. Sono supportate diverse librerie di apprendimento automatico più diffuse.

Per abilitare la registrazione automatica, inserire il codice seguente prima del codice di training:

mlflow.autolog()

Altre informazioni sulla registrazione automatica con MLflow.

Gestire i modelli

Registrare e tenere traccia dei modelli con il registro dei modelli di Azure Machine Learning, che supporta il registro dei modelli di MLflow. I modelli di Azure Machine Learning sono allineati allo schema del modello di MLflow e ciò semplifica l'esportazione e l'importazione di questi modelli in flussi di lavoro diversi. Anche i metadati correlati a MLflow, ad esempio l'ID esecuzione, vengono rilevati con il modello registrato per la tracciabilità. Gli utenti possono inviare esecuzioni di training, registrare e distribuire modelli generati da esecuzioni MLflow.

Per distribuire e registrare il modello pronto per la produzione in un unico passaggio, vedere Distribuire e registrare modelli di MLflow.

Per registrare e visualizzare un modello da un'esecuzione, seguire questa procedura:

  1. Al termine di un'esecuzione, chiamare il metodo 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. Visualizzare il modello registrato nell'area di lavoro con lo Studio di Azure Machine Learning.

    Nell'esempio seguente il modello registrato my-model include metadati di MLflow Tracking contrassegnati.

    register-mlflow-model

  3. Selezionare la scheda Artefatti per visualizzare tutti i file di modello allineati allo schema del modello di MLflow (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. Selezionare MLmodel per visualizzare il file MLmodel generato dall'esecuzione.

    MLmodel-schema

Pulire le risorse

Se non si prevede di usare le metriche e gli artefatti registrati nell'area di lavoro, non è attualmente possibile eliminarli singolarmente. Eliminare invece il gruppo di risorse che contiene l'account di archiviazione e l'area di lavoro, in modo che non vengano addebitati costi:

  1. Nel portale di Azure fare clic su Gruppi di risorse all'estrema sinistra.

    Eseguire l'eliminazione nel portale di Azure

  2. Nell'elenco selezionare il gruppo di risorse creato.

  3. Selezionare Elimina gruppo di risorse.

  4. Immettere il nome del gruppo di risorse. Quindi seleziona Elimina.

Notebook di esempio

In MLflow con notebook di Azure Machine Learning vengono illustrati e ampliati i concetti presentati in questo articolo. Vedere anche il repository basato sulla community AzureML-Examples.

Passaggi successivi