Bereitstellen und Bewerten eines Machine Learning-Modells mithilfe eines Onlineendpunkts
GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)
Python SDK azure-ai-ml v2 (aktuell)
In diesem Artikel erfahren Sie, wie Sie Ihr Modell für einen Onlineendpunkt bereitstellen, um es für Echtzeitrückschlüsse zu verwenden. Sie beginnen mit der Bereitstellung eines Modells auf Ihrem lokalen Computer, um eventuelle Fehler zu debuggen. Dann werden Sie das Modell in Azure bereitstellen und testen. Außerdem erfahren Sie, wie Sie die Bereitstellungsprotokolle anzeigen und die Vereinbarung zum Service Level (SLA) überwachen. Am Ende dieses Artikels werden Sie über einen skalierbaren HTTPS/REST-Endpunkt verfügen, den Sie für Rückschlüsse in Echtzeit verwenden können.
Onlineendpunkte sind Endpunkte, die für Echtzeitrückschlüsse verwendet werden. Es gibt zwei Arten von Onlineendpunkten: Verwaltete Onlineendpunkte und Kubernetes-Onlineendpunkte. Weitere Informationen zu Endpunkten und den Unterschieden zwischen verwalteten Onlineendpunkten und Kubernetes-Onlineendpunkten finden Sie unter Was sind Azure Machine Learning-Endpunkte?.
Verwaltete Online-Endpunkte helfen Ihnen, Ihre ML-Modelle sofort einsatzbereit bereitzustellen. Verwaltete Onlineendpunkte arbeiten mit leistungsstarken CPU- und GPU-Computern in Azure auf skalierbare, vollständig verwaltete Weise. Verwaltete Online-Endpunkte sorgen für die Bereitstellung, Skalierung, Sicherung und Überwachung Ihrer Modelle und befreien Sie vom Aufwand für die Einrichtung und Verwaltung der zugrunde liegenden Infrastruktur.
Im Hauptbeispiel in dieser Dokumentation werden verwaltete Online-Endpunkte für die Bereitstellung verwendet. Wenn Sie stattdessen Kubernetes verwenden möchten, lesen Sie bitte die Hinweise in diesem Dokument, die mit der Diskussion über verwaltete Online-Endpunkte übereinstimmen.
Voraussetzungen
GILT FÜRAzure CLI ML-Erweiterung v2 (aktuell)
Stellen Sie vor dem Ausführen der Schritte in diesem Artikel sicher, dass Sie über die folgenden erforderlichen Komponenten verfügen:
Die Azure CLI und die
ml
-Erweiterung der Azure CLI. Weitere Informationen 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.
Ein Azure Machine Learning-Arbeitsbereich. Sofern noch nicht vorhanden, führen Sie die Schritte im Abschnitt Installieren, Einrichten und Verwenden der CLI (v2) aus, um einen Arbeitsbereich zu erstellen.
Die rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) wird verwendet, um Zugriff auf Vorgänge in Azure Machine Learning zu gewähren. Um die Schritte in diesem Artikel auszuführen, muss Ihr Benutzerkonto der Rolle Besitzer oder Mitwirkender für den Azure Machine Learning-Arbeitsbereich bzw. einer benutzerdefinierte Rolle zugewiesen werden, die
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
zulässt. Wenn Sie Studio zum Erstellen/Verwalten von Online-Endpunkten/Einsätzen verwenden, benötigen Sie eine zusätzliche Berechtigung „Microsoft.Resources/deployments/write“ vom Eigentümer der Ressourcengruppe. Weitere Informationen finden Sie unter Zugriff auf einen Azure Machine Learning-Arbeitsbereich verwalten.(Optional) Zur lokalen Bereitstellung müssen Sie die Docker-Engine auf Ihrem lokalen Computer installieren. Diese Option wird dringend empfohlen, um das Debuggen von Problemen zu vereinfachen.
Kontingentzuordnung für virtuelle Computer für die Bereitstellung
Für verwaltete Onlineendpunkte reserviert Azure Machine Learning 20 % Ihrer Computeressourcen für die Durchführung von Upgrades. Wenn Sie also eine bestimmte Anzahl von Instanzen in einer Bereitstellung anfordern, müssen Sie über ein Kontingent für ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU
verfügen, um zu verhindern, dass Sie einen Fehler erhalten. Wenn Sie beispielsweise 10 Instanzen einer Standard_DS3_v2-VM (mit 4 Kernen) in einer Bereitstellung anfordern, sollten Sie ein Kontingent für 48 Kerne (12 instances * 4 cores
) verfügbar haben. Informationen zum Anzeigen Ihres Verbrauchs und zum Anfordern von Kontingenterhöhungen finden Sie unter Anzeigen Ihres Verbrauchs und Ihrer Kontingente im Azure-Portal.
Vorbereiten Ihres Systems
Festlegen von Umgebungsvariablen
Wenn Sie die Standardeinstellungen für die Azure-Befehlszeilenschnittstelle noch nicht festgelegt haben, speichern Sie Ihre Standardeinstellungen. Um zu vermeiden, dass Sie die Werte für Ihr Abonnement, Ihren Arbeitsbereich und Ihre Ressourcengruppe mehrfach eingeben müssen, führen Sie den folgenden Code aus:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Klonen des Beispielrepositorys
Klonen Sie zunächst das Beispielrepository (azureml-examples), um diesem Artikel zu folgen. Führen Sie dann den folgenden Code aus, um zum cli/
-Verzeichnis des Repositorys zu wechseln:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
Tipp
Verwenden Sie --depth 1
, um nur den letzten Commit in das Repository zu klonen, wodurch das Abschließen des Vorgangs beschleunigt wird.
Die in diesem Tutorial verwendeten Befehle befinden sich in den Dateien deploy-local-endpoint.sh
und deploy-managed-online-endpoint.sh
im Verzeichnis cli
, und die YAML-Konfigurationsdateien finden Sie im Unterverzeichnis endpoints/online/managed/sample/
.
Hinweis
Die YAML-Konfigurationsdateien für Kubernetes-Onlineendpunkte befinden sich im Unterverzeichnis endpoints/online/kubernetes/
.
Definieren des Endpunkts
Um einen Endpunkt zu definieren, müssen Sie folgendes angeben:
- Endpunktname: Der Name des Endpunkts. Er muss in der Azure-Region eindeutig sein. Weitere Informationen zu den Benennungsregeln finden Sie unter Grenzwerte für verwaltete Onlineendpunkte.
- Authentifizierungsmodus: Die Authentifizierungsmethode für den Endpunkt. Wählen Sie zwischen schlüsselbasierter Authentifizierung und tokenbasierter Azure Machine Learning-Authentifizierung. Ein Schlüssel läuft nicht ab, ein Token dagegen schon. Weitere Informationen zur Authentifizierung finden Sie unter Authentifizieren bei einem Onlineendpunkt.
- Optional können Sie eine Beschreibung und Tags zu Ihrem Endpunkt hinzufügen.
Festlegen eines Endpunktnamens
Führen Sie den folgenden Befehl aus (ersetzen Sie YOUR_ENDPOINT_NAME
durch einen eindeutigen Namen), um einen Endpunktnamen festzulegen.
Führen Sie für Linux diesen Befehl aus:
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Konfigurieren des Endpunkts
Der folgende Codeausschnitt zeigt die Datei endpoints/online/managed/sample/endpoint.yml:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
Die Referenz für das YAML-Endpunktformat wird in der folgenden Tabelle beschrieben. Eine Anleitung zum Angeben dieser Attribute finden Sie in der YAML-Referenz für Onlineendpunkte. Informationen zu Grenzwerten im Zusammenhang mit verwalteten Endpunkten finden Sie unter Verwalten und Erhöhen von Kontingenten für Ressourcen mit Azure Machine Learning.
Key | BESCHREIBUNG |
---|---|
$schema |
(Optional) Das YAML-Schema. Sie können das Schema aus dem vorherigen Codeschnipsel in einem Browser anzeigen, um sich alle verfügbaren Optionen in der YAML-Datei anzusehen. |
name |
Der Name des Endpunkts. |
auth_mode |
Verwenden Sie key für schlüsselbasierte Authentifizierung. Verwenden Sie aml_token für die tokenbasierte Azure Machine Learning-Authentifizierung. Verwenden Sie den Befehl az ml online-endpoint get-credentials , um das neueste Token abzurufen. |
Definieren der Bereitstellung
Eine Einrichtung ist ein Satz von Ressourcen, die für das Hosting des Modells erforderlich sind, das die eigentliche Inferenz durchführt. Um ein Modell bereitzustellen, müssen Sie über Folgendes verfügen:
- Modelldateien (oder Name und Version eines Modells, das bereits in Ihrem Arbeitsbereich registriert ist). In diesem Beispiel verwenden wir ein scikit-learn-Modell, das Regressionen durchführt.
- Ein Bewertungsskript, d. h. Code, der das Modell für eine gegebene Eingabeanforderung ausführt. Das Bewertungsskript empfängt an einen bereitgestellten Webdienst übermittelte Daten und übergibt sie an das Modell. Anschließend führt das Skript das Modell aus und gibt dessen Antwort an den Client zurück. Das Bewertungsskript ist modellspezifisch und muss die Daten verstehen, die das Modell als Eingabe erwartet und als Ausgabe zurückgibt. In diesem Beispiel wird die Datei score.py verwendet.
- Eine Umgebung, in der Ihr Modell ausgeführt wird. Die Umgebung kann ein Docker-Image mit Conda-Abhängigkeiten oder ein Dockerfile sein.
- Einstellungen zum Angeben des Instanztyps und der Skalierungskapazität.
In der folgenden Tabelle sind die Schlüsselattribute dieser Bereitstellung beschrieben:
Attribut | BESCHREIBUNG |
---|---|
Name | Der Name der Bereitstellung |
Endpunktname | Der Name des Endpunkts, unter dem die Bereitstellung erstellt werden soll. |
Modell | Das für die Bereitstellung zu verwendende Modell. Dieser Wert kann entweder ein Verweis auf ein vorhandenes versioniertes Modell im Arbeitsbereich oder eine Inline-Modellspezifikation sein. |
Codepfad | Der Pfad zu dem Verzeichnis in der lokalen Entwicklungsumgebung, das den gesamten Python-Quellcode für die Bewertung des Modells enthält. Sie können geschachtelte Verzeichnisse und Pakete verwenden. |
„Scoring script“ (Bewertungsskript) | Der Relativer Pfad zur Bewertungsdatei im Quellcodeverzeichnis. Dieser Python-Code muss über eine init() - und eine run() -Funktion verfügen. Die Funktion init() wird aufgerufen, nachdem das Modell erstellt oder aktualisiert wurde. (Sie kann verwendet werden, um das Modell z. B. im Arbeitsspeicher zwischenzuspeichern.) Die Funktion run() wird bei jedem Aufruf des Endpunkts aufgerufen, um die tatsächliche Bewertung und Vorhersage auszuführen. |
Environment | Die Umgebung zum Hosten des Modells und des Codes. Dieser Wert kann entweder ein Verweis auf eine vorhandene versionierte Umgebung im Arbeitsbereich oder eine Inline-Umgebungsspezifikation sein. |
Instanztyp | Die VM-Größe, die für die Bereitstellung verwendet werden soll. Eine Liste der unterstützten Größen finden Sie unter SKU-Liste für verwaltete Onlineendpunkte. |
Anzahl von Instanzen | Die Anzahl der Instanzen, die für die Bereitstellung verwendet werden sollen. Richten Sie den Wert nach der zu erwartenden Workload. Für Hochverfügbarkeit empfiehlt es sich, den Wert mindestens auf 3 festzulegen. Wir reservieren zusätzliche 20 % für die Durchführung von Upgrades. Weitere Informationen finden Sie unter Kontingente für verwaltete Onlineendpunkte. |
Hinweis
- Das Modell und das Container-Image (wie in Umgebung definiert) können jederzeit von der Bereitstellung erneut referenziert werden, wenn die Instanzen hinter der Bereitstellung Sicherheits-Patches und/oder andere Wiederherstellungsvorgänge durchlaufen. Wenn Sie ein registriertes Modell oder Container-Image in Azure Container Registry für die Bereitstellung verwendet und das Modell oder das Container-Image entfernt haben, können die Bereitstellungen, die sich auf diese Objekte stützen, fehlschlagen, wenn ein Reimaging stattfindet. Wenn Sie das Modell oder das Container-Image entfernt haben, stellen Sie sicher, dass die abhängigen Bereitstellungen mit dem alternativen Modell oder Container-Image neu erstellt oder aktualisiert werden.
- Die Containerregistrierung, auf die sich die Umgebung bezieht, kann nur dann privat sein, wenn die Endpunkt-Identität die Berechtigung hat, über die Azure Active Directory-Authentifizierung und Azure RBAC darauf zuzugreifen. Aus dem gleichen Grund werden andere private Docker-Registrierungen als Azure Container Registry nicht unterstützt.
Konfigurieren einer Bereitstellung
Der folgende Codeschnipsel zeigt die Datei endpoints/online/managed/sample/blue-deployment.yml mit allen erforderlichen Eingaben zum Konfigurieren einer Bereitstellung:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
path: ../../model-1/model/
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yaml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
Hinweis
In der Datei blue-deployment.yml haben wir die folgenden Bereitstellungsattribute spezifiziert:
model
– In diesem Beispiel geben wir die Modelleigenschaften inline an mittels despath
. Modelldateien werden automatisch hochgeladen und mit einem automatisch generierten Namen registriert.environment
– In diesem Beispiel verfügen wir über Inlinedefinitionen, die denpath
einschließen. Wir verwendenenvironment.docker.image
für das Image. Dieconda_file
-Abhängigkeiten werden zusätzlich zum Image installiert.
Während der Bereitstellung werden die lokalen Dateien wie die Python-Quelle für das Bewertungsmodell aus der Entwicklungsumgebung hochgeladen.
Weitere Informationen zum YAML-Schema finden Sie in der YAML-Referenz für Onlineendpunkte.
Hinweis
So verwenden Sie Kubernetes anstelle von verwalteten Endpunkten als Computeziel
- Erstellen Sie Ihren Kubernetes-Cluster, und fügen Sie ihn mithilfe von Azure Machine Learning Studio als Computeziel an Ihren Azure Machine Learning-Arbeitsbereich an.
- Verwenden Sie den YAML-Endpunktcode, um Kubernetes anstelle des verwalteten YAML-Endpunktcodes als Ziel zu verwenden. Sie müssen den YAML-Code bearbeiten, um den Wert von
target
in den Namen Ihres registrierten Computeziels zu ändern. Sie können diese deployment.yaml verwenden, die zusätzliche Eigenschaften aufweist, die für die Kubernetes-Bereitstellung gelten.
Alle Befehle, die in diesem Artikel verwendet werden (mit Ausnahme der optionalen SLA-Überwachung und der Azure Log Analytics-Integration), können entweder mit verwalteten Endpunkten oder mit Kubernetes-Endpunkten verwendet werden.
Separates Registrieren von Modell und Umgebung
In diesem Beispiel geben wir die path
Inline -Datei (aus der Dateien hochgeladen werden) an. Die CLI lädt die Dateien automatisch hoch und registriert das Modell und die Umgebung. Als bewährte Methode für die Produktion sollten Sie das Modell und die Umgebung registrieren und den registrierten Namen sowie die Version im YAML-Code separat angeben. Verwenden Sie das Format model: azureml:my-model:1
oder environment: azureml:my-env:1
.
Zur Registrierung können Sie die YAML-Definitionen von model
und environment
in separate YAML-Dateien extrahieren und die Befehle az ml model create
und az ml environment create
verwenden. Führen Sie az ml model create -h
und az ml environment create -h
aus, um mehr über diese Befehle zu erfahren.
Weitere Informationen zum Registrieren Ihres Modells als Ressource finden Sie unter Registrieren Ihres Modells als Ressource in Machine Learning mithilfe der CLI. Weitere Informationen zum Erstellen einer Umgebung finden Sie im Artikel „Verwalten von Azure Machine Learning-Umgebungen mit Befehlszeilenschnittstelle und SDK (v2)“ unter Erstellen einer Umgebung.
Verwenden verschiedener CPU- und GPU-Instanztypen und -images
Die vorherige Definition in der Datei blue-deployment.yml verwendet eine universelle Instanz vom Typ Standard_DS3_v2
und ein Nicht-GPU-Docker-Image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
. Für GPU-Compute wählen Sie eine GPU-Computetyp-SKU und ein GPU-Docker-Image aus.
Die unterstützten universellen und GPU-Instanztypen finden Sie unter Unterstützte VM-SKUs für verwaltete Onlineendpunkte. Eine Liste der CPU- und GPU-Basisimages von Azure Machine Learning finden Sie unter Azure Machine Learning-Basisimages.
Hinweis
Um Kubernetes anstelle von verwalteten Endpunkten als Computeziel zu verwenden, lesen Sie Einführung in das Kubernetes-Computeziel.
Verwenden mehrerer Modelle in einer Bereitstellung
Derzeit können Sie nur ein Modell pro Bereitstellung in der Bereitstellungsdefinition angeben, wenn Sie die Azure CLI, das Python-SDK oder eines der anderen Clienttools verwenden.
Um mehrere Modelle in einer Bereitstellung zu verwenden, registrieren Sie einen Modellordner, der alle Modelle als Dateien oder Unterverzeichnisse enthält. Verwenden Sie in Ihrem Bewertungsskript die Umgebungsvariable AZUREML_MODEL_DIR
, um den Pfad zum Stammverzeichnis des Modells zu ermitteln. Die zugrunde liegende Verzeichnisstruktur wird beibehalten. Ein Beispiel für die Bereitstellung mehrerer Modelle in einer Bereitstellung finden Sie unter Bereitstellen mehrerer Modelle in einer Bereitstellung (CLI-Beispiel) und Bereitstellen mehrerer Modelle in einer Bereitstellung (SDK-Beispiel).
Tipp
Wenn Sie mehr als 1.500 Dateien registrieren müssen, könnten Sie beim Registrieren des Modells, die Dateien oder Unterverzeichnisse als „.tar.gz“ komprimieren. Um die Modelle zu nutzen, können Sie die Dateien oder Unterverzeichnisse in der Funktion „init()“ aus dem Bewertungsskript dekomprimieren. Wenn Sie das Modell registrieren, legen Sie alternativ die azureml.unpack
-Eigenschaft auf True
fest, was die automatische Dekomprimierung zulässt. In jedem Fall erfolgt die Dekomprimierung einmal in der Initialisierungsphase.
Grundlegendes zum Bewertungsskript
Tipp
Das Format des Bewertungsskripts für Onlineendpunkte entspricht dem Format, das in der vorherigen Version der CLI und im Python SDK verwendet wurde.
Wie bereits erwähnt, muss das in code_configuration.scoring_script
angegebene Bewertungsskript über eine init()
-Funktion und eine run()
-Funktion verfügen.
In diesem Beispiel wird die Datei score.py verwendet: score.py
import os
import logging
import json
import numpy
import joblib
def init():
"""
This function is called when the container is initialized/started, typically after create/update of the deployment.
You can write the logic here to perform init operations like caching the model in memory
"""
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment.
# It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
# Please provide your model's folder name if there is one
model_path = os.path.join(
os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
)
# deserialize the model file back into a sklearn model
model = joblib.load(model_path)
logging.info("Init complete")
def run(raw_data):
"""
This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
In the example we extract the data from the json input and call the scikit-learn model's predict()
method and return the result back
"""
logging.info("model 1: request received")
data = json.loads(raw_data)["data"]
data = numpy.array(data)
result = model.predict(data)
logging.info("Request processed")
return result.tolist()
Die init()
-Funktion wird aufgerufen, wenn der Container initialisiert oder gestartet wird. Die Initialisierung erfolgt in der Regel kurz nach dem Erstellen oder Aktualisieren der Bereitstellung. Die init
-Funktion ist der Ort, um Logik für globale Initialisierungsvorgänge wie das Zwischenspeichern des Modells im Arbeitsspeicher zu schreiben (wie wir es in diesem Beispiel tun).
Die run()
-Funktion wird für jeden Aufruf des Endpunkts aufgerufen und führt die tatsächliche Bewertung und Vorhersage aus. In diesem Beispiel werden wir die Daten aus der JSON-Eingabe extrahieren, die predict()
-Methode des scikit-learn-Modells aufrufen und dann das Ergebnis zurückgeben.
Lokales Bereitstellen und Debuggen mithilfe von lokalen Endpunkten
Wir empfehlen dringend, dass Sie Ihren Endpunkt lokal testen, indem Sie Ihren Code und Ihre Konfiguration validieren und debuggen, bevor Sie ihn in Azure bereitstellen. Die Azure CLI und das Python-SDK unterstützen lokale Endpunkte und Bereitstellungen, während Azure Machine Learning Studio und ARM-Vorlagen dies nicht tun.
Für die lokale Bereitstellung muss die Docker-Engine installiert sein und ausgeführt werden. Die Docker-Engine wird in der Regel gestartet, wenn der Computer gestartet wird. Wenn dies nicht der Fall ist, können Sie die Problembehandlung für die Docker-Engine durchführen.
Tipp
Sie können das Python-Paket von Azure Machine Learning für HTTP-Rückschlussserver verwenden, um Ihr Bewertungsskript lokal und ohne Docker-Engine zu debuggen. Das Debuggen mit dem Rückschlussserver hilft beim Debuggen des Bewertungsskripts vor der Bereitstellung auf lokalen Endpunkten, sodass Sie beim Debuggen nicht von der Konfiguration der Bereitstellungscontainer abhängig sind.
Lokale Endpunkte haben die folgenden Einschränkungen:
- Sie unterstützen keine Datenverkehrsregeln, Authentifizierung oder Testeinstellungen.
- Sie unterstützen nur eine Bereitstellung pro Endpunkt.
- Sie unterstützen nur lokale Modelldateien. Wenn Sie registrierte Modelle testen wollen, laden Sie diese zuerst mithilfe der CLI oder des SDK herunter, und verwenden Sie dann
path
in der Bereitstellungsdefinition, um auf den übergeordneten Ordner zu verweisen.
Weitere Informationen zum lokalen Debuggen von Onlineendpunkten vor der Bereitstellung in Azure finden Sie unter Lokales Debuggen von Onlineendpunkten in Visual Studio Code.
Lokales Bereitstellen des Modells
Erstellen Sie zunächst einen Endpunkt. Optional können Sie für einen lokalen Endpunkt diesen Schritt überspringen und die Bereitstellung (nächster Schritt) direkt erstellen, wodurch wiederum die erforderlichen Metadaten erstellt werden. Die lokale Bereitstellung von Modellen ist für Entwicklungs- und Testzwecke nützlich.
az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Erstellen Sie nun eine Bereitstellung mit dem Namen blue
unter dem Endpunkt.
az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
Das --local
-Flag weist die CLI an, den Endpunkt in der Docker-Umgebung bereitzustellen.
Tipp
Verwenden Sie Visual Studio Code, um Ihre Endpunkte lokal zu testen und zu debuggen. Weitere Informationen finden Sie unter Lokales Debuggen von Onlineendpunkten in Visual Studio Code.
Überprüfen Sie, ob die lokale Bereitstellung erfolgreich war.
Überprüfen Sie den Status, um festzustellen, ob das Modell ohne Fehler bereitgestellt wurde:
az ml online-endpoint show -n $ENDPOINT_NAME --local
Die Ausgabe sollte in etwa dem folgenden JSON-Code entsprechen. Der Jointyp (provisioning_state
) lautet Succeeded
.
{
"auth_mode": "key",
"location": "local",
"name": "docs-endpoint",
"properties": {},
"provisioning_state": "Succeeded",
"scoring_uri": "http://localhost:49158/score",
"tags": {},
"traffic": {}
}
Die folgende Tabelle enthält die möglichen Werte für provisioning_state
:
State | BESCHREIBUNG |
---|---|
Wird erstellt | Die Ressource wird erstellt. |
Wird aktualisiert | Die Ressource wird aktualisiert. |
Wird gelöscht. | Die Ressource wird gelöscht. |
Erfolgreich | Der Vorgang zum Erstellen/Aktualisieren war erfolgreich. |
Fehler | Fehler beim Vorgang zum Erstellen/Aktualisieren/Löschen. |
Aufrufen des lokalen Endpunkts zum Bewerten von Daten mit Ihrem Modell
Rufen Sie den Endpunkt auf, um das Modell mithilfe des praktischen Befehls invoke
und der Übergabe von in einer JSON-Datei gespeicherten Abfrageparametern zu bewerten:
az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Wenn Sie einen REST-Client (z. B. curl) verwenden möchten, müssen Sie über den Bewertungs-URI verfügen. Führen Sie az ml online-endpoint show --local -n $ENDPOINT_NAME
aus, um den Bewertungs-URI abzurufen. Suchen Sie in den zurückgegebenen Daten das Attribut scoring_uri
. Curl-basierte Beispielbefehle sind weiter später in diesem Dokument verfügbar.
Überprüfen der Protokolle hinsichtlich der Ausgaben des Aufrufvorgangs
In der score.py-Beispieldatei protokolliert die run()
-Methode einige Ausgaben in der Konsole.
Sie können diese Ausgabe mit dem Befehl get-logs
anzeigen:
az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME
Bereitstellen Ihres Onlineendpunkts in Azure
Stellen Sie als nächstes Ihren Onlineendpunkt in Azure bereit.
In Azure bereitstellen
Führen Sie den folgenden Code aus, um den Endpunkt in der Cloud zu erstellen:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Führen Sie den folgenden Code aus, um die Bereitstellung mit dem Namen blue
unter dem Endpunkt zu erstellen:
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
Diese Bereitstellung kann bis zu 15 Minuten dauern, je nachdem, ob die zugrunde liegende Umgebung bzw. das zugrunde liegende Image zum ersten Mal erstellt wird. Nachfolgende Bereitstellungen, die dieselbe Umgebung verwenden, werden schneller abgeschlossen.
Tipp
- Wenn Sie ihre CLI-Konsole nicht blockieren möchten, können Sie dem Befehl das Flag
--no-wait
hinzufügen. Dadurch wird jedoch die interaktive Anzeige des Bereitstellungsstatus nicht mehr angezeigt.
Wichtig
Das Flag --all-traffic
im obigen az ml online-deployment create
ordnet 100 % des Endpunktdatenverkehrs der neu erstellten blauen Bereitstellung zu. Obwohl dies für Entwicklungs- und Testzwecke hilfreich ist, sollten Sie für die Produktion den Datenverkehr zur neuen Bereitstellung über einen expliziten Befehl öffnen. Beispiel: az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"
.
Tipp
- Verwenden Sie die Problembehandlung bei der Bereitstellung und Bewertung von Onlineendpunkten, um Fehler zu debuggen.
Überprüfen des Status des Endpunkts
Der Befehl show
enthält Informationen in provisioning_state
für den Endpunkt und die Bereitstellung:
az ml online-endpoint show -n $ENDPOINT_NAME
Sie können alle Endpunkte im Arbeitsbereich in einem Tabellenformat mit dem Befehl list
auflisten:
az ml online-endpoint list --output table
Überprüfen des Status der Onlinebereitstellung
Überprüfen Sie die Protokolle, um zu prüfen, ob das Modell ohne Fehler bereitgestellt wurde.
Verwenden Sie den folgenden CLI-Befehl, um die Protokollausgabe für einen Container anzuzeigen:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Standardmäßig werden Protokolle per Pull vom Rückschlussservercontainer abgerufen. Um Protokolle aus dem Container für den Speicherinitialisierer anzuzeigen, fügen Sie das --container storage-initializer
-Flag hinzu. Weitere Informationen zu Bereitstellungsprotokollen finden Sie unter Abrufen von Containerprotokollen.
Aufrufen des Endpunkts zum Bewerten von Daten mit Ihrem Modell
Sie können entweder den invoke
-Befehl oder einen REST-Client Ihrer Wahl verwenden, um den Endpunkt aufzurufen und einige Daten zu bewerten:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Das folgende Beispiel zeigt, wie Sie den Schlüssel für die Authentifizierung beim Endpunkt erhalten:
Tipp
Sie können steuern, welche Azure Active Directory-Sicherheitsprinzipale den Authentifizierungsschlüssel abrufen können, indem Sie sie einer benutzerdefinierten Rolle zuweisen, die Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action
und Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action
zulässt. Weitere Informationen finden Sie unter Zugriff auf einen Azure Machine Learning-Arbeitsbereich verwalten.
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
Verwenden Sie als Nächstes curl, um Daten zu bewerten.
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json
Beachten Sie, dass wir die Befehle show
und get-credentials
verwenden, um die Anmeldeinformationen für die Authentifizierung zu erhalten. Beachten Sie zudem, dass wir das Flag --query
verwenden, um die Attribute auf die erforderlichen Angaben zu beschränken. Weitere Informationen zu --query
finden Sie unter Abfragen der Azure CLI-Befehlsausgabe.
Führen Sie get-logs
erneut aus, um die Aufrufprotokolle anzuzeigen.
Informationen zur Authentifizierung mithilfe eines Tokens finden Sie unter Authentifizieren bei Onlineendpunkten.
(Optional) Aktualisieren der Bereitstellung
Wenn Sie den Code, das Modell oder die Umgebung aktualisieren möchten, aktualisieren Sie die YAML-Datei und führen Sie dann den Befehl az ml online-endpoint update
aus.
Hinweis
Wenn Sie die Anzahl der Instanzen (zum Skalieren Ihrer Bereitstellung) zusammen mit anderen Modelleinstellungen (z. B. Code, Modell oder Umgebung) in einem einzigen update
-Befehl aktualisieren, wird der Skalierungsvorgang zuerst ausgeführt, dann werden die anderen Aktualisierungen angewendet. Es eine bewährte Methode, diese Vorgänge in einer Produktionsumgebung separat durchzuführen.
Informationen zur Funktionsweise von update
:
Öffnen Sie die Datei online/model-1/onlinescoring/score.py.
Ändern Sie die letzte Zeile der
init()
-Funktion: Fügen Sie nachlogging.info("Init complete")
einfachlogging.info("Updated successfully")
hinzu.Speichern Sie die Datei .
Führen Sie den folgenden Befehl aus:
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
Hinweis
Das Aktualisieren mithilfe von YAML ist deklarativ. Dies bedeutet, dass Änderungen am YAML-Code in den zugrunde liegenden Azure Resource Manager-Ressourcen (Endpunkte und Bereitstellungen) widergespiegelt werden. Ein deklarativer Ansatz nutzt GitOps: Alle Änderungen an Endpunkten bzw. Bereitstellungen (auch
instance_count
) erfolgen über den YAML-Code.Tipp
- Sie können generische Aktualisierungsparameter, z. B. den
--set
-Parameter, mit dem CLI-Befehlupdate
verwenden, um Attribute in Ihrer YAML-Datei außer Kraft zu setzen oder bestimmte Attribute festzulegen, ohne sie in der YAML-Datei zu übergeben. Die Verwendung von--set
für einzelne Attribute ist besonders in Entwicklungs- und Testszenarien nützlich. Sie können das Flag--set instance_count=2
verwenden, um z. B. deninstance_count
-Wert für die erste Bereitstellung hochzuskalieren. Da die YAML-Datei jedoch nicht aktualisiert wird, unterstützt dieses Verfahren GitOps nicht. - Die Angabe der YAML-Datei ist NICHT obligatorisch. Wenn Sie beispielsweise unterschiedliche Parallelitätseinstellungen für eine bestimmte Bereitstellung testen möchten, können Sie zum Beispiel
az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4
versuchen. Dadurch werden alle vorhandenen Konfigurationen beibehalten und nur die angegebenen Parameter aktualisiert.
- Sie können generische Aktualisierungsparameter, z. B. den
Da Sie die Funktion
init()
geändert haben, die ausgeführt wird, wenn der Endpunkt erstellt oder aktualisiert wird, wird sich die MeldungUpdated successfully
in den Protokollen befinden. Rufen Sie die Protokolle ab, indem Sie Folgendes ausführen:az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Der Befehl update
funktioniert auch mit lokalen Bereitstellungen. Verwenden Sie denselben az ml online-deployment update
-Befehl mit dem Flag --local
.
Hinweis
Das vorherige Update für die Bereitstellung ist ein Beispiel für ein direktes rollierendes Update.
- Für einen verwalteten Onlineendpunkt wird die Bereitstellung auf die neue Konfiguration mit jeweils 20 % der Knoten aktualisiert. Das heißt, wenn die Bereitstellung über 10 Knoten verfügt, werden jeweils 2 Knoten aktualisiert.
- Bei einem Kubernetes-Onlineendpunkt wird das System iterativ eine neue Bereitstellungsinstanz mit der neuen Konfiguration erstellen und die alte löschen.
- Für die Verwendung in der Produktion sollten Sie die Blau-Grün-Bereitstellung in Betracht ziehen, die eine sicherere Alternative zum Aktualisieren eines Webdiensts bietet.
(Optional) Konfigurieren der automatischen Skalierung
Die automatische Skalierung führt automatisch die richtige Menge an Ressourcen aus, um die Last für Ihre Anwendung zu bewältigen. Verwaltete Onlineendpunkte unterstützen die automatische Skalierung durch die Integration in die Funktion für die automatische Skalierung vom Azure Monitor. Informationen zum Konfigurieren der automatischen Skalierung finden Sie unter Automatisches Skalieren von Onlineendpunkten.
(Optional) Überwachen der SLA mit Azure Monitor
Zum Anzeigen von Metriken und Festlegen von Warnungen auf der Grundlage Ihrer SLA führen Sie die Schritte aus, die unter Überwachen von Onlineendpunkten beschrieben sind.
(Optional) Integrieren mit Log Analytics
Der Befehl get-logs
für die CLI oder die Methode get_logs
für das SDK stellt nur die letzten paar hundert Protokollzeilen aus einer automatisch ausgewählten Instanz zur Verfügung. Log Analytics bietet jedoch eine Möglichkeit, Protokolle dauerhaft zu speichern und zu analysieren. Weitere Informationen zur Verwendung der Protokollierung finden Sie unter Überwachen von Onlineendpunkten.
Löschen des Endpunkts und der Bereitstellung
Wenn Sie die Bereitstellung nicht verwenden, sollten Sie sie durch Ausführen des folgenden Codes löschen (der Endpunkt und alle zugrunde liegenden Bereitstellungen werden gelöscht):
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Nächste Schritte
- Sicherer Rollout für Onlineendpunkte
- Bereitstellen von Modellen mit REST
- Automatisches Skalieren verwalteter Onlineendpunkte
- Überwachen verwalteter Onlineendpunkte
- Zugriff auf Azure-Ressourcen von einem Onlineendpunkt mit einer verwalteten Identität
- Problembehandlung bei der Onlineendpunktbereitstellung
- Aktivieren der Netzwerkisolation für verwaltete Onlineendpunkte
- Anzeigen der Kosten für einen verwalteten Azure Machine Learning-Onlineendpunkt
- Verwalten und Erhöhen der Kontingente für Ressourcen mit Azure Machine Learning
- Verwenden von Batchendpunkten für die Batchbewertung