Condividi tramite


Gestire il registro dei modelli in Azure Machine Learning con MLflow

Azure Machine Learning supporta MLflow per la gestione dei modelli quando si è connessi a un'area di lavoro. Questo approccio è un modo pratico per supportare l'intero ciclo di vita del modello per gli utenti che hanno familiarità con il client MLFlow.

Questo articolo descrive le funzionalità per la gestione di un registro modelli con MLflow e il confronto di questo metodo con altre opzioni di gestione.

Prerequisiti

  • Installare il pacchetto MLflow SDK mlflow e il plug-in Azure Machine Learning azureml-mlflow per MLflow come indicato di seguito:

    pip install mlflow azureml-mlflow
    

    Suggerimento

    È possibile usare il pacchetto mlflow-skinny, che è un pacchetto di MLflow leggero senza risorse di archiviazione SQL, server, interfaccia utente o dipendenze di data science. Questo pacchetto è consigliato per gli utenti che necessitano principalmente delle funzionalità di rilevamento e registrazione di MLflow senza importare la suite completa di funzionalità, incluse le distribuzioni.

  • Creare un'area di lavoro di Azure Machine Learning. Per creare un'area di lavoro, vedere Creare risorse necessarie per iniziare. Vedere quali sono le autorizzazioni di accesso necessarie per eseguire le operazioni MLflow nell'area di lavoro.

  • Per eseguire il rilevamento remoto o tenere traccia degli esperimenti in esecuzione all'esterno di Azure Machine Learning, configurare MLflow in modo che punti all'URI di rilevamento dell'area di lavoro di Azure Machine Learning. Per altre informazioni su come connettere MLflow all'area di lavoro, vedere Configurare MLflow per Azure Machine Learning.

  • Le procedure descritte in questo articolo usano un oggetto client per fare riferimento al client MLflow.

    Alcune operazioni possono essere eseguite direttamente usando l'API Fluent MLflow, mlflow.<method>. Altre operazioni richiedono un client MLflow per abilitare la comunicazione con Machine Learning nel protocollo MLflow. Il codice seguente crea un oggetto MlflowClient:

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Limiti

  • Azure Machine Learning non supporta la ridenominazione dei modelli.

  • Machine Learning non supporta l'eliminazione dell'intero contenitore di modelli.

  • I registri dell'organizzazione non sono supportati per la gestione dei modelli con MLflow.

  • La distribuzione di modelli da una fase di modello specifica non è attualmente supportata in Machine Learning.

  • Le operazioni tra aree di lavoro non sono attualmente supportate in Machine Learning.

Registrare nuovi modelli

Il registro modelli offre un modo pratico e centralizzato per gestire i modelli in un'area di lavoro. Ogni area di lavoro ha un proprio registro di modelli indipendenti. Le sezioni seguenti illustrano due modi per registrare i modelli nel Registro di sistema usando MLflow SDK.

Creare modelli da un'esecuzione esistente

Se è stato registrato un modello MLflow all'interno di un'esecuzione e si desidera registrarlo in un registro, usare l'ID esecuzione e il percorso in cui è registrato il modello. È possibile eseguire una query per queste informazioni seguendo le istruzioni riportate in Gestire esperimenti ed esecuzioni con MLflow.

mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)

Nota

I modelli possono essere registrati solo nel Registro di sistema nella stessa area di lavoro in cui è stata rilevata l'esecuzione. Le operazioni tra aree di lavoro non sono attualmente supportate in Azure Machine Learning.

Suggerimento

Registrare i modelli da esecuzioni o usando il metodo mlflow.<flavor>.log_model dall'interno dell'esecuzione. Questo approccio mantiene la derivazione dal processo che ha generato l'asset.

Creare modelli da asset

Se si dispone di una cartella con un modello MLModel MLflow, è possibile registrarla direttamente. Non è necessario che il modello sia sempre nel contesto di un'esecuzione. Per tale approccio, è possibile usare lo schema URI file://path/to/model per registrare i modelli MLflow archiviati nel file system locale.

