Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
GILT FÜR:
Azure CLI ML-Erweiterung v2 (aktuell)
Python-SDK azure-ai-ml v2 (aktuell)
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/writein 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ÜR
Azure 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.
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
mybatchendpointinwestus2geben.Platzieren Sie den Namen des Endpunkts in einer Variablen, um später auf ihn zu verweisen.
ENDPOINT_NAME="mnist-batch"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-learningIn 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 nameDer Name des Batchendpunkts. Muss auf Azure-Regionsebene eindeutig sein. descriptionDie Beschreibung des Batchendpunkts. Diese Eigenschaft ist optional. tagsDie Tags, die in den Endpunkt eingeschlossen werden sollen. Diese Eigenschaft ist optional. 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
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"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)Erstellen Sie eine Umgebung, in der Ihre Batchbereitstellung ausgeführt wird. Diese Umgebung muss die Pakete
azureml-coreundazureml-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 Dateiconda.yamlerfasst: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-coreundazureml-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.yamlWechseln Sie im Seitenmenü zur Registerkarte "Umgebungen ".
Wählen Sie "Benutzerdefinierte Umgebungen>erstellen" aus.
Geben Sie den Namen der Umgebung ein, in diesem Fall
torch-batch-env.Wählen Sie für Umgebungsquelle auswählen die Option Vorhandenes Docker-Image mit optionaler Conda-Datei verwenden aus.
Geben Sie für Imagepfad für Containerregistrierung Folgendes ein:
mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04.Wählen Sie Weiter aus, um zum Abschnitt „Anpassen“ zu gelangen.
Kopieren Sie den Inhalt der Datei deployment-torch/environment/conda.yaml aus dem GitHub-Repository in das Portal.
Wählen Sie "Weiter" aus, bis Sie die Seite "Überprüfen" erreicht haben.
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.
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: infoIn 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 nameDer Name der Bereitstellung endpoint_nameDer Name des Endpunkts, unter dem die Bereitstellung erstellt werden soll. modelDas Modell, das für die Batchbewertung verwendet werden soll. Im Beispiel wird ein Inline-Modell mit pathdefiniert. 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 Syntaxazureml:<model-name>:<model-version>.code_configuration.codeDas lokale Verzeichnis, das den gesamten Python-Quellcode für die Bewertung des Modells enthält. code_configuration.scoring_scriptDie Python-Datei im Verzeichnis code_configuration.code. Diese Datei muss über eine Funktion vom Typinit()und über eine Funktion vom Typrun()verfügen. Verwenden Sie dieinit()-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 Sierun(mini_batch), um die einzelnen Einträge zu bewerten. Der Wert vonmini_batchist eine Liste mit Dateipfaden. Die Funktionrun()sollte einen Pandas-Datenrahmen oder ein Array zurückgeben. Jedes zurückgegebene Element deutet auf eine erfolgreiche Ausführung eines Eingabeelements immini_batchhin. Weitere Informationen zum Erstellen eines Bewertungsskripts finden Sie unter Grundlegendes zum Bewertungsskript.environmentDie Umgebung zum Bewerten des Modells. Im Beispiel wird eine Inline-Umgebung mit conda_fileundimagedefiniert. Dieconda_file-Abhängigkeiten werden zusätzlich zumimageinstalliert. 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 Syntaxazureml:<environment-name>:<environment-version>, um auf eine vorhandene Umgebung zu verweisen.computeDie Computeressource zum Ausführen der Batchbewertung. Im Beispiel wird der am Anfang erstellte batch-clusterverwendet, auf den mithilfe der Syntaxazureml:<compute-name>verwiesen wird.resources.instance_countDie Anzahl der Instanzen, die für jeden Batchbewertungsauftrag verwendet werden sollen. settings.max_concurrency_per_instanceDie maximale Anzahl von parallelen scoring_scriptLäufen pro Instanz.settings.mini_batch_sizeDie Anzahl der Dateien, die scoring_scriptin einemrun()-Aufruf verarbeiten kann.settings.output_actionGibt an, wie die Ausgabe in der Ausgabedatei organisiert werden soll append_rowführt alle vonrun()zurückgegebenen Ausgabeergebnisse in einer einzelnen Datei mit dem Namenoutput_file_namezusammen.summary_onlyführt die Ausgabeergebnisse nicht zusammen, sondern berechnet nurerror_threshold.settings.output_file_nameDer Name der Ausgabedatei der Batchbewertung für append_rowoutput_action.settings.retry_settings.max_retriesDie maximale Anzahl von Versuchen bei einer nicht erfolgreichen scoring_scriptrun().settings.retry_settings.timeoutDie Zeitüberschreitung in Sekunden für ein scoring_scriptrun()für das Erfassen eines Mini-Batches.settings.error_thresholdDie 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 -1verwendet. Dadurch wird angegeben, dass eine beliebige Anzahl von Fehlern zulässig ist, ohne den Batchbewertungsauftrag abzubrechen.settings.logging_levelDie Ausführlichkeit des Protokolls. Mögliche Werte nach zunehmender Ausführlichkeit sind „WARNING“ (Warnung), „INFO“ (Information) und „DEBUG“ (Debuggen). settings.environment_variablesWörterbuch mit Namen-Wert-Paaren von Umgebungsvariablen, die für jeden Batch-Scoring-Auftrag festzulegen sind. Wechseln Sie im Seitmenü zur Registerkarte "Endpunkte ".
Wählen Sie die Registerkarte Batchendpunkte>Erstellen aus.
Geben Sie dem Endpunkt einen Namen, in diesem Fall
mnist-batch. Sie können die restlichen Felder konfigurieren oder leer lassen.Wählen Sie Weiter aus, um zum Abschnitt „Modell“ zu wechseln.
Wählen Sie das Modell mnist-classifier-torch aus.
Wählen Sie Weiter aus, um zur Seite „Bereitstellung“ zu wechseln.
Geben Sie der Bereitstellung einen Namen.
Stellen Sie für die Ausgabeaktion sicher, dass die Zeile "Anfügen" ausgewählt ist.
Stellen Sie unter Ausgabedateiname sicher, dass die Ausgabedatei für die Batchbewertung die von Ihnen benötigte Datei ist. Der Standardwert ist
predictions.csv.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.
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.
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.
Wählen Sie Weiter aus, um zur Seite „Code und Umgebung“ zu wechseln.
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.
Wählen Sie im Abschnitt „Umgebung auswählen“ die Umgebung torch-batch-env aus, die Sie zuvor erstellt haben.
Wählen Sie Weiter aus, um zur Seite „Compute“ zu gelangen.
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.
Geben Sie unter Instanzanzahl die gewünschte Anzahl Compute-Instanzen für die Bereitstellung ein. Verwenden Sie in diesem Fall 2.
Wählen Sie Weiter aus.
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-defaultTipp
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.Ü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_NAMEWählen Sie die Registerkarte Batchendpunkte aus.
Wählen Sie den anzuzeigenden Batchendpunkt aus.
Auf der Seite Details des Endpunkts werden die Details zum Endpunkt zusammen mit allen auf dem Endpunkt verfügbaren Bereitstellungen angezeigt.
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:
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
invokeals Wert voninteractionEndpoints.Studio.endpointenthalten.az ml job show -n $JOB_NAME --webWählen Sie im Auftragsgraph den Schritt
batchscoringaus.Wählen Sie die Registerkarte Ausgaben und Protokolle und dann Datenausgaben anzeigen aus.
Wählen Sie unter Datenausgabendas entsprechende Symbol aus, um Storage-Explorer zu öffnen.
Die Bewertungsergebnisse in Storage-Explorer ähneln der folgenden Beispielseite:
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
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.yamlKopieren Sie den Inhalt der Datei deployment-keras/environment/conda.yaml aus dem GitHub-Repository in das Portal.
Wählen Sie Weiter aus, bis Sie zur Seite „Überprüfen“ gelangen.
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]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)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.csvWählen Sie "Weiter " aus, um zur Seite "Code + Umgebung" zu wechseln.
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.
Wählen Sie unter Umgebung auswählen die Umgebung aus, die Sie im vorherigen Schritt erstellt haben.
Wählen Sie Weiter aus.
Wählen Sie auf der Seite Compute den Computecluster aus, den Sie im vorherigen Schritt erstellt haben.
Geben Sie unter Instanzanzahl die gewünschte Anzahl Compute-Instanzen für die Bereitstellung ein. Verwenden Sie in diesem Fall 2.
Wählen Sie Weiter aus.
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_NAMETipp
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