
Your GPUs Are Everywhere. Your Robot-Learning Loop Shouldn't Be.
Robotics compute is spreading across clouds and clusters. Learn how one portable pipeline layer can keep the robot-learning loop reproducible.
If you're standardizing on GCP, Vertex AI Pipelines offers a managed, deeply integrated workflow experience. But if your infrastructure strategy is multi-cloud or evolving, ZenML helps you build pipelines that aren't tied to a single provider. Run on Vertex now, and keep your options open for AWS, Azure, or on-prem later. Compare ZenML's composable, cloud-agnostic stack architecture against Vertex AI's GCP-native orchestration suite.
“ZenML has proven to be a critical asset in our machine learning toolbox, and we are excited to continue leveraging its capabilities to drive ADEO's machine learning initiatives to new heights”
François Serra
ML Engineer / ML Ops / ML Solution architect at ADEO Services
Feature-by-feature comparison
| Workflow Orchestration | Purpose-built ML pipeline orchestration with pluggable backends — Airflow, Kubeflow, Kubernetes, Vertex AI, and more | Vertex AI Pipelines is a managed, production-grade orchestrator for containerized ML workflows on GCP with console visibility and lifecycle tracking |
| Integration Flexibility | Composable stack with 50+ MLOps integrations — swap orchestrators, trackers, and deployers without code changes | Deep integration within GCP via Google Cloud Pipeline Components, but no cloud-agnostic integration model for non-GCP tools |
| Vendor Lock-In | Open-source Python pipelines run anywhere — switch clouds, orchestrators, or tools without rewriting code | Runs inside a GCP project/region with GCP identity and GCS storage — migration typically means re-platforming the entire pipeline stack |
| Setup Complexity | pip install zenml — start building pipelines in minutes with zero infrastructure, scale when ready | Managed service eliminates infrastructure setup — configure GCP project, IAM, and storage to get production-grade pipelines running |
| Learning Curve | Python-native API with decorators — familiar to any ML engineer or data scientist who writes Python | Requires learning KFP component/pipeline DSL, compilation workflows, containerization patterns, and GCP resource concepts |
| Scalability | Delegates compute to scalable backends — Kubernetes, Spark, cloud ML services — for unlimited horizontal scaling | Enterprise-scale workloads on GCP — orchestrates large training/processing jobs using Google-managed Vertex, BigQuery, and Dataflow services |
| Cost Model | Open-source core is free — pay only for your own infrastructure, with optional managed cloud for enterprise features | Documented per-run pipeline fee ($0.03/run) plus underlying compute costs — Google provides cost labeling and billing export for transparency |
| Collaboration | Code-native collaboration through Git, CI/CD, and code review — ZenML Pro adds RBAC, workspaces, and team dashboards | Collaborative use through shared GCP projects, IAM-based access control, and console-based visibility into runs and metadata |
| ML Frameworks | Use any Python ML framework — TensorFlow, PyTorch, scikit-learn, XGBoost, LightGBM — with native materializers and tracking | Broad framework support via custom containers and prebuilt container images for common frameworks including PyTorch and TensorFlow |
| Monitoring | Integrates Evidently, WhyLogs, and other monitoring tools as stack components for automated drift detection and alerting | Vertex AI Model Monitoring provides scheduled monitoring jobs with alerting when model quality metrics cross defined thresholds |
| Governance | ZenML Pro provides RBAC, SSO, workspaces, and audit trails — self-hosted option keeps all data in your own infrastructure | Enterprise governance via GCP IAM, network controls, billing attribution, and VPC support for pipeline-launched resources |
| Experiment Tracking | Native metadata tracking plus seamless integration with MLflow, Weights & Biases, Neptune, and Comet for rich experiment comparison | Vertex AI Experiments tracks hyperparameters, environments, and results with SDK and console support built on Vertex ML Metadata |
| Reproducibility | Automatic artifact versioning, code-to-Git linking, and containerized execution guarantee reproducible pipeline runs | Pipeline templates plus Vertex ML Metadata record artifacts and lineage graphs — strong primitives for reproducing ML workflows on GCP |
| Auto-Retraining | Schedule pipelines via any orchestrator or use ZenML Pro event triggers for drift-based automated retraining workflows | Vertex AI scheduler API supports one-time or recurring pipeline runs for continuous training patterns within GCP |
Code comparison
from zenml import pipeline, step, Model
from zenml.integrations.mlflow.steps import (
mlflow_model_deployer_step,
)
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
import numpy as np
@step
def ingest_data() -> pd.DataFrame:
return pd.read_csv("data/dataset.csv")
@step
def train_model(df: pd.DataFrame) -> RandomForestRegressor:
X, y = df.drop("target", axis=1), df["target"]
model = RandomForestRegressor(n_estimators=100)
model.fit(X, y)
return model
@step
def evaluate(model: RandomForestRegressor, df: pd.DataFrame) -> float:
X, y = df.drop("target", axis=1), df["target"]
preds = model.predict(X)
return float(np.sqrt(mean_squared_error(y, preds)))
@step
def check_drift(df: pd.DataFrame) -> bool:
# Plug in Evidently, Great Expectations, etc.
return detect_drift(df)
@pipeline(model=Model(name="my_model"))
def ml_pipeline():
df = ingest_data()
model = train_model(df)
rmse = evaluate(model, df)
drift = check_drift(df)
# Runs on any orchestrator, logs to MLflow,
# tracks artifacts, and triggers retraining — all
# in one portable, version-controlled pipeline
ml_pipeline() from kfp import dsl, compiler
from google.cloud import aiplatform
PROJECT_ID = "my-gcp-project"
REGION = "europe-west1"
PIPELINE_ROOT = "gs://my-bucket/pipeline-root"
@dsl.component
def preprocess(input_uri: str) -> str:
# Read and clean data from GCS
return input_uri
@dsl.component
def train(data_uri: str) -> str:
# Train model and write artifacts to GCS
return f"{data_uri}#trained-model"
@dsl.pipeline(name="train-pipeline", pipeline_root=PIPELINE_ROOT)
def pipeline(input_uri: str = "gs://my-bucket/data/train.csv"):
data = preprocess(input_uri=input_uri)
train(data_uri=data.output)
# Compile pipeline to JSON template
compiler.Compiler().compile(
pipeline_func=pipeline, package_path="pipeline.json"
)
# Submit to Vertex AI (GCP-only)
aiplatform.init(project=PROJECT_ID, location=REGION)
job = aiplatform.PipelineJob(
display_name="train-pipeline",
template_path="pipeline.json",
pipeline_root=PIPELINE_ROOT,
)
job.submit()
# Pipeline runs only on GCP — no built-in
# portability to AWS, Azure, or on-prem.
# Metadata tied to Vertex ML Metadata service.
ZenML is fully open-source and vendor-neutral, letting you avoid the significant licensing costs and platform lock-in of proprietary enterprise platforms. Your pipelines remain portable across any infrastructure, from local development to multi-cloud production.
ZenML offers a pip-installable, Python-first approach that lets you start locally and scale later. No enterprise deployment, platform operators, or Kubernetes clusters required to begin — build production-grade ML pipelines in minutes, not weeks.
ZenML's composable stack lets you choose your own orchestrator, experiment tracker, artifact store, and deployer. Swap components freely without re-platforming — your pipelines adapt to your toolchain, not the other way around.
Expand Your Knowledge

Robotics compute is spreading across clouds and clusters. Learn how one portable pipeline layer can keep the robot-learning loop reproducible.

Claude Agent SDK runs the agent loop. Kitaru adds the durable runtime around a completed invocation — checkpointed results, artifacts, replay boundaries, and waits.

LangGraph keeps graph state, threads, and interrupts. Kitaru adds the durable workflow around the graph call — replay boundaries, durable waits, and inspectable runs.