Bereitstellen von MLflow-Modellen in Batchbereitstellungen

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 mit Batchendpunkten bereitstellen. Bei der Bereitstellung von MLflow-Modellen für Batchendpunkte, Azure Machine Learning:

  • Stellt eine MLflow-Basisimage-/kuratierte Umgebung bereit, die die erforderlichen Abhängigkeiten zum Ausführen eines Azure Machine Learning-Batchauftrags enthält.
  • Erstellt eine Batchauftragspipeline mit einem Bewertungsskript für Sie, die zum Verarbeiten von Daten mithilfe der Parallelisierung verwendet werden können.

Hinweis

Weitere Informationen zu den unterstützten Eingabedateitypen und Details zur Funktionsweise des MLflow-Modells finden Sie unter Überlegungen bei der Bereitstellung in Batchrückschlüssen.

Über dieses Beispiel

In diesem Beispiel wird gezeigt, wie Sie ein MLflow-Modell für einen Batchendpunkt bereitstellen können, um Batchvorhersagen auszuführen. Dieses Beispiel verwendet ein auf dem UCI Heart Disease Data Set (UCI-Dataset Herzerkrankungen) basierendes MLflow-Modell. Die Datenbank enthält 76 Attribute, von denen wir eine Teilmenge von 14 verwenden. Das Modell versucht, das Vorhandensein einer Herzerkrankung bei einem Patienten vorherzusagen. Der Wert ist eine ganze Zahl, entweder 0 (nicht vorhanden) oder 1 (vorhanden).

Das Modell wurde mit einem XGBBoost-Klassifizierer trainiert, und alle erforderlichen Vorverarbeitungen wurden in einer scikit-learn-Pipeline zusammengefasst, wodurch dieses Modell eine End-to-End-Pipeline ist, die von den Rohdaten bis zu den 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/heart-classifier-mlflow

Folgen in Jupyter Notebooks

Sie können diesem Beispiel in den folgenden Notebooks folgen. Öffnen Sie im geklonten Repository das Notebook: mlflow-for-batch-tabular.ipynb.

Voraussetzungen

Stellen Sie vor dem Ausführen der Schritte in diesem Artikel sicher, dass Sie über die folgenden erforderlichen Komponenten verfügen:

  • 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 keins haben, führen Sie die Schritte im Artikel Verwalten von Azure Machine Learning-Arbeitsbereichen aus, um einen Arbeitsbereich zu erstellen.

  • Stellen Sie sicher, dass Sie im Arbeitsbereich über die folgenden Berechtigungen 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 ARM-Bereitstellungen in der Arbeitsbereichsressourcengruppe: Verwenden Sie die Rolle für Besitzer oder Mitwirkende oder eine benutzerdefinierte Rolle, die Microsoft.Resources/deployments/write in 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:

    Die Azure CLI und die ml-Erweiterung für Azure Machine Learning.

    az extension add -n ml
    

    Hinweis

    Bereitstellungen der Pipelinekomponenten für Batchendpunkte wurden in Version 2.7 der Erweiterung ml für die Azure CLI eingeführt. Verwenden Sie az extension update --name ml, um die letzte Version davon zu erhalten.

Herstellen einer Verbindung mit Ihrem Arbeitsbereich

Der Arbeitsbereich ist die Ressource der obersten Ebene für Azure Machine Learning und ein zentraler Ort für die Arbeit mit allen Artefakten, die Sie während der Nutzung von Azure Machine Learning erstellen. In diesem Abschnitt stellen wir eine Verbindung mit dem Arbeitsbereich her, in dem Sie die Bereitstellung vornehmen werden.

Übergeben Sie die Werte für Ihre Abonnement-ID, Ihren Arbeitsbereich, Ihren Standort und Ihre Ressourcengruppe im folgenden Code:

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Schritte

