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:

  1. 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
    
  2. Passare al portale dell'area di lavoro di Azure Analytics.

  3. Passare alla scheda Gestisci e selezionare Pool di Apache Spark.

  4. Fare clic sui tre puntini accanto al nome del cluster e selezionare Pacchetti.

    install mlflow packages in Azure Synapse Analytics

  5. Nella sezione File dei requisiti fare clic su Carica.

  6. Carica il file requirements.txt.

  7. 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

  1. Ottenere l'URI di rilevamento per l'area di lavoro:

    SI APPLICA A:Estensione per Machine Learning dell'interfaccia della riga di comando di Azure v2 (corrente)

    1. Accedere e configurare l'area di lavoro:

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. È possibile ottenere l'URI di rilevamento usando il comando az ml workspace:

      az ml workspace show --query mlflow_tracking_uri
      
  2. Configurazione dell'URI di rilevamento:

    Il metodo set_tracking_uri() quindi punta l'URI di rilevamento di MLflow a tale URI.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

    Suggerimento

    Quando si usano ambienti condivisi, ad esempio un cluster di Azure Databricks, un cluster di 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 di 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 richiedere le credenziali. Per informazioni su modalità aggiuntive per configurare l'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 è presente un utente connesso alla sessione, è possibile basarsi sull'autenticazione interattiva e quindi non è necessaria alcuna azione.

Avviso

L'autenticazione con Browser interattivo blocca l'esecuzione del codice quando vengono richieste le credenziali. Non è un'opzione adatta per l'autenticazione in ambienti automatici come i processi di training. È consigliabile configurare un'altra modalità di autenticazione.

Per gli scenari in cui è richiesta l'esecuzione automatica, è 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 su ambienti condivisi, è consigliabile configurare queste variabili di ambiente nell'ambiente di calcolo. Come procedura consigliata, gestirle come segreti in un'istanza di Azure Key Vault quando possibile. 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>}}. Vedere Fare riferimento a un segreto in una variabile di ambiente per informazioni su come eseguire questa operazione in Azure Databricks o fare riferimento a una documentazione simile nella piattaforma in uso.

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:

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

    Delete in the Azure portal

  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.

Passaggi successivi