Il codice seguente crea un modello semplice usando il pacchetto scikit-learn e salva il modello in formato MLflow nell'archiviazione locale:

from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

mlflow.sklearn.save_model(reg, "./regressor")

Suggerimento

Il metodo save_model() funziona allo stesso modo di log_model(). Mentre il metodo log_model() salva il modello all'interno di un'esecuzione attiva, il metodo save_model() usa il file system locale per salvare il modello.

Il codice seguente registra il modello usando il percorso locale:

import os

model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")

Registri dei modelli di query

È possibile usare MLflow SDK per eseguire query e cercare modelli registrati nel registro. Le sezioni seguenti illustrano due modi per eseguire query per un modello.

Eseguire query su tutti i modelli nel Registro di sistema

È possibile eseguire query su tutti i modelli registrati nel registro usando il client MLflow.

Il codice seguente stampa i nomi di tutti i modelli nel Registro di sistema:

for model in client.search_registered_models():
    print(f"{model.name}")

Utilizzare il metodo order_by per organizzare l'output in base a una proprietà specifica, ad esempio name, version, creation_timestamp o last_updated_timestamp:

client.search_registered_models(order_by=["name ASC"])

Nota

Per le versioni di MLflow precedenti alla 2.0, usare invece il metodo MlflowClient.list_registered_models().

Ottenere versioni specifiche dei modelli

Il metodo search_registered_models() recupera l'oggetto modello, che contiene tutte le versioni del modello. Per ottenere l'ultima versione del modello registrata per un determinato modello, è possibile usare il metodo get_registered_model():

client.get_registered_model(model_name)

Per ottenere una versione specifica di un modello, usare il codice seguente:

client.get_model_version(model_name, version=2)

Caricare modelli dal Registro di sistema

È possibile caricare i modelli direttamente dal registro per ripristinare gli oggetti modelli registrati. Per questa attività, usare le funzioni mlflow.<flavor>.load_model() o mlflow.pyfunc.load_model() e indicare l'URI del modello da caricare.

È possibile implementare queste funzioni con la sintassi seguente:

  • models:/<model-name>/latest: caricare l'ultima versione del modello.
  • models:/<model-name>/<version-number>: caricare una versione specifica del modello.
  • models:/<model-name>/<stage-name>: caricare una versione specifica in una determinata fase per un modello. Per altre informazioni, vedere Usare le fasi del modello.

Per comprendere le differenze tra le funzioni mlflow.<flavor>.load_model() e mlflow.pyfunc.load_model(), vedere Flussi di lavoro per il caricamento di modelli MLflow.

Usare le fasi del modello

MLflow supporta le fasi per un modello per gestire il ciclo di vita del modello. La versione del modello può passare da una fase a un'altra. Le fasi vengono assegnate a versioni specifiche per un modello. Un modello può avere più versioni in differenti fasi.

Importante

È possibile accedere alle fasi solo usando MLflow SDK. Non sono visibili in Studio di Azure Machine Learning. Le fasi non possono essere recuperate usando Azure Machine Learning SDK, l'interfaccia della riga di comando di Azure Machine Learning o l'API REST di Azure Machine Learning. La distribuzione da una fase di modello specifica non è attualmente supportata.

Fasi del modello di query

Il codice seguente usa il client MLflow per controllare tutte le fasi possibili per un modello:

client.get_model_version_stages(model_name, version="latest")

È possibile visualizzare le versioni del modello per ogni fase del modello recuperando il modello dal Registro di sistema. Il codice seguente ottiene la versione del modello attualmente presente nella fase Staging:

client.get_latest_versions(model_name, stages=["Staging"])

Più versioni del modello possono trovarsi nella stessa fase contemporaneamente in MLflow. Nell'esempio precedente, il metodo restituisce la versione più recente (più recente) tra tutte le versioni per la fase.

Importante

In MLflow SDK i nomi delle fasi fanno distinzione tra maiuscole e minuscole.

Versione del modello di transizione

