Freigeben über


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. Anschließend stellen Sie das Modell in Azure bereit und testen es, zeigen die Bereitstellungsprotokolle an und überwachen die Vereinbarung zum Servicelevel (SLA). Am Ende dieses Artikels verfügen Sie über einen skalierbaren HTTPS/REST-Endpunkt, den Sie für die Echtzeit-Ableitung 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 den Unterschieden finden Sie unter Verwaltete Onlineendpunkte im Vergleich zu Kubernetes-Onlineendpunkten.

Mithilfe von verwalteten Onlineendpunkten können Sie Ihre Machine Learning-Modelle so bereitstellen, dass sie sofort einsatzbereit sind. Verwaltete Onlineendpunkte arbeiten mit leistungsstarken CPU- und GPU-Computern in Azure auf skalierbare, vollständig verwaltete Weise. Verwaltete Onlineendpunkte kümmern sich um die Bereitstellung, Skalierung, Sicherung und Überwachung Ihrer Modelle. Diese Unterstützung befreit Sie vom Aufwand beim Einrichten und Verwalten der zugrunde liegenden Infrastruktur.

Im Hauptbeispiel in diesem Artikel 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ÜR:Azure CLI ml-Erweiterung v2 (aktuell)

  • Die rollenbasierte Azure-Zugriffssteuerung (Azure RBAC) wird verwendet, um Zugriff auf Vorgänge in Azure Machine Learning zu gewähren. Für das Ausführen der Schritte in diesem Artikel muss Ihrem Benutzerkonto entweder die Rolle "Eigentümer" oder "Mitglied" für den Azure Machine Learning-Arbeitsbereich zugewiesen werden, oder eine benutzerdefinierte Rolle muss dies ermöglichen Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Wenn Sie Azure Machine Learning Studio zum Erstellen und Verwalten von Onlineendpunkten oder Bereitstellungen verwenden, benötigen Sie die zusätzliche Berechtigung Microsoft.Resources/deployments/write vom Ressourcengruppenbesitzer. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf Azure Machine Learning-Arbeitsbereiche.

  • (Optional) Um lokal bereitzustellen, müssen Sie das Docker-Modul auf Ihrem lokalen Computer installieren. Diese Option wird dringend empfohlen , wodurch das Debuggen von Problemen erleichtert wird.

  • Stellen Sie sicher, dass genügend VM-Kontingent für die Bereitstellung zugewiesen ist. Azure Machine Learning reserviert 20% Ihrer Computeressourcen zum Ausführen von Upgrades in einigen VM-Versionen. Wenn Sie beispielsweise 10 Instanzen in einer Bereitstellung anfordern, müssen Sie für jede Anzahl von Kernen für die VM-Version ein Kontingent von 12 haben. Wenn Sie diese zusätzlichen Computeressourcen nicht bereitstellen, tritt ein Fehler auf. Einige VM-Versionen sind von der zusätzlichen Kontingentreservierung ausgenommen. Weitere Informationen zur Kontingentzuweisung finden Sie unter Kontingentzuweisung für VMs für die Bereitstellung.

  • Alternativ können Sie das Kontingent aus dem freigegebenen Azure Machine Learning-Kontingentpool für einen begrenzten Zeitraum verwenden. Azure Machine Learning bietet einen Pool freigegebener Kontingente, aus dem Benutzer in verschiedenen Regionen auf ein Kontingent zugreifen können, um Tests für eine begrenzte Zeit durchzuführen (abhängig von der Verfügbarkeit). Wenn Sie das Studio verwenden, um Llama-2-, Phi-, Nemotron-, Mistral-, Dolly- oder Deci-DeciLM-Modelle (aus dem Modellkatalog) auf einem verwalteten Onlineendpunkt bereitzustellen, ermöglicht Azure Machine Learning Ihnen für eine kurze Zeit den Zugriff auf diesen freigegebenen Kontingentpool, um Tests durchzuführen. Weitere Informationen zum freigegebenen Kontingentpool finden Sie unter freigegebenes Azure Machine Learning-Kontingent.

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

