Dela via


Distribuera MLflow-modeller som Azure-webbtjänster

GÄLLER FÖR:Python SDK azureml v1

I den här artikeln får du lära dig hur du distribuerar din MLflow-modell som en Azure-webbtjänst, så att du kan utnyttja och tillämpa Azure Machine Learnings funktioner för modellhantering och identifiering av dataavvikelser på dina produktionsmodeller. Se MLflow och Azure Machine Learning för ytterligare MLflow- och Azure Machine Learning-funktionsintegreringar.

Azure Machine Learning erbjuder distributionskonfigurationer för:

  • Azure Container Instance (ACI) som är ett lämpligt val för en snabb distribution av dev-test.
  • Azure Kubernetes Service (AKS) som rekommenderas för skalbara produktionsdistributioner.

Anteckning

Azure Machine Learning-slutpunkter (v2) ger en förbättrad och enklare distributionsupplevelse. Slutpunkter stöder både realtids- och batchinferensscenarier. Slutpunkter tillhandahåller ett enhetligt gränssnitt för att anropa och hantera modelldistributioner mellan beräkningstyper. Se Vad är Azure Machine Learning-slutpunkter?.

Tips

Informationen i det här dokumentet är främst avsedd för dataexperter och utvecklare som vill distribuera sin MLflow-modell till en Azure Machine Learning-webbtjänstslutpunkt. Om du är administratör som är intresserad av att övervaka resursanvändning och händelser från Azure Machine Learning, till exempel kvoter, slutförda träningskörningar eller slutförda modelldistributioner, kan du läsa Övervaka Azure Machine Learning.

MLflow med Azure Machine Learning-distribution

MLflow är ett bibliotek med öppen källkod för att hantera livscykeln för dina maskininlärningsexperiment. Integreringen med Azure Machine Learning gör att du kan utöka den här hanteringen utöver modellträning till distributionsfasen för din produktionsmodell.

Följande diagram visar att med MLflow-distributions-API:et och Azure Machine Learning kan du distribuera modeller som skapats med populära ramverk som PyTorch, Tensorflow, scikit-learn osv. som Azure-webbtjänster och hantera dem på din arbetsyta.

 distribuera mlflow-modeller med Azure Machine Learning

Förutsättningar

Distribuera till Azure Container Instance (ACI)

Om du vill distribuera din MLflow-modell till en Azure Machine Learning-webbtjänst måste din modell konfigureras med MLflow Tracking URI för att ansluta till Azure Machine Learning.

För att kunna distribuera till ACI behöver du inte definiera någon distributionskonfiguration. Tjänsten är standard för en ACI-distribution när en konfiguration inte tillhandahålls. Registrera och distribuera sedan modellen i ett steg med MLflows distributionsmetod för 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 is the service name
# the model gets registered automatically and a name is autogenerated using the "name" parameter below 
client.create_deployment(name="mlflow-test-aci", model_uri='runs:/{}/{}'.format(run.id, model_path))

Anpassa distributionskonfiguration

Om du föredrar att inte använda standardvärdena kan du konfigurera distributionskonfigurationen med en json-fil för distributionskonfiguration som använder parametrar från metoden deploy_configuration() som referens.

För din distributionskonfigurations-json-fil måste var och en av distributionsparametrarna definieras i form av en ordlista. Följande är ett exempel. Läs mer om vad json-filen för distributionskonfigurationen kan innehålla.

Konfigurationsschema för Azure Container Instance-distribution

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

Din json-fil kan sedan användas för att skapa distributionen.

# set the deployment config
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")                                       

Distribuera till Azure Kubernetes Service (AKS)

Om du vill distribuera din MLflow-modell till en Azure Machine Learning-webbtjänst måste din modell konfigureras med MLflow Tracking URI för att ansluta till Azure Machine Learning.

Om du vill distribuera till AKS skapar du först ett AKS-kluster. Skapa ett AKS-kluster med hjälp av metoden ComputeTarget.create(). Det kan ta 20–25 minuter att skapa ett nytt kluster.

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)

Skapa en distributionskonfiguration json med deploy_configuration() metodvärden som referens. Var och en av distributionsparametrarna behöver helt enkelt definieras som en ordlista. Här är ett exempel nedan:

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

Registrera och distribuera sedan modellen i ett steg med MLflows distributionsklient.

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
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}

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

Tjänstdistributionen kan ta flera minuter.

Rensa resurser

Om du inte planerar att använda din distribuerade webbtjänst använder service.delete() du för att ta bort den från anteckningsboken. Mer information finns i dokumentationen för WebService.delete().

Exempelnotebook-filer

MLflow med Azure Machine Learning-notebook-filer visar och utökar begrepp som presenteras i den här artikeln.

Anteckning

En community-driven lagringsplats med exempel som använder mlflow finns på https://github.com/Azure/azureml-examples.

Nästa steg