Freigeben über


Bereitstellen von Modellen für die Bewertung in Batchendpunkten

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python-SDK azure-ai-ml v2 (aktuell)

Mithilfe von Batchendpunkten können Sie Modelle bereitstellen, die über große Datenmengen Rückschlüsse ausführen. Diese Endpunkte vereinfachen das Hosting von Modellen für die Batchbewertung, sodass Sie sich auf maschinelles Lernen anstelle der Infrastruktur konzentrieren können.

Verwenden Sie Batchendpunkte, um Modelle bereitzustellen, wenn:

  • Sie verwenden teure Modelle, die länger dauern, bis die Ableitung erfolgt.
  • Sie führen eine Ableitung über große Datenmengen aus, die in mehreren Dateien verteilt sind.
  • Sie benötigen keine geringe Latenz.
  • Sie nutzen die Parallelisierung.

In diesem Artikel wird gezeigt, wie Sie einen Batchendpunkt verwenden, um ein Modell für maschinelles Lernen bereitzustellen, das das klassische MNIST-Ziffernerkennungsproblem (Modified National Institute of Standards and Technology) löst. Das bereitgestellte Modell führt Batchinferenzen auf großen Datenmengen durch, z. B. Bilddateien. Der Prozess beginnt mit der Durchführung einer Batchbereitstellung eines in Torch erstellten Modells. Diese Bereitstellung wird zum Standard am Endpoint. Erstellen Sie später eine zweite Bereitstellung eines Modells, das mit TensorFlow (Keras) erstellt wurde, testen Sie die zweite Bereitstellung, und legen Sie es als Standardbereitstellung des Endpunkts fest.

Voraussetzungen