Um diesem Artikel zu folgen, klonen Sie zuerst das azureml-examples-Repository, und wechseln Sie dann in das azureml-examples/cli-Verzeichnis des Repositorys.

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli

Verwenden Sie --depth 1, um nur den neuesten Commit in das Repository zu klonen, wodurch die Zeit für den Abschluss des Vorgangs verkürzt wird.

Die Befehle in diesem Lernprogramm befinden sich in den Dateien deploy-local-endpoint.sh und deploy-managed-online-endpoint.sh im Cli-Verzeichnis . Die YAML-Konfigurationsdateien befinden sich im Unterverzeichnis endpoints/online/managed/sample/.

Hinweis

Die YAML-Konfigurationsdateien für Kubernetes-Onlineendpunkte befinden sich in den Endpunkten/online/kubernetes/ subdirectory.

Definieren des Endpunkts

Um einen Onlineendpunkt zu definieren, geben Sie den Endpunktnamen und den Authentifizierungsmodus an. Weitere Informationen zu verwalteten Onlineendpunkten finden Sie unter "Online-Endpunkte".

Festlegen eines Endpunktnamens

Führen Sie den folgenden Befehl aus, um einen Endpunktnamen festzulegen. Ersetzen Sie <YOUR_ENDPOINT_NAME> durch einen Namen, der innerhalb der Azure-Region eindeutig ist. Weitere Informationen zu den Benennungsregeln finden Sie unter Endpunktgrenzwerte.

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

Konfigurieren des Endpunkts

Der folgende Ausschnitt 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. Informationen zum Angeben dieser Attribute finden Sie in der YaML-Referenz für den Onlineendpunkt. Informationen zu Grenzwerten im Zusammenhang mit verwalteten Endpunkten finden Sie unter Azure Machine Learning-Onlineendpunkte und Batchendpunkte.

Schlüssel 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 aad_token für die tokenbasierte Microsoft Entra-Authentifizierung (Preview).
Weitere Informationen zur Authentifizierung finden Sie unter Authentifizieren von Clients für Onlineendpunkte.

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. In diesem Beispiel stellen Sie ein scikit-learn Modell bereit, das Regression durchführt und ein Bewertungsskript score.py verwendet, um das Modell für eine bestimmte Eingabeanforderung auszuführen.

Informationen zu den wichtigsten Attributen einer Bereitstellung finden Sie unter Onlinebereitstellungen.

Konfigurieren einer Bereitstellung

Ihre Bereitstellungskonfiguration verwendet den Speicherort des Modells, das Sie bereitstellen möchten.

Der folgende Ausschnitt zeigt die Datei endpoints/online/managed/sample/blue-deployment.yml mit allen notwendigen Eingabedaten, um eine Bereitstellung zu konfigurieren.

$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-ubuntu22.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

Die datei blue-deployment.yml gibt die folgenden Bereitstellungsattribute an:

  • model: Gibt die Modelleigenschaften inline mithilfe des path Parameters an (wo Dateien hochgeladen werden sollen). Die CLI lädt die Modelldateien automatisch hoch und registriert das Modell mit einem automatisch generierten Namen.
  • environment: Verwendet Inlinedefinitionen, woher Dateien hochgeladen werden sollen. Die CLI lädt die Datei "conda.yaml " automatisch hoch und registriert die Umgebung. Später verwendet die Bereitstellung zum Erstellen der Umgebung den Parameter image für das Basisimage. In diesem Beispiel ist es mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest. Die conda_file Abhängigkeiten werden über dem Basisimage installiert.
  • code_configuration: Lädt die lokalen Dateien, z. B. die Python-Quelle für das Bewertungsmodell, aus der Entwicklungsumgebung während der Bereitstellung hoch.

Weitere Informationen zum YAML-Schema finden Sie in der YaML-Referenz zum Onlineendpunkt.

Hinweis

