Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
GILT FÜR:
Azure CLI ml Erweiterung v2 (aktuell)
Python SDK azure-ai-ml v2 (aktuell)
In Azure Machine Learning können Sie einen benutzerdefinierten Container verwenden, um ein Modell auf einem Onlineendpunkt bereitzustellen. Benutzerdefinierte Containerbereitstellungen können andere Webserver als den standardmäßigen Python Flask-Server verwenden, der Azure Machine Learning verwendet.
Wenn Sie eine benutzerdefinierte Bereitstellung verwenden, können Sie:
- Verwenden Sie verschiedene Tools und Technologien wie TensorFlow Serving (TF Serving), TorchServe, Triton Inference Server, das Plumber R-Paket und das Azure Machine Learning Minimal-Image.
- Nutzen Sie dennoch die integrierte Überwachung, Skalierung, Warnung und Authentifizierung, die Azure Machine Learning bietet.
In diesem Artikel wird erklärt, wie Sie ein TF Serving-Image verwenden, um ein TensorFlow-Modell bereitzustellen.
Prerequisites
Ein Azure Machine Learning Arbeitsbereich. Anweisungen zum Erstellen eines Arbeitsbereichs finden Sie unter Erstellen des Arbeitsbereichs.
Die Azure CLI und die erweiterung
mloder das Azure Machine Learning Python SDK v2:Informationen zum Installieren des Azure CLI und der erweiterung
mlfinden Sie unter Install und Einrichten der CLI (v2).In den Beispielen in diesem Artikel wird davon ausgegangen, dass Sie eine Bash-Shell oder eine kompatible Shell verwenden. Sie können beispielsweise eine Shell auf einem Linux-System oder Windows Subsystem for Linux verwenden.
Eine Azure-Ressourcengruppe, die Ihren Arbeitsbereich enthält und zu der entweder Sie oder Ihr Dienstprinzipal Mitwirkender-Zugriff haben. Wenn Sie die Schritte unter "Arbeitsbereich erstellen" verwenden, um Ihren Arbeitsbereich zu konfigurieren, erfüllen Sie diese Anforderung.
Docker-Modul, lokal installiert und ausgeführt. Diese Voraussetzung wird dringend empfohlen. Sie benötigen es, um ein Modell lokal bereitzustellen, und es ist hilfreich für das Debuggen.
Bereitstellungsbeispiele
In der folgenden Tabelle sind Deployment examples aufgeführt, die benutzerdefinierte Container verwenden und verschiedene Tools und Technologien nutzen.
| Example | Azure CLI-Skript | Description |
|---|---|---|
| minimal/multimodel | deploy-custom-container-minimal-multimodel | Stellt mehrere Modelle in einer einzelnen Bereitstellung bereit, indem das Rückschluss-Minimalimage für Azure Machine Learning erweitert wird |
| minimal/single-model | deploy-custom-container-minimal-single-model | Stellt ein einzelnes Modell bereit, indem das minimale Inferenzimage von Azure Machine Learning erweitert wird. |
| mlflow/multideployment-scikit | deploy-custom-container-mlflow-multideployment-scikit | Stellt zwei MLFlow-Modelle mit unterschiedlichen Python Anforderungen für zwei separate Bereitstellungen hinter einem einzelnen Endpunkt bereit. Verwendet das Rückschluss-Minimalimage für Azure Machine Learning. |
| r/multimodel-plumber | deploy-custom-container-r-multimodel-plumber | Stellt drei Regressionsmodelle auf einem Endpunkt bereit. Verwendet das Plumber R-Paket. |
| tfserving/half-plus-two | deploy-custom-container-tfserving-half-plus-two | Stellt ein Half Plus Two-Modell mithilfe eines benutzerdefinierten TF Serving-Containers bereit. Verwendet den Standardmodellregistrierungsprozess. |
| tfserving/half-plus-two-integrated | deploy-custom-container-tfserving-half-plus-two-integrated | Stellt ein Half Plus Two-Modell bereit, indem ein benutzerdefinierter Container für TF Serving verwendet wird, in dem das Modell in das Image integriert ist. |
| torchserve/densenet | deploy-custom-container-torchserve-densenet | Stellt ein einzelnes Modell mithilfe eines benutzerdefinierten TorchServe-Containers bereit. |
| triton/single-model | maßgeschneiderten Container-Trition-Einzelmodell bereitstellen | Stellt ein Triton-Modell mithilfe eines benutzerdefinierten Containers bereit. |
In diesem Artikel erfahren Sie, wie Sie das tfserving/half-plus-two Beispiel verwenden.
Warning
Microsoft-Supportteams können möglicherweise nicht helfen, Probleme zu beheben, die durch ein benutzerdefiniertes Image verursacht werden. Wenn Probleme auftreten, werden Sie möglicherweise aufgefordert, das Standardbild oder eines der Von Microsoft bereitgestellten Bilder zu verwenden, um festzustellen, ob das Problem für Ihr Bild spezifisch ist.
Herunterladen des Quellcodes
Die Schritte in diesem Artikel verwenden Codebeispiele aus dem Repository azureml-examples. Führen Sie die folgenden Befehle aus, um das Repository zu klonen:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Initialisieren von Umgebungsvariablen
Um ein TensorFlow-Modell zu verwenden, benötigen Sie mehrere Umgebungsvariablen. Führen Sie die folgenden Befehle aus, um diese Variablen zu definieren:
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, und entpacken Sie ein Modell, das einen Eingabewert durch zwei dividiert, und fügt dem Ergebnis zwei hinzu:
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 Testen eines TF Serving-Images
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
Verfügbarkeits- und Bewertungsanforderungen an das Image senden
Senden Sie eine Liveness-Anforderung, um zu überprüfen, ob der Prozess innerhalb des Containers ausgeführt wird. Sie sollten den Antwortstatuscode 200 OK erhalten.
curl -v http://localhost:8501/v1/models/$MODEL_NAME
Senden Sie eine Bewertungsanforderung, um zu überprüfen, ob Sie Vorhersagen für nicht bezeichnete Daten erhalten können:
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
Wenn Sie den Test lokal abgeschlossen haben, beenden Sie das Bild:
docker stop tfserving-test
Bereitstellen Ihres Onlineendpunkts zum Azure
Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihren Onlineendpunkt für Azure bereitzustellen.
Erstellen von YAML-Dateien für Ihren Endpunkt und die Bereitstellung
Sie können Ihre Cloudbereitstellung mithilfe von YAML konfigurieren. Um beispielsweise Ihren Endpunkt zu konfigurieren, erstellen Sie eine YAML-Datei mit dem Namen tfserving-endpoint.yml , die die folgenden Zeilen enthält:
$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token
Um Ihre Bereitstellung zu konfigurieren, erstellen Sie eine YAML-Datei mit dem Namen tfserving-deployment.yml , die die folgenden Zeilen enthält:
$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 den folgenden Abschnitten werden wichtige Konzepte zu den PARAMETERn YAML und Python erläutert.
Basisbild
Geben Sie im Abschnitt environment in YAML oder im Environment-Konstruktor in Python das Basisbild als Parameter an. In diesem Beispiel wird docker.io/tensorflow/serving:latest als Wert für image verwendet.
Wenn Sie Ihren Container überprüfen, können Sie sehen, dass dieser Server ENTRYPOINT-Befehle verwendet, um ein Einstiegsskript zu starten. Dieses Skript verwendet Umgebungsvariablen wie MODEL_BASE_PATH und MODEL_NAME, und es macht Ports wie 8501 verfügbar. Diese Details beziehen sich alle auf diesen Server, und Sie können diese Informationen verwenden, um zu bestimmen, wie Ihre Bereitstellung definiert wird. Wenn Sie beispielsweise die MODEL_BASE_PATH Variablen und MODEL_NAME Umgebungsvariablen in Ihrer Bereitstellungsdefinition festlegen, verwendet TF Serving diese Werte, um den Server zu initiieren. Ebenso werden Benutzeranfragen bei Festlegung des Ports für jede Route auf 8501 in der Bereitstellungsdefinition ordnungsgemäß an den TF-Serving-Server weitergeleitet.
Dieses Beispiel basiert auf dem TF Serving-Fall. Sie können jedoch jeden Container verwenden, der aktiv bleibt und auf Anforderungen reagiert, die an Routen für Verfügbarkeit, Bereitschaft und Bewertung gesendet werden. Um zu sehen, wie man eine Dockerfile erstellt, um einen Container zu erstellen, schauen Sie sich andere Beispiele an. Einige Server verwenden CMD Anweisungen anstelle von ENTRYPOINT Anweisungen.
Tipp
Für Produktionsbereitstellungen fixieren Sie sich auf eine bestimmte Image-Version (z. B. docker.io/tensorflow/serving:2.18.0), anstatt :latest zu verwenden, um reproduzierbare Bereitstellungen sicherzustellen.
Der Parameter „inference_config“
Im environment Abschnitt oder in der Environment Klasse ist inference_config ein Parameter. Gibt den Port und Pfad für drei Arten von Routen an: Verfügbarkeits-, Bereitschafts- und Bewertungsrouten. Der inference_config Parameter ist erforderlich, wenn Sie Ihren eigenen Container mit einem verwalteten Onlineendpunkt ausführen möchten.
Bereitschaftsrouten im Vergleich zu Liveness-Routen
Einige API-Server bieten eine Möglichkeit, den Status des Servers zu überprüfen. Es gibt zwei Arten von Routen, die Sie für die Überprüfung des Status angeben können:
- Liveness-Routen: Um zu überprüfen, ob ein Server läuft, verwenden Sie eine Liveness-Route.
- Bereitschaftsrouten : Verwenden Sie eine Bereitschaftsroute, um zu überprüfen, ob ein Server für die Arbeit bereit ist.
Im Kontext der Ableitung des maschinellen Lernens reagiert ein Server möglicherweise mit einem Statuscode von 200 OK auf eine Livenessanforderung, bevor ein Modell geladen wird. Der Server antwortet möglicherweise mit einem Statuscode von 200 OK auf eine Bereitschaftsanforderung, nachdem es das Modell in den Arbeitsspeicher geladen hat.
Weitere Informationen zu Verfügbarkeits- und Bereitschaftstests finden Sie unter Konfigurieren von Verfügbarkeits-, Bereitschafts- und Starttests.
Der von Ihnen ausgewählte API-Server bestimmt die Verfügbarkeits- und Bereitschaftsrouten. Sie identifizieren diesen Server in einem früheren Schritt, wenn Sie den Container lokal testen. In diesem Artikel verwendet die Beispielbereitstellung denselben Pfad für die Verfügbarkeits- und Bereitschaftsrouten, da TF Serving nur eine Verfügbarkeitsroute definiert. Weitere Möglichkeiten zum Definieren der Routen finden Sie in anderen Beispielen.
Punktevergabevorgänge
Der verwendete API-Server bietet eine Möglichkeit, die Nutzdaten zu empfangen, um daran zu arbeiten. Im Kontext der Machine Learning-Ableitung empfängt ein Server die Eingabedaten über eine bestimmte Route. Identifizieren Sie diese Route für Ihren API-Server, wenn Sie den Container lokal in einem früheren Schritt testen. Geben Sie diese Route als Bewertungsroute an, wenn Sie die zu erstellende Bereitstellung definieren.
Die erfolgreiche Erstellung der Bereitstellung aktualisiert auch den scoring_uri-Parameter des Endpunkts. Sie können diese Tatsache überprüfen, indem Sie den folgenden Befehl ausführen: az ml online-endpoint show -n <endpoint-name> --query scoring_uri.
Suchen des eingebundenen Modells
Wenn Sie ein Modell als Onlineendpunkt bereitstellen, Azure Machine Learning mounts Ihr Modell an Ihren Endpunkt. Wenn das Modell bereitgestellt wird, können Sie neue Versionen des Modells bereitstellen, ohne ein neues Docker-Image erstellen zu müssen. Standardmäßig befindet sich ein Modell, das mit dem Namen "my-model " und "Version 1 " registriert ist, im folgenden Pfad innerhalb Ihres bereitgestellten Containers: /var/azureml-app/azureml-models/my-model/1.
Betrachten Sie z. B. die folgende Einrichtung:
- Eine Verzeichnisstruktur auf Ihrem lokalen Computer von
/azureml-examples/cli/endpoints/online/custom-container - Modellname
half_plus_two
Angenommen, Ihre tfserving-deployment.yml Datei enthält die folgenden Zeilen im model Abschnitt. In diesem Abschnitt bezieht sich der wert name auf den Namen, den Sie zum Registrieren des Modells in Azure Machine Learning verwenden.
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
Wenn Sie eine Bereitstellung erstellen, befindet sich Ihr Modell in diesem Fall unter dem folgenden Ordner: /var/azureml-app/azureml-models/tfserving-mounted/1
Sie können optional Ihren model_mount_path Wert konfigurieren. Durch Anpassen dieser Einstellung können Sie den Pfad ändern, in dem das Modell bereitgestellt wird.
Important
Der model_mount_path Wert muss ein gültiger absoluter Pfad in Linux sein (im Gastbetriebssystem des Containerimages).
Important
Sie können model_mount_path nur in einem BYOC-Szenario (Bring your own container) verwenden. In einem BYOC-Szenario muss die Umgebung, die die Online-Bereitstellung verwendet, mit dem inference_config Parameter konfiguriert sein. Verwenden Sie die Azure Machine Learning CLI oder das Python SDK, um den Parameter inference_config beim Erstellen der Umgebung anzugeben. Das Studio unterstützt derzeit die Angabe dieses Parameters nicht.
Wenn Sie den Wert ändern model_mount_path, müssen Sie auch die MODEL_BASE_PATH Umgebungsvariable aktualisieren. Setzen Sie MODEL_BASE_PATH auf denselben Wert wie model_mount_path, um eine fehlgeschlagene Bereitstellung aufgrund eines Fehlers zu vermeiden, dass der Basispfad nicht gefunden wird.
Sie können beispielsweise den model_mount_path Parameter zu Ihrer tfserving-deployment.yml Datei hinzufügen. Sie können den Wert in dieser MODEL_BASE_PATH Datei auch aktualisieren:
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
environment_variables:
MODEL_BASE_PATH: /var/tfserving-model-mount
...
In Ihrer Bereitstellung befindet sich Ihr Modell unter /var/tfserving-model-mount/tfserving-mounted/1. Er befindet sich nicht mehr unter azureml-app/azureml-models, sondern unter dem Einbindungspfad, den Sie angeben.
Erstellen Sie Ihren Endpunkt und die Bereitstellung
Nachdem Sie ihre YAML-Datei erstellt haben, verwenden Sie den folgenden Befehl, um Ihren Endpunkt zu erstellen:
az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-endpoint.yml
Verwenden Sie den folgenden Befehl, um Ihre Bereitstellung zu erstellen. Dieser Schritt kann einige Minuten dauern.
az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-deployment.yml --all-traffic
Aufrufen des Endpunkts
Wenn Die Bereitstellung abgeschlossen ist, stellen Sie eine Bewertungsanforderung an den bereitgestellten Endpunkt.
RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)
Löschen des Endpunkts
Wenn Sie Ihren Endpunkt nicht mehr benötigen, führen Sie den folgenden Befehl aus, um ihn zu löschen:
az ml online-endpoint delete --name tfserving-endpoint