Pipeline erstellen

Mit Vertex AI Pipelines können Sie Ihre ML-Workflows serverlos orchestrieren. Bevor Vertex AI Pipelines Ihren ML-Workflow orchestrieren kann, müssen Sie Ihren Workflow als Pipeline beschreiben. ML-Pipelines sind portable und skalierbare ML-Workflows, die auf Containern und Google Cloud-Diensten basieren.

In dieser Anleitung werden die ersten Schritte zum Erstellen von ML-Pipelines beschrieben.

Welches Pipelines SDK sollte ich verwenden?

Vertex AI Pipelines kann Pipelines ausführen, die mit einem der folgenden SDKs erstellt wurden:

  • Kubeflow Pipelines SDK v1.8 oder höher (v2 wird empfohlen)

  • TensorFlow Extended v0.30.0 oder höher

Wenn Sie TensorFlow in einem ML-Workflow verwenden, der Terabytes an strukturierten Daten oder Textdaten verarbeitet, sollten Sie Ihre Pipeline mit TFX erstellen.

Für andere Anwendungsfälle empfehlen wir, Ihre Pipeline mit dem Kubeflow Pipelines SDK zu erstellen. Wenn Sie eine Pipeline mit dem Kubeflow Pipelines SDK erstellen, können Sie Ihren Workflow implementieren, indem Sie benutzerdefinierte Komponenten erstellen oder vordefinierte Komponenten wie die Google Cloud-Pipeline-Komponenten wiederverwenden. Google Cloud-Pipeline-Komponenten erleichtern die Verwendung von Vertex AI-Diensten wie AutoML in Ihrer Pipeline.

In dieser Anleitung wird beschrieben, wie Sie Pipelines mit dem Kubeflow Pipelines SDK erstellen.

Hinweis

Folgen Sie vor dem Erstellen und Ausführen Ihrer Pipelines der folgenden Anleitung, um Ihr Google Cloud-Projekt und Ihre Entwicklungsumgebung einzurichten.

  1. Folgen Sie der Anleitung unter Google Cloud-Projekt konfigurieren, um Ihr Google Cloud-Projekt zur Ausführung von ML-Pipelines vorzubereiten.

  2. Wenn Sie eine Pipeline mit dem Kubeflow Pipelines SDK erstellen möchten, installieren Sie das Kubeflow Pipelines SDK v1.8 oder höher.

  3. Um den Python-Client von Vertex AI in Ihren Pipelines zu verwenden, installieren Sie die Vertex AI-Clientbibliothek v1.7 oder höher.

  4. Wenn Sie Vertex AI-Dienste in Ihren Pipelines nutzen möchten, installieren Sie das SDK für Google Cloud Pipeline-Komponenten.

Einstieg in das Erstellen einer Pipeline

Um Ihren ML-Workflow in Vertex AI Pipelines zu orchestrieren, müssen Sie Ihren Workflow als Pipeline beschreiben. Das folgende Beispiel zeigt, wie Sie die Google Cloud-Pipeline-Komponenten verwenden, um mit Vertex AI ein Dataset zu erstellen, ein Modell mit AutoML zu trainieren und das trainierte Modell für Vorhersagen bereitzustellen.

Bevor Sie das folgende Codebeispiel ausführen, müssen Sie die Authentifizierung einrichten.

Authentifizierung einrichten

