Freigeben über


Bereitstellen von MLflow-Modellen als Azure-Webdienste

GILT FÜR:Python SDK azureml v1

MLflow ist eine Open-Source-Bibliothek zum Verwalten des Lebenszyklus von Experimenten für maschinelles Lernen. Dank der Integration von MLflow in Azure Machine Learning können Sie von der Modelltrainingsphase bis hin zur Bereitstellungsphase von Produktionsmodellen von den Verwaltungsfunktionen profitieren. In diesem Artikel stellen Sie ein MLflow-Modell als Azure-Webdienst bereit, und wenden die Azure Machine Learning-Funktionen für die Modellverwaltung und Datendrifterkennung auf Ihre Produktionsmodelle an.

Das folgende Diagramm zeigt, wie die MLflow-Bereitstellungs-API in Azure Machine Learning integriert wird, um Modelle bereitzustellen. Sie erstellen Modelle als Azure-Webdienste mithilfe beliebter Frameworks wie PyTorch, TensorFlow oder scikit-learn und verwalten die Dienste in Ihrem Arbeitsbereich:

Diagramm, das zeigt, wie die MLflow-Bereitstellungs-API in Azure Machine Learning integriert wird, um Modelle bereitzustellen

Tipp

Dieser Artikel unterstützt Data Scientists und Entwickler, die ein MLflow-Modell an einem Azure Machine Learning-Webdienstendpunkt bereitstellen möchten. Wenn Sie als Administrator die Ressourcennutzung und Ereignisse von Azure Machine Learning (z. B. Kontingente, abgeschlossene Trainingsausführungen oder abgeschlossene Modellimplementierungen) überwachen möchten, helfen Ihnen die Informationen im Artikel Überwachen von Azure Machine Learning weiter.

Voraussetzungen

Bereitstellungsoptionen

Azure Machine Learning bietet die folgenden Bereitstellungskonfigurationsoptionen:

  • Azure Container Instances: geeignet für eine schnelle Dev/Test-Bereitstellung.
  • Azure Kubernetes Service (AKS): empfohlen für skalierbare Produktionsbereitstellungen.

Hinweis

Azure Machine Learning-Endpunkte (v2) bieten eine verbesserte, einfachere Bereitstellungserfahrung. Endpunkte unterstützen Szenarien mit Echtzeit- und Batchrückschluss. Endpunkte verfügen über eine einheitliche Schnittstelle zum übergreifenden Aufrufen und Verwalten von Modellbereitstellungen für alle Computetypen. Siehe Was sind Azure Machine Learning-Endpunkte?.

Weitere Integrationen von MLflow- und Azure Machine Learning-Funktionen finden Sie unter MLflow und Azure Machine Learning (v2), welche das v2 SDK verwenden.

Bereitstellen in Azure Container Instances

Damit Sie Ihr MLflow-Modell in einem Azure Machine Learning-Webdienst bereitstellen können, muss das Modell mit der MLflow-Nachverfolgungs-URI zum Herstellen der Verbindung mit Azure Machine Learning eingerichtet sein.

Für die Bereitstellung in Azure Container Instances müssen Sie keine Bereitstellungskonfiguration definieren. Der Dienst wird standardmäßig für eine Bereitstellung von Azure Container Instances verwendet, wenn keine Konfiguration angegeben wird. Sie können das Modell mithilfe der deploy-Methode von MLflow in einem einzigen Schritt für Azure Machine Learning registrieren und bereitstellen.

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

Anpassen der JSON-Datei für die Bereitstellungskonfiguration

Wenn Sie die Standardwerte nicht verwenden möchten, können Sie Ihre Bereitstellung in einer JSON-Datei für die Bereitstellungskonfiguration einrichten. Sie nutzt die Parameter der deploy_configuration()-Methode als Referenz.

Definieren von Konfigurationsparametern für die Bereitstellung

In Ihrer JSON-Datei für die Bereitstellungskonfiguration definieren Sie alle Bereitstellungskonfigurationsparameter in Form eines Wörterbuchs. Der folgende Codeschnipsel zeigt ein Beispiel. Weitere Informationen dazu, was Ihre JSON-Datei für die Bereitstellungskonfiguration enthalten kann, finden Sie in der Azure CLI-Referenz für Azure Machine Learning unter Konfigurationsschema zur Bereitstellung einer Azure-Containerinstanz.

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

Ihre JSON-Konfigurationsdatei kann dann dazu verwendet werden, Ihre Bereitstellung zu erstellen:

# 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")    

Bereitstellen für Azure Kubernetes Service (AKS)

Damit Sie Ihr MLflow-Modell in einem Azure Machine Learning-Webdienst bereitstellen können, muss das Modell mit der MLflow-Nachverfolgungs-URI zum Herstellen der Verbindung mit Azure Machine Learning eingerichtet sein.

Für die Bereitstellung in AKS erstellen Sie zunächst einen AKS-Cluster mithilfe der ComputeTarget.create()-Methode. Die Erstellung eines neuen Clusters kann 20 bis 25 Minuten dauern.

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)

Erstellen Sie eine JSON-Datei für die Bereitstellungskonfiguration mit den Werten der Methode deploy_configuration() als Referenz. Definieren Sie jeden Bereitstellungskonfigurationsparameter als Wörterbuch, wie im folgenden Beispiel veranschaulicht:

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

Dann können Sie das Modell mithilfe des Bereitstellungsclients von MLflow in einem einzigen Schritt registrieren und bereitstellen.

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")

Die Bereitstellung des Diensts kann mehrere Minuten dauern.

Bereinigen von Ressourcen

Wenn Sie den bereitgestellten Webdienst nicht verwenden werden, löschen Sie ihn mithilfe der service.delete()-Methode aus Ihrem Notebook. Weitere Informationen finden Sie in der Python SDK-Dokumentation unter delete()-Methode der WebService-Klasse.

Untersuchen von Beispiel-Notebooks

In den Notebooks „MLflow mit Azure Machine Learning“ werden die in diesem Artikel vorgestellten Konzepte weiter erläutert und demonstriert.

Hinweis

Ein communitygesteuertes Repository mit Beispielen, die MLflow verwenden, finden Sie im Repository mit Azure Machine Learning-Beispielen auf GitHub.