Stellen Sie vor dem Ausführen der Schritte in diesem Artikel sicher, dass Sie die folgenden Voraussetzungen erfüllt sind:

  • Ein Azure-Abonnement. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning aus.

  • Ein Azure Machine Learning-Arbeitsbereich. Wenn Sie keinen Arbeitsbereich haben, führen Sie die Schritte im Artikel Verwalten von Arbeitsbereichen aus, um einen Arbeitsbereich zu erstellen.

  • Um die folgenden Aufgaben auszuführen, müssen Sie im Arbeitsbereich über die folgenden Berechtigungen verfügen:

    • Verwenden Sie zum Erstellen/Verwalten von Batchendpunkten und Bereitstellungen die Rolle „Besitzer“ oder „Mitwirkender“ bzw. eine benutzerdefinierte Rolle, die Microsoft.MachineLearningServices/workspaces/batchEndpoints/* zulässt.

    • Verwenden Sie zum Erstellen von ARM-Bereitstellungen in der Ressourcengruppe des Arbeitsbereichs die Rolle „Besitzer“ oder „Mitwirkender“ bzw. eine benutzerdefinierte Rolle, die Microsoft.Resources/deployments/write in der Ressourcengruppe zulässt, in der der Arbeitsbereich bereitgestellt wird.

  • Für die Arbeit mit Azure Machine Learning müssen Sie die folgende Software installieren:

    GILT FÜRAzure CLI-ML-Erweiterung v2 (aktuell)

    Die Azure CLI und die ml-Erweiterung für Azure Machine Learning.

    az extension add -n ml
    

Klonen des Beispielrepositorys

Das Beispiel in diesem Artikel basiert auf Codebeispielen, die im Repository azureml-examples enthalten sind. Um die Befehle lokal auszuführen, ohne YAML und andere Dateien kopieren/einfügen zu müssen, klonen Sie zunächst das Repository, und ändern Sie dann die Verzeichnisse zum Ordner:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli/endpoints/batch/deploy-models/mnist-classifier

Vorbereiten Ihres Systems

Herstellen einer Verbindung mit Ihrem Arbeitsbereich

Stellen Sie zunächst eine Verbindung mit dem Azure Machine Learning-Arbeitsbereich her, in dem Sie arbeiten.

Wenn Sie die Standardeinstellungen für die Azure-Befehlszeilenschnittstelle noch nicht festgelegt haben, speichern Sie Ihre Standardeinstellungen. Führen Sie diesen Code aus, um zu vermeiden, dass Sie die Werte für Ihr Abonnement, den Arbeitsbereich, die Ressourcengruppe und den Standort mehrmals eingeben müssen.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Erstellen von Computeressourcen

Batchendpunkte werden in Computeclustern ausgeführt und unterstützen sowohl Azure Machine Learning-Computecluster (AmlCompute) als auch Kubernetes-Cluster. Cluster sind eine freigegebene Ressource, sodass ein Cluster eine oder mehrere Batchbereitstellungen hosten kann (zusammen mit anderen Workloads, falls gewünscht).

Erstellen Sie eine Computeressource mit dem Namen batch-cluster, wie im folgenden Code dargestellt. Passen Sie die Einstellungen nach Bedarf an und verweisen Sie mithilfe von azureml:<your-compute-name> auf Ihr Computersystem.

az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5

Hinweis

Sie werden an diesem Punkt nicht für die Rechenleistung belastet, da der Cluster auf 0 Knoten bleibt, bis ein Batch-Endpunkt aufgerufen wird und ein Batch-Bewertungsauftrag übermittelt wird. Weitere Informationen zu Computekosten finden Sie unter Verwalten und Optimieren der Kosten für AmlCompute.

Erstellen eines Batchendpunkts

Ein Batchendpunkt ist ein HTTPS-Endpunkt, den Clients aufrufen, um einen Batchbewertungsauftrag auszulösen. Ein Batchbewertungsauftrag bewertet mehrere Eingaben. Bei einer Batchbereitstellung handelt es sich um eine Reihe von Computeressourcen, die das Modell hosten, das die Batchbewertung (oder batchbasierte Ableitung) durchführt. Ein Batchendpunkt kann über mehrere Batchbereitstellungen verfügen. Weitere Informationen zu Batchendpunkten finden Sie unter Was sind Batchendpunkte?.

Tipp

Eine der Batchbereitstellungen dient als Standardbereitstellung für den Endpunkt. Wenn der Endpunkt aufgerufen wird, führt die Standardbereitstellung das Batch-Scoring durch. Weitere Informationen zu Batchendpunkten und Bereitstellungen finden Sie unter Batchendpunkte und Batchbereitstellung.

  1. Benennen Sie den Endpunkt. Der Name des Endpunkts muss innerhalb einer Azure-Region eindeutig sein , da der Name im URI des Endpunkts enthalten ist. Beispielsweise kann es nur einen Endpunkt namens mybatchendpoint in westus2 geben.

    Platzieren Sie den Namen des Endpunkts in einer Variablen, um später auf ihn zu verweisen.

    ENDPOINT_NAME="mnist-batch"
    
  2. Konfigurieren des Batchendpunkts

    Die folgende YAML-Datei definiert einen Batchendpunkt. Verwenden Sie diese Datei mit dem CLI-Befehl zum Erstellen von Batchendpunkten.

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: mnist-batch
    description: A batch endpoint for scoring images from the MNIST dataset.
    tags:
      type: deep-learning
    

    In der folgenden Tabelle werden die wichtigsten Eigenschaften des Endpunkts beschrieben. Das vollständige YAML-Schema des Batchendpunkts finden Sie unter CLI (v2)-Batchendpunkt-YAML-Schema.

    Schlüssel BESCHREIBUNG
    name Der Name des Batchendpunkts. Muss auf Azure-Regionsebene eindeutig sein.
    description Die Beschreibung des Batchendpunkts. Diese Eigenschaft ist optional.
    tags Die Tags, die in den Endpunkt eingeschlossen werden sollen. Diese Eigenschaft ist optional.
  3. Erstellen des Endpunkts:

    Führen Sie diesen Code aus, um einen Batchendpunkt zu erstellen.

    az ml batch-endpoint create --file endpoint.yml  --name $ENDPOINT_NAME
    

Erstellen einer Batchbereitstellung

Eine Modellimplementierung ist ein Satz von Ressourcen, die für das Hosting des Modells erforderlich sind, das die eigentlichen Rückschlüsse ausführt. Um eine Batchmodellimplementierung zu erstellen, benötigen Sie die folgenden Elemente:

  • Ein im Arbeitsbereich registriertes Modell
  • Code zur Bewertung des Modells
  • Eine Umgebung, in der die Abhängigkeiten des Modells installiert sind
  • Die vordefinierten Compute- und Ressourceneinstellungen
  1. Beginnen Sie mit der Registrierung des Modells, das bereitgestellt werden soll, in diesem Fall ein Torch-Modell für das bekannte Problem der Ziffernerkennung (MNIST). Mit Batchbereitstellungen können nur Modelle bereitgestellt werden, die im Arbeitsbereich registriert sind. Sie können diesen Schritt überspringen, wenn das Modell, das Sie bereitstellen möchten, bereits registriert ist.

    Tipp

    Modelle sind der Bereitstellung und nicht dem Endpunkt zugeordnet. Dies bedeutet, dass an einem einzelnen Endpunkt mehrere Modelle (oder Modellversionen) bereitgestellt werden können, solange die verschiedenen Modelle (oder Modellversionen) in verschiedenen Bereitstellungen bereitgestellt werden.

    MODEL_NAME='mnist-classifier-torch'
    az ml model create --name $MODEL_NAME --type "custom_model" --path "deployment-torch/model"
    
  2. Nun ist es an der Zeit, ein Bewertungsskript zu erstellen. Batchbereitstellungen erfordern ein Bewertungsskript, das angibt, wie ein bestimmtes Modell ausgeführt werden soll und wie Eingabedaten verarbeitet werden müssen. Batchendpunkte unterstützen in Python erstellte Skripts. In diesem Fall wird ein Modell bereitgestellt, das Dateien mit Bilddarstellungen von Ziffern liest und die entsprechende Ziffer ausgibt. Das Bewertungsskript entspricht dem folgenden:

    Hinweis

    Bei MLflow-Modellen generiert Azure Machine Learning das Bewertungsskript automatisch, sodass Sie keines angeben müssen. Wenn es sich bei Ihrem Modell um ein MLflow-Modell handelt, können Sie diesen Schritt überspringen. Weitere Einzelheiten zur Funktionsweise von Batchendpunkten mit MLflow-Modellen finden Sie im Artikel Verwenden von MLflow-Modellen in Batchbereitstellungen.

    Warnung

    Wenn Sie ein AutoML-Modell (automatisiertes maschinelles Lernen) auf einem Batchendpunkt bereitstellen, beachten Sie, dass das von AutoML bereitgestellte Bewertungsskript nur für Onlineendpunkte funktioniert und nicht für die Batchausführung konzipiert ist. Weitere Informationen zum Erstellen eines Bewertungsskripts für Ihre Batchbereitstellung finden Sie unter Erstellen von Bewertungsskripts für Batchbereitstellungen.

    deployment-torch/code/batch_driver.py

    import os
    import pandas as pd
    import torch
    import torchvision
    import glob
    from os.path import basename
    from mnist_classifier import MnistClassifier
    from typing import List
    
    
    def init():
        global model
        global device
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        # It is the path to the model folder
        model_path = os.environ["AZUREML_MODEL_DIR"]
        model_file = glob.glob(f"{model_path}/*/*.pt")[-1]
    
        model = MnistClassifier()
        model.load_state_dict(torch.load(model_file))
        model.eval()
    
        device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    
    
    def run(mini_batch: List[str]) -> pd.DataFrame:
        print(f"Executing run method over batch of {len(mini_batch)} files.")
    
        results = []
        with torch.no_grad():
            for image_path in mini_batch:
                image_data = torchvision.io.read_image(image_path).float()
                batch_data = image_data.expand(1, -1, -1, -1)
                input = batch_data.to(device)
    
                # perform inference
                predict_logits = model(input)
    
                # Compute probabilities, classes and labels
                predictions = torch.nn.Softmax(dim=-1)(predict_logits)
                predicted_prob, predicted_class = torch.max(predictions, axis=-1)
    
                results.append(
                    {
                        "file": basename(image_path),
                        "class": predicted_class.numpy()[0],
                        "probability": predicted_prob.numpy()[0],
                    }
                )
    
        return pd.DataFrame(results)
    
  3. Erstellen Sie eine Umgebung, in der Ihre Batchbereitstellung ausgeführt wird. Diese Umgebung muss die Pakete azureml-core und azureml-dataset-runtime[fuse] enthalten, die für Batchendpunkte benötigt werden, sowie alle für die Ausführung Ihres Codes erforderlichen Abhängigkeiten. In diesem Fall wurden die Abhängigkeiten in der Datei conda.yaml erfasst:

    deployment-torch/environment/conda.yaml

    name: mnist-env
    channels:
      - conda-forge
    dependencies:
      - python=3.8.5
      - pip<22.0
      - pip:
        - torch==1.13.0
        - torchvision==0.14.0
        - pytorch-lightning
        - pandas
        - azureml-core
        - azureml-dataset-runtime[fuse]
    

    Wichtig

    Die Pakete azureml-core und azureml-dataset-runtime[fuse] sind für Batchbereitstellungen erforderlich und sollten in die Umgebungsabhängigkeiten aufgenommen werden.

    Geben Sie die Umgebung wie folgt an:

    Die Umgebungsdefinition wird als anonyme Umgebung in die Bereitstellungsdefinition selbst aufgenommen. Sie sehen die folgenden Zeilen in der Bereitstellung:

    environment:
      name: batch-torch-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    
  4. Wechseln Sie im Seitenmenü zur Registerkarte "Umgebungen ".

  5. Wählen Sie "Benutzerdefinierte Umgebungen>erstellen" aus.

    1. Geben Sie den Namen der Umgebung ein, in diesem Fall torch-batch-env.

    2. Wählen Sie für Umgebungsquelle auswählen die Option Vorhandenes Docker-Image mit optionaler Conda-Datei verwenden aus.

    3. Geben Sie für Imagepfad für Containerregistrierung Folgendes ein: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04.

    4. Wählen Sie Weiter aus, um zum Abschnitt „Anpassen“ zu gelangen.

    5. Kopieren Sie den Inhalt der Datei deployment-torch/environment/conda.yaml aus dem GitHub-Repository in das Portal.

  6. Wählen Sie "Weiter" aus, bis Sie die Seite "Überprüfen" erreicht haben.

  7. Wählen Sie "Erstellen" aus, und warten Sie, bis die Umgebung bereit ist.


    Warnung

    Zusammengestellte Umgebungen werden in Batchbereitstellungen nicht unterstützt. Sie müssen Ihre eigene Umgebung angeben. Sie können jederzeit das Basisimage einer zusammengestellten Umgebung als Ihres verwenden, um den Prozess zu vereinfachen.

  8. Neue Bereitstellungsdefinition erstellen

    deployment-torch/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    name: mnist-torch-dpl
    description: A deployment using Torch to solve the MNIST classification dataset.
    endpoint_name: mnist-batch
    type: model
    model:
      name: mnist-classifier-torch
      path: model
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    environment:
      name: batch-torch-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    compute: azureml:batch-cluster
    resources:
      instance_count: 1
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 10
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 30
      error_threshold: -1
      logging_level: info
    

    In der folgenden Tabelle werden die wichtigsten Eigenschaften der Batchbereitstellung beschrieben. Das vollständige YAML-Schema für die Batchbereitstellung finden Sie unter CLI (v2) Batchbereitstellungs-YAML-Schema.

    Schlüssel BESCHREIBUNG
    name Der Name der Bereitstellung
    endpoint_name Der Name des Endpunkts, unter dem die Bereitstellung erstellt werden soll.
    model Das Modell, das für die Batchbewertung verwendet werden soll. Im Beispiel wird ein Inline-Modell mit path definiert. Mit dieser Definition können Modelldateien automatisch hochgeladen und mit automatisch generierten Werten für Name und Version registriert werden. Im Modellschema finden Sie weitere Optionen. Als bewährtes Verfahren für Produktionsszenarien sollten Sie das Modell separat erstellen und hier darauf verweisen. Um auf ein bestehendes Modell zu verweisen, verwenden Sie die Syntax azureml:<model-name>:<model-version>.
    code_configuration.code Das lokale Verzeichnis, das den gesamten Python-Quellcode für die Bewertung des Modells enthält.
    code_configuration.scoring_script Die Python-Datei im Verzeichnis code_configuration.code. Diese Datei muss über eine Funktion vom Typ init() und über eine Funktion vom Typ run() verfügen. Verwenden Sie die init()-Funktion für die aufwendige oder häufig angewandte Vorbereitungsschritte (z. B. wenn Sie das Modell in den Arbeitsspeicher laden). init() wird nur einmal zu Beginn des Prozesses aufgerufen. Verwenden Sie run(mini_batch), um die einzelnen Einträge zu bewerten. Der Wert von mini_batch ist eine Liste mit Dateipfaden. Die Funktion run() sollte einen Pandas-Datenrahmen oder ein Array zurückgeben. Jedes zurückgegebene Element deutet auf eine erfolgreiche Ausführung eines Eingabeelements im mini_batch hin. Weitere Informationen zum Erstellen eines Bewertungsskripts finden Sie unter Grundlegendes zum Bewertungsskript.
    environment Die Umgebung zum Bewerten des Modells. Im Beispiel wird eine Inline-Umgebung mit conda_file und image definiert. Die conda_file-Abhängigkeiten werden zusätzlich zum image installiert. Die Umgebung wird automatisch mit einem automatisch generierten Namen und einer automatisch generierten Version registriert. Im Umgebungsschema finden Sie weitere Optionen. Als bewährtes Verfahren für Produktionsszenarien sollten Sie die Umgebung separat erstellen und hier referenzieren. Verwenden Sie die Syntax azureml:<environment-name>:<environment-version>, um auf eine vorhandene Umgebung zu verweisen.
    compute Die Computeressource zum Ausführen der Batchbewertung. Im Beispiel wird der am Anfang erstellte batch-cluster verwendet, auf den mithilfe der Syntax azureml:<compute-name> verwiesen wird.
    resources.instance_count Die Anzahl der Instanzen, die für jeden Batchbewertungsauftrag verwendet werden sollen.
    settings.max_concurrency_per_instance Die maximale Anzahl von parallelen scoring_script Läufen pro Instanz.
    settings.mini_batch_size Die Anzahl der Dateien, die scoring_script in einem run()-Aufruf verarbeiten kann.
    settings.output_action Gibt an, wie die Ausgabe in der Ausgabedatei organisiert werden soll append_row führt alle von run() zurückgegebenen Ausgabeergebnisse in einer einzelnen Datei mit dem Namen output_file_name zusammen. summary_only führt die Ausgabeergebnisse nicht zusammen, sondern berechnet nur error_threshold.
    settings.output_file_name Der Name der Ausgabedatei der Batchbewertung für append_rowoutput_action.
    settings.retry_settings.max_retries Die maximale Anzahl von Versuchen bei einer nicht erfolgreichen scoring_scriptrun().
    settings.retry_settings.timeout Die Zeitüberschreitung in Sekunden für ein scoring_scriptrun() für das Erfassen eines Mini-Batches.
    settings.error_threshold Die Anzahl von Eingabedatei-Bewertungsfehlern, die ignoriert werden sollen. Wenn die Fehlerzahl für die gesamte Eingabe diesen Wert übersteigt, wird der Batchbewertungsauftrag abgebrochen. Im Beispiel wird -1 verwendet. Dadurch wird angegeben, dass eine beliebige Anzahl von Fehlern zulässig ist, ohne den Batchbewertungsauftrag abzubrechen.
    settings.logging_level Die Ausführlichkeit des Protokolls. Mögliche Werte nach zunehmender Ausführlichkeit sind „WARNING“ (Warnung), „INFO“ (Information) und „DEBUG“ (Debuggen).
    settings.environment_variables Wörterbuch mit Namen-Wert-Paaren von Umgebungsvariablen, die für jeden Batch-Scoring-Auftrag festzulegen sind.
  9. Wechseln Sie im Seitmenü zur Registerkarte "Endpunkte ".

    1. Wählen Sie die Registerkarte Batchendpunkte>Erstellen aus.

    2. Geben Sie dem Endpunkt einen Namen, in diesem Fall mnist-batch. Sie können die restlichen Felder konfigurieren oder leer lassen.

    3. Wählen Sie Weiter aus, um zum Abschnitt „Modell“ zu wechseln.

    4. Wählen Sie das Modell mnist-classifier-torch aus.

    5. Wählen Sie Weiter aus, um zur Seite „Bereitstellung“ zu wechseln.

    6. Geben Sie der Bereitstellung einen Namen.

  10. Stellen Sie für die Ausgabeaktion sicher, dass die Zeile "Anfügen" ausgewählt ist.

    1. Stellen Sie unter Ausgabedateiname sicher, dass die Ausgabedatei für die Batchbewertung die von Ihnen benötigte Datei ist. Der Standardwert ist predictions.csv.

    2. Passen Sie unter Minibatchgröße die Größe der Dateien an, die in den einzelnen Minibatches enthalten sein werden. Diese Größe steuert die Datenmenge, die Ihr Bewertungsskript pro Batch empfängt.

    3. Weisen Sie Ihrer Bereitstellung unter Zeitlimit für Bewertung (Sekunden) ausreichend Zeit zu, einen bestimmten Batch von Dateien zu bewerten. Wenn Sie die Anzahl Dateien erhöhen, müssen Sie in der Regel auch den Timeoutwert erhöhen. Teurere Modelle (z. B. solche, die auf Deep Learning basieren) erfordern möglicherweise hohe Werte in diesem Feld.

    4. Konfigurieren Sie unter Max. Parallelität pro Instanz die Anzahl Executors, die pro Compute-Instanz in der Bereitstellung verwendet werden sollen. Eine höhere Anzahl garantiert hier einen höheren Grad an Parallelisierung, erhöht aber auch den Arbeitsspeicherdruck auf der Computeinstanz. Optimieren Sie diesen Wert zusammen mit der Minibatchgröße.

    5. Wählen Sie Weiter aus, um zur Seite „Code und Umgebung“ zu wechseln.

    6. Suchen Sie unter „Bewertungsskript für Rückschluss auswählen“ nach der Bewertungsskriptdatei deployment-torch/code/batch_driver.py, und wählen Sie sie aus.

    7. Wählen Sie im Abschnitt „Umgebung auswählen“ die Umgebung torch-batch-env aus, die Sie zuvor erstellt haben.

    8. Wählen Sie Weiter aus, um zur Seite „Compute“ zu gelangen.

    9. Wählen Sie den Computecluster aus, den Sie in einem vorherigen Schritt erstellt haben.

      Warnung

      Azure Kubernetes-Cluster werden in Batchbereitstellungen unterstützt, aber nur, wenn sie mit der Azure Machine Learning CLI oder dem Python SDK erstellt werden.

    10. Geben Sie unter Instanzanzahl die gewünschte Anzahl Compute-Instanzen für die Bereitstellung ein. Verwenden Sie in diesem Fall 2.

    11. Wählen Sie Weiter aus.

  11. Erstellen der Bereitstellung:

    Führen Sie den folgenden Code aus, um eine Batchbereitstellung unter dem Batchendpunkt zu erstellen und diese als Standardbereitstellung festzulegen.

    az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
    

    Tipp

    Der --set-default-Parameter legt die neu erstellte Bereitstellung als Standardbereitstellung des Endpunkts fest. Insbesondere beim erstmaligen Erstellen einer Bereitstellung ist dies eine praktische Möglichkeit, um eine neue Standardbereitstellung des Endpunkts zu erstellen. Als bewährte Methode für Produktionsszenarien wird empfohlen, eine neue Bereitstellung zu erstellen, ohne sie als Standard festzulegen. Überprüfen Sie, ob die Bereitstellung wie erwartet funktioniert, und aktualisieren Sie die Standardbereitstellung später. Weitere Informationen zur Implementierung dieses Prozesses finden Sie im Abschnitt Bereitstellen eines neuen Modells.

  12. Überprüfen Sie die Batchendpunkt- und Bereitstellungsdetails.

    Verwenden Sie show, um die Details zu Endpunkt und Bereitstellung zu überprüfen. Führen Sie den folgenden Code aus, um eine Batchbereitstellung zu überprüfen:

    DEPLOYMENT_NAME="mnist-torch-dpl"
    az ml batch-deployment show --name $DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME
    
  13. Wählen Sie die Registerkarte Batchendpunkte aus.

    1. Wählen Sie den anzuzeigenden Batchendpunkt aus.

    2. Auf der Seite Details des Endpunkts werden die Details zum Endpunkt zusammen mit allen auf dem Endpunkt verfügbaren Bereitstellungen angezeigt.

      Screenshot des Bildschirms zur Bewertung von Batch-Endpunkten und Bereitstellungsdetails.

Ausführen von Batch-Endpunkten und Zugreifen auf Ergebnisse

Grundlegendes zum Datenfluss

Bevor Sie Ihren Batch-Endpunkt ausführen, sollten Sie verstehen, wie Daten durch das System fließen:

Eingaben: Zu verarbeitende Daten (Score). Dazu gehören:

  • In Azure Storage gespeicherte Dateien (Blob-Speicher, Data Lake)
  • Ordner mit mehreren Dateien
  • Registrierte Datasets in Azure Machine Learning

Verarbeitung: Das bereitgestellte Modell verarbeitet die Eingabedaten in Batches (Minibatches) und generiert Vorhersagen.

Ausgaben: Ergebnisse aus dem Modell, gespeichert als Dateien in Azure Storage. Standardmäßig werden Ausgaben im standardmäßigen Blob-Speicher des Arbeitsbereichs gespeichert; Sie können jedoch einen anderen Speicherort angeben.

Aufrufen eines Batchendpunkts

Das Aufrufen eines Batchendpunkts löst einen Batchbewertungsauftrag aus. Der Auftrag name wird in der Aufrufantwort zurückgegeben und verfolgt den Fortschritt der Batchbewertung. Geben Sie den Eingabedatenpfad an, damit die Endpunkte die zu bewertenden Daten finden können. Das folgende Beispiel zeigt, wie Sie einen neuen Auftrag über Beispieldaten der in einem Azure Storage-Konto gespeicherten MNIST-Datenbank starten.