Für die Einrichtung der Authentifizierung müssen Sie einen Dienstkontoschlüssel erstellen und eine Umgebungsvariable für den Pfad zum Dienstkontoschlüssel festlegen.

  1. Erstellen Sie ein Dienstkonto:

    1. Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen.

      Zur Seite „Dienstkonto erstellen“

    2. Geben Sie im Feld Dienstkontoname einen Namen ein.
    3. Optional: Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein.
    4. Klicken Sie auf Erstellen.
    5. Klicken Sie auf das Feld Rolle auswählen. Wählen Sie unter Alle Rollen die Option Vertex AI > Vertex AI-Nutzer aus.
    6. Klicken Sie auf Fertig, um das Dienstkonto zu erstellen.

      Schließen Sie das Browserfenster nicht. Sie verwenden es in der nächsten Aufgabe.

  2. Erstellen Sie einen Dienstkontoschlüssel für die Authentifizierung:

    1. Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse des von Ihnen erstellten Dienstkontos.
    2. Klicken Sie auf Schlüssel.
    3. Klicken Sie auf Schlüssel hinzufügen > Neuen Schlüssel erstellen.
    4. Klicken Sie auf Erstellen. Daraufhin wird eine JSON-Schlüsseldatei auf Ihren Computer heruntergeladen.
    5. Klicken Sie auf Schließen.
  3. Gewähren Sie dem neuen Dienstkonto Zugriff auf das Dienstkonto, das Sie zum Ausführen von Pipelines verwenden.
    1. Klicken Sie auf , um zur Liste der Dienstkonten zurückzukehren.
    2. Klicken Sie auf den Namen des Dienstkontos, mit dem Sie Pipelines ausführen. Die Seite Dienstkontodetails wird angezeigt.

      Wenn Sie der Anleitung zum Konfigurieren Ihres Projekts für Vertex AI Pipelines gefolgt sind, ist dies dasselbe Dienstkonto, das Sie im Schritt Dienstkonto mit detaillierten Berechtigungen konfigurieren erstellt haben. Andernfalls verwendet Vertex AI das Compute Engine-Standarddienstkonto zum Ausführen von Pipelines. Das Compute Engine-Standarddienstkonto hat folgenden Namen: PROJECT_NUMBER-compute@developer.gserviceaccount.com

    3. Klicken Sie auf den Tab Berechtigungen.
    4. Klicken Sie auf Zugriff erlauben. Das Feld Hauptkonten hinzufügen wird angezeigt.
    5. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse für das Dienstkonto ein, das Sie in einem vorherigen Schritt erstellt haben.
    6. Wählen Sie in der Drop-down-Liste Rolle die Option Dienstkonten > Dienstkontonutzer aus.
    7. Klicken Sie auf Speichern
  4. Legen Sie für die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS den Pfad der JSON-Datei fest, die Ihren Dienstkontoschlüssel enthält. Diese Variable gilt nur für Ihre aktuelle Shell-Sitzung. Wenn Sie eine neue Sitzung öffnen, müssen Sie die Variable noch einmal festlegen.

    Beispiel: Linux oder macOS

    Geben Sie für [PATH] den Dateipfad der JSON-Datei an, die Ihren Dienstkontoschlüssel enthält.

    export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

    Beispiel:

    export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

    Beispiel: Windows

    Geben Sie für [PATH] den Dateipfad der JSON-Datei an, die Ihren Dienstkontoschlüssel enthält, und für [FILE_NAME] den Dateinamen.

    Mit PowerShell:

    $env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

    Beispiel:

    $env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\[FILE_NAME].json"

    Mit Eingabeaufforderung:

    set GOOGLE_APPLICATION_CREDENTIALS=[PATH]

Workflow mit dem Kubeflow Pipelines-DSL-Paket definieren

Das Paket kfp.dsl enthält die domainspezifische Sprache (Domain-specific Language, DSL), mit der Sie Pipelines und Komponenten definieren und mit ihnen interagieren können.

Kubeflow-Pipeline-Komponenten sind Factory-Funktionen, die Pipelineschritte erstellen. Jede Komponente beschreibt die Eingaben, Ausgaben und die Implementierung der Komponente. Im folgenden Codebeispiel ist ds_op beispielsweise eine Komponente.

Komponenten werden verwendet, um Pipelineschritte zu erstellen. Bei der Ausführung einer Pipeline werden Schritte ausgeführt, sobald die Daten verfügbar sind, von denen sie abhängen. Eine Trainingskomponente könnte beispielsweise eine CSV-Datei als Eingabe nehmen und zum Trainieren eines Modells verwenden.

import kfp
from google.cloud import aiplatform
from google_cloud_pipeline_components.v1.dataset import ImageDatasetCreateOp
from google_cloud_pipeline_components.v1.automl.training_job import AutoMLImageTrainingJobRunOp
from google_cloud_pipeline_components.v1.endpoint import EndpointCreateOp, ModelDeployOp

project_id = PROJECT_ID
pipeline_root_path = PIPELINE_ROOT

# Define the workflow of the pipeline.
@kfp.dsl.pipeline(
    name="automl-image-training-v2",
    pipeline_root=pipeline_root_path)
