Bereitstellen von MLflow-Modellen in Batchbereitstellungen in Azure Machine Learning
GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)
In diesem Artikel erfahren Sie, wie Sie MLflow-Modelle in Azure Machine Learning für Batchrückschlüsse mithilfe von Batchendpunkten bereitstellen. Wenn Sie MLflow-Modelle für Batchendpunkte bereitstellen, erledigt Azure Machine Learning die folgenden Aufgaben:
- Azure Machine Learning stellt eine MLflow-Basisimage- oder kuratierte Umgebung bereit, die die erforderlichen Abhängigkeiten zum Ausführen eines Machine Learning-Batchauftrags enthält.
- Azure Machine Learning erstellt eine Batchauftragspipeline mit einem Bewertungsskript für Sie, die zum Verarbeiten von Daten mithilfe der Parallelisierung verwendet werden können.
Weitere Informationen zu den unterstützten Eingabedateitypen und Details zur Funktionsweise des MLflow-Modells finden Sie unter Überlegungen zur Bereitstellung in Batchrückschlüssen.
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>
Erkunden des Beispiels
Das Beispiel in diesem Artikel zeigt, wie Sie ein MLflow-Modell für einen Batchendpunkt bereitstellen, um Batchvorhersagen auszuführen. Das MLflow-Modell basiert auf dem UCI Heart Disease Data Set. Die Datenbank enthält 76 Attribute, in diesem Beispiel wird jedoch nur eine Teilmenge von 14 Attributen verwendet. Das Modell versucht, Herzinfarkte bei Patienten mit einem ganzzahligen Wert von 0 (kein Herzinfarkt) bis 1 (Herzinfarkt) vorherzusagen.
Das Modell wird mithilfe eines XGBBoost
-Klassifizierers trainiert. Alle erforderlichen Vorverarbeitungen werden als scikit-learn
-Pipeline gepackt, wodurch das Modell zu einer End-to-End-Pipeline wird, die von Rohdaten ausgehend Vorhersagen trifft.
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 im folgenden Ordner:
cd endpoints/batch/deploy-models/heart-classifier-mlflow
Folgen in Jupyter Notebooks
Sie können diesem Beispiel folgen, indem Sie ein öffentliches Jupyter Notebook verwenden. Öffnen Sie im geklonten Repository das mlflow-for-batch-tabular.ipynb-Notebook.
Bereitstellen des MLflow-Modells
In diesem Abschnitt stellen Sie ein MLflow-Modell für einen Batchendpunkt bereit, sodass Sie für neue Daten einen Batchrückschluss ausführen können. Bevor Sie mit der Bereitstellung fortfahren, müssen Sie sicherstellen, dass Ihr Modell registriert und ein verfügbarer Computecluster im Arbeitsbereich vorhanden ist.
Registrieren des Modells
Batchendpunkte können nur registrierte Modelle bereitstellen. In diesem Artikel verwenden Sie eine lokale Kopie des Modells im Repository. Aus diesem Grund müssen Sie das Modell nur in der Registrierung im Arbeitsbereich veröffentlichen.
Hinweis
Wenn das von Ihnen bereitgestellte Modell bereits registriert ist, können Sie mit dem Abschnitt Erstellen eines Computeclusters fortfahren.
Registrieren Sie das Modell mithilfe des folgenden Befehls:
MODEL_NAME='heart-classifier-mlflow'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
Erstellen eines Computeclusters
Sie müssen sicherstellen, dass die Batchbereitstellungen auf einer verfügbaren Infrastruktur (Compute) ausgeführt werden können. Batchbereitstellungen können auf einer beliebigen Machine Learning Compute-Ressource ausgeführt werden, die bereits im Arbeitsbereich vorhanden ist. Mehrere Batchbereitstellungen können dieselbe Computeinfrastruktur gemeinsam nutzen.
In diesem Artikel arbeiten Sie mit einem Machine Learning Compute-Cluster namens cpu-cluster. Im folgenden Beispiel wird überprüft, ob ein Compute im Arbeitsbereich vorhanden ist. Andernfalls wird ein neues Compute erstellt.
So erstellen Sie ein Computecluster:
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Erstellen eines Batchendpunkts
Zum Erstellen eines Endpunkts benötigen Sie einen Namen und eine Beschreibung. Der Endpunktname wird im URI angezeigt, der Ihrem Endpunkt zugeordnet ist. Aus diesem Grund muss er innerhalb einer Azure-Region eindeutig sein. So kann es beispielsweise nur einen Endpunkt namens mybatchendpoint
in der Region USA, Westen 2 geben.
Platzieren Sie den Namen des Endpunkts in einer Variablen, um später leicht auf ihn verweisen zu können:
Führen Sie den folgenden Befehl aus:
ENDPOINT_NAME="heart-classifier"
Erstellen des Endpunkts:
Um einen neuen Endpunkt zu erstellen, erstellen Sie eine
YAML
-Konfiguration, die dem folgenden Code ähnelt: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 Sie den Endpunkt mit dem folgenden Befehl:
az ml batch-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
Erstellen einer Batchbereitstellung
Bei MLflow-Modellen müssen Sie beim Erstellen der Bereitstellungen keine Umgebung oder ein Bewertungsskript angeben. Die Umgebung oder das Bewertungsskript wird automatisch für Sie erstellt. Sie können die Umgebung oder das Bewertungsskript jedoch angeben, wenn Sie anpassen möchten, wie die Bereitstellung Rückschlüsse erstellt.
Um eine neue Bereitstellung unter dem erstellten Endpunkt zu erstellen, erstellen Sie eine
YAML
-Konfiguration, wie im folgenden Code gezeigt wird. Sie können das vollständige YAML-Schema des Batchendpunkts auf zusätzliche Eigenschaften überprüfen.deployment-simple/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json endpoint_name: heart-classifier-batch name: classifier-xgboost-mlflow description: A heart condition classifier based on XGBoost type: model model: azureml:heart-classifier-mlflow@latest compute: azureml:batch-cluster resources: instance_count: 2 settings: max_concurrency_per_instance: 2 mini_batch_size: 2 output_action: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 300 error_threshold: -1 logging_level: info
Erstellen Sie die Bereitstellung mit dem folgenden Befehl:
az ml batch-deployment create --file deployment-simple/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
Wichtig
Konfigurieren Sie den timeout
-Wert in Ihrer Bereitstellung basierend darauf, wie lange Ihr Modell braucht, um einen Rückschluss auf einen einzelnen Batch durchzuführen. Je größer der Batch, desto höher ist der timeout
-Wert. Denken Sie daran, dass der mini_batch_size
-Wert für die Anzahl der Dateien in einem Batch steht, und nicht für die Anzahl der Stichproben. Wenn Sie mit tabellarischen Daten arbeiten, kann jede Datei mehrere Zeilen enthalten. Dies verlängert die Dauer, die der Batchendpunkt zum Verarbeiten der einzelnen Dateien benötigt. Verwenden Sie in solchen Fällen höhere timeout
-Werte, um Fehler durch Zeitüberschreitung zu vermeiden.
Aufrufen des Endpunkts
Sie können zwar eine bestimmte Bereitstellung innerhalb eines Endpunkts aufrufen, üblicherweise rufen Sie jedoch den Endpunkt selbst auf und überlassen ihm die Entscheidung, welche Bereitstellung verwendet werden soll. Dieser Typ der Bereitstellung wird als „Standard“ bezeichnet. Mithilfe dieses Ansatzes können Sie die Standardbereitstellung und somit das Modell für die Bereitstellung ändern, ohne Ihren Vertrag mit dem Benutzer, der den Endpunkt aufruft, ändern zu müssen.
Verwenden Sie die folgende Anweisung, um die Standardbereitstellung zu aktualisieren:
DEPLOYMENT_NAME="classifier-xgboost-mlflow"
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
Der Batchendpunkt ist jetzt einsatzbereit.
Testen der Bereitstellung
Zum Testen Ihres Endpunkts verwenden Sie eine Stichprobe, die mit dem Modell verwendet werden kann und aus nicht gekennzeichneten Daten besteht, die sich in diesem Repository befinden. Batchendpunkte können nur Daten verarbeiten, die sich in der Cloud befinden und über den Machine Learning-Arbeitsbereich zugänglich sind. In diesem Beispiel laden Sie die Stichprobe in einen Machine Learning-Datenspeicher hoch. Sie erstellen eine Datenressource, die zum Aufrufen des Endpunkts für die Bewertung verwendet werden kann. Denken Sie daran, dass Batchendpunkte Daten akzeptieren, die an verschiedenen Speicherorten platziert werden können.
Erstellen Sie zunächst die Datenressource. Diese Datenressource besteht aus einem Ordner mit mehreren CSV-Dateien, die wir mithilfe von Batchendpunkten parallel verarbeiten möchten. Sie können diesen Schritt überspringen, wenn Ihre Daten bereits als Datenressource registriert sind oder Sie einen anderen Eingabetyp verwenden möchten.
Erstellen Sie eine Datenressourcendefinition in YAML:
heart-dataset-unlabeled.yml
$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json name: heart-dataset-unlabeled description: An unlabeled dataset for heart classification. type: uri_folder path: data
Erstellen Sie dann das Datenobjekt:
az ml data create -f heart-dataset-unlabeled.yml
Rufen Sie nach dem Hochladen der Daten den Endpunkt auf.
Tipp
Beachten Sie, dass in den folgenden Befehlen der Bereitstellungsname nicht im
invoke
-Vorgang angegeben ist. Der Endpunkt leitet den Auftrag automatisch an die Standardbereitstellung weiter, da der Endpunkt nur über eine Bereitstellung verfügt. Sie können eine bestimmte Bereitstellung als Ziel angeben, indem Sie das Argument/den Parameterdeployment_name
angeben.Führen Sie den folgenden Befehl aus:
JOB_NAME = $(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input azureml:heart-dataset-unlabeled@latest --query name -o tsv)
Hinweis
Das Hilfsprogramm
jq
wird möglicherweise nicht bei jeder Installation installiert. Die Installationsanweisungen finden Sie unter jq herunterladen.Ein Batchauftrag wird gestartet, sobald der Befehl zurückgegeben wird. Sie können den Status des Auftrags überwachen, bis er abgeschlossen ist:
Führen Sie den folgenden Befehl aus:
az ml job show -n $JOB_NAME --web
Analysieren von Ausgaben
Ausgabevorhersagen werden in der Datei predictions.csv generiert, wie in der Bereitstellungskonfiguration angegeben. Der Auftrag erzeugt eine Ausgabe namens score, in der diese Datei abgelegt wird. Pro Batchauftrag wird nur eine Datei generiert.
Die Datei ist wie folgt strukturiert:
Pro Datenpunkt wird eine Zeile an das Modell gesendet. Bei tabellarischen Daten bedeutet dies, dass die Datei predictions.csv eine Zeile für jede Zeile enthält, die in den einzelnen verarbeiteten Dateien vorhanden ist. Für andere Datentypen (Bilder, Audio, Text) gibt es eine Zeile pro verarbeiteter Datei.
Die Datei enthält die folgenden Spalten (in der angegebenen Reihenfolge):
row
(optional): Der entsprechende Zeilenindex in der Eingabedatendatei. Diese Spalte gilt nur für tabellarische Eingabedaten. Vorhersagen werden in derselben Reihenfolge wie in der Eingabedatei zurückgegeben. Sie können sich darauf verlassen, dass die Zeilennummer mit der entsprechenden Vorhersage übereinstimmt.prediction
: Die Vorhersage, die den Eingabedaten zugeordnet ist. Dieser Wert wird „wie besehen“ zurückgegeben, d. h. wie er von derpredict().
-Funktion des Modells bereitgestellt wurde.file_name
: Der Name der Datei, aus dem die Daten gelesen wurden. Verwenden Sie in tabellarischen Daten dieses Feld, um zu ermitteln, welche Vorhersage zu den jeweiligen Eingabedaten gehört.
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 Sie die Datei heruntergeladen haben, können Sie sie mit Ihrem bevorzugten Bearbeitungstool öffnen. Im folgenden Beispiel werden die Vorhersagen mithilfe eines Pandas
-Datenrahmens geladen.
import pandas as pd
score = pd.read_csv(
"named-outputs/score/predictions.csv", names=["row", "prediction", "file"]
)
Die Ausgabe erfolgt in Form einer Tabelle:
Zeile | Vorhersage | Datei |
---|---|---|
0 | 0 | heart-unlabeled-0.csv |
1 | 1 | heart-unlabeled-0.csv |
2 | 0 | heart-unlabeled-0.csv |
... | ... | ... |
307 | 0 | heart-unlabeled-3.csv |
Tipp
Beachten Sie, dass die Eingabedaten in diesem Beispiel tabellarische Daten im CSV-Format enthalten. Es gibt vier verschiedene Eingabedateien: heart-unlabeled-0.csv, heart-unlabeled-1.csv, heart-unlabeled-2.csv, und heart-unlabeled-3.csv.
Überlegungen zu Batchrückschlüssen
Machine Learning unterstützt die Bereitstellung von MLflow-Modellen auf Batchendpunkten ohne Angeben eines Bewertungsskripts. Dieser Ansatz ist eine bequeme Möglichkeit zum Bereitstellen von Modellen, die – vergleichbar mit einer Batchverarbeitung – die Verarbeitung großer Datenmengen erfordern. Machine Learning verwendet Informationen in der MLflow-Modellspezifikation, um den Rückschlussprozess zu orchestrieren.
Erkunden der Verteilung der Arbeit auf Worker
Batchendpunkte verteilen Arbeit auf Dateiebene für strukturierte und unstrukturierte Daten. Daher werden nur URI-Datei und URI-Ordner für dieses Feature unterstützt. Jeder Worker verarbeitet Batches von Mini batch size
-Dateien gleichzeitig. Bei tabellarischen Daten berücksichtigen Batchendpunkte beim Verteilen der Arbeit nicht die Anzahl der Zeilen innerhalb jeder Datei.
Warnung
Geschachtelte Ordnerstrukturen werden beim Rückschließen nicht erkundet. Wenn Sie Ihre Daten mithilfe von Ordnern partitionieren, stellen Sie sicher, dass Sie die Struktur zuvor vereinfachen.
Batchbereitstellungen rufen die predict
.Funktion des MLflow-Modells einmal pro Datei auf. Bei CSV-Dateien mit mehreren Zeilen kann dies zu hoher Speicherauslastung im zugrunde liegenden Compute führen. Dieses Verhalten kann die vom Modell benötigte Zeit erhöhen, um eine einzelne Datei zu bewerten, insbesondere bei teuren Modellen wie großen Sprachmodellen (Large Language Models, LLMs). Wenn Sie mehrere „Out-of-Memory“-Ausnahmen oder Timeout-Einträge im Protokoll feststellen, sollten Sie erwägen, die Daten in kleinere Dateien mit weniger Zeilen aufzuteilen oder eine Batchverarbeitung auf Zeilenebene innerhalb des Modellbewertungsskripts zu implementieren.
Überprüfen der Unterstützung für Dateitypen
Die folgenden Datentypen werden für Batchrückschlüsse unterstützt, wenn MLflow-Modelle ohne eine Umgebung oder ein Bewertungsskript bereitgestellt werden. Um einen anderen Dateityp zu verarbeiten oder einen Rückschluss auf andere Art auszuführen, können Sie die Bereitstellung erstellen, indem Sie die MLflow-Modellimplementierung mithilfe eines Bewertungsskripts anpassen.
Dateierweiterung | Als Modelleingabe zurückgegebener Typ | Signaturanforderung |
---|---|---|
.csv , .parquet , .pqt |
pd.DataFrame |
ColSpec . Wenn nicht angegeben, wird die Typisierung von Spalten nicht erzwungen. |
.png , .jpg , .jpeg , .tiff , .bmp , .gif |
np.ndarray |
TensorSpec . Die Eingabe wird so umgestaltet, dass sie der Form des Tensors entspricht, falls vorhanden. Wenn keine Signatur verfügbar ist, erfolgt für Tensoren des Typs np.uint8 das Rückschließen. Weitere Informationen finden Sie unter Überlegungen zu MLflow-Modellen, die Bilder verarbeiten. |
Warnung
Jegliche nicht unterstützte Datei, die möglicherweise in den Eingabedaten enthalten ist, führt dazu, dass der Auftrag fehlschlägt. In solchen Fällen wir Ihnen ein Fehler angezeigt, der dem folgenden ähnelt: FEHLER:azureml:Fehler bei der Verarbeitung der Eingabedatei: '/mnt/batch/tasks/.../a-given-file.avro'. Der Dateityp 'avro' wird nicht unterstützt..
Informationen zur Signaturerzwingung für MLflow-Modelle
Batchbereitstellungsaufträge erzwingen die Datentypen der Eingabe beim Lesen der Daten durch die Verwendung der verfügbaren MLflow-Modellsignatur. Dies stellt sicher, dass Ihre Dateneingabe den in der Modellsignatur angegebenen Typen entspricht. Wenn die Daten nicht wie erwartet geparst werden können, schlägt der Auftrag mit einem Fehler fehl, der dem folgenden ähnelt: FEHLER:azureml:Fehler bei der Verarbeitung der Eingabedatei: '/mnt/batch/tasks/.../a-given-file.csv'. Ausnahme: Ungültiges Literal für int() mit Basis 10: 'Wert'.
Tipp
Signaturen in MLflow-Modellen sind optional, werden jedoch dringend empfohlen. Sie bieten eine bequeme Möglichkeit zum frühzeitigen Erkennen von Datenkompatibilitätsproblemen. Weitere Informationen zum Protokollieren von Modellen mit Signaturen finden Sie unter Protokollierungsmodelle mit einer benutzerdefinierten Signatur, Umgebung oder Beispielen.
Sie können die Modellsignatur Ihres Modells überprüfen, indem Sie die Datei MLmodel
öffnen, die dem MLflow-Modell zugeordnet ist. Weitere Informationen darüber, wie Signaturen in MLflow funktionieren, finden Sie unter Signaturen in MLflow.
Untersuchen der Unterstützung von Varianten
Batchbereitstellungen unterstützen nur die Bereitstellung von MLflow-Modellen mit einer pyfunc
-Variante. Informationen zum Bereitstellen anderer Varianten finden Sie unter Anpassen der Modellimplementierung mithilfe eines Bewertungsskripts.
Anpassen der Modellimplementierungen mithilfe eines Bewertungsskripts
MLflow-Modelle können für Batchendpunkte bereitgestellt werden, ohne ein Bewertungsskript in der Bereitstellungsdefinition anzugeben. Sie können sich jedoch dafür entscheiden, diese Datei (in der Regel als Batchtreiber bezeichnet) anzugeben, um die Ausführung des Rückschlusses anzupassen.
Typischerweise wählen Sie diesen Workflow für folgende Szenarien aus:
- Verarbeiten von Dateitypen, die von Batchbereitstellungen von MLflow-Implementierungen nicht unterstützt werden.
- Anpassen der Ausführung des Modells, z. B. Verwendung einer bestimmten Variante, um es mit der
mlflow.<flavor>.load()
-Funktion zu laden. - Durchführen einer Vorab- oder Nachverarbeitung in Ihrer Bewertungsroutine durchführen, wenn sie nicht vom Modell selbst durchgeführt wird.
- Anpassen der Darstellung des Modells, das mit tabellarischen Daten nicht gut darstellbar ist, z. B. ein Tensordiagramm, das ein Bild darstellt.
- Zulassen, dass das Modell Daten in Datenblöcken liest, da es aufgrund von Speicherbeschränkungen nicht alle Dateien auf einmal verarbeiten kann.
Wichtig
Um ein Bewertungsskript für eine MLflow-Modellimplementierung anzugeben, müssen Sie die Umgebung angeben, in der die Bereitstellung ausgeführt wird.
Verwenden des Bewertungsskripts
Führen Sie die folgenden Schritte aus, um ein MLflow-Modell mit einem benutzerdefinierten Bewertungsskript bereitzustellen:
Identifizieren Sie den Ordner, in dem sich Ihr MLflow-Modell befindet.
Navigieren Sie im Azure Machine Learning-Portalzu Modellen.
Wählen Sie das Modell aus, das Sie bereitstellen möchten, und dann die Registerkarte Artefakte aus.
Notieren Sie sich den angezeigten Ordner. Dieser Ordner wurde beim Registrieren des Modells angegeben.
Erstellen Sie ein Bewertungsskript. Beachten Sie, dass der vorherige Ordnername
model
in derinit()
-Funktion enthalten ist.deployment-custom/code/batch_driver.py
# Copyright (c) Microsoft. All rights reserved. # Licensed under the MIT license. import os import glob import mlflow import pandas as pd import logging def init(): global model global model_input_types global model_output_names # 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 model_path = glob.glob(os.environ["AZUREML_MODEL_DIR"] + "/*/")[0] # Load the model, it's input types and output names model = mlflow.pyfunc.load(model_path) if model.metadata and model.metadata.signature: if model.metadata.signature.inputs: model_input_types = dict( zip( model.metadata.signature.inputs.input_names(), model.metadata.signature.inputs.pandas_types(), ) ) if model.metadata.signature.outputs: if model.metadata.signature.outputs.has_input_names(): model_output_names = model.metadata.signature.outputs.input_names() elif len(model.metadata.signature.outputs.input_names()) == 1: model_output_names = ["prediction"] else: logging.warning( "Model doesn't contain a signature. Input data types won't be enforced." ) def run(mini_batch): print(f"run method start: {__file__}, run({len(mini_batch)} files)") data = pd.concat( map( lambda fp: pd.read_csv(fp).assign(filename=os.path.basename(fp)), mini_batch ) ) if model_input_types: data = data.astype(model_input_types) # Predict over the input data, minus the column filename which is not part of the model. pred = model.predict(data.drop("filename", axis=1)) if pred is not pd.DataFrame: if not model_output_names: model_output_names = ["pred_col" + str(i) for i in range(pred.shape[1])] pred = pd.DataFrame(pred, columns=model_output_names) return pd.concat([data, pred], axis=1)
Erstellen Sie eine Umgebung, in der das Bewertungsskript ausgeführt werden kann. Da das Modell in diesem Beispiel ein MLflow-Modell ist, werden die Conda-Anforderungen auch im Modellpaket angegeben. Weitere Informationen zu MLflow-Modellen und den enthaltenen Dateien finden Sie unter Das MLmodel-Format.
In diesem Schritt erstellen Sie die Umgebung mithilfe der Conda-Abhängigkeiten aus der Datei. Sie müssen auch das
azureml-core
-Paket einschließen, das für Batchbereitstellungen benötigt wird.Tipp
Wenn Ihr Modell bereits in der Modellregistrierung registriert ist, können Sie die Ihrem Modell zugeordnete
conda.yml
-Datei herunterladen und kopieren. Die Datei ist in Azure Machine Learning Studio unter Modelle>Ihr Modell aus der Liste auswählen>Artefakte verfügbar. Wählen Sie im Stammordner dieconda.yml
-Datei und dann Herunterladen aus, oder kopieren Sie ihren Inhalt.Wichtig
In diesem Beispiel wird eine Conda-Umgebung verwendet, die unter
/heart-classifier-mlflow/environment/conda.yaml
angegeben ist. Diese Datei wurde erstellt, indem die ursprüngliche MLflow-Conda-Abhängigkeitsdatei kombiniert und dasazureml-core
-Paket hinzugefügt wurde. Sie können dieconda.yml
-Datei nicht direkt aus dem Modell verwenden.Die Umgebungsdefinition wird als anonyme Umgebung in die Bereitstellungsdefinition selbst aufgenommen. Sie sehen die folgenden Zeilen in der Bereitstellung:
environment: name: batch-mlflow-xgboost image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml
Konfigurieren der Bereitstellung:
Um eine neue Bereitstellung unter dem erstellten Endpunkt zu erstellen, erstellen Sie eine
YAML
-Konfiguration, wie im folgenden Codeschnipsel gezeigt wird. Sie können das vollständige YAML-Schema des Batchendpunkts auf zusätzliche Eigenschaften überprüfen.deployment-custom/deployment.yml
$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 type: model model: azureml:heart-classifier-mlflow@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: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 300 error_threshold: -1 logging_level: info
Erstellen Sie die Bereitstellung:
Führen Sie den folgenden Code aus:
az ml batch-deployment create --file deployment-custom/deployment.yml --endpoint-name $ENDPOINT_NAME
Der Batchendpunkt ist jetzt einsatzbereit.
Bereinigen von Ressourcen
Nachdem Sie die Übung abgeschlossen haben, löschen Sie die nicht mehr benötigten Ressourcen.
Führen Sie den folgenden Code aus, um den Batchendpunkt und alle seine zugrunde liegenden Bereitstellungen zu löschen:
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes
Dieser Befehl löscht keine Batchbewertungsaufträge.