So verwenden Sie Kubernetes-Endpunkte anstelle von verwalteten Onlineendpunkten als Computeziel:

  1. 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.
  2. Verwenden Sie den Endpunkt YAML , um Kubernetes anstelle des verwalteten Endpunkts YAML als Ziel zu verwenden. Sie müssen den YAML-Code bearbeiten, um den Wert von compute in den Namen Ihres registrierten Computeziels zu ändern. Sie können diese deployment.yaml verwenden, die andere Eigenschaften enthält, die für eine Kubernetes-Bereitstellung gelten.

Alle Befehle, die in diesem Artikel für verwaltete Onlineendpunkte verwendet werden, gelten auch für Kubernetes-Endpunkte, mit Ausnahme der folgenden Funktionen, die nicht für Kubernetes-Endpunkte gelten:

Grundlegendes zum Bewertungsskript

Das Format des Bewertungsskripts für Onlineendpunkte entspricht dem Format, das in der vorherigen Version der CLI und im Python SDK verwendet wurde.

Das in code_configuration.scoring_script angegebene Bewertungsskript muss über eine init()-Funktion und eine run()-Funktion verfügen.

In diesem Beispiel wird die score.py Datei aus dem Repository verwendet, das Sie geklont oder zuvor heruntergeladen haben:

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 zum Schreiben von Logik für globale Initialisierungsvorgänge wie das Zwischenspeichern des Modells im Arbeitsspeicher (wie in dieser score.py Datei dargestellt).

Die run() Funktion wird jedes Mal aufgerufen, wenn der Endpunkt aufgerufen wird. Sie führt die tatsächliche Bewertung und Vorhersage durch. In dieser score.py Datei extrahiert die run() Funktion Daten aus einer JSON-Eingabe, ruft die Methode des predict() Scikit-Learn-Modells auf und gibt dann das Vorhersageergebnis zurück.

Lokales Bereitstellen und Debuggen mithilfe eines lokalen Endpunkts

Es wird dringend empfohlen , den Endpunkt lokal auszuführen, um Ihren Code und Ihre Konfiguration zu überprüfen und zu debuggen, bevor Sie sie in Azure bereitstellen. Das Azure CLI und Python SDK unterstützen lokale Endpunkte und Bereitstellungen, aber Azure Machine Learning Studio und ARM-Vorlagen sind nicht vorhanden.

Um lokal bereitzustellen, muss das Docker-Modul installiert 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.

Sie können das Azure Machine Learning-Ableitungs-HTTP-Server-Python-Paket verwenden, um Ihr Bewertungsskript lokal ohne Docker Engine zu debuggen. Das Debuggen mit dem Ableitungsserver hilft Ihnen beim Debuggen des Bewertungsskripts, bevor Sie es für lokale Endpunkte bereitstellen, sodass Sie debuggen können, ohne dass sie von den Bereitstellungscontainerkonfigurationen betroffen sind.

Weitere Informationen zum lokalen Debuggen von Onlineendpunkten vor der Bereitstellung in Azure finden Sie unter Online-Endpunktdebugging.

Lokales Bereitstellen des Modells

Erstellen Sie zuerst einen Endpunkt. Optional können Sie diesen Schritt für einen lokalen Endpunkt überspringen. Sie können die Bereitstellung direkt (nächster Schritt) 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 "Debuggen von Onlineendpunkten lokal in Visual Studio Code".

Überprüfen Sie, ob die lokale Bereitstellung erfolgreich war.

Überprüfen Sie den Bereitstellungsstatus, 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 provisioning_state Parameter ist 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:

Wert BESCHREIBUNG
Creating Die Ressource wird erstellt.
Updating Die Ressource wird aktualisiert.
Deleting Die Ressource wird gelöscht.
Succeeded Der Erstellungs- oder Aktualisierungsvorgang war erfolgreich.
Failed Fehler beim Erstellen, Aktualisieren oder Löschen.

Aufrufen des lokalen Endpunkts zum Bewerten von Daten mit Ihrem Modell

Rufen Sie den Endpunkt auf, um das Modell mithilfe des 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.

