Share via


Bereitstellen einer Pipeline zum Durchführen der Batchbewertung mit Vorverarbeitung

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

In diesem Artikel erfahren Sie, wie Sie eine Rückschlusspipeline (oder Bewertungspipeline) unter einem Batchendpunkt bereitstellen. Die Pipeline führt eine Bewertung für ein registriertes Modell durch und verwendet gleichzeitig eine Vorverarbeitungskomponente aus der Zeit, als das Modell trainiert wurde. Durch die Wiederverwendung derselben Vorverarbeitungskomponente wird sichergestellt, dass die gleiche Vorverarbeitung während der Bewertung angewendet wird.

Sie lernen Folgendes:

  • Erstellen einer Pipeline, die vorhandene Komponenten aus dem Arbeitsbereich wiederverwendet
  • Bereitstellen der Pipeline auf einem Endpunkt
  • Nutzen von Vorhersagen, die von der Pipeline generiert wurden

Über dieses Beispiel

In diesem Beispiel wird gezeigt, wie Sie Vorverarbeitungscode und die während der Vorverarbeitung gelernten Parameter wiederverwenden, bevor Sie Ihr Modell für Rückschlüsse verwenden. Durch die Wiederverwendung des Vorverarbeitungscodes und der erlernten Parameter können wir sicherstellen, dass die gleichen Transformationen (z. B. Normalisierung und Featurecodierung), die während des Trainings auf die Eingabedaten angewendet wurden, auch während des Rückschlusses angewendet werden. Das für Rückschlüsse verwendete Modell führt Vorhersagen zu Tabellendaten aus dem UCI-Dataset für Herzerkrankungen durch.

Die Pipeline kann wie folgt visualisiert werden:

Ein Screenshot der Rückschlusspipeline bestehend aus einer Bewertungskomponente zusammen mit den Ausgaben und der Vorbereitungskomponente aus einer Trainingspipeline.

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-pipelines/batch-scoring-with-preprocessing

Verfolgen in Jupyter-Notebooks

Sie können der Python SDK-Version dieses Beispiels folgen, indem Sie das Notebook sdk-deploy-and-test.ipynb im geklonten Repository öffnen.

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 keinen 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>

Erstellen der Rückschlusspipeline

In diesem Abschnitt erstellen wir alle Ressourcen, die für unsere Rückschlusspipeline erforderlich sind. Wir starten mit der Erstellung einer Umgebung, welche die erforderlichen Bibliotheken für die Komponenten der Pipeline enthält. Als Nächstes erstellen wir einen Computecluster, auf dem die Batchbereitstellung ausgeführt wird. Anschließend registrieren wir die Komponenten, Modelle und Transformationen, die wir zum Erstellen unserer Rückschlusspipeline benötigen. Abschließend erstellen und testen wir die Pipeline.

Erstellen der Umgebung

Für die Komponenten in diesem Beispiel wird eine Umgebung mit den XGBoost- und scikit-learn-Bibliotheken verwendet. Die environment/conda.yml-Datei enthält die Konfiguration der Umgebung:

environment/conda.yml

channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
  - mlflow
  - azureml-mlflow
  - datasets
  - jobtools
  - cloudpickle==1.6.0
  - dask==2023.2.0
  - scikit-learn==1.1.2
  - xgboost==1.3.3
name: mlflow-env

Erstellen Sie die Umgebung wie folgt:

  1. Definieren Sie die Umgebung:

    environment/xgboost-sklearn-py38.yml

    $schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
    name: xgboost-sklearn-py38
    image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
    conda_file: conda.yml
    description: An environment for models built with XGBoost and Scikit-learn.
    
  2. Erstellen Sie die Umgebung:

    az ml environment create -f environment/xgboost-sklearn-py38.yml
    

Erstellen eines Computeclusters