Sie können einen Batchendpunkt mit der Azure CLI, dem Azure Machine Learning-SDK oder REST-Endpunkten ausführen und aufrufen. Weitere Informationen zu diesen Optionen finden Sie unter Erstellen von Aufträgen und Eingabedaten für Batchendpunkte.

Hinweis

Wie funktioniert die Parallelisierung?

Batch-Deployments verteilen die Arbeit auf Dateiebene. Beispielsweise generiert ein Ordner mit 100 Dateien und Minibatches mit 10 Dateien jeweils 10 Batches mit jeweils 10 Dateien. Dies geschieht unabhängig von der Dateigröße. Wenn Dateien für die Verarbeitung in Minibatches zu groß sind, teilen Sie sie in kleinere Dateien auf, um die Parallelität zu erhöhen oder die Anzahl der Dateien pro Minibatch zu reduzieren. Bei Batchbereitstellungen werden derzeit keine Ungleichmäßigkeiten bei den Verteilungen von Dateigrößen berücksichtigt.

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)

Batchendpunkte unterstützen das Lesen von Dateien oder Ordnern, die sich an unterschiedlichen Standorten befinden. Weitere Informationen zu den unterstützten Typen und deren Angabe finden Sie unter Zugreifen auf Daten aus Batchendpunktaufträgen.

