Freigeben über


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.
  • 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 den az 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.

  1. 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"
    
  2. Erstellen des Endpunkts:

    1. 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
      
    2. 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.

  1. 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
    
  2. 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.

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

    1. 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
      
    2. Erstellen Sie dann das Datenobjekt:

      az ml data create -f heart-dataset-unlabeled.yml
      
  2. 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 Parameter deployment_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.

  3. 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 der predict().-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:

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

    1. Navigieren Sie im Azure Machine Learning-Portalzu Modellen.

    2. Wählen Sie das Modell aus, das Sie bereitstellen möchten, und dann die Registerkarte Artefakte aus.

    3. Notieren Sie sich den angezeigten Ordner. Dieser Ordner wurde beim Registrieren des Modells angegeben.

      Screenshot, der den Ordner zeigt, in dem die Modellartefakte platziert werden.

  2. Erstellen Sie ein Bewertungsskript. Beachten Sie, dass der vorherige Ordnername model in der init()-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)
    
  3. 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 die conda.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 das azureml-core-Paket 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 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
    
  5. 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.