def pipeline(project_id: str):
    # The first step of your workflow is a dataset generator.
    # This step takes a Google Cloud Pipeline Component, providing the necessary
    # input arguments, and uses the Python variable `ds_op` to define its
    # output. Note that here the `ds_op` only stores the definition of the
    # output but not the actual returned object from the execution. The value
    # of the object is not accessible at the dsl.pipeline level, and can only be
    # retrieved by providing it as the input to a downstream component.
    ds_op = ImageDatasetCreateOp(
        project=project_id,
        display_name="flowers",
        gcs_source="gs://cloud-samples-data/vision/automl_classification/flowers/all_data_v2.csv",
        import_schema_uri=aiplatform.schema.dataset.ioformat.image.single_label_classification,
    )

    # The second step is a model training component. It takes the dataset
    # outputted from the first step, supplies it as an input argument to the
    # component (see `dataset=ds_op.outputs["dataset"]`), and will put its
    # outputs into `training_job_run_op`.
    training_job_run_op = AutoMLImageTrainingJobRunOp(
        project=project_id,
        display_name="train-iris-automl-mbsdk-1",
        prediction_type="classification",
        model_type="CLOUD",
        dataset=ds_op.outputs["dataset"],
        model_display_name="iris-classification-model-mbsdk",
        training_fraction_split=0.6,
        validation_fraction_split=0.2,
        test_fraction_split=0.2,
        budget_milli_node_hours=8000,
    )

    # The third and fourth step are for deploying the model.
    create_endpoint_op = EndpointCreateOp(
        project=project_id,
        display_name = "create-endpoint",
    )

    model_deploy_op = ModelDeployOp(
        model=training_job_run_op.outputs["model"],
        endpoint=create_endpoint_op.outputs['endpoint'],
        automatic_resources_min_replica_count=1,
        automatic_resources_max_replica_count=1,
    )

Ersetzen Sie Folgendes:

  • PROJECT_ID: Das Google Cloud-Projekt, in dem diese Pipeline ausgeführt wird.
  • PIPELINE_ROOT_PATH: Geben Sie einen Cloud Storage-URI an, auf den das Pipelines-Dienstkonto zugreifen kann. Die Artefakte Ihrer Pipelineausführungen werden im Pipeline-Stammverzeichnis gespeichert.

    Das Pipeline-Stammverzeichnis kann als Argument der Annotation @kfp.dsl.pipeline für die Pipelinefunktion festgelegt werden oder es kann beim Aufrufen von create_run_from_job_spec für die Erstellung einer Pipelineausführung festgelegt werden.

Pipeline in eine YAML-Datei kompilieren

Nachdem der Workflow Ihrer Pipeline definiert wurde, können Sie mit dem Kompilieren der Pipeline im YAML-Format fortfahren. Die YAML-Datei enthält alle Informationen zum Ausführen Ihrer Pipeline in Vertex AI Pipelines.

from kfp import compiler

compiler.Compiler().compile(
    pipeline_func=pipeline,
    package_path='image_classif_pipeline.yaml'
)

Pipelineausführung senden

Nachdem der Workflow Ihrer Pipeline in das YAML-Format kompiliert wurde, können Sie den Vertex AI Python-Client verwenden, um Ihre Pipeline zu senden und auszuführen.

import google.cloud.aiplatform as aip

# Before initializing, make sure to set the GOOGLE_APPLICATION_CREDENTIALS
# environment variable to the path of your service account.
aip.init(
    project=project_id,
    location=PROJECT_REGION,
)

# Prepare the pipeline job
job = aip.PipelineJob(
    display_name="automl-image-training-v2",
    template_path="image_classif_pipeline.yaml",
    pipeline_root=pipeline_root_path,
    parameter_values={
        'project_id': project_id
    }
)

job.submit()

Ersetzen Sie Folgendes:

  • PROJECT_REGION: Die Region, in der diese Pipeline ausgeführt wird.

Im obigen Beispiel gilt Folgendes:

  1. Eine Kubeflow-Pipeline ist als Python-Funktion definiert. Die Funktion wird mit dem Decorator @kfp.dsl.pipeline annotiert, der den Namen und den Stammpfad der Pipeline angibt. Der Pipeline-Stammpfad ist der Speicherort, an dem die Artefakte der Pipeline gespeichert sind.
  2. Die Workflow-Schritte der Pipeline werden mithilfe der Google Cloud-Pipeline-Komponenten erstellt. Wenn Sie die Ausgaben einer Komponente als Eingabe einer anderen Komponente verwenden, definieren Sie den Workflow der Pipeline als Grafik. Beispiel: training_job_run_op hängt von der dataset-Ausgabe von ds_op ab.
  3. Kompilieren Sie die Pipeline mit kfp.compiler.Compiler.
  4. Erstellen Sie eine Pipeline in Vertex AI Pipelines mit dem Python-Client von Vertex AI. Wenn Sie eine Pipeline ausführen, können Sie den Pipeline-Namen und den Pipeline-Stammpfad überschreiben. Pipeline-Ausführungen können anhand des Pipeline-Namens gruppiert werden. Durch Überschreiben des Pipeline-Namens können Sie zwischen Produktions- und experimentellen Pipeline-Ausführungen unterscheiden.

Weitere Informationen zum Erstellen von Pipelines finden Sie im Abschnitt Kubeflow-Pipelines erstellen. Sie können auch den Beispielen und Anleitungen folgen.

Kubeflow-Pipelines erstellen

Verwenden Sie den folgenden Prozess, um eine Pipeline zu erstellen.

  1. Entwerfen Sie Ihre Pipeline als eine Reihe von Komponenten. Um die Wiederverwendbarkeit zu fördern, sollte jede Komponente eine einzige Verantwortung haben. Gestalten Sie die Pipeline nach Möglichkeit immer so, dass bewährte Komponenten wie die Pipeline-Komponenten von Google Cloud wiederverwendet werden.

    Weitere Informationen zum Entwerfen von Pipelines

  2. Erstellen Sie alle benutzerdefinierten Komponenten, die zur Implementierung Ihres ML-Workflows erforderlich sind. Nutzen Sie dazu das Kubeflow Pipelines SDK Version 2. Komponenten sind eigenständige Code-Gruppen, die einen Schritt in Ihrem ML-Workflow ausführen. Verwenden Sie die folgenden Optionen, um Ihre Pipelinekomponenten zu erstellen.

    • Verpacken Sie den Code Ihrer Komponente als Container-Image. Mit dieser Option können Sie in Ihrer Pipeline Code einfügen, der in einer beliebigen Sprache geschrieben wurde, die als Container-Image verpackt werden kann.

      Kubeflow-Pipelinekomponente erstellen

    • Implementieren Sie den Code Ihrer Komponente als eigenständige Python-Funktion und verwenden Sie das Kubeflow Pipelines SDK, um Ihre Funktion als Komponente zu verpacken. Mit dieser Option lassen sich Python-basierte Komponenten einfacher erstellen.

      Funktionsbasierte Python-Komponenten erstellen

  3. Erstellen Sie Ihre Pipeline als Python-Funktion.

    Weitere Informationen zum Definieren Ihrer Pipeline als Python-Funktion

  4. Kompilieren Sie Ihre Pipeline mit dem Kubeflow Pipelines SDK-Compiler.

    from kfp import compiler
    
    compiler.Compiler().compile(
        pipeline_func=PIPELINE_FUNCTION,
        package_path=PIPELINE_PACKAGE_PATH)
    

    Ersetzen Sie Folgendes:

    • PIPELINE_FUNCTION: Der Name der Pipelinefunktion.
    • PIPELINE_PACKAGE_PATH: Der Pfad, unter dem Ihre kompilierte Pipeline gespeichert werden soll.
  5. Führen Sie Ihre Pipeline mit der Google Cloud Console oder Python aus.

Auf Google Cloud-Ressourcen in einer Pipeline zugreifen

Wenn Sie beim Ausführen einer Pipeline kein Dienstkonto angeben, verwendet Vertex AI Pipelines das Standarddienstkonto von Compute Engine zum Ausführen Ihrer Pipeline. Vertex AI Pipelines verwendet auch das Dienstkonto einer Pipeline-Ausführung, um Ihre Pipeline für den Zugriff auf Google Cloud-Ressourcen zu autorisieren. Das Compute Engine-Standarddienstkonto hat standardmäßig die Rolle Projektbearbeiter. Dies kann Ihren Pipelines übermäßigen Zugriff auf Google Cloud-Ressourcen in Ihrem Google Cloud-Projekt gewähren.

Es wird empfohlen, ein Dienstkonto zum Ausführen der Pipelines zu erstellen und diesem Konto detaillierte Berechtigungen für die Google Cloud-Ressourcen zu gewähren, die zum Ausführen der Pipeline erforderlich sind.

Mit Identity and Access Management ein Dienstkonto erstellen und den Zugriff steuern, der einem Dienstkonto gewährt wird

Pipelines auf dem neuesten Stand halten

Die SDK-Clients und Container-Images, die Sie zum Erstellen und Ausführen von Pipelines verwenden, werden regelmäßig auf neue Versionen aktualisiert, um Sicherheitslücken zu schließen und neue Funktionen hinzuzufügen. Gehen Sie so vor, um Ihre Pipelines mit der neuesten Version auf dem neuesten Stand zu halten:

Nächste Schritte