Überprüfen der Protokolle hinsichtlich der Ausgaben des Aufrufvorgangs

Im Beispiel score.py Datei 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. Als bewährte Vorgehensweise für die Produktion wird empfohlen, das Modell und die Umgebung, die Sie in Ihrem Bereitstellungsprozess verwenden, zu registrieren.

Registrieren Ihres Modells und Ihrer Umgebung

Es wird empfohlen, Ihr Modell und Ihre Umgebung vor der Bereitstellung in Azure zu registrieren, damit Sie ihre registrierten Namen und Versionen während der Bereitstellung angeben können. Nachdem Sie Ihre Ressourcen registriert haben, können Sie sie wiederverwenden, ohne sie jedes Mal hochladen zu müssen, wenn Sie Bereitstellungen erstellen. Diese Praxis erhöht die Reproduzierbarkeit und Rückverfolgbarkeit.

Anders als bei der Bereitstellung in Azure können Sie bei der lokalen Bereitstellung keine registrierten Modelle und Umgebungen verwenden. Stattdessen verwendet die lokale Bereitstellung lokale Modelldateien und verwendet Umgebungen nur mit lokalen Dateien.

Für die Bereitstellung in Azure können Sie entweder lokale oder registrierte Ressourcen (Modelle und Umgebungen) verwenden. In diesem Abschnitt des Artikels werden für die Bereitstellung in Azure registrierte Ressourcen verwendet, aber Sie haben auch die Möglichkeit, stattdessen lokale Ressourcen zu verwenden. Ein Beispiel für eine Bereitstellungskonfiguration, die lokale Dateien hochlädt, die für die lokale Bereitstellung verwendet werden, finden Sie unter Konfigurieren einer Bereitstellung.

Um das Modell und die Umgebung zu registrieren, verwenden Sie das Formular model: azureml:my-model:1 oder environment: azureml:my-env:1.

Für die Registrierung können Sie die YAML-Definitionen von model und environment in separate YAML-Dateien im endpunkte/online/verwaltet/beispiel Ordner 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.

  1. Erstellen Sie eine YAML-Definition für das Modell. Benennen Sie die Datei model.yml:

    $schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
    name: my-model
    path: ../../model-1/model/
    
  2. Registrieren des Modells:

    az ml model create -n my-model -v 1 -f endpoints/online/managed/sample/model.yml
    
  3. Erstellen Sie eine YAML-Definition für die Umgebung. Benennen Sie die Datei environment.yml:

    $schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
    name: my-env
    image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
    conda_file: ../../model-1/environment/conda.yaml
    
  4. Registrieren Sie die Umgebung:

    az ml environment create -n my-env -v 1 -f endpoints/online/managed/sample/environment.yml
    

Weitere Informationen zum Registrieren Ihres Modells als Ressource finden Sie unter Registrieren eines Modells mithilfe der Azure CLI oder python SDK. Weitere Informationen zum Erstellen einer Umgebung finden Sie unter Erstellen einer benutzerdefinierten Umgebung.

Wichtig

Wenn Sie eine benutzerdefinierte Umgebung für Ihre Bereitstellung definieren, stellen Sie sicher, dass das azureml-inference-server-http Paket in der Conda-Datei enthalten ist. Dieses Paket ist unerlässlich, damit der Ableitungsserver ordnungsgemäß funktioniert. Wenn Sie mit der Erstellung Ihrer eigenen benutzerdefinierten Umgebung nicht vertraut sind, verwenden Sie eine unserer kuratierten Umgebungen, z. B. minimal-py-inference (für benutzerdefinierte Modelle, die mlflow nicht verwenden) oder mlflow-py-inference (für Modelle, die mlflow verwenden). Sie finden diese kuratierten Umgebungen auf der Registerkarte "Umgebungen " Ihrer Instanz von Azure Machine Learning Studio.

Konfigurieren einer Bereitstellung, die registrierte Ressourcen verwendet

Ihre Bereitstellungskonfiguration verwendet das registrierte Modell, das Sie bereitstellen möchten, und Ihre registrierte Umgebung.