Batchendpunkte und Batchbereitstellungen werden auf Computeclustern ausgeführt. Sie können auf jedem Azure Machine Learning-Computecluster ausgeführt werden, der im Arbeitsbereich bereits vorhanden ist. Daher können mehrere Batchbereitstellungen dieselbe Computeinfrastruktur gemeinsam nutzen. In diesem Beispiel arbeiten wir auf einem Azure Machine Learning-Computecluster namens batch-cluster. Lassen Sie uns überprüfen, ob die Computeinfrastruktur im Arbeitsbereich vorhanden ist. Wenn nicht, werden wir sie erstellen.

az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5

Registrieren von Komponenten und Modellen

Wir werden Komponenten, Modelle und Transformationen registrieren, die wir zum Erstellen unserer Rückschlusspipeline benötigen. Wir können einige dieser Ressourcen für Trainingsroutinen wiederverwenden.

Tipp

In diesem Tutorial werden wir das Modell und die Vorverarbeitungskomponente aus einer früheren Trainingspipeline wiederverwenden. Anhand des Beispiels Bereitstellen einer Trainingspipeline mit Batchendpunkten können Sie sehen, wie sie erstellt wurden.

  1. Registrieren Sie das Modell, das für die Vorhersage verwendet werden soll:

    az ml model create --name heart-classifier --type mlflow_model --path model
    
  2. Das registrierte Modell wurde nicht direkt mit den Eingabedaten trainiert. Stattdessen wurden die Eingabedaten vor dem Training mithilfe einer Vorbereitungskomponente vorverarbeitet (oder transformiert). Außerdem müssen wir diese Komponente registrieren. Registrieren Sie die Vorbereitungskomponente:

    az ml component create -f components/prepare/prepare.yml
    

    Tipp

    Nachdem Sie die Vorbereitungskomponente registriert haben, können Sie jetzt aus dem Arbeitsbereich darauf verweisen. azureml:uci_heart_prepare@latest wird beispielsweise die letzte Version der Vorbereitungskomponente abrufen.

  3. Im Rahmen der Datentransformationen in der Vorbereitungskomponente wurden die Eingabedaten normalisiert, um die Prädiktoren zu zentrieren und ihre Werte im Bereich von [-1, 1] zu begrenzen. Die Transformationsparameter wurden in einer „scikit-learn“-Transformation erfasst, die wir auch registrieren können, um sie später anzuwenden, wenn wir über neue Daten verfügen. Registrieren Sie die Transformation wie folgt:

    az ml model create --name heart-classifier-transforms --type custom_model --path transformations
    
  4. Wir werden Rückschlüsse für das registrierte Modell mithilfe einer anderen Komponente namens score durchführen, welche die Vorhersagen für ein bestimmtes Modell berechnet. Wir werden die Komponente direkt aus ihrer Definition referenzieren.

    Tipp

    Eine bewährte Methode wäre, die Komponente zu registrieren und über die Pipeline darauf zu verweisen. In diesem Beispiel werden wir jedoch direkt auf die Komponente aus ihrer Definition verweisen, um zu sehen, welche Komponenten aus der Trainingspipeline wiederverwendet werden und welche neu sind.

Erstellen der Pipeline

Jetzt ist es an der Zeit, alle Elemente zusammenzubinden. Die Rückschlusspipeline, die wir bereitstellen werden, umfasst zwei Komponenten (Schritte):

  • preprocess_job: Dieser Schritt liest die Eingabedaten und gibt die vorbereiteten Daten und die angewendeten Transformationen zurück. Der Schritt empfängt zwei Eingaben:
    • data: ein Ordner mit den zu bewertenden Eingabedaten
    • transformations: (optional) Pfad zu den Transformationen, die angewendet werden, sofern verfügbar. Bei Angabe werden die Transformationen aus dem Modell gelesen, das im Pfad angegeben ist. Wenn der Pfad jedoch nicht angegeben wird, werden die Transformationen aus den Eingabedaten gelernt. Für Rückschlüsse können Sie jedoch die Transformationsparameter (in diesem Beispiel die Normalisierungskoeffizienten) nicht aus den Eingabedaten lernen, da Sie dieselben Parameterwerte verwenden müssen, die während des Trainings gelernt wurden. Da diese Eingabe optional ist, kann die preprocess_job-Komponente während des Trainings und der Bewertung verwendet werden.
  • score_job: In diesem Schritt werden Rückschlüsse auf die transformierten Daten mithilfe des Eingabemodells durchgeführt. Beachten Sie, dass die Komponente ein MLflow-Modell verwendet, um Rückschlüsse durchzuführen. Schließlich werden die Bewertungen im gleichen Format wie beim Lesen zurückgeschrieben.