Führen Sie die folgenden Schritte aus, um ein MLflow-Modell für einen Batchendpunkt für die Ausführung des Batchrückschlusses über neue Daten bereitzustellen:

  1. Der Batch-Endpunkt kann nur registrierte Modelle 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-mlflow'
    az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
    
  2. Bevor Sie fortfahren, müssen wir sicherstellen, dass die Batchbereitstellungen, die wir erstellen möchten, in einer bestimmten Infrastruktur (Compute) ausgeführt werden können. Batchbereitstellungen können auf einer beliebigen Azure Machine Learning-Computeressource ausgeführt werden, die bereits im Arbeitsbereich vorhanden ist. Das bedeutet, dass mehrere Batchbereitstellungen dieselbe Computeinfrastruktur gemeinsam nutzen können. In diesem Beispiel arbeiten wir in einem Azure Machine Learning-Computecluster mit der Bezeichnung cpu-cluster. Überprüfen wir, ob die Computeinfrastruktur im Arbeitsbereich vorhanden ist oder anderweitig erstellt wird.

    Erstellen Sie einen Computecluster wie folgt:

    az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
    
  3. Jetzt ist es an der Zeit, den Batchendpunkt und die Bereitstellung zu erstellen. Beginnen wir zunächst mit dem Endpunkt. Endpunkte benötigen nur einen Namen und eine Beschreibung, um erstellt zu werden. Der Name des Endpunkts wird in dem URI angezeigt, der Ihrem Endpunkt zugeordnet ist. Daher müssen die Namen der Batchendpunkte innerhalb einer Azure-Region eindeutig sein. Beispielsweise kann es nur einen Endpunkt namens mybatchendpoint in westus2 geben.

    In diesem Fall platzieren wir den Namen des Endpunkts in einer Variable, damit wir später problemlos darauf verweisen können.

    ENDPOINT_NAME="heart-classifier"
    
  4. Erstellen des Endpunkts:

    Um einen neuen Endpunkt zu erstellen, erstellen Sie eine YAML-Konfiguration wie folgt:

    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 dann den Endpunkt mit dem folgenden Befehl:

    az ml batch-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
    
  5. Erstellen wir nun die Bereitstellung. Bei MLflow-Modellen müssen Sie beim Erstellen der Bereitstellungen keine Umgebung oder ein Bewertungsskript angeben, da sie bzw. es für Sie erstellt wird. Sie können sie jedoch angeben, wenn Sie anpassen möchten, wie die Bereitstellung in Rückschlüssen erfolgt.

    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.

    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 dann 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 timeout in Ihrer Bereitstellung basierend darauf, wie lange es dauert, bis Ihr Modell auf ein einzelnen Batch rückschließen kann. Je größer die Batchgröße ist, desto länger muss dieser Wert sein. Erinnern Sie sich, dass mini_batch_size die Anzahl der Dateien in einem Batch anzeigt, nicht die Anzahl der Stichproben. Beim Arbeiten mit tabellarischen Daten kann jede Datei mehrere Zeilen enthalten, welche die Dauer erhöhen, die für die Verarbeitung der einzelnen Dateien für den Batchendpunkt benötigt wird. Verwenden Sie hohe Werte für diese Fälle, um Timeoutfehler zu vermeiden.

  6. 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. Eine derartige Bereitstellung wird als "Standard"-Bereitstellung bezeichnet. Dadurch erhalten Sie die Möglichkeit, die Standardbereitstellung und somit das Modell für die Bereitstellung zu ändern, ohne den Vertrag mit dem Benutzer ändern zu müssen, der den Endpunkt aufruft. 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
    
  7. An diesem Punkt ist unser Batchendpunkt zur Verwendung bereit.

Durchtesten der Bereitstellung

Zum Testen unseres Endpunkts verwenden wir eine Stichprobe für nicht gekennzeichnete Daten, die sich in diesem Repository befinden und mit dem Modell verwendet werden können. Batchendpunkte 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 wir sie in einen Azure Machine Learning-Datenspeicher hoch. Insbesondere erstellen wir eine Datenressource, die zum Aufrufen des Endpunkts für die Bewertung verwendet werden kann. Beachten Sie jedoch, dass Batch-Endpunkte Daten akzeptieren, die an verschiedenen Speicherorten platziert werden können.

  1. Erstellen wir zuerst die Datenressource. Diese Datenressource besteht aus einem Ordner mit mehreren CSV-Dateien, die wir parallel mit Batchendpunkten 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.

    a. 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
    

    b. Erstellen Sie dann das Datenobjekt:

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. Nachdem die Daten hochgeladen und für die Verwendung bereit sind, rufen wir den Endpunkt auf:

    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 auf jeder Installation installiert. Installationsanweisungen erhalten Sie unter diesem Link.

    Tipp

    Beachten Sie, dass wir den Bereitstellungsnamen im Aufrufvorgang nicht angeben. Dies liegt daran, dass der Endpunkt den Auftrag automatisch an die Standardbereitstellung weiterleitet. Da unser Endpunkt nur über eine Bereitstellung verfügt, ist diese die Standardbereitstellung. Sie können eine bestimmte Bereitstellung als Ziel angeben, indem Sie das Argument/den Parameter deployment_nameangeben.

  3. 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

Ausgabevorhersagen werden in der Datei predictions.csv generiert, wie in der Bereitstellungskonfiguration angegeben. Der Auftrag erzeugt eine benannte Ausgabe namens score, in der diese Datei abgelegt wird. Pro Batchauftrag wird nur eine Datei generiert.

