Condividi tramite


Distribuire modelli MLflow come servizi Web di Azure

Si applica a: Python SDK azureml v1

MLflow è una libreria open source per la gestione del ciclo di vita degli esperimenti di apprendimento automatico. L'integrazione di MLflow con Azure Machine Learning consente di estendere le funzionalità di gestione oltre il training del modello alla fase di distribuzione dei modelli di produzione. In questo articolo, si distribuisce un modello MLflow come servizio Web di Azure e si applicano le funzionalità di gestione dei modelli di Azure Machine Learning e rilevamento della deriva dei dati ai modelli di produzione.

Il diagramma seguente illustra come l'API di distribuzione MLflow si integra con Azure Machine Learning per distribuire i modelli. I modelli vengono creati come servizi Web di Azure usando framework comuni come PyTorch, Tensorflow o scikit-learn e i servizi vengono gestiti nell'area di lavoro:

Diagramma che illustra come l'API di distribuzione MLflow si integra con Azure Machine Learning per distribuire i modelli.

Suggerimento

Questo articolo supporta data scientist e sviluppatori che vogliono distribuire il modello MLflow in un endpoint di servizio Web di Azure Machine Learning. Per gli amministratori interessati al monitoraggio dell'utilizzo delle risorse e di eventi di Azure Machine Learning, come quote, esecuzioni di training o distribuzioni di modelli completate, vedere Monitoraggio di Azure Machine Learning.

Prerequisiti

Opzioni di distribuzione

Azure Machine Learning offre le opzioni di configurazione della distribuzione seguenti:

  • Istanze di Azure Container: adatto per la distribuzione rapida di test di sviluppo.
  • Servizio Azure Kubernetes (AKS): consigliato per le distribuzioni di produzione scalabili.

Nota

Gli endpoint di Azure Machine Learning (v2) offrono un'esperienza di distribuzione più semplice e ottimizzata. Gli endpoint supportano scenari di inferenza batch e in tempo reale. Gli endpoint forniscono un'unica interfaccia per richiamare e gestire le distribuzioni di modelli tra i tipi di calcolo. Consultare Che cosa sono gli endpoint di Azure Machine Learning?.

Per altre integrazioni di funzionalità di MLflow e Azure Machine Learning, vedere MLflow e Azure Machine Learning (v2), che usa SDK v2.

Eseguire la distribuzione in Istanze di Azure Container

Per distribuire il modello MLflow in un servizio Web di Azure Machine Learning, è necessario configurare il modello con l'URI di verifica di MLflow per connettersi con Azure Machine Learning.

Per la distribuzione in Istanze di Azure Container, non è necessario definire alcuna configurazione di distribuzione. Per impostazione predefinita, il servizio usa una distribuzione di Istanze di Azure Container quando non viene fornita una configurazione. È possibile registrare e distribuire il modello in un unico passaggio con il metodo di distribuzionedi MLflow per Azure Machine Learning.

from mlflow.deployments import get_deploy_client

# Set the tracking URI as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())

# Set the model path 
model_path = "model"

# Define the model path and the name as the service name
# The model is registered automatically and a name is autogenerated by using the "name" parameter 
client.create_deployment(name="mlflow-test-aci", model_uri='runs:/{}/{}'.format(run.id, model_path))

Personalizzare il file JSON di configurazione della distribuzione

Se si preferisce non usare le impostazioni predefinite, è possibile configurare la con un file JSON di configurazione della distribuzione che usa i parametri del metodo deploy_configuration() come riferimento.

Definire i parametri di configurazione della distribuzione

Nel file JSON di configurazione della distribuzione, definire ogni parametro di configurazione della distribuzione sotto forma di dizionario. Il frammento di codice seguente fornisce un esempio. Per altre informazioni sul file JSON di configurazione della distribuzione, vedere lo schema di configurazione della distribuzione dell'istanza di Azure Container nella guida di riferimento all'interfaccia della riga di comando di Azure per Azure Machine Learning.

{"computeType": "aci",
 "containerResourceRequirements": {"cpu": 1, "memoryInGB": 1},
 "location": "eastus2"
}

Il file di configurazione JSON può quindi essere usato per creare la distribuzione:

# Set the deployment config json file
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}

client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path), config=test_config, name="mlflow-test-aci")    

Distribuire nel servizio Azure Kubernetes

Per distribuire il modello MLflow in un servizio Web di Azure Machine Learning, è necessario configurare il modello con l'URI di verifica di MLflow per connettersi con Azure Machine Learning.

Per la distribuzione nel servizio AKS, creare prima di tutto un cluster AKS usando il metodo ComputeTarget.create(). Questo processo può richiedere 20-25 minuti per creare un nuovo cluster.

from azureml.core.compute import AksCompute, ComputeTarget

# Use the default configuration (can also provide parameters to customize)
prov_config = AksCompute.provisioning_configuration()

aks_name = 'aks-mlflow'

# Create the cluster
aks_target = ComputeTarget.create(workspace=ws, name=aks_name, provisioning_configuration=prov_config)

aks_target.wait_for_completion(show_output = True)

print(aks_target.provisioning_state)
print(aks_target.provisioning_errors)

Creare un file JSON di configurazione della distribuzione usando i valori del metodo deploy_configuration() come riferimento. Definire ogni parametro di configurazione della distribuzione come dizionario, come illustrato nell'esempio seguente:

{"computeType": "aks", "computeTargetName": "aks-mlflow"}

Quindi, registrare e distribuire il modello in un singolo passaggio con il client di distribuzione MLflow:

from mlflow.deployments import get_deploy_client

# Set the tracking URI as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())

# Set the model path 
model_path = "model"

# Set the deployment config json file
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}

# Define the model path and the name as the service name
# The model is registered automatically and a name is autogenerated by using the "name" parameter 
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path), config=test_config, name="mlflow-test-aci")

La distribuzione del servizio può richiedere alcuni minuti.

Pulire le risorse

Se non si prevede di usare il servizio Web distribuito, usare il metodo service.delete() per eliminare il servizio dal notebook. Per altre informazioni, vedere il metodo delete() della classe WebService nella documentazione di SDK Python.

Esplorare i notebook di esempio

Questo articolo illustra e analizza in dettaglio i notebook MLflow con Azure Machine Learning.

Nota

Per un repository basato sulla community di esempi che usano MLflow, vedere il repository di esempi di Azure Machine Learning in GitHub.