Die Pipelinekonfiguration ist in der pipeline.yml-Datei definiert:

pipeline.yml

$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
type: pipeline

name: batch_scoring_uci_heart
display_name: Batch Scoring for UCI heart
description: This pipeline demonstrates how to make batch inference using a model from the Heart Disease Data Set problem, where pre and post processing is required as steps. The pre and post processing steps can be components reusable from the training pipeline.

inputs:
  input_data:
    type: uri_folder
  score_mode:
    type: string
    default: append

outputs: 
  scores:
    type: uri_folder
    mode: upload

jobs:
  preprocess_job:
    type: command
    component: azureml:uci_heart_prepare@latest
    inputs:
      data: ${{parent.inputs.input_data}}
      transformations: 
        path: azureml:heart-classifier-transforms@latest
        type: custom_model
    outputs:
      prepared_data:
  
  score_job:
    type: command
    component: components/score/score.yml
    inputs:
      data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
      model:
        path: azureml:heart-classifier@latest
        type: mlflow_model
      score_mode: ${{parent.inputs.score_mode}}
    outputs:
      scores: 
        mode: upload
        path: ${{parent.outputs.scores}}

Die Pipeline kann wie folgt visualisiert werden:

Ein Screenshot der Rückschlusspipeline, welche die Batchbewertung mit Vorverarbeitung zeigt.

Testen der Pipeline

Lassen Sie uns die Pipeline mit einigen Beispieldaten testen. Dazu erstellen wir einen Auftrag mittels der Pipeline und dem batch-cluster-Computecluster, der zuvor erstellt wurde.

Die folgende pipeline-job.yml-Datei enthält die Konfiguration für den Pipelineauftrag:

pipeline-job.yml

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

display_name: uci-classifier-score-job
description: |-
  This pipeline demonstrate how to make batch inference using a model from the Heart \
  Disease Data Set problem, where pre and post processing is required as steps. The \
  pre and post processing steps can be components reused from the training pipeline.

compute: batch-cluster
component: pipeline.yml
inputs:
  input_data:
    type: uri_folder
  score_mode: append
outputs: 
  scores:
    mode: upload

Erstellen Sie den Testauftrag:

az ml job create -f pipeline-job.yml --set inputs.input_data.path=data/unlabeled

Erstellen eines Batchendpunkts

  1. Geben Sie einen Namen für den Endpunkt an. Der Name eines Batchendpunkts muss in jeder Region eindeutig sein, da er zum Konstruieren des Aufruf-URI verwendet wird. Um die Eindeutigkeit sicherzustellen, fügen Sie alle nachstehenden Zeichen an den im folgenden Code angegebenen Namen an.

    ENDPOINT_NAME="uci-classifier-score"
    
  2. Konfigurieren des Endpunkts:

    Die endpoint.yml-Datei enthält die Konfiguration des Endpunkts.

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: uci-classifier-score
    description: Batch scoring endpoint of the Heart Disease Data Set prediction task.
    auth_mode: aad_token
    
  3. Erstellen des Endpunkts:

    az ml batch-endpoint create --name $ENDPOINT_NAME -f endpoint.yml
    
  4. Fragen Sie den Endpunkt-URI ab:

    az ml batch-endpoint show --name $ENDPOINT_NAME
    

Bereitstellen der Pipelinekomponente