Verwenden Sie die registrierten Ressourcen (Modell und Umgebung) in Ihrer Definition für die Bereitstellung. Der folgende Codeschnipsel zeigt die Datei endpoints/online/managed/sample/blue-deployment-with-registered-assets.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: azureml:my-model:1
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: azureml:my-env:1
instance_type: Standard_DS3_v2
instance_count: 1

Verwenden verschiedener CPU- und GPU-Instanztypen und -images

Sie können die CPU- oder GPU-Instanztypen und -Images in Ihrer Bereitstellungsdefinition sowohl für die lokale Bereitstellung als auch für die Bereitstellung in Azure angeben.

Ihre Bereitstellungsdefinition in der Datei blue-deployment-with-registered-assets.yml hat eine universelle Instanz vom Typ Standard_DS3_v2 und das Nicht-GPU-Docker-Image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest verwendet. Für GPU-Compute wählen Sie eine GPU-Computetypversion und ein GPU-Docker-Image aus.

Unterstützte allgemeine und GPU-Instanztypen finden Sie in der SKU-Liste verwalteter Onlineendpunkte. Eine Liste der CPU- und GPU-Basisimages von Azure Machine Learning finden Sie unter Azure Machine Learning-Basisimages.

Hinweis

Informationen zum Verwenden von Kubernetes anstelle von verwalteten Endpunkten als Computeziel finden Sie unter Einführung in kubernetes Computeziel.

Stellen Sie als nächstes Ihren Onlineendpunkt in Azure bereit.

In Azure bereitstellen

  1. Erstellen Sie den Endpunkt in der Azure-Cloud:

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  2. Erstellen Sie die Bereitstellung mit dem Namen blue unter dem Endpunkt:

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
    

    Die Bereitstellungserstellung 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 verarbeitet.

    Wenn Sie es vorziehen, Ihre CLI-Konsole nicht zu blockieren, können Sie das Flag --no-wait an den Befehl anhängen. Diese Option stoppt jedoch die interaktive Anzeige des Bereitstellungsstatus.

    Das Flag --all-traffic im Code az ml online-deployment create, der zum Erstellen der Bereitstellung verwendet wird, ordnet 100 % des Endpunktdatenverkehrs der neu erstellten blauen Bereitstellung zu. Die Verwendung dieses Flags ist für Entwicklungs- und Testzwecke hilfreich, aber für die Produktion sollten Sie den Datenverkehr über einen expliziten Befehl an die neue Bereitstellung weiterleiten. Verwenden Sie z. B. az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".

Informationen zum Debuggen von Fehlern in Ihrer Bereitstellung finden Sie unter "Problembehandlung bei Onlineendpunktbereitstellungen".

Überprüfen des Status des Onlineendpunkts

  1. Verwenden Sie den Befehl show, um Informationen für den Endpunkt und die Bereitstellung im provisioning_state anzuzeigen:

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  2. Listen Sie alle Endpunkte im Arbeitsbereich in einem Tabellenformat mit dem Befehl list auf:

    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

  1. Verwenden Sie entweder den Befehl invoke oder einen REST-Client Ihrer Wahl, 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
    
  2. Rufen Sie den Schlüssel ab, der für die Authentifizierung beim Endpunkt verwendet wird:

    Sie können steuern, welche Microsoft Entra-Sicherheitsprinzipale den Authentifizierungsschlüssel abrufen können, indem Sie diese einer benutzerdefinierten Rolle zuweisen, die Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action und Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action zulässt. Weitere Informationen zum Verwalten der Autorisierung für Arbeitsbereiche finden Sie unter Verwalten des Zugriffs auf einen Azure Machine Learning-Arbeitsbereich.

    ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
    
  3. Verwenden Sie 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 Sie die Befehle show und get-credentials verwenden, um die Authentifizierungsanmeldeinformationen abzurufen. Beachten Sie außerdem, dass Sie das --query Flag verwenden, um nur die attribute zu filtern, die erforderlich sind. Weitere Informationen zum --query Flag finden Sie unter Azure CLI-Befehlsausgabe abfragen.

  4. Führen Sie get-logs erneut aus, um die Aufrufprotokolle anzuzeigen.