È possibile eseguire la transizione della versione di un modello a una fase specifica usando il client MLflow:

client.transition_model_version_stage(model_name, version=3, stage="Staging")

Quando si esegue la transizione di una versione del modello a una fase specifica, se la fase include già altre versioni del modello, le versioni esistenti rimangono invariate. Questo comportamento si applica per impostazione predefinita.

Un altro approccio consiste nell'impostare il parametro archive_existing_versions=True durante la transizione. Questo approccio indica a MLflow di spostare tutte le versioni del modello esistenti nella fase Archived:

client.transition_model_version_stage(
    model_name, version=3, stage="Staging", archive_existing_versions=True
)

Caricare i modelli dalle fasi

È possibile caricare un modello in una fase specifica direttamente da Python usando la funzione load_model e il formato URI seguente. Affinché questo metodo abbia esito positivo, tutte le librerie e le dipendenze devono essere installate nell'ambiente di lavoro.

Caricare il modello dalla fase Staging:

model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")

Modificare ed eliminare modelli

La modifica dei modelli registrati è supportata sia in MLflow che in Azure Machine Learning, ma esistono alcune differenze importanti. Le sezioni seguenti contengono la descrizione di alcune opzioni.

Nota

La ridenominazione dei modelli non è supportata in Azure Machine Learning perché gli oggetti modello sono immutabili.

Modificare la descrizione e i tag del modello

È possibile modificare la descrizione e i tag di un modello usando MLflow SDK:

client.update_model_version(model_name, version=1, description="My classifier description")

Per modificare i tag, usare i metodi set_model_version_tag e remove_model_version_tag:

client.set_model_version_tag(model_name, version="1", key="type", value="classification")

Per rimuovere un tag, usare il metodo delete_model_version_tag:

client.delete_model_version_tag(model_name, version="1", key="type")

Eliminare la versione del modello

È possibile eliminare qualsiasi versione del modello nel Registro di sistema usando il client MLflow:

client.delete_model_version(model_name, version="2")

Nota

Machine Learning non supporta l'eliminazione dell'intero contenitore di modelli. Per ottenere questa attività, eliminare tutte le versioni del modello per un determinato modello.

Esaminare le funzionalità supportate per la gestione dei modelli

Il client MLflow espone diversi metodi per recuperare e gestire i modelli. La tabella seguente elenca i metodi attualmente supportati in MLflow quando si è connessi ad Azure Machine Learning. La tabella confronta anche MLflow con altre funzionalità di gestione dei modelli in Azure Machine Learning.


Descrizione delle funzionalità
Solo MLflow Machine Learning con MLflow Interfaccia della riga di comando di Machine Learning v2 Machine Learning Studio
Registrare modelli in formato MLflow
Registrare modelli non in formato MLflow
Registrare modelli da esecuzioni di output/artefatti 1 2
Registrare modelli da esecuzioni di output/artefatti in un server/area di lavoro di rilevamento differente 5 5
Cercare/elencare i modelli registrati
Recupero dei dettagli delle versioni del modello registrato
Modificare la descrizione delle versioni del modello registrato
Modificare i tag delle versioni del modello registrato
Rinominare i modelli registrati 3 3 3
Eliminare un modello registrato (contenitore) 3 3 3
Eliminare la versione di un modello registrato
Gestire le fasi del modello MLflow
Cercare i modelli registrati in base al nome 4
Cercare modelli registrati usando LIKE e ILIKE di confronto di stringhe 4
Cercare i modelli registrati in base al tag 4
Supporto registri dell'organizzazione

Note a piè di pagina della tabella:

  • 1 Usare gli Uniform Resource Identifier (URI) con il formato runs:/<ruin-id>/<path>.
  • 2 Usare gli URI con il formato azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 I modelli registrati sono oggetti non modificabili Azure Machine Learning.
  • 4 Usare la casella di ricerca in Studio di Azure Machine Learning. La corrispondenza parziale è supportata.
  • 5 Usare registri per spostare i modelli in aree di lavoro differenti e mantenere la derivazione.