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
Installare il pacchetto
mlflow
.- È possibile usare MLflow Skinny, che è un pacchetto di MLflow leggero senza risorse di archiviazione SQL, server, interfaccia utente o dipendenze di data science. Questo approccio è consigliabile per gli utenti che necessitano principalmente delle funzionalità di rilevamento e registrazione senza importare il gruppo completo di funzionalità di MLflow, incluse le distribuzioni.
Installare il pacchetto
azureml-mlflow
.Creare un'area di lavoro di Azure Machine Learning.
- Vedere le informazioni sulle autorizzazioni di accesso necessarie per eseguire operazioni di MLflow nell'area di lavoro.
Installare e configurare l'interfaccia della riga di comando di Azure Machine Learning (v1) e assicurarsi di installare l'estensione do apprendimento automatico.
Importante
Alcuni comandi dell'interfaccia della riga di comando (CLI) di Azure in questo articolo usano l'estensione
azure-cli-ml
, o v1, per Azure Machine Learning. L'assistenza per l'estensione v1 terminerà il 30 settembre 2025. Sarà possibile installare e usare l'estensione v1 fino a tale data.Consigliamo di passare all'estensione
ml
, o v2, prima del 30 settembre 2025. Per altre informazioni sull'estensione v2, vedere Estensione dell'interfaccia della riga di comando di Azure ML e Python SDK v2.Installare e configurare Azure Machine Learning SDK per Python.
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.
- Con Azure Machine Learning SDK
- Con una variabile di ambiente
- Compilazione dell'URI di MLflow Tracking
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.
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:
- Passare allo Studio di Azure Machine Learning
- Fare clic sull'angolo superiore destro della pagina -> Scaricare il file di configurazione.
- Salvare il file
config.json
nella stessa directory in cui si sta lavorando.
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:
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")
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.Selezionare la scheda Artefatti per visualizzare tutti i file di modello allineati allo schema del modello di MLflow (conda.yaml, MLmodel, model.pkl).
Selezionare MLmodel per visualizzare il file MLmodel generato dall'esecuzione.
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:
Nel portale di Azure fare clic su Gruppi di risorse all'estrema sinistra.
Nell'elenco selezionare il gruppo di risorse creato.
Selezionare Elimina gruppo di risorse.
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
- Distribuire modelli con MLflow.
- Monitorare i modelli di produzione per la deriva dei dati.
- Tenere traccia delle esecuzioni di Azure Databricks con MLflow.
- Gestire i modelli.