Anpassen von Ausgaben in Batchbereitstellungen
GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)
In dieser Anleitung wird erläutert, wie Sie Bereitstellungen erstellen, die benutzerdefinierte Ausgaben und Dateien generieren. Manchmal benötigen Sie mehr Kontrolle darüber, was als Ausgabe von Batch-Rückschlussaufträgen geschrieben wurde. Zu diesen Fällen gehören die folgenden Situationen:
- Sie müssen steuern, wie Vorhersagen in der Ausgabe geschrieben werden. Sie möchten beispielsweise die Vorhersage an die ursprünglichen Daten anfügen, wenn die Daten tabellarisch sind.
- Sie müssen Ihre Vorhersagen in einem anderen Dateiformat als dem schreiben, das standardmäßig von Batchbereitstellungen unterstützt wird.
- Ihr Modell ist ein generatives Modell, das die Ausgabe nicht in einem tabellarischen Format schreiben kann. Beispielsweise Modelle, die Bilder als Ausgabe erzeugen.
- Ihr Modell erzeugt mehrere tabellarische Dateien anstelle einer einzelnen Datei. Beispielsweise Modelle, die Vorhersagen unter Berücksichtigung mehrerer Szenarien erstellen.
Batchbereitstellungen ermöglichen es Ihnen, die Ausgabe der Aufträge zu steuern, indem Sie direkt in die Ausgabe des Batch-Bereitstellungsauftrags schreiben können. In diesem Tutorial erfahren Sie, wie Sie ein Modell bereitstellen, um Batchrückschlüsse durchzuführen und die Ausgaben im Format Parquet zu schreiben, indem Sie die Vorhersagen an die ursprünglichen Eingabedaten anfügen.
Informationen zu diesem Beispiel
Dieses Beispiel zeigt, wie Sie ein Modell bereitstellen können, um einen Batchrückschluss durchzuführen und anzupassen, wie Ihre Vorhersagen in der Ausgabe geschrieben werden. Das Modell basiert auf dem UCI Heart Disease-Dataset. Die Datenbank enthält 76 Attribute, aber in diesem Beispiel wird eine Teilmenge von 14 verwendet. Das Modell versucht, das Vorhandensein einer Herzerkrankung bei einem Patienten vorherzusagen. Der Wert ist eine ganze Zahl zwischen 0 (nicht vorhanden) und 1 (vorhanden).
Das Modell wurde mit einem XGBBoost
-Klassifizierer trainiert, und alle erforderlichen Vorverarbeitungen wurden in einer scikit-learn
-Pipeline zusammengefasst, was dieses Modell zu einer End-to-End-Pipeline macht, die von Rohdaten bis zu Vorhersagen reicht.
Das Beispiel in diesem Artikel basiert auf Codebeispielen, die im Repository azureml-examples enthalten sind. Wenn Sie die Befehle lokal ausführen möchten, ohne YAML und andere Dateien kopieren oder einfügen zu müssen, verwenden Sie die folgenden Befehle, um das Repository zu klonen und zum Ordner für Ihre Programmiersprache zu wechseln:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Die Dateien für dieses Beispiel befinden sich in:
cd endpoints/batch/deploy-models/custom-outputs-parquet
Nachvollziehen in einem Jupyter Notebook
Es gibt ein Jupyter Notebook, das Sie verwenden können, um diesem Beispiel zu folgen. Öffnen Sie in dem geklonten Repository das Notebook mit dem Namen: custom-output-batch.ipynb.
Voraussetzungen
Ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Ein Azure Machine Learning-Arbeitsbereich. Informationen zum Erstellen eines Arbeitsbereichs finden Sie unter Verwalten von Azure Machine Learning-Arbeitsbereichen.
Die folgenden Berechtigungen im Azure Machine Learning-Arbeitsbereich:
- Zum Erstellen oder Verwalten von Batchendpunkten und Bereitstellungen: Verwenden Sie die Rolle „Besitzer“ oder „Mitwirkender“ oder eine benutzerdefinierte Rolle, der die
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
-Berechtigungen zugewiesen wurden. - Zum Erstellen von Azure Resource Manager-Bereitstellungen in der Ressourcengruppe des Arbeitsbereichs: Verwenden Sie die Rolle „Besitzer“ oder „Mitwirkender“ oder eine benutzerdefinierte Rolle, der die Berechtigung
Microsoft.Resources/deployments/write
in der Ressourcengruppe zugewiesen wurde, in der der Arbeitsbereich bereitgestellt wird.
- Zum Erstellen oder Verwalten von Batchendpunkten und Bereitstellungen: Verwenden Sie die Rolle „Besitzer“ oder „Mitwirkender“ oder eine benutzerdefinierte Rolle, der die
Azure Machine Learning CLI oder Azure Machine Learning SDK für Python:
Führen Sie den folgenden Befehl aus, um die Azure CLI und die
ml
-Erweiterung für Azure Machine Learning zu installieren:az extension add -n ml
Bereitstellungen der Pipelinekomponenten für Batchendpunkte wurden in Version 2.7 der
ml
-Erweiterung für die Azure-Befehlszeilenschnittstelle eingeführt. Verwenden Sie denaz extension update --name ml
-Befehl, um die aktuelle Version abzurufen.
Herstellen einer Verbindung mit Ihrem Arbeitsbereich
Der Arbeitsbereich ist die Ressource der obersten Ebene für Azure Machine Learning. Er bietet einen zentralen Ort für die Arbeit mit allen Artefakten, die Sie bei der Verwendung von Azure Machine Learning erstellen. In diesem Abschnitt stellen Sie eine Verbindung mit dem Arbeitsbereich her, in dem Sie Ihre Bereitstellungsaufgaben durchführen.
Geben Sie im folgenden Befehl Ihre Abonnement-ID, den Arbeitsbereichsnamen, den Ressourcengruppennamen und den Standort ein:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Erstellen einer Batchbereitstellung mit einer benutzerdefinierten Ausgabe
In diesem Beispiel erstellen Sie eine Bereitstellung, die direkt in den Ausgabeordner des Batch-Bereitstellungsauftrags schreiben kann. Die Bereitstellung verwendet dieses Feature, um benutzerdefinierte Parquet-Dateien zu schreiben.
Registrieren des Modells
Sie können registrierte Modelle nur mithilfe eines Batchendpunkts bereitstellen. In diesem Fall ist bereits eine lokale Kopie des Modells im Repository vorhanden, daher muss das Modell nur in der Registrierung im Arbeitsbereich veröffentlicht werden. Sie können diesen Schritt überspringen, wenn das Modell, das Sie bereitstellen möchten, bereits registriert ist.
MODEL_NAME='heart-classifier-sklpipe'
az ml model create --name $MODEL_NAME --type "custom_model" --path "model"
Erstellen Sie ein Bewertungsskript.
Sie müssen ein Bewertungsskript erstellen, das die von der Batchbereitstellung bereitgestellten Eingabedaten lesen und die Scores des Modells zurückgeben kann. Sie werden auch direkt in den Ausgabeordner des Auftrags schreiben. Zusammenfassend führt das vorgeschlagene Bewertungsskript Folgendes aus:
- Es liest die Eingabedaten als CSV-Dateien.
- Es führt eine
predict
-Funktion des MLflow-Modells für die Eingabedaten aus. - Es fügt die Vorhersagen zusammen mit den Eingabedaten an einen
pandas.DataFrame
an. - Es schreibt die Daten in eine Datei, die denselben Namen wie die Eingabedatei trägt, jedoch im Format
parquet
.
code/batch_driver.py
import os
import pickle
import glob
import pandas as pd
from pathlib import Path
from typing import List
def init():
global model
global output_path
# AZUREML_MODEL_DIR is an environment variable created during deployment
# It is the path to the model folder
# Please provide your model's folder name if there's one:
output_path = os.environ["AZUREML_BI_OUTPUT_PATH"]
model_path = os.environ["AZUREML_MODEL_DIR"]
model_file = glob.glob(f"{model_path}/*/*.pkl")[-1]
with open(model_file, "rb") as file:
model = pickle.load(file)
def run(mini_batch: List[str]):
for file_path in mini_batch:
data = pd.read_csv(file_path)
pred = model.predict(data)
data["prediction"] = pred
output_file_name = Path(file_path).stem
output_file_path = os.path.join(output_path, output_file_name + ".parquet")
data.to_parquet(output_file_path)
return mini_batch
Hinweise:
- Beachten Sie, wie die Umgebungsvariable
AZUREML_BI_OUTPUT_PATH
verwendet wird, um Zugriff auf den Ausgabepfad des Bereitstellungsauftrags zu erhalten. - Die Funktion
init()
füllt eine globale Variable mit dem Namenoutput_path
aus, die später verwendet werden kann, um zu ermitteln, wohin geschrieben werden soll. - Die Methode
run
gibt eine Liste der verarbeiteten Dateien zurück. Es ist erforderlich, dass die Funktionrun
einlist
- oder einpandas.DataFrame
-Objekt zurückgibt.
Warnung
Berücksichtigen Sie, dass alle Batch-Executors gleichzeitig Schreibzugriff auf diesen Pfad haben. Das bedeutet, dass Sie Parallelität berücksichtigen müssen. Stellen Sie in diesem Fall sicher, dass jeder Executor seine eigene Datei unter Verwendung des Namens der Eingabedatei als Namen des Ausgabeordners schreibt.
Erstellen des Endpunkts
Sie erstellen nun einen Batchendpunkt mit dem Namen heart-classifier-batch
, in dem das Modell bereitgestellt wird.
Entscheiden Sie sich für den Namen des Endpunkts. Der Name des Endpunkts wird im dem Endpunkt zugeordneten URI angezeigt, sodass Batch-Endpunktnamen innerhalb einer Azure-Region eindeutig sein müssen. Beispielsweise kann es nur einen Endpunkt namens
mybatchendpoint
inwestus2
geben.Platzieren Sie in diesem Fall den Namen des Endpunkts in einer Variablen, damit Sie später problemlos darauf verweisen können.
ENDPOINT_NAME="heart-classifier-custom"
Konfigurieren Sie Ihren Batchendpunkt.
Die folgende YAML-Datei definiert einen Batchendpunkt:
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: heart-classifier-batch description: A heart condition classifier for batch inference auth_mode: aad_token
Erstellen des Endpunkts:
az ml batch-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
Erstellen Sie die Bereitstellung
Führen Sie die nächsten Schritte aus, um eine Bereitstellung mithilfe des vorherigen Bewertungsskripts zu erstellen:
Erstellen Sie zunächst eine Umgebung, in der das Bewertungsskript ausgeführt werden kann:
Für die Azure Machine Learning CLI sind keine weiteren Schritte erforderlich. Die Umgebungsdefinition wird in die Bereitstellungsdatei aufgenommen.
environment: name: batch-mlflow-xgboost image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml
Erstellen Sie die Bereitstellung. Beachten Sie, dass
output_action
jetzt aufSUMMARY_ONLY
festgelegt ist.Hinweis
In diesem Beispiel wird angenommen, dass Sie über einen Computecluster mit dem Namen
batch-cluster
verfügen. Ändern Sie diesen Namen entsprechend.Um eine neue Bereitstellung unter dem erstellten Endpunkt zu erstellen, erstellen Sie eine YAML-Konfiguration wie die folgende. Sie können das vollständige YAML-Schema des Batchendpunkts auf zusätzliche Eigenschaften überprüfen.
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json endpoint_name: heart-classifier-batch name: classifier-xgboost-custom description: A heart condition classifier based on XGBoost and Scikit-Learn pipelines that append predictions on parquet files. type: model model: azureml:heart-classifier-sklpipe@latest environment: name: batch-mlflow-xgboost image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml code_configuration: code: code scoring_script: batch_driver.py compute: azureml:batch-cluster resources: instance_count: 2 settings: max_concurrency_per_instance: 2 mini_batch_size: 2 output_action: summary_only retry_settings: max_retries: 3 timeout: 300 error_threshold: -1 logging_level: info
Erstellen Sie dann die Bereitstellung mit dem folgenden Befehl:
az ml batch-deployment create --file deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
An diesem Punkt ist unser Batchendpunkt zur Verwendung bereit.
Testen der Bereitstellung
Zum Testen Ihres Endpunkts verwenden Sie eine Stichprobe für nicht gekennzeichnete Daten, die sich in diesem Repository befinden, das mit dem Modell verwendet werden kann. Batch-Endpunkte können nur Daten verarbeiten, die sich in der Cloud befinden und über den Azure Machine Learning-Arbeitsbereich zugänglich sind. In diesem Beispiel laden Sie sie in einen Azure Machine Learning-Datenspeicher hoch. Sie erstellen eine Datenressource, die zum Aufrufen des Endpunkts für die Bewertung verwendet werden kann. Beachten Sie jedoch, dass Batchendpunkte Daten akzeptieren, die an mehreren verschiedenen Speicherorten platziert werden können.
Aufrufen des Endpunkts mit Daten aus einem Speicherkonto:
JOB_NAME = $(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data --query name -o tsv)
Hinweis
Das Hilfsprogramm
jq
wird möglicherweise nicht bei jeder Installation installiert. Sie können Anweisungen auf GitHub erhalten.Ein Batchauftrag wird gestartet, sobald der Befehl zurückgegeben wird. Sie können den Status des Auftrags überwachen, bis er abgeschlossen ist:
az ml job show -n $JOB_NAME --web
Analysieren der Ausgaben
Der Auftrag generiert eine benannte Ausgabe mit dem Namen score
, in der alle generierten Dateien platziert werden. Da Sie direkt in das Verzeichnis geschrieben haben, eine Datei pro Eingabedatei, können Sie erwarten, dass die gleiche Anzahl von Dateien vorhanden ist. Benennen Sie in diesem Beispiel die Ausgabedateien genauso wie die Eingabedateien, aber mit der Erweiterung „Parquet“.
Hinweis
Beachten Sie, dass eine predictions.csv-Datei auch im Ausgabeordner enthalten ist. Diese Datei enthält die Zusammenfassung der verarbeiteten Dateien.
Sie können die Ergebnisse des Auftrags mithilfe des Auftragsnamens herunterladen:
Verwenden Sie den folgenden Befehl, um die Vorhersagen herunterzuladen:
az ml job download --name $JOB_NAME --output-name score --download-path ./
Nachdem die Datei heruntergeladen wurde, können Sie sie mithilfe Ihres bevorzugten Tools öffnen. Im folgenden Beispiel werden die Vorhersagen mithilfe des Datenrahmens Pandas
geladen.
import pandas as pd
import glob
output_files = glob.glob("named-outputs/score/*.parquet")
score = pd.concat((pd.read_parquet(f) for f in output_files))
score
Die Ausgabe sieht wie folgt aus:
age | sex | ... | Thal | prediction |
---|---|---|---|---|
63 | 1 | ... | fixed | 0 |
67 | 1 | ... | normal | 1 |
67 | 1 | ... | umkehrbar | 0 |
37 | 1 | ... | normal | 0 |
Bereinigen von Ressourcen
Führen Sie den folgenden Code aus, um den Batchendpunkt und alle zugrundeliegenden Bereitstellungen zu löschen. Batch-Bewertungsaufträge werden nicht gelöscht.
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes