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:
Bereitschaftsroute im Vergleich zur Verfügbarkeitsroute
Ein HTTP-Server definiert Pfade sowohl für Lebensfähigkeit als auch für 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 Machine Learning-Rückschluss könnte ein Server eine „200 OK“-Antwort auf eine Verfügbarkeitsanforderung geben, bevor er ein Modell lädt. Der Server kann erst dann mit „200 OK“ auf eine Bereitschaftsanforderung antworten, nachdem das Modell in den Arbeitsspeicher geladen wurde.
Weitere Informationen zu Live- und Bereitschaftstests finden Sie in der Kubernetes-Dokumentation.
Beachten Sie, dass diese Bereitstellung sowohl für Verfügbarkeit als auch für Bereitschaft denselben Pfad verwendet, da TF Serving nur eine Verfügbarkeitsroute definiert.
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