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. 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
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 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. Informationen zum Erstellen eines Arbeitsbereichs finden Sie unter Verwalten von Azure Machine Learning-Arbeitsbereichen.
Stellen Sie sicher, dass Sie über die folgenden Berechtigungen im Machine Learning-Arbeitsbereich verfügen:
- Erstellen oder Verwalten von Batchendpunkten und Batchbereitstellungen: Verwenden Sie die Rolle für Besitzer oder Mitwirkende oder eine benutzerdefinierte Rolle, die
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
zulässt. - Erstellen von Azure Resource Manager-Bereitstellungen in der Arbeitsbereichsressourcengruppe: Verwenden Sie „Besitzer“-, „Mitwirkender“- oder eine benutzerdefinierte Rolle, die
Microsoft.Resources/deployments/write
in der Ressourcengruppe zulässt, in der der Arbeitsbereich bereitgestellt wird.
- Erstellen oder Verwalten von Batchendpunkten und Batchbereitstellungen: Verwenden Sie die Rolle für Besitzer oder Mitwirkende oder eine benutzerdefinierte Rolle, die
Installieren Sie die folgende Software, um mit Machine Learning zu arbeiten:
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 werden in Version 2.7 der
ml
-Erweiterung für die Azure CLI 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 wichtigste Ressource für maschinelles Lernen. Es bietet einen zentralen Ort für die Arbeit mit allen Artefakten, die Sie bei der Verwendung von 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 die Werte für Ihre Abonnement-ID, Ihren Arbeitsbereich, Ihren Standort und Ihre Ressourcengruppe 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