Tenere traccia degli esperimenti di apprendimento automatico di Azure Synapse Analytics con MLflow e Azure Machine Learning
Questo articolo illustra come abilitare MLflow per connettersi ad Azure Machine Learning mentre si lavora in un'area di lavoro di Azure Synapse Analytics. È possibile sfruttare questa configurazione per il rilevamento, la gestione dei modelli e la distribuzione dei modelli.
MLflow è una libreria open source per la gestione del ciclo di vita degli esperimenti di machine learning. Il Rilevamento di MLFlow Tracking è un componente di MLflow che registra e tiene traccia delle metriche di esecuzione del training e degli artefatti del modello. Altre informazioni su MLflow.
Se si ha un progetto MLflow da sottoporre a training con Azure Machine Learning, vedere Eseguire il training di modelli di Machine Learning con progetti di MLflow e Azure Machine Learning (anteprima).
Prerequisiti
Installare le librerie
Per installare librerie nel cluster dedicato in Azure Synapse Analytics:
Creare un file
requirements.txt
con i pacchetti richiesti dagli esperimenti, ma assicurarsi che includa anche i pacchetti seguenti:requirements.txt
mlflow azureml-mlflow azure-ai-ml
Passare al portale dell'area di lavoro di Azure Analytics.
Passare alla scheda Gestisci e selezionare Pool di Apache Spark.
Fare clic sui tre puntini accanto al nome del cluster e selezionare Pacchetti.
Nella sezione File dei requisiti fare clic su Carica.
Carica il file
requirements.txt
.Attendere il riavvio del cluster.
Tenere traccia di esperimenti con MLflow
Azure Synapse Analytics può essere configurato per tenere traccia degli esperimenti usando MLflow nell'area di lavoro di Azure Machine Learning. Azure Machine Learning fornisce un repository centralizzato per gestire l'intero ciclo di vita di esperimenti, modelli e distribuzioni. Offre anche il vantaggio di abilitare un percorso più semplice per la distribuzione usando le opzioni di distribuzione di Azure Machine Learning.
Configurazione dei notebook per l'uso di MLflow connesso ad Azure Machine Learning
Per usare Azure Machine Learning come repository centralizzato per gli esperimenti, è possibile sfruttare MLflow. In ogni notebook in cui si sta lavorando è necessario configurare l'URI di rilevamento in modo che punti all'area di lavoro che verrà usata. L'esempio seguente mostra come eseguire questa operazione:
Configurare l'URI di rilevamento
Ottenere l'URI di rilevamento per la propria area di lavoro:
SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Accedere e configurare la propria area di lavoro:
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
È possibile ottenere l'URI di rilevamento usando il comando
az ml workspace
:az ml workspace show --query mlflow_tracking_uri
Configurazione dell'URI di rilevamento:
Il metodo
set_tracking_uri()
, quindi, punta l'URI di rilevamento MLflow a tale URI.import mlflow mlflow.set_tracking_uri(mlflow_tracking_uri)
Suggerimento
Quando si usano ambienti condivisi, ad esempio un cluster Azure Databricks, un cluster Azure Synapse Analytics o un cluster simile, è utile impostare la variabile di ambiente
MLFLOW_TRACKING_URI
a livello di cluster per configurare automaticamente l'URI di rilevamento MLflow in modo che punti ad Azure Machine Learning per tutte le sessioni in esecuzione nel cluster anziché per ogni sessione.
Configurare l'autenticazione
Dopo aver configurato il rilevamento, è necessario configurare anche la modalità di esecuzione dell'autenticazione nell'area di lavoro associata. Per impostazione predefinita, il plug-in di Azure Machine Learning per MLflow eseguirà l'autenticazione interattiva aprendo il browser predefinito per chiedere le credenziali. Per informazioni su altre modalità di configurazione dell'autenticazione per MLflow nelle aree di lavoro di Azure Machine Learning, vedere Configurare MLflow per Azure Machine Learning: Configurare l'autenticazione.
Per i processi interattivi in cui un utente è connesso alla sessione, è possibile basarsi sull'autenticazione interattiva, per cui non è necessaria alcuna azione.
Avviso
L'autenticazione con browser interattivo blocca l'esecuzione del codice quando vengono chieste le credenziali. Questo approccio non è adatto per l'autenticazione in ambienti senza intervento dell'utente come i processi di training. È consigliabile configurare una modalità di autenticazione differente.
Per gli scenari in cui è richiesta l'esecuzione senza intervento dell'utente, è necessario configurare un'entità servizio per comunicare con Azure Machine Learning.
import os
os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"
Suggerimento
Quando si lavora in ambienti condivisi, è consigliabile configurare queste variabili di ambiente nell'ambiente di calcolo. Come procedura consigliata, gestire come segreti in un'istanza di Azure Key Vault.
Ad esempio, in Azure Databricks è possibile usare segreti nelle variabili di ambiente, come indicato di seguito nella configurazione del cluster: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}
. Per altre informazioni sull'implementazione di questo approccio in Azure Databricks, vedere Fare riferimento a un segreto in una variabile di ambiente o fare riferimento alla documentazione per la piattaforma.
Nomi dell'esperimento in Azure Machine Learning
Per impostazione predefinita, Azure Machine Learning tiene traccia delle esecuzioni in un esperimento predefinito denominato Default
. In genere è consigliabile configurare l'esperimento su cui si lavorerà. Usare la sintassi seguente per impostare il nome dell'esperimento:
mlflow.set_experiment(experiment_name="experiment-name")
Rilevamento di parametri, metriche e artefatti
È quindi possibile usare MLflow in Azure Synapse Analytics nel modo consueto. Per informazioni dettagliate, vedere Registrare e visualizzare metriche e file di log.
Registrazione di modelli nel registro con MLflow
I modelli possono essere registrati nell'area di lavoro di Azure Machine Learning, che offre un repository centralizzato per gestire il ciclo di vita. L'esempio seguente registra un modello sottoposto a training con Spark MLLib e lo registra anche nel registro.
mlflow.spark.log_model(model,
artifact_path = "model",
registered_model_name = "model_name")
Se non esiste un modello registrato con il nome specifico, il metodo registrerà un nuovo modello, creerà la versione 1 e restituirà un oggetto ModelVersion di MLflow.
Se esiste già un modello registrato con il nome specifico, il metodo creerà una nuova versione del modello e restituirà l'oggetto versione.
È possibile gestire i modelli registrati in Azure Machine Learning usando MLflow. Per altri dettagli, vedere Gestire i registri dei modelli in Azure Machine Learning con MLflow.
Distribuzione e utilizzo di modelli registrati in Azure Machine Learning
I modelli registrati nel servizio Azure Machine Learning con MLflow possono essere utilizzati come:
Un endpoint di Azure Machine Learning (in tempo reale e batch): questa distribuzione consente di sfruttare le funzionalità di distribuzione di Azure Machine Learning sia per l'inferenza in tempo reale sia per l'inferenza in batch in Istanze di Azure Container (ACI), Azure Kubernetes (AKS) o per gli endpoint gestiti.
Oggetti modello di MLFlow o funzioni definite dall'utente Pandas, che possono essere usati nei notebook di Azure Synapse Analytics in pipeline di streaming o batch.
Distribuire modelli in endpoint di Azure Machine Learning
È possibile sfruttare il plug-in azureml-mlflow
per distribuire un modello nell'area di lavoro di Azure Machine Learning. Per informazioni dettagliate su come distribuire i modelli nelle diverse destinazioni, vedere la pagina Come distribuire modelli di MLflow.
Importante
Affinché sia possibile distribuirli, i modelli devono essere registrati nel registro di Azure Machine Learning. La distribuzione di modelli non registrati non è supportata in Azure Machine Learning.
Distribuire modelli per l'assegnazione dei punteggi in batch usando funzioni definite dall'utente
È possibile scegliere i cluster di Azure Synapse Analytics per l'assegnazione dei punteggi in batch. Il modello di MLFlow viene caricato e usato come funzione definita dall'utente Pandas Spark per assegnare un punteggio ai nuovi dati.
from pyspark.sql.types import ArrayType, FloatType
model_uri = "runs:/"+last_run_id+ {model_path}
#Create a Spark UDF for the MLFlow model
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri)
#Load Scoring Data into Spark Dataframe
scoreDf = spark.table({table_name}).where({required_conditions})
#Make Prediction
preds = (scoreDf
.withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …))
)
display(preds)
Pulire le risorse
Se si vuole mantenere l'area di lavoro di Azure Synapse Analytics, ma l'area di lavoro di Azure Machine Learning non è più necessaria, è possibile eliminare l'area di lavoro di Azure Machine Learning. Se non si prevede di usare le metriche e gli artefatti registrati nell'area di lavoro, la possibilità di eliminarli singolarmente non è attualmente disponibile. 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.