Überwachen des Ausführungsfortschritts des Batch-Auftrags

Batchbewertungsaufträge benötigen Zeit, um alle Eingaben zu verarbeiten.

Der folgende Code überprüft den Auftragsstatus und gibt einen Link zu Azure Machine Learning Studio für weitere Details aus.

az ml job show -n $JOB_NAME --web

Überprüfen der Ergebnisse der Batchbewertung

Die Ausgaben des Auftrags werden im Cloudspeicher gespeichert, und zwar entweder im Standardblobspeicher des Arbeitsbereichs oder in dem von Ihnen angegebenen Speicher. Weitere Informationen zum Ändern der Standardwerte finden Sie unter Konfigurieren des Ausgabespeicherorts. Befolgen Sie nach Abschluss des Auftrags die nachstehenden Schritte, um die Bewertungsergebnisse in Azure Storage-Explorer anzuzeigen:

  1. Führen Sie den folgenden Code aus, um den Batchbewertungsauftrag in Azure Machine Learning Studio zu öffnen. Der Studio-Link des Auftrags ist ebenfalls in der Antwort von invoke als Wert von interactionEndpoints.Studio.endpoint enthalten.

    az ml job show -n $JOB_NAME --web
    
  2. Wählen Sie im Auftragsgraph den Schritt batchscoring aus.

  3. Wählen Sie die Registerkarte Ausgaben und Protokolle und dann Datenausgaben anzeigen aus.

  4. Wählen Sie unter Datenausgabendas entsprechende Symbol aus, um Storage-Explorer zu öffnen.

    Studio-Screenshot: Anzeige des Speicherorts der Datenausgaben.

    Die Bewertungsergebnisse in Storage-Explorer ähneln der folgenden Beispielseite:

    Screenshot der Bewertungsausgabe.