(Optional) Aktualisieren der Bereitstellung

Wenn Sie den Code, das Modell oder die Umgebung aktualisieren möchten, aktualisieren Sie die YAML-Datei. Führen Sie anschließend den Befehl az ml online-endpoint update aus.

Wenn Sie die Instanzenanzahl (zum Skalieren der Bereitstellung) zusammen mit anderen Modelleinstellungen (z. B. Code, Modell oder Umgebung) in einem einzigen update Befehl aktualisieren, wird der Skalierungsvorgang zuerst ausgeführt. Die anderen Updates werden als Nächstes angewendet. Es eine bewährte Methode, diese Vorgänge in einer Produktionsumgebung separat durchzuführen.

Informationen zur Funktionsweise von update:

  1. Öffnen Sie die Datei online/model-1/onlinescoring/score.py.

  2. Ändern Sie die letzte Zeile der init()-Funktion: Fügen Sie nach logging.info("Init complete") einfach logging.info("Updated successfully") hinzu.

  3. Speichern Sie die Datei .

  4. Führen Sie den folgenden Befehl aus:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
    

    Das Aktualisieren mithilfe von YAML ist deklarativ. Das heißt, Änderungen im YAML werden in den zugrunde liegenden Ressourcen des Ressourcen-Managers (Endpunkte und Bereitstellungen) widergespiegelt. Ein deklarativer Ansatz erleichtert GitOps: Alle Änderungen an Endpunkten und Bereitstellungen (auch instance_count) durchlaufen yaML.

    Sie können generische Updateparameter wie den --set Parameter mit dem CLI-Befehl update verwenden, um Attribute in Ihrem YAML 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 instance_count verwenden, um z. B. den --set instance_count=2-Wert für die erste Bereitstellung hochzuskalieren. Da der YAML jedoch nicht aktualisiert wird, erleichtert diese Technik GitOps nicht.

    Die Angabe der YAML-Datei ist nicht obligatorisch. Wenn Sie z. B. unterschiedliche Parallelitätseinstellungen für eine bestimmte Bereitstellung testen möchten, können Sie etwa az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4versuchen. Dieser Ansatz behält alle vorhandenen Konfigurationen bei, aktualisiert jedoch nur die angegebenen Parameter.

  5. Da Sie die init() Funktion geändert haben, die beim Erstellen oder Aktualisieren des Endpunkts ausgeführt wird, wird die Meldung Updated successfully in den Protokollen angezeigt. 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 Update für die Bereitstellung in diesem Abschnitt 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 erstellt das System iterativ eine neue Bereitstellungsinstanz mit der neuen Konfiguration und löscht die alte.
  • Für die Produktionsverwendung sollten Sie die blaugrüne 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 Integration in das Feature "Automatische Skalierung von Azure Monitor". Informationen zum Konfigurieren der automatischen Skalierung finden Sie unter AutoScale Online-Endpunkte.

(Optional) Überwachen der SLA mit Azure Monitor

Um Metriken anzuzeigen und Warnungen basierend auf Ihrem SLA festzulegen, führen Sie die Schritte aus, die unter "Überwachen von Onlineendpunkten" beschrieben werden.

(Optional) Integrieren mit Log Analytics

Der get-logs Befehl für die CLI oder die get_logs Methode für das SDK stellt nur die letzten hundert Zeilen von Protokollen aus einer automatisch ausgewählten Instanz bereit. Log Analytics bietet jedoch eine Möglichkeit, Protokolle dauerhaft zu speichern und zu analysieren. Weitere Informationen zur Verwendung der Protokollierung finden Sie unter Verwenden von Protokollen.

Löschen des Endpunkts und der Bereitstellung

Verwenden Sie den folgenden Befehl, um den Endpunkt und alle zugrunde liegenden Bereitstellungen zu löschen:

az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait