Registrare e rendere disponibili i modelli con MLflow

Completato

La registrazione del modello consente a MLflow e ad Azure Databricks di tenere traccia dei modelli, il che è importante per due motivi:

  • La registrazione di un modello consente di rendere disponibile il modello per l'inferenza in tempo reale, in streaming o in batch. La registrazione semplifica il processo di utilizzo di un modello con training, perché ora i data scientist non dovranno sviluppare il codice dell'applicazione. Il processo di gestione compila il wrapper ed espone automaticamente un'API REST o un metodo per l'assegnazione automatica dei punteggi batch.
  • La registrazione di un modello consente di creare nuove versioni di tale modello nel corso del tempo, offrendo la possibilità di tenere traccia delle modifiche del modello e persino di eseguire confronti tra diverse versioni storiche dei modelli.

Registrazione di un modello

Quando si esegue un esperimento per eseguire il training di un modello, è possibile registrare il modello stesso come parte dell'esecuzione dell'esperimento, come illustrato di seguito:

with mlflow.start_run():
    # code to train model goes here

    # log the model itself (and the environment it needs to be used)
    unique_model_name = "my_model-" + str(time.time())
    mlflow.spark.log_model(spark_model = model,
                           artifact_path=unique_model_name,
                           conda_env=mlflow.spark.get_default_conda_env())

Quando si esamina l'esecuzione dell'esperimento, incluso le metriche registrate che indicano l'efficacia di previsione del modello, il modello è incluso negli artefatti dell'esecuzione. È quindi possibile selezionare l'opzione per registrare il modello usando l'interfaccia utente nel visualizzatore dell'esperimento.

In alternativa, se si vuole registrare il modello senza esaminare le metriche nell'esecuzione, è possibile includere il parametro registered_model_name nel metodo log_model; in questo caso il modello viene registrato automaticamente durante l’esecuzione dell'esperimento.

with mlflow.start_run():
    # code to train model goes here

    # log the model itself (and the environment it needs to be used)
    unique_model_name = "my_model-" + str(time.time())
    mlflow.spark.log_model(spark_model=model,
                           artifact_path=unique_model_name
                           conda_env=mlflow.spark.get_default_conda_env(),
                           registered_model_name="my_model")

È possibile registrare più versioni di un modello, in modo da poter confrontare le prestazioni delle versioni del modello per un certo periodo di tempo prima di spostare tutte le applicazioni client alla versione con prestazioni migliori.

Uso di un modello per l'inferenza

Il processo di utilizzo di un modello per prevedere le etichette dai dati di nuove caratteristiche è noto come inferenza. È possibile usare MLflow in Azure Databricks per rendere disponibili i modelli per l'inferenza nei modi seguenti:

  • Ospitare il modello come servizio in tempo reale con un endpoint HTTP a cui le applicazioni client possono effettuare richieste REST.
  • Usare il modello per eseguire l'inferenza in streaming perpetuo delle etichette in base a una tabella delta di funzionalità, scrivendo i risultati in una tabella di output.
  • Usare il modello per l'inferenza batch basata su una tabella delta, scrivendo i risultati di ogni operazione batch in una cartella specifica.

È possibile distribuire un modello per l'inferenza dalla relativa pagina nella sezione Modelli del portale di Azure Databricks, come illustrato di seguito:

Screenshot of the Set up model inference dialog box in the Azure Databricks portal.