Konfigurieren des Ausgabespeicherorts

Standardmäßig werden die Ergebnisse der Batch-Bewertung im Standard-Blob-Speicher des Arbeitsbereichs in einem Ordner gespeichert, der nach dem Auftrag benannt ist (eine vom System generierte GUID). Konfigurieren Sie den Ausgabespeicherort beim Aufrufen des Batch-Endpunkts.

Verwenden Sie output-path, um einen beliebigen Ordner in einem registrierten Azure Machine Learning-Datenspeicher zu konfigurieren. Die Syntax für --output-path ist dieselbe wie für --input, wenn Sie einen Ordner angeben, also azureml://datastores/<datastore-name>/paths/<path-on-datastore>/. Verwenden Sie --set output_file_name=<your-file-name>, um einen neuen Ausgabedateinamen zu konfigurieren.

OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)

Warnung

Der Ausgabespeicherort muss eindeutig sein. Wenn die Ausgabedatei vorhanden ist, schlägt der Batchbewertungsauftrag fehl.

Wichtig

Im Gegensatz zu Eingaben können Ausgaben nur in Azure Machine Learning-Datenspeichern gespeichert werden, die unter Blob Storage-Konten ausgeführt werden.

Außerkraftsetzen der Bereitstellungskonfiguration pro Auftrag

