Data Science Projekte bestehen selten aus einem einzelnen Skript. Stattdessen gibt es meist mehrere aufeinander aufbauende Schritte, wie Daten laden, Feature Engineering, Modelltraining oder Deployment. Kubeflow Pipelines (KFP) ist ein Open Source Framework, zur Definition und Ausführung von ML-Workflows auf Kubernetes. Auf der Google Cloud Platform sind sie die Basis der Vertex AI Pipelines.
Pipelines bestehen dabei aus einer oder mehreren Komponenten die gemeinsam einen DAG (= Directed Acyclic Graph) bilden. Bevor Pipelines ausgeführt werden, müssen sie in YAML kompiliert werden. Diese werden dann an ein Backend (bspw. GCP Vertex AI Pipelines) übermittelt, um die Pipeline auszuführen.
Die offizielle Dokumentation von Kubeflow Pipelines findet man hier.
Lokale Entwicklungsumgebung
Für den Einstieg können Kubeflow Pipelines lokal installiert und ausgeführt werden. Kubeflow kann direkt über pip installiert werden:
pip install kfp
#ggf. pip install --upgrade "kfp>=2,<3"Um eine Pipeline-Komponente zu definieren, verwendet man den @dsl.component Decorator. Der @dsl.pipeline Decorator dient dazu, die Pipeline selbst festzulegen.
Im dsl.components Decorater legen wir außerdem ein base_image fest, hier „python:3.11-slim“. Es geht auch ohne, aber dann läuft die Pipeline deutlich länger, weil Python und kfp erst installiert werden muss.
Eine einfache Pipeline mit einer Komponente sieht dann beispielsweise so aus:
from kfp import dsl
@dsl.component(
base_image="python:3.11-slim",
packages_to_install=[] # hier nur echten deps, z.B. ["pandas==2.2.3"]
)
def say_hello(name: str) -> str:
hello_text = f'Hello, {name}!'
print(hello_text)
return hello_text
@dsl.pipeline
def hello_pipeline(recipient: str) -> str:
hello_task = say_hello(name=recipient)
return hello_task.output
Um die Pipeline zu einer JSON zu kompilieren, kann man folgenden Code verwenden:
from kfp import compiler
from start_pipeline import hello_pipeline
compiler.Compiler().compile(
pipeline_func=hello_pipeline,
package_path="pipeline.json", # oder pipeline.yaml
)
Nach Ausführen des Codes liegt im Ordner eine Datei „pipeline.json“. Yaml geht auch, wird für Vertex AI Pipelines aber nicht empfohlen.
Vertex AI Pipelines in GCP
Die vollständige Dokumentation findet sich hier: https://docs.cloud.google.com/vertex-ai/docs/pipelines/configure-project?hl=de
GCP Projekt einrichten
Zunächst ein neues Projekt in GCP anlegen (siehe hier). Wir nennen es kubeflow012026.
gcloud auth login
gcloud components update
gcloud projects create kubeflow012026 --name="kubeflow012026"
gcloud config set project kubeflow012026
gcloud auth application-default set-quota-project kubeflow012026Außerdem müssen wir das Abrechnungskonto aktivieren:
gcloud billing accounts list
gcloud billing projects link kubeflow012026 --billing-account=xxx-xxx-xxx Dann müssen wir die APIs VertexAI, Compute und Storage aktivieren:
gcloud services enable aiplatform.googleapis.com compute.googleapis.com storage.googleapis.comService Account einrichten
Um die Pipelines auszuführen wird ein Dienstkonto benötigt. Diese richten wir so ein:
gcloud iam service-accounts create KubeflowService --description="Dienstkonto für kubeflow" --display-name="KubeflowService" --project=kubeflow012026Dem Dienstkonto muss anschließend Zugriff auf Vertex AI gewährt werden. Dies erreichen man, indem man die Rolle „aiplatform.user“ zuweist:
gcloud projects add-iam-policy-binding kubeflow012026 --member="serviceAccount:KubeflowService@kubeflow012026.iam.gserviceaccount.com" --role="roles/aiplatform.user"Cloud Storage Bucket erstellen
Die Artefakte der VertexAI Pipeline werden in einem Cloud Storage Bucket gespeichert. Diesen erstellen wir ebenfalls mit gcloud. Als Region wählen wir „us-central1„, da dort meist eher Ressourcen und Quote für Vertex AI Pipelines verfügbar sind.
gcloud storage buckets create gs://kfbucket012026 --location=us-central1 --project=kubeflow012026Dem Dienstkonto muss anschließend Zugriff auf das Bucket gewährt werden:
gcloud storage buckets add-iam-policy-binding gs://kfbucket012026 --member="serviceAccount:KubeflowService@kubeflow012026.iam.gserviceaccount.com" --role="roles/storage.objectUser"Wenn mehr Rechte erforderlich sind hilft manchmal auch: „roles/storage.objectAdmin“
Act As einrichten
Wenn man die Pipeline von einem lokalen Rechner aus startet, dann muss man dem eigenen User erlauben als Service-Account zu agieren. Dazu kann man zunächst seinen Account feststellen:
gcloud auth listDanach muss man einrichten, dass dieser Account als Serviceaccount agieren kann:
gcloud projects add-iam-policy-binding kubeflow012026 --member="user:DEINE_EMAIL@domain.de" --role="roles/iam.serviceAccountUser"AI Platform Package
Lokal muss zudem das AI Platform Package installiert werden
pip install -U google-cloud-aiplatform kfp
#pip install --upgrade "kfp>=2,<3"Pipeline zu GCP submitten
Mit folgendem Code wird die Pipeline zu GCP submitted:
from google.cloud import aiplatform
PROJECT_ID = "kubeflow012026"
REGION = "us-central1"
BUCKET = "gs://kfbucket012026"
PIPELINE_ROOT = f"{BUCKET}/pipeline_root"
aiplatform.init(
project=PROJECT_ID,
location=REGION,
staging_bucket=BUCKET,
)
job = aiplatform.PipelineJob(
display_name="hello-kfp-run",
template_path="pipeline.json", # oder pipeline.yaml
pipeline_root=PIPELINE_ROOT,
parameter_values={
"recipient": "World",
},
)
job.submit(
service_account="KubeflowService@kubeflow012026.iam.gserviceaccount.com"
)
print("Submitted:", job.resource_name)
Ausführung prüfen
Nach Ausführung des obigen Codes läuft die Pipeline direkt los. Die laufende Pipeline kann man unter Vertex AI / Pipelines anschauen. Dort sieht man den aktuellen Status der Pipeline.
Die Logs findet man auch unter Vertex AI / Training / Benutzerdefinierte Trainings….
Next Steps
Das Aufsetzen einer kompletten Machine Learning Pipeline wird hier erklärt.