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.
- Weitere Informationen zum Erstellen einer TFX-Pipeline finden Sie in den „Erste Schritte“-Anleitungen zu TFX.
- Weitere Informationen zur Verwendung von Vertex AI Pipelines zum Ausführen einer TFX-Pipeline finden Sie in den Anleitungen zu TFX in Google Cloud.
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.
Vorbereitung
Folgen Sie vor dem Erstellen und Ausführen Ihrer Pipelines der folgenden Anleitung, um Ihr Google Cloud-Projekt und Ihre Entwicklungsumgebung einzurichten.
Folgen Sie der Anleitung unter Google Cloud-Projekt konfigurieren, um Ihr Google Cloud-Projekt zur Ausführung von ML-Pipelines vorzubereiten.
Installieren Sie Version 2 oder höher des Kubeflow Pipelines SDK.
pip install --upgrade kfp>=2,<3
Um den Python-Client von Vertex AI in Ihren Pipelines zu verwenden, installieren Sie die Vertex AI-Clientbibliothek v1.7 oder höher.
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.
-
Erstellen Sie ein Dienstkonto:
-
Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen.
- Geben Sie im Feld Dienstkontoname einen Namen ein.
- Optional: Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein.
- Klicken Sie auf Erstellen.
- Klicken Sie auf das Feld Rolle auswählen. Wählen Sie unter Alle Rollen die Option Vertex AI > Vertex AI-Nutzer aus.
-
Klicken Sie auf Fertig, um das Dienstkonto zu erstellen.
Schließen Sie das Browserfenster nicht. Sie verwenden es in der nächsten Aufgabe.
-
-
Erstellen Sie einen Dienstkontoschlüssel für die Authentifizierung:
- Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse des von Ihnen erstellten Dienstkontos.
- Klicken Sie auf Schlüssel.
- Klicken Sie auf Schlüssel hinzufügen > Neuen Schlüssel erstellen.
- Klicken Sie auf Erstellen. Daraufhin wird eine JSON-Schlüsseldatei auf Ihren Computer heruntergeladen.
- Klicken Sie auf Schließen.
- Gewähren Sie dem neuen Dienstkonto Zugriff auf das Dienstkonto, das Sie zum Ausführen von Pipelines verwenden.
- Klicken Sie auf , um zur Liste der Dienstkonten zurückzukehren.
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
- Klicken Sie auf den Tab Berechtigungen.
- Klicken Sie auf Zugriff erlauben. Das Feld Hauptkonten hinzufügen wird angezeigt.
- Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse für das Dienstkonto ein, das Sie in einem vorherigen Schritt erstellt haben.
- Wählen Sie in der Drop-down-Liste Rolle die Option Dienstkonten > Dienstkontonutzer aus.
- Klicken Sie auf Speichern.
-
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 dabei 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 voncreate_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 der Kompilierung 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 dabei Folgendes:
- PROJECT_REGION: Die Region, in der diese Pipeline ausgeführt wird.
Im obigen Beispiel gilt Folgendes:
- 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. - 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 derdataset
-Ausgabe vonds_op
ab. - Kompilieren Sie die Pipeline mit
kfp.compiler.Compiler
. - 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.
Pipeline lokal testen (optional)
Nachdem Sie Ihre Pipelines und Komponenten definiert haben, können Sie den Komponentencode testen. Führen Sie dazu den Code in Ihrer lokalen Entwicklungsumgebung aus. Durch lokale Ausführung Ihrer Pipeline oder einer Komponente können Sie potenzielle Probleme identifizieren und beheben, bevor Sie eine Pipelineausführung in einer Remoteumgebung wie Vertex AI Pipelines erstellen. Weitere Informationen zum lokalen Ausführen von Pipelines und Komponenten finden Sie in der KFP-Dokumentation unter Lokale Ausführung.
Auf dieser Seite erfahren Sie, wie Sie eine Pipeline definieren und ausführen, die aus zwei Aufgaben besteht.
Lokale Umgebung einrichten
Optional: Installieren Sie Docker.
Verwenden Sie das folgende Codebeispiel, um eine einfache Pipeline zu definieren:
from kfp import dsl # Define a component to add two numbers. @dsl.component def add(a: int, b: int) -> int: return a + b # Define a simple pipeline using the component. @dsl.pipeline def addition_pipeline(x: int, y: int, z: int) -> int: task1 = add(a=x, b=y) task2 = add(a=task1.output, b=z) return task2.output
Lokale Ausführung aufrufen
Initialisieren Sie eine lokale Sitzung mit der Funktion local.init()
. Wenn Sie local.init()
verwenden, führt das KFP SDK Ihre Pipelines und Komponenten lokal aus, wenn Sie sie aufrufen.
Wenn Sie local.init()
verwenden, müssen Sie einen Runner-Typ angeben. Der Runner-Typ gibt an, wie KFP die einzelnen Aufgaben ausführen soll.
Verwenden Sie das folgende Beispiel, um den Runnertyp DockerRunner
zum Ausführen der einzelnen Aufgaben in einem Container anzugeben. Weitere Informationen zu den von KFP unterstützten lokalen Runnern finden Sie in der KFP-Dokumentation unter Lokale Runner.
from kfp import local
local.init(runner=local.DockerRunner())
pipeline_task = addition_pipeline(x=1, y=2, z=3)
Verwenden Sie den folgenden Code, um die Ausgabe der Pipelineaufgabe bei der lokalen Ausführung aufzurufen:
print(f'Result: {pipeline_task.output}')
Kubeflow-Pipelines erstellen
Verwenden Sie den folgenden Prozess, um eine Pipeline zu erstellen.
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.
Erstellen Sie alle benutzerdefinierten Komponenten, die zur Implementierung Ihres ML-Workflows erforderlich sind. Nutzen Sie dazu das Kubeflow Pipelines SDK. 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.
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.
Erstellen Sie Ihre Pipeline als Python-Funktion.
Weitere Informationen zum Definieren Ihrer Pipeline als Python-Funktion
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 dabei Folgendes:
- PIPELINE_FUNCTION: Der Name der Pipelinefunktion.
- PIPELINE_PACKAGE_PATH: Der Pfad, unter dem Ihre kompilierte Pipeline gespeichert werden soll.
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.
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:
Prüfen Sie die Supportrichtlinie für Vertex AI-Frameworks und die Liste der unterstützten Frameworks.
Abonnieren Sie die Vertex AI-Versionshinweise und die PyPi.org-RSS-Feeds für die von Ihnen verwendeten SDKs (Kubeflow Pipelines SDK, SDK für Google Cloud-Pipeline-Komponenten oder TensorFlow Extended SDK), um über neue Releases auf dem Laufenden zu bleiben.
Wenn Sie eine Pipelinevorlage oder -definition haben, die auf einen Container mit Sicherheitslücken verweist, sollten Sie Folgendes tun:
Installieren Sie die neueste Patchversion des SDK.
Erstellen Sie Ihre Pipelinevorlage oder -definition neu und kompilieren Sie sie neu.
Laden Sie die Vorlage oder Definition noch einmal in Artifact Registry oder Cloud Storage hoch.
Nächste Schritte
- Lesen Sie die Einführung in Vertex AI Pipelines, um mehr über die Orchestrierung von ML-Workflows zu erfahren.
- Pipeline ausführen
- Ergebnisse der Pipelineausführungen visualisieren und analysieren