Wenn Sie einen Batch-Endpunkt aufrufen, können Sie einige Einstellungen überschreiben, um Rechenressourcen optimal zu nutzen und die Leistung zu verbessern. Dieses Feature ist nützlich, wenn Sie unterschiedliche Einstellungen für unterschiedliche Aufträge benötigen, ohne die Bereitstellung dauerhaft zu ändern.

Welche Einstellungen können überschrieben werden?

Sie können pro Auftrag die folgenden Einstellungen konfigurieren:

Konfiguration Wann verwenden Beispielszenario
Instanzanzahl Wenn Sie unterschiedliche Datenvolumes haben Verwenden Sie weitere Instanzen für größere Datasets (10 Instanzen für 1 Millionen Dateien und 2 Instanzen für 100.000 Dateien).
Minibatchgröße Wenn Sie den Durchsatz und die Speicherauslastung ausgleichen müssen Verwenden Sie kleinere Batches (10 bis 50 Dateien) für große Bilder und größere Batches (100 bis 500 Dateien) für kleine Textdateien.
Max. Wiederholungen Wenn die Datenqualität unterschiedlich ist Mehr Wiederholungen (5–10) für verrauschte Daten; weniger Wiederholungen (1–3) für saubere Daten
Timeout Wenn die Verarbeitungszeit je nach Datentyp variiert Längeres Timeout (300 s) für komplexe Modelle; kürzeres Timeout (30 s) für einfache Modelle
Fehlerschwellenwert Wenn Sie unterschiedliche Fehlertoleranzstufen benötigen Strenger Schwellenwert (-1) für kritische Aufträge; großzügiger Schwellenwert (10 %) für experimentelle Aufträge

So überschreiben Sie Einstellungen

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)

Hinzufügen von Bereitstellungen zu einem Endpunkt

Sobald Sie über einen Batchendpunkt mit einer Bereitstellung verfügen, können Sie Ihr Modell weiter optimieren und neue Bereitstellungen hinzufügen. Batchendpunkte stellen weiterhin die Standardbereitstellung bereit, während Sie neue Modelle unter demselben Endpunkt entwickeln und bereitstellen. Bereitstellungen wirken sich nicht aufeinander aus.

In diesem Beispiel fügen Sie eine zweite Bereitstellung hinzu, die ein mit Keras und TensorFlow erstelltes Modell verwendet, um dasselbe MNIST-Problem zu lösen.

Hinzufügen einer zweiten Bereitstellung

  1. Erstellen Sie eine Umgebung für Ihre Batchbereitstellung. Schließen Sie alle Abhängigkeiten ein, die Ihr Code ausführen muss. Fügen Sie die Bibliothek azureml-corehinzu, da sie für Batchbereitstellungen erforderlich ist. Die folgende Umgebungsdefinition enthält die erforderlichen Bibliotheken zum Ausführen eines Modells mit TensorFlow.

    Die Umgebungsdefinition wird als anonyme Umgebung in die Bereitstellungsdefinition selbst aufgenommen.

    environment:
      name: batch-tensorflow-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    
  2. Kopieren Sie den Inhalt der Datei deployment-keras/environment/conda.yaml aus dem GitHub-Repository in das Portal.

    1. Wählen Sie Weiter aus, bis Sie zur Seite „Überprüfen“ gelangen.

    2. Wählen Sie Erstellen aus, und warten Sie, bis die Umgebung einsatzbereit ist.


    Die verwendete Conda-Datei sieht wie folgt aus:

    deployment-keras/environment/conda.yaml

    name: tensorflow-env
    channels:
      - conda-forge
    dependencies:
      - python=3.8.5
      - pip
      - pip:
        - pandas
        - tensorflow
        - pillow
        - azureml-core
        - azureml-dataset-runtime[fuse]
    
  3. Erstellen eines Bewertungsskripts für das Modell:

    deployment-keras/code/batch_driver.py

    import os
    import numpy as np
    import pandas as pd
    import tensorflow as tf
    from typing import List
    from os.path import basename
    from PIL import Image
    from tensorflow.keras.models import load_model
    
    
    def init():
        global model
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
    
        # load the model
        model = load_model(model_path)
    
    
    def run(mini_batch: List[str]) -> pd.DataFrame:
        print(f"Executing run method over batch of {len(mini_batch)} files.")
    
        results = []
        for image_path in mini_batch:
            data = Image.open(image_path)
            data = np.array(data)
            data_batch = tf.expand_dims(data, axis=0)
    
            # perform inference
            pred = model.predict(data_batch)
    
            # Compute probabilities, classes and labels
            pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy()
            pred_class = tf.math.argmax(pred, axis=-1).numpy()
    
            results.append(
                {
                    "file": basename(image_path),
                    "class": pred_class[0],
                    "probability": pred_prob,
                }
            )
    
        return pd.DataFrame(results)
    
  4. Neue Bereitstellungsdefinition erstellen

    deployment-keras/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    name: mnist-keras-dpl
    description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset.
    endpoint_name: mnist-batch
    type: model
    model: 
      name: mnist-classifier-keras
      path: model
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    environment:
      name: batch-tensorflow-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    compute: azureml:batch-cluster
    resources:
      instance_count: 1
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 10
      output_action: append_row
      output_file_name: predictions.csv
    
  5. Wählen Sie "Weiter " aus, um zur Seite "Code + Umgebung" zu wechseln.

    1. Suchen Sie unter Bewertungsskript für Rückschluss auswählen nach der Bewertungsskriptdatei deployment-keras/code/batch_driver.py, und wählen Sie sie aus.

    2. Wählen Sie unter Umgebung auswählen die Umgebung aus, die Sie im vorherigen Schritt erstellt haben.

    3. Wählen Sie Weiter aus.

    4. Wählen Sie auf der Seite Compute den Computecluster aus, den Sie im vorherigen Schritt erstellt haben.

    5. Geben Sie unter Instanzanzahl die gewünschte Anzahl Compute-Instanzen für die Bereitstellung ein. Verwenden Sie in diesem Fall 2.

    6. Wählen Sie Weiter aus.

  6. Erstellen der Bereitstellung:

    Führen Sie den folgenden Code aus, um eine Batchbereitstellung unter dem Batchendpunkt zu erstellen und diese als Standardbereitstellung festzulegen.

    az ml batch-deployment create --file deployment-keras/deployment.yml --endpoint-name $ENDPOINT_NAME
    

    Tipp

    Der --set-default-Parameter fehlt in diesem Fall. Als bewährte Methode für Produktionsszenarien wird empfohlen, eine neue Bereitstellung zu erstellen, ohne sie als Standard festzulegen. Überprüfen Sie sie zunächst, und aktualisieren Sie die Standardbereitstellung später.

Testen einer nicht standardmäßigen Batchbereitstellung

Um die neue nicht standardmäßige Bereitstellung zu testen, müssen Sie den Namen der auszuführenden Bereitstellung kennen.

DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)

Beachten Sie, dass für die Angabe der auszuführenden Bereitstellung --deployment-name verwendet wird. Mit diesem Parameter können Sie eine nicht standardmäßige Bereitstellung aufrufen (invoke), ohne die Standardbereitstellung des Batchendpunkts zu aktualisieren.

Aktualisieren der Standard-Batchbereitstellung

Sie können zwar eine bestimmte Bereitstellung innerhalb eines Endpunkts aufrufen, in der Regel rufen Sie jedoch den Endpunkt selbst auf und überlassen diesem die Entscheidung, welche Bereitstellung verwendet werden soll. Der Endpunkt verwendet dann die Standardbereitstellung. Sie können die Standardbereitstellung (und damit das Modell für die Bereitstellung) ändern, ohne Ihren Vertrag mit dem Benutzer oder der Benutzerin zu ändern, der bzw. die den Endpunkt aufruft. Verwenden Sie den folgenden Code, um die Standardbereitstellung zu ändern:

az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME

Löschen Sie den Batch-Endpunkt und die Bereitstellung.

Wenn Sie die alte Batchbereitstellung nicht benötigen, löschen Sie sie, indem Sie den folgenden Code ausführen. Das --yes Kennzeichen bestätigt den Löschvorgang.

az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes

Führen Sie den folgenden Code aus, damit der Batch-Endpunkt und seine zugrunde liegenden Bereitstellungen gelöscht werden. Batchbewertungsaufträge werden nicht gelöscht.

az ml batch-endpoint delete --name $ENDPOINT_NAME --yes