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)
Batchendpunkte ermöglichen es Ihnen, Modelle bereitzustellen, um zeitintensive Rückschlüsse im großen Stil durchzuführen. Bei der Bereitstellung von Modellen müssen Sie ein Bewertungsskript (auch als Batchtreiberskript bezeichnet) erstellen und angeben, um anzugeben, wie das Modell über die Eingabedaten verwendet wird, um Vorhersagen zu erstellen. In diesem Artikel erfahren Sie, wie Sie Bewertungsskripts in Modellbereitstellungen für verschiedene Szenarien verwenden. Außerdem erfahren Sie mehr über bewährte Methoden für Batch-Endpoints.
Tipp
MLflow-Modelle erfordern kein Bewertungsskript. Der Dienst generiert ihn automatisch für Sie. Weitere Informationen zur Funktionsweise von Batchendpunkten mit MLflow-Modellen finden Sie in dem dedizierten Tutorial Verwenden von MLflow-Modellen in Batchbereitstellungen.
Warnung
Um ein automatisiertes ML-Modell unter einem Batchendpunkt bereitzustellen, beachten Sie, dass Automated ML ein Bewertungsskript bereitstellt, das nur für Onlineendpunkte funktioniert. Dieses Bewertungsskript wurde nicht für die Batchausführung entwickelt. Weitere Informationen zum Erstellen eines Bewertungsskripts, das für das Modell angepasst ist, finden Sie in den folgenden Richtlinien.
Grundlegendes zum Bewertungsskript
Das Bewertungsskript ist eine Python-Datei (.py), die angibt, wie das Modell ausgeführt und die Eingabedaten gelesen werden, die der Batchbereitstellungsausführer übermittelt. Jede Modellbereitstellung stellt das Bewertungsskript (zusammen mit allen anderen erforderlichen Abhängigkeiten) zur Erstellungszeit bereit. Das Bewertungsskript sieht in der Regel wie folgt aus:
deployment.yml
code_configuration:
code: code
scoring_script: batch_driver.py
Das Bewertungsskript muss zwei Methoden enthalten:
Die init-Methode
Verwenden Sie die init()-Methode für aufwendige oder allgemeine Vorbereitungen. Ein Beispiel wäre etwa das Laden des Modells in den Speicher. Der Start des gesamten Batchauftrags ruft diese Funktion einmal auf. Die Dateien Ihres Modells sind in einem Pfad verfügbar, der von der Umgebungsvariablen AZUREML_MODEL_DIR bestimmt wird. Je nachdem, wie Sie Ihr Modell registriert haben, sind die Dateien möglicherweise in einem Ordner enthalten. Im nächsten Beispiel verfügt das Modell über mehrere Dateien in einem Ordner mit dem Namen model. Weitere Informationen finden Sie unter Wie Sie den Ordner bestimmen können, den Ihr Modell verwendet.
def init():
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment
# The path "model" is the name of the registered model's folder
model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
# load the model
model = load_model(model_path)
In diesem Beispiel platzieren Sie das Modell in einer globalen Variablen model. Verwenden Sie globale Variablen, um alle Ressourcen verfügbar zu machen, die zum Durchführen von Rückschlüssen auf Ihre Bewertungsfunktion erforderlich sind.
Die run-Methode
Verwenden Sie die run(mini_batch: List[str]) -> Union[List[Any], pandas.DataFrame]-Methode, um die Bewertung der einzelnen Minibatches zu behandeln, die von der Batchbereitstellung generiert werden. Diese Methode wird für jede mini_batch-Generierung für Ihre Eingabedaten einmal aufgerufen. Batchbereitstellungen lesen Daten in Batches gemäß Ihrer Bereitstellungskonfiguration.
import pandas as pd
from typing import List, Any, Union
def run(mini_batch: List[str]) -> Union[List[Any], pd.DataFrame]:
results = []
for file in mini_batch:
(...)
return pd.DataFrame(results)
Die Methode empfängt eine Liste mit Dateipfaden als Parameter (mini_batch). Sie können diese Liste verwenden, um jede Datei einzeln zu durchlaufen oder den gesamten Batch zu lesen und alle gleichzeitig zu verarbeiten. Die optimale Option hängt von Ihrem Computespeicher und dem zu erreichenden Durchsatz ab. Ein Beispiel, in dem beschrieben wird, wie ganze Datenbatches gleichzeitig gelesen werden, finden Sie unter Bereitstellungen mit hohem Durchsatz.
Hinweis
Wie wird die Arbeit verteilt?
Batchbereitstellungen verteilen die Arbeit auf Dateiebene. Demnach generiert ein Ordner mit 100 Dateien mit Minibatches von 10 Dateien 10 Batches mit jeweils 10 Dateien. Beachten Sie, dass die Größe der relevanten Dateien keine Relevanz hat. Für Dateien, die zu groß sind, um sie in großen Minibatches zu verarbeiten, teilen Sie die Dateien in kleinere Dateien auf, um eine höhere Parallelität zu erzielen, oder verringern Sie die Anzahl der Dateien pro Minibatch. Derzeit kann die Batchbereitstellung keine Abweichung in der Größenverteilung der Datei berücksichtigen.
Von der Methode run() sollte ein Pandas-DataFrame oder ein Array/eine Liste zurückgegeben werden. Jedes zurückgegebene Ausgabeelement deutet auf eine erfolgreiche Ausführung eines Eingabeelements im Eingabe-mini_batch hin. Bei Datei- oder Ordnerdatenobjekten stellt jede zurückgegebene Zeile/jedes zurückgegebene Element eine einzelne verarbeitete Datei dar. Bei einem Tabellendatenobjekt stellt jede zurückgegebene Zeile/jedes zurückgegebene Element eine Zeile in einer verarbeiteten Datei dar.
Wichtig
Wie schreibe ich Vorhersagen?
Alles, was die run() Funktion zurückgibt, wird in der Ausgabevorhersagedatei angefügt, die der Batchauftrag generiert. Es ist wichtig, den richtigen Datentyp aus dieser Funktion zurückzugeben. Geben Sie Arrays zurück, wenn Sie eine einzelne Vorhersage ausgeben müssen. Geben Sie pandas-DataFrames zurück, wenn Sie mehrere Informationsteile zurückgeben müssen. Für tabellarische Daten können Sie beispielsweise Ihre Vorhersagen an den ursprünglichen Datensatz anfügen. Verwenden Sie dazu einen Pandas DataFrame. Obwohl ein Pandas DataFrame Möglicherweise Spaltennamen enthält, enthält die Ausgabedatei diese Namen nicht.
Um Vorhersagen auf eine andere Weise zu schreiben, können Sie Ausgaben in Batchbereitstellungen anpassen.
Warnung
Geben Sie in der run-Funktion keine komplexen Datentypen (oder Listen komplexer Datentypen) anstelle von pandas.DataFrame aus. Diese Ausgaben werden in Zeichenfolgen transformiert und sind dann schwer zu lesen.
Der resultierende DataFrame oder das resultierende Array wird an die angegebene Ausgabedatei angefügt. Es gibt keine Anforderungen an die Kardinalität der Ergebnisse. Eine Datei kann eine oder mehrere Zeilen/Elemente in der Ausgabe generieren. Alle Elemente im resultierenden DataFrame oder Array werden unverändert in die Ausgabedatei geschrieben (vorausgesetzt, output_action ist nicht summary_only).
Python-Pakete für die Bewertung
Jede Bibliothek, die für die Ausführung Ihres Bewertungsskripts erforderlich ist, muss in der Umgebung angegeben werden, in der Ihre Batchbereitstellung ausgeführt wird. Geben Sie für Auswertungs-Skripte Umgebungen für jede Bereitstellung an. In der Regel geben Sie Ihre Anforderungen mithilfe einer conda.yml-Abhängigkeitsdatei an, die wie folgt aussehen kann:
mnist/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]
Weitere Informationen zum Angeben der Umgebung für Ihr Modell finden Sie unter Erstellen einer Batchbereitstellung.
Schreiben von Vorhersagen auf eine andere Weise
Standardmäßig schreibt die Batchbereitstellung die Vorhersagen des Modells in eine einzelne Datei, wie in der Bereitstellung angegeben. In einigen Fällen müssen Sie jedoch die Vorhersagen in mehrere Dateien schreiben. Beispielsweise möchten Sie bei partitionierten Eingabedaten wahrscheinlich auch partitionierte Ausgaben generieren. In diesen Fällen können Sie Ausgaben in Batchbereitstellungen anpassen, um Folgendes anzugeben:
- Das zum Schreiben von Vorhersagen verwendete Dateiformat (CSV, Parquet, JSON usw.)
- Die Art und Weise, wie Daten in der Ausgabe partitioniert werden
Weitere Informationen finden Sie unter Anpassen von Ausgaben in Batchbereitstellungen.
Quellcodeverwaltung von Bewertungsskripts
Wenden Sie Versionskontrolle auf Bewertungsskripts an.
Bewährte Methoden zum Schreiben von Bewertungsskripts
Berücksichtigen Sie beim Schreiben von Bewertungsskripts, die große Datenmengen verarbeiten, verschiedene Faktoren, einschließlich
- Die Größe jeder Datei
- Die Datenmenge in jeder Datei
- Die Menge an Arbeitsspeicher, die zum Lesen der einzelnen Dateien erforderlich ist
- Die Menge an Arbeitsspeicher, die zum Lesen eines gesamten Dateibatches erforderlich ist
- Der Speicherbedarf des Modells
- Der Speicherbedarf des Modells beim Ausführen der Eingabedaten
- Der verfügbare Arbeitsspeicher in Ihrer Compute-Instanz
Batchbereitstellungen verteilen Arbeit auf Dateiebene. Diese Verteilung bedeutet, dass ein Ordner mit 100 Dateien in Minibatches von 10 Dateien jeweils 10 Batches von 10 Dateien generiert (unabhängig von der Größe der beteiligten Dateien). Für Dateien, die zu groß sind, um sie in großen Minibatches zu verarbeiten, teilen Sie die Dateien in kleinere Dateien auf, um eine höhere Parallelität zu erzielen, oder verringern Sie die Anzahl der Dateien pro Minibatch. Derzeit kann die Batchbereitstellung keine Abweichung in der Größenverteilung der Datei berücksichtigen.
Beziehung zwischen dem Grad der Parallelität und dem Bewertungsskript
Ihre Bereitstellungskonfiguration steuert sowohl die Größe jedes Minibatches als auch die Anzahl der Worker auf jedem Knoten. Diese Konfiguration spielt eine Rolle, wenn Sie entscheiden, ob der gesamte Minibatch gelesen werden soll, um den Rückschluss auszuführen, ob der Rückschluss dateiweise ausgeführt werden soll oder ob der Rückschluss zeilenweise ausgeführt werden soll (tabellarisch). Weitere Informationen finden Sie unter Ausführen von Rückschlüssen auf Minibatch-, Datei- oder Zeilenebene.
Wenn Sie mehrere Worker in derselben Instanz betreiben, denken Sie daran, dass alle Worker den Arbeitsspeicher gemeinsam nutzen. Wenn Sie die Anzahl der Worker pro Knoten erhöhen, sollten Sie in der Regel die Minibatchgröße verringern oder die Bewertungsstrategie ändern, wenn die Datengröße und die Berechnungs-SKU gleich bleiben.
Ausführen von Rückschlüssen auf Minibatch-, Datei- oder Zeilenebene
Batchendpunkte rufen die Funktion run() in Ihrem Bewertungsskript einmal pro Minibatch auf. Sie können jedoch entscheiden, ob Sie den Rückschluss über den gesamten Batch, jeweils über eine Datei oder jeweils über eine Zeile für tabellarische Daten ausführen möchten.
Minibatchebene
In der Regel führen Sie eine Ableitung über den gesamten Batch aus, um einen hohen Durchsatz im Batchbewertungsprozess zu erzielen. Dieser Ansatz funktioniert gut, wenn Sie Inferenzen über eine GPU ausführen und das Inferenzgerät sättigen möchten. Sie können auch auf ein Datenladeprogramm vertrauen, das die Batchverarbeitung eigenständig durchführen kann, wenn Daten nicht in den Arbeitsspeicher passen, z.B. TensorFlow oder PyTorch Datenladeprogramme. In diesen Fällen führen Sie Rückschlüsse auf den gesamten Batch aus.
Warnung
Das Ausführen des Rückschlusses auf Batchebene erfordert möglicherweise eine genaue Kontrolle über die Größe der Eingabedaten, um die Arbeitsspeicheranforderungen ordnungsgemäß berücksichtigen und Ausnahmen durch nicht ausreichenden Arbeitsspeicher vermeiden zu können. Ob Sie den gesamten Minibatch im Arbeitsspeicher laden können, hängt von der Größe des Minibatches, der Größe der Instanzen im Cluster und der Anzahl der Worker auf jedem Knoten ab.
Besuchen Sie Bereitstellungen mit hohem Durchsatz, um zu erfahren, wie Sie dies erreichen können. In diesem Beispiel wird ein vollständiger Batch von Dateien gleichzeitig verarbeitet.
Dateiebene
Eine der einfachsten Methoden zum Ausführen der Ableitung besteht darin, alle Dateien im Minibatch zu durchlaufen und dann das Modell über jede Datei auszuführen. In einigen Fällen, z. B. Bildverarbeitung, funktioniert dieser Ansatz gut. Für tabellarische Daten müssen Sie die Anzahl der Zeilen in jeder Datei schätzen. Diese Schätzung zeigt, ob Ihr Modell die Speicheranforderungen verarbeiten kann, um die gesamten Daten in den Arbeitsspeicher zu laden und eine Ableitung darüber durchzuführen. Einige Modelle (insbesondere solche Modelle, die auf wiederkehrenden neuralen Netzwerken basieren), entfalten sich und haben einen Speicherbedarf mit einer potenziell nichtlinearen Zeilenanzahl. Bei einem Modell mit hohen Speicherkosten sollten Sie den Rückschluss auf Zeilenebene in Betracht ziehen.
Tipp
Erwägen Sie das Aufteilen von Dateien, die zu groß sind, um gleichzeitig in mehrere kleinere Dateien zu lesen, um die Parallelisierung zu verbessern.
Um zu erfahren, wie Sie dies tun, besuchen Sie Bildbearbeitung mit Batchbereitstellungen. In diesem Beispiel wird jeweils nur eine Datei verarbeitet.
Zeilenebene (tabellarisch)
Bei Modellen, bei denen ihre Eingabegrößen Herausforderungen darstellen, sollten Sie einen Rückschluss auf Zeilenebene ausführen. Ihre Batchbereitstellung bietet weiterhin Ihr Bewertungsskript mit einem Minibatch von Dateien. Sie lesen jedoch eine Datei nach der anderen, eine Zeile nach der anderen. Dieser Ansatz mag ineffizient erscheinen, aber für einige Deep Learning-Modelle ist es möglicherweise die einzige Möglichkeit, eine Ableitung durchzuführen, ohne Ihre Hardwareressourcen zu skalieren.
Besuchen Sie die Textverarbeitung mit Batchbereitstellungen, um zu erfahren, wie Sie dies tun. In diesem Beispiel wird jeweils nur eine Zeile verarbeitet.
Verwenden von Modellen, die Ordner sind
Die Umgebungsvariable AZUREML_MODEL_DIR enthält den Pfad zum ausgewählten Modellspeicherort. Die init() Funktion verwendet es in der Regel, um das Modell in den Arbeitsspeicher zu laden. Einige Modelle können jedoch ihre Dateien in einem Ordner enthalten, und Sie müssen diese Struktur beim Laden berücksichtigen. Sie können die Ordnerstruktur Ihres Modells wie hier gezeigt bestimmen:
Navigieren Sie zum Azure Machine Learning-Portal.
Navigieren Sie zum Abschnitt Modelle.
Wählen Sie das Modell aus, das Sie bereitstellen möchten, und wählen Sie die Registerkarte Artefakte aus.
Notieren Sie sich den angezeigten Ordner. Dieser Ordner wird angegeben, wenn das Modell registriert ist.
Verwenden Sie diesen Pfad, um das Modell zu laden:
def init():
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment
# The path "model" is the name of the registered model's folder
model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
model = load_model(model_path)