Die Datei ist wie folgt strukturiert:

  • Pro Datenpunkt gibt es eine Zeile, die an das Modell gesendet wurde. Bei Tabellendaten 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 (z. B. 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. Dies gilt nur, wenn die Eingabedaten tabellarisch sind. Vorhersagen werden in derselben Reihenfolge zurückgegeben, in der sie in der Eingabedatei angezeigt werden, sodass Sie sich darauf verlassen können, dass die Zeilennummer mit der entsprechenden Vorhersage übereinstimmt.
    • prediction: Die Vorhersage, die den Eingabedaten zugeordnet ist. Dieser Wert wird „as-is“ zurückgegeben, das von der Funktion des predict().-Modells bereitgestellt wurde.
    • file_name: Der Dateiname, aus dem die Daten gelesen wurden. Verwenden Sie in tabellarischen Daten dieses Feld, um zu wissen, welche Vorhersage zu welchen 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 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

score = pd.read_csv(
    "named-outputs/score/predictions.csv", names=["row", "prediction", "file"]
)

Die Ausgabe sieht wie folgt aus:

row prediction 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 in diesem Beispiel die Eingabedaten tabellarische Daten im Format CSV waren und es 4 verschiedene Eingabedateien gab (heart-unlabeled-0.csv, heart-unlabeled-1.csv, heart-unlabeled-2.csv und heart-unlabeled-3.csv).

Überlegungen beim Bereitstellen für Batchrückschlüsse

Azure Machine Learning unterstützt die Bereitstellung von MLflow-Modellen auf Batchendpunkten, ohne ein Bewertungsskript anzugeben. Dies ist ein bequemer Weg, um Modelle bereitzustellen, die die Verarbeitung großer Datenmengen im Batchverfahren erfordern. Azure Machine Learning verwendet Informationen in der MLflow-Modellspezifikation, um den Ableitungsprozess zu koordinieren.

Verteilen von Arbeit an 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 untersucht. Wenn Sie Ihre Daten mithilfe von Ordnern partitionieren, stellen Sie sicher, dass Sie die Struktur vorher vereinfachen.

Batchbereitstellungen rufen die Funktion predict des MLflow-Modells einmal pro Datei auf. Bei CSV-Dateien, die mehrere Zeilen enthalten, kann dies einen Speicherdruck in der zugrunde liegenden Berechnung erzwingen und die Zeit erhöhen, die das Modell benötigt, um eine einzelne Datei zu ermitteln (speziell für teure Modelle wie große Sprachmodelle). 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 Modell-/Bewertungsskripts zu implementieren.

Unterstützung von Dateitypen

Die folgenden Datentypen werden für Batchrückschlüsse unterstützt, wenn MLflow-Modelle ohne eine Umgebung und ein Bewertungsskript eingesetzt werden. Wenn Sie einen anderen Dateityp verarbeiten oder den Rückschluss auf eine andere Art und Weise durchführen möchten, als dies bei Batchendpunkten standardmäßig der Fall ist, können Sie die Bereitstellung jederzeit mit einem Bewertungsskript erstellen, wie in Verwenden von MLflow-Modellen mit einem Bewertungsskript beschrieben.

Dateierweiterung Der als Eingabe des Modells zurückgegebene 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 Anleitungen finden Sie in Überlegungen zur Verarbeitung von MLflow-Modellen.

Warnung

Beachten Sie, dass jede nicht unterstützte Datei, die möglicherweise in den Eingabedaten enthalten ist, den Auftrag fehlschlagen lässt. Es wird ein Fehlereintrag wie folgt angezeigt: „FEHLER:azureml:Fehler bei der Verarbeitung der Eingabedatei: '/mnt/batch/tasks/.../a-given-file.avro'. Dateityp 'avro' wird nicht unterstützt.“.

Signaturerzwingung für MLflow-Modelle

Die Datentypen der Eingaben werden von Batchbereitstellungsaufträgen beim Lesen der Daten unter Verwendung der verfügbaren MLflow-Modellsignatur erzwungen. Dies bedeutet, dass Ihre Dateneingabe den in der Modellsignatur angegebenen Typen entsprechen sollte. Wenn die Daten nicht wie erwartet analysiert werden können, schlägt der Auftrag mit einer Fehlermeldung wie folgt fehl „ERROR:azureml:Error processing input file: '/mnt/batch/tasks/.../a-given-file.csv'. Exception: invalid literal for int() with base 10: 'value'“.

Tipp

Signaturen in MLflow-Modellen sind optional, werden aber dringend empfohlen, da sie eine bequeme Möglichkeit bieten, Datenkompatibilitätsprobleme frühzeitig zu erkennen. 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 dazu, wie Signaturen in MLflow funktionieren, finden Sie unter Signaturen in MLflow.

Unterstützung für Varianten

Batchbereitstellungen unterstützen nur die Bereitstellung von MLflow-Modellen mit einer pyfunc-Variante. Wenn Sie eine andere Variante bereitstellen müssen, finden Sie weitere Informationen unter Verwenden von MLflow-Modellen mit einem Bewertungsskript.

Anpassen von MLflow-Modellimplementierungen mit einem Bewertungsskript

MLflow-Modelle können für Batchendpunkte bereitgestellt werden, ohne ein Bewertungsskript in der Bereitstellungsdefinition anzugeben. Sie können sich jedoch anmelden, um diese Datei anzugeben (in der Regel als Batchtreiber bezeichnet), um anzupassen, wie der Rückschluss ausgeführt wird.

In der Regel wählen Sie diesen Workflow in folgenden Fällen aus:

  • Sie müssen einen Dateityp verarbeiten, der von Batchbereitstellungen, MLflow-Bereitstellungen nicht unterstützt wird.
  • Sie müssen die Ausführung des Modells anpassen, z. B. verwenden Sie eine bestimmte Variante, um sie mit mlflow.<flavor>.load() zu laden.
  • Sie müssen die Vorab-/Nachverarbeitung in Ihrer Bewertungsroutine durchführen, wenn sie nicht vom Modell selbst ausgeführt wird.
  • Die Ergebnisse des Modells lassen sich nicht gut in Tabellenform darstellen. Beispielsweise ist es ein Tensor, der ein Bild darstellt.
  • Das Modell kann nicht jede Datei auf einmal verarbeiten, da der Speicherplatz begrenzt ist, und es muss die Dateien in Teilen lesen.

Wichtig

Wenn Sie ein Bewertungsskript für eine MLflow-Modellimplementierung angeben möchten, müssen Sie auch die Umgebung angeben, in der die Bereitstellung ausgeführt wird.

Schritte

Verwenden Sie die folgenden Schritte, um ein MLflow-Modell mit einem benutzerdefinierten Bewertungsskript bereitzustellen.

  1. Identifizieren Sie den Ordner, in dem sich Ihr MLflow-Modell befindet.

    a. Navigieren Sie zum Azure Machine Learning-Portal.

    b. Navigieren Sie zum Abschnitt Modelle.

    c. Wählen Sie das Modell aus, das Sie bereitstellen möchten, und klicken Sie auf die Registerkarte Artefakte.

    d. Beachten Sie den angezeigten Ordner. Dieser Ordner wurde beim Registrieren des Modells angegeben.

    Screenshot: Ordner, in dem die Modellartefakte platziert werden

  2. Erstellen Sie ein Bewertungsskript. Beachten Sie, dass der zuvor identifizierte Ordnername model in die Funktion init() eingeschlossen wurde.

    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)
    
  3. Erstellen Sie zunächst eine Umgebung, in der das Bewertungsskript ausgeführt werden kann. Da es sich bei unserem Modell um MLflow handelt, werden die Conda-Anforderungen auch im Modellpaket angegeben (weitere Informationen zu MLflow-Modellen und den darin enthaltenen Dateien finden Sie unter Das MLmodel-Format). Erstellen Sie anschließend die Umgebung mithilfe der Conda-Abhängigkeiten aus der Datei. Jedoch müssen Sie 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 hier herunterladen/kopieren: Azure Machine Learning Studio> Modelle > Ihr Modell aus der Liste auswählen > Artefakte. Öffnen Sie den Stammordner in der Navigation, und wählen Sie die aufgelistete conda.yml-Datei aus. Klicken Sie auf „Herunterladen“, oder kopieren Sie den 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 das Paket azureml-core hinzugefügt wurde. Sie können die conda.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
    
  4. Konfigurieren der Bereitstellung:

    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.

    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
    
  5. Jetzt erstellen wir die Bereitstellung:

    az ml batch-deployment create --file deployment-custom/deployment.yml --endpoint-name $ENDPOINT_NAME
    
  6. An diesem Punkt ist unser Batchendpunkt zur Verwendung bereit.

Bereinigen von Ressourcen

Führen Sie den folgenden Code aus, um den Batchendpunkt und alle zugrundeliegenden Bereitstellungen zu löschen. Batchbewertungsaufträge werden nicht gelöscht.

az ml batch-endpoint delete --name $ENDPOINT_NAME --yes

Nächste Schritte