Zum Bereitstellen der Pipelinekomponente müssen wir eine Batchbereitstellung erstellen. Eine Bereitstellung ist ein Satz erforderlicher Ressourcen für das Hosting der Ressource, welche die eigentliche Arbeit leistet.

  1. Konfigurieren der Bereitstellung

    Die deployment.yml-Datei enthält die Konfiguration der Bereitstellung. Sie können das vollständige YAML-Schema des Batchendpunkts auf zusätzliche Eigenschaften überprüfen.

    deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json
    name: uci-classifier-prepros-xgb
    endpoint_name: uci-classifier-batch
    type: pipeline
    component: pipeline.yml
    settings:
        continue_on_step_failure: false
        default_compute: batch-cluster
    
  2. Erstellen der Bereitstellung

    Führen Sie den folgenden Code aus, um eine Batchbereitstellung unter dem Batchendpunkt zu erstellen und diese als Standardbereitstellung festzulegen.

    az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment.yml --set-default
    

    Tipp

    Beachten Sie die Verwendung des --set-default-Flags, um anzugeben, dass diese neue Bereitstellung jetzt die Standardeinstellung ist.

  3. Ihre Bereitstellung ist einsatzbereit.

Testen der Bereitstellung

Nachdem die Bereitstellung erstellt wurde, kann sie Aufträge empfangen. Führen Sie zum Testen diese Schritte aus:

  1. Für unsere Bereitstellung müssen wir eine Dateneingabe und eine Literaleingabe angeben.

    Die inputs.yml-Datei enthält die Definition der Eingabedatenressource:

    inputs.yml

    inputs:
      input_data:
        type: uri_folder
        path: data/unlabeled
      score_mode:
        type: string
        default: append
    outputs:
      scores:
        type: uri_folder
        mode: upload
    

    Tipp

    Weitere Informationen zum Angeben von Eingaben finden Sie unter Erstellen von Aufträgen und Eingabedaten für Batchendpunkte.

  2. Sie können die Standardbereitstellung folgendermaßen aufrufen:

    JOB_NAME=$(az ml batch-endpoint invoke -n $ENDPOINT_NAME --f inputs.yml --query name -o tsv)
    
  3. Sie können den Fortschritt der Show überwachen und die Protokolle streamen, wie im Folgenden beschrieben:

    az ml job stream -n $JOB_NAME
    

Zugriff auf die Auftragsausgabe

Sobald der Auftrag abgeschlossen ist, können wir auf seine Ausgabe zugreifen. Dieser Auftrag enthält nur eine Ausgabe namens scores:

Sie können die zugehörigen Ergebnisse mit az ml job download herunterladen.

az ml job download --name $JOB_NAME --output-name scores

Lesen Sie die bewerteten Daten:

import pandas as pd
import glob

output_files = glob.glob("named-outputs/scores/*.csv")
score = pd.concat((pd.read_csv(f) for f in output_files))
score

Die Ausgabe sieht wie folgt aus:

age sex ... Thal prediction
0,9338 1 ... 2 0
1,3782 1 ... 3 1
1,3782 1 ... 4 0
-1-954 1 ... 3 0

Die Ausgabe enthält die Vorhersagen sowie die Daten, die für die vorverarbeitete Score-Komponente bereitgestellt wurden. Beispielsweise wurde die Spalte age normalisiert, und die Spalte thal enthält ursprüngliche Codierungswerte. In der Praxis möchten Sie wahrscheinlich nur die Vorhersage ausgeben und sie dann mit den ursprünglichen Werten verketten. Diese Arbeit wurde dem Leser überlassen.

Bereinigen von Ressourcen

Löschen Sie dann die zugehörigen Ressourcen aus dem Arbeitsbereich:

Führen Sie den folgenden Code aus, um den Batchendpunkt und die zugrundeliegende Bereitstellung zu löschen. --yes wird verwendet, um den Löschvorgang zu bestätigen.

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

(Optional) Löschen Sie den Compute, es sei denn, Sie möchten Ihren Computecluster mit späteren Bereitstellungen wiederverwenden.

az ml compute delete -n batch-cluster

Nächste Schritte