Verwenden eines benutzerdefinierten Containers zum Bereitstellen eines Modells für einen Onlineendpunkt
GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)
Erfahren Sie, wie Sie einen benutzerdefinierten Container zum Bereitstellen eines Modells für einen Onlineendpunkt in Azure Machine Learning verwenden.
Benutzerdefinierte Containerbereitstellungen können andere Webserver als den standardmäßigen Python Flask-Server verwenden, der von Azure Machine Learning verwendet wird. Benutzer dieser Bereitstellungen können weiterhin die Vorteile der in Azure Machine Learning integrierten Überwachung, Skalierung, Warnungen und Authentifizierung nutzen.
In der folgenden Tabelle sind verschiedene Bereitstellungsbeispiele aufgeführt, die benutzerdefinierte Container wie TensorFlow Serving, TorchServe, Triton Inference Server, Plumber R-Paket und Azure Machine Learning Inference Minimal-Image verwenden.
Beispiel | Skript (CLI) | BESCHREIBUNG |
---|---|---|
minimal/multimodel | deploy-custom-container-minimal-multimodel | Stellen Sie mehrere Modelle in einer einzelnen Bereitstellung bereit, indem Sie das Azure Machine Learning Inference Minimal-Image erweitern |
minimal/single-model | deploy-custom-container-minimal-single-model | Stellen Sie ein einzelnes Modell bereit, indem Sie das Azure Machine Learning Inference Minimal-Image erweitern. |
mlflow/multideployment-scikit | deploy-custom-container-mlflow-multideployment-scikit | Stellen Sie zwei MLFlow-Modelle mit unterschiedlichen Python-Anforderungen in zwei separaten Bereitstellungen hinter einem einzelnen Endpunkt mithilfe des Azure Machine Learning Inference Minimal-Images bereit. |
r/multimodel-plumber | deploy-custom-container-r-multimodel-plumber | Bereitstellen von drei Regressionsmodellen auf einem Endpunkt mithilfe des Plumber R-Pakets |
tfserving/half-plus-two | deploy-custom-container-tfserving-half-plus-two | Stellen Sie ein Half Plus Two-Modell mit einem benutzerdefinierten TensorFlow Serving-Container mithilfe des Standardverfahrens für die Modellregistrierung bereit. |
tfserving/half-plus-two-integrated | deploy-custom-container-tfserving-half-plus-two-integrated | Stellen Sie ein Half Plus Two-Modell mit einem benutzerdefinierten TensorFlow Serving-Container mit dem in das Image integrierten Modell bereit. |
torchserve/densenet | deploy-custom-container-torchserve-densenet | Bereitstellen eines einzelnen Modells mithilfe eines benutzerdefinierten TorchServe-Containers |
triton/single-model | deploy-custom-container-triton-single-model | Bereitstellen eines Triton-Modells mithilfe eines benutzerdefinierten Containers |
In diesem Artikel wird die Bereitstellung eines TensorFlow-Modells mit TensorFlow (TF) Serving behandelt.
Warnung
Microsoft kann möglicherweise nicht helfen, Probleme zu beheben, die durch ein benutzerdefiniertes Image verursacht werden. Wenn Sie auf Probleme stoßen, werden Sie möglicherweise aufgefordert, das Standardimage oder eines der von Microsoft bereitgestellten Images zu verwenden, um zu sehen, ob das Problem von Ihrem Image verursacht wird.
Voraussetzungen
Stellen Sie vor dem Ausführen der Schritte in diesem Artikel sicher, dass Sie über die folgenden erforderlichen Komponenten verfügen:
Ein Azure Machine Learning-Arbeitsbereich. Wenn keiner vorliegt, führen Sie die Schritte unter Schnellstart: Erstellen von Arbeitsbereichsressourcen aus, um einen Arbeitsbereich zu erstellen.
Die Azure CLI und die
ml
-Erweiterung oder das Azure Machine Learning Python SDK v2:Informationen zum Installieren der Azure CLI und der Erweiterung finden Sie unter Installieren, Einrichten und Verwenden der CLI (v2).
Wichtig
In den CLI-Beispielen in diesem Artikel wird davon ausgegangen, dass Sie die Bash-Shell (oder eine kompatible Shell) verwenden, beispielsweise über ein Linux-System oder ein Windows-Subsystem für Linux.
Verwenden Sie zum Installieren des Python SDK v2 den folgenden Befehl:
pip install azure-ai-ml azure-identity
Verwenden Sie den folgenden Befehl, um eine vorhandene Installation des SDK auf die neueste Version zu aktualisieren:
pip install --upgrade azure-ai-ml azure-identity
Weitere Informationen finden Sie unter Installieren des Python SDK v2 für Azure Machine Learning.
Sie oder der von Ihnen verwendete Dienstprinzipal muss über Zugriff für Mitwirkende auf die Azure-Ressourcengruppe verfügen, die Ihren Arbeitsbereich enthält. Sie verfügen über eine solche Ressourcengruppe, wenn Sie Ihren Arbeitsbereich gemäß dem Schnellstartartikel konfiguriert haben.
Für die lokale Bereitstellung muss die Docker-Engine lokal ausgeführt werden. Dieser Schritt wird dringend empfohlen. Er hilft Ihnen beim Debuggen von Problemen.
Herunterladen des Quellcodes
Klonen Sie den Quellcode von GitHub, um dieses Tutorial zu befolgen.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Initialisieren von Umgebungsvariablen
Definieren von Umgebungsvariablen:
BASE_PATH=endpoints/online/custom-container/tfserving/half-plus-two
AML_MODEL_NAME=tfserving-mounted
MODEL_NAME=half_plus_two
MODEL_BASE_PATH=/var/azureml-app/azureml-models/$AML_MODEL_NAME/1
Herunterladen eines TensorFlow-Modells
Laden Sie ein Modell herunter, das eine Eingabe durch zwei dividiert und dem Ergebnis 2 hinzufügt, und entzippen Sie es:
wget https://aka.ms/half_plus_two-model -O $BASE_PATH/half_plus_two.tar.gz
tar -xvf $BASE_PATH/half_plus_two.tar.gz -C $BASE_PATH
Lokales Ausführen eines TF Serving-Images, um zu testen, ob es funktioniert
Verwenden Sie Docker, um Ihr Image lokal zum Testen auszuführen:
docker run --rm -d -v $PWD/$BASE_PATH:$MODEL_BASE_PATH -p 8501:8501 \
-e MODEL_BASE_PATH=$MODEL_BASE_PATH -e MODEL_NAME=$MODEL_NAME \
--name="tfserving-test" docker.io/tensorflow/serving:latest
sleep 10
Überprüfen, ob Sie Verfügbarkeits- und Bewertungsanforderungen an das Image senden können
Überprüfen Sie zunächst, ob der Container lebt, d. h. der Prozess noch im Container ausgeführt wird. Sie sollten eine „200 (OK)“-Antwort erhalten.
curl -v http://localhost:8501/v1/models/$MODEL_NAME
Überprüfen Sie dann, ob Sie Vorhersagen zu Daten ohne Bezeichnung erhalten:
curl --header "Content-Type: application/json" \
--request POST \
--data @$BASE_PATH/sample_request.json \
http://localhost:8501/v1/models/$MODEL_NAME:predict
Beenden des Images
Nachdem Sie nun lokal getestet haben, beenden Sie das Image:
docker stop tfserving-test
Bereitstellen Ihres Onlineendpunkts in Azure
Stellen Sie als nächstes Ihren Onlineendpunkt in Azure bereit.
Erstellen Sie eine YAML-Datei für Ihren Endpunkt und Ihr Bereitstellen.
Sie können Ihre Cloudbereitstellung mit YAML konfigurieren. Schauen Sie sich das YAML-Beispiel für dieses Beispiel an:
tfserving-endpoint.yml
$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token
tfserving-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
name: tfserving-mounted
version: {{MODEL_VERSION}}
path: ./half_plus_two
environment_variables:
MODEL_BASE_PATH: /var/azureml-app/azureml-models/tfserving-mounted/{{MODEL_VERSION}}
MODEL_NAME: half_plus_two
environment:
#name: tfserving
#version: 1
image: docker.io/tensorflow/serving:latest
inference_config:
liveness_route:
port: 8501
path: /v1/models/half_plus_two
readiness_route:
port: 8501
path: /v1/models/half_plus_two
scoring_route:
port: 8501
path: /v1/models/half_plus_two:predict
instance_type: Standard_DS3_v2
instance_count: 1
In diesem YAML-/Python-Parameter sind einige wichtige Konzepte zu beachten:
Base image
Das Basisimage wird als Parameter in der Umgebung angegeben, und docker.io/tensorflow/serving:latest
wird in diesem Beispiel verwendet. Beim Überprüfen des Containers können Sie feststellen, dass dieser Server ENTRYPOINT
verwendet, um ein Einstiegspunktskript zu starten, das die Umgebungsvariablen (etwa MODEL_BASE_PATH
und MODEL_NAME
) verwendet und Ports (etwa 8501
) verfügbar macht. Diese Details sind spezifische Informationen für diesen ausgewählten Server. Sie können diese Informationen zum Server nutzen, um zu ermitteln, wie die Bereitstellung definiert werden soll. Wenn Sie beispielsweise Umgebungsvariablen für MODEL_BASE_PATH
und MODEL_NAME
in der Bereitstellungsdefinition festlegen, übernimmt der Server (in diesem Fall TF Serving) die Werte, um den Server zu initiieren. Wenn Sie den Port für die Routen in der Bereitstellungsdefinition auf 8501
festlegen, wird die Benutzeranforderung an diese Routen ordnungsgemäß an den TF Serving-Server weitergeleitet.
Beachten Sie, dass dieses spezifische Beispiel auf dem TF Serving-Fall basiert. Sie können jedoch jeden Container verwenden, der aktiv ist und auf Anforderungen reagiert, die über Verfügbarkeits-, Bereitschafts- und Bewertungsrouten eingehen. Sie können in anderen Beispielen ansehen, wie das Dockerfile gebildet wird (z. B. mithilfe von CMD
anstelle von ENTRYPOINT
), um die Container zu erstellen.
Rückschlusskonfiguration
Die Rückschlusskonfiguration ist ein Parameter in der Umgebung und gibt den Port und den Pfad für drei Routentypen an: Verfügbarkeits-, Bereitschafts- und Bewertungsroute. Die Rückschlusskonfiguration ist erforderlich, wenn Sie Ihren eigenen Container mit verwaltetem Onlineendpunkt ausführen möchten.
Bereitschaftsroute im Vergleich zur Verfügbarkeitsroute
Der von Ihnen ausgewählte API-Server bietet u. U. eine Möglichkeit, den Status des Servers zu überprüfen. Es gibt zwei Routentypen, die Sie angeben können: Verfügbarkeit und Bereitschaft. Eine Verfügbarkeitsroute wird verwendet, um zu überprüfen, ob der Server ausgeführt wird. Eine Bereitschaftsroute wird verwendet, um zu prüfen, ob der Server bereit ist, zu arbeiten. Im Kontext von Rückschlüssen beim maschinellen Lernen kann ein Server mit „200 - OK“ auf eine Verfügbarkeitsanforderung reagieren, bevor ein Modell geladen wird, und der Server kann erst mit „200 - OK“ auf eine Bereitschaftsanforderung reagieren, nachdem das Modell in den Speicher geladen wurde.
Weitere Informationen zu Verfügbarkeits- und Bereitschaftstests im Allgemeinen finden Sie in der Kubernetes-Dokumentation.
Die Verfügbarkeits- und Bereitschaftsrouten werden vom API-Server Ihrer Wahl bestimmt, wie Sie beim lokalen Testen des Containers in einem früheren Schritt festgestellt haben. Beachten Sie, dass die Beispielbereitstellung in diesem Artikel sowohl für Verfügbarkeit als auch für Bereitschaft denselben Pfad verwendet, da TF Serving nur eine Verfügbarkeitsroute definiert. Verschiedene Muster zum Definieren der Routen finden Sie in anderen Beispielen.
Bewertungsroute
Der von Ihnen ausgewählte API-Server bietet eine Möglichkeit, die Nutzlast für die Arbeit zu empfangen. Im Kontext von Rückschlüssen beim maschinellen Lernen empfängt ein Server die Eingabedaten über eine bestimmte Route. Identifizieren Sie diese Route für Ihren API-Server beim lokalen Testen des Containers in einem früheren Schritt, und geben Sie diese an, wenn Sie die zu erstellende Bereitstellung definieren.
Beachten Sie, dass die erfolgreiche Erstellung der Bereitstellung auch den Parameter „scoring_uri“ des Endpunkts aktualisiert, den Sie mit az ml online-endpoint show -n <name> --query scoring_uri
überprüfen können.
Suchen des eingebundenen Modells
Wenn Sie ein Modell als Onlineendpunkt bereitstellen, bindet Azure Machine Learning Ihr Modell in Ihren Endpunkt ein. Mit der Modelleinbindung können Sie neue Versionen des Modells bereitstellen, ohne ein neues Docker-Image erstellen zu müssen. Standardmäßig befindet sich ein mit dem Namen foo und der Version 1 registriertes Modell im folgenden Pfad in Ihrem bereitgestellten Container: /var/azureml-app/azureml-models/foo/1
Wenn Sie beispielsweise über eine Verzeichnisstruktur von /azureml-examples/cli/endpoints/online/custom-container auf Ihrem lokalen Computer verfügen, auf dem der Name des Modells half_plus_two lautet:
Und tfserving-deployment.yml enthält:
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
Dann befindet sich Ihr Modell unter /var/azureml-app/azureml-models/tfserving-deployment/1 in Ihrer Bereitstellung:
Sie können Ihre model_mount_path
optional konfigurieren. Sie können den Pfad ändern, in dem das Modell eingebunden ist.
Wichtig
Bei model_mount_path
muss es sich um einen gültigen absoluten Pfad in Linux (dem Betriebssystem des Container-Images) handeln.
Sie können zum Beispiel model_mount_path
Parameter in Ihrer tfserving-deployment.yml haben:
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
.....
Dann befindet sich Ihr Modell unter /var/tfserving-model-mount/tfserving-deployment/1 in Ihrer Bereitstellung. Beachten Sie, dass es sich nicht mehr unter azureml-app/azureml-models befindet, sondern unter dem von Ihnen angegebenen Einbindungspfad:
Erstellen Sie Ihren Endpunkt und die Bereitstellung
Nachdem Sie nun wissen, wie die YAML-Datei erstellt wurde, erstellen Sie Ihren Endpunkt.
az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving-endpoint.yml
Die Erstellung einer Bereitstellung kann einige Minuten dauern.
az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving-deployment.yml --all-traffic
Aufrufen des Endpunkts
Nachdem die Bereitstellung abgeschlossen ist, prüfen Sie, ob Sie eine Bewertungsanforderung an den bereitgestellten Endpunkt senden können.
RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)
Löschen des Endpunkts
Nachdem Sie ihren Endpunkt erfolgreich bewertet haben, können Sie ihn löschen:
az ml online-endpoint delete --name tfserving-endpoint