ZenML
Compare ZenML vs

Open source MLOps stack

ZenML offers a flexible, open-source alternative to Valohai for ML pipeline orchestration. Unlike Valohai's closed-source, all-in-one platform, ZenML seamlessly integrates with your existing infrastructure. Enjoy ZenML's intuitive Python-based SDK with decorators, while avoiding vendor lock-in. Accelerate your ML initiatives with ZenML's adaptable framework, allowing you to choose preferred tools for datasets, hyperparameter tuning, and distributed processing.

ZenML
vs
Valohai

Run the same workloads on any cloud to gain strategic flexibility

  • ZenML does not tie your work to one cloud.
  • Define infrastructure as stack components independent of your code.
  • Run any code on any stack with minimum fuss.
Dashboard mockup showing vendor-neutral architecture

50+ integrations with the most popular cloud and open-source tools

  • From experiment trackers like MLflow and Weights & Biases to model deployers like Seldon and BentoML, ZenML has integrations for tools across the lifecycle.
  • Flexibly run workflows across all clouds or orchestration tools such as Airflow or Kubeflow.
  • AWS, GCP, and Azure integrations all supported out of the box.
Dashboard mockup showing integrations

Avoid getting locked in to a vendor

  • Avoid tangling up code with tooling libraries that make it hard to transition.
  • Easily set up multiple MLOps stacks for different teams with different requirements.
  • Switch between tools and platforms seamlessly.
Dashboard mockup showing productionalization workflow
“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

François Serra

ML Engineer / ML Ops / ML Solution architect at ADEO Services

Company logo

Feature-by-feature comparison

Explore in Detail What Makes ZenML Unique

Feature
ZenML ZenML
Valohai Valohai
Infrastructure Integration Seamlessly integrates with existing orchestration infrastructure like Kubeflow, Kubernetes, AWS SageMaker Requires using Valohai's proprietary infrastructure
Pipeline Development Intuitive Python-based SDK with @step and @pipeline decorators YAML-based configuration, which can be more complex
Vendor Lock-in Open-source and flexible, allowing use of preferred tools for various ML tasks Closed-source with lock-in effect, requiring use of Valohai for all ML tasks
Customization Highly customizable MLOps stack to fit specific needs Limited customization options within Valohai's ecosystem
Learning Curve Gentle learning curve with familiar Python-based approach Steeper learning curve due to YAML configuration and platform-specific concepts
End-to-End Platform Focuses on core MLOps functionalities, allowing integration with preferred tools Provides a complete end-to-end platform for ML workflows
Scalability Scalable across various environments and infrastructures Scalable within Valohai's infrastructure
Open Source Fully open-source, allowing community contributions and customizations Closed-source platform

Code comparison

ZenML and Valohai side by side

ZenML ZenML
from zenml import pipeline, step
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

@step
def ingest_data():
    return pd.read_csv("data/dataset.csv")

@step
def train_model(df):
    X, y = df.drop("target", axis=1), df["target"]
    model = RandomForestRegressor(n_estimators=100)
    model.fit(X, y)
    return model

@step
def evaluate_model(model, df):
    X, y = df.drop("target", axis=1), df["target"]
    rmse = mean_squared_error(y, model.predict(X)) ** 0.5
    print(f"RMSE: {rmse}")

@pipeline
def ml_pipeline():
    df = ingest_data()
    model = train_model(df)
    evaluate_model(model, df)

ml_pipeline()
Valohai Valohai
# valohai.yaml
---
- step:
    name: ingest_data
    image: python:3.9
    command:
      - python ingest_data.py
    outputs:
      - name: dataset
        path: dataset.csv

- step:
    name: train_model
    image: python:3.9
    command:
      - python train_model.py
    inputs:
      - name: dataset
        default: datum://ingest_data/dataset.csv
    outputs:
      - name: model
        path: model.pkl

- step:
    name: evaluate_model
    image: python:3.9
    command:
      - python evaluate_model.py
    inputs:
      - name: dataset
        default: datum://ingest_data/dataset.csv
      - name: model
        default: datum://train_model/model.pkl

# ingest_data.py
import pandas as pd

def ingest_data():
    df = pd.read_csv("data/dataset.csv")
    df.to_csv("/valohai/outputs/dataset.csv", index=False)

if __name__ == "__main__":
    ingest_data()

# train_model.py
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
import pickle

def train_model():
    df = pd.read_csv("/valohai/inputs/dataset.csv")
    X, y = df.drop("target", axis=1), df["target"]
    model = RandomForestRegressor(n_estimators=100)
    model.fit(X, y)
    with open("/valohai/outputs/model.pkl", "wb") as f:
        pickle.dump(model, f)

if __name__ == "__main__":
    train_model()

# evaluate_model.py
import pandas as pd
from sklearn.metrics import mean_squared_error
import pickle

def evaluate_model():
    df = pd.read_csv("/valohai/inputs/dataset.csv")
    with open("/valohai/inputs/model.pkl", "rb") as f:
        model = pickle.load(f)
    X, y = df.drop("target", axis=1), df["target"]
    rmse = mean_squared_error(y, model.predict(X)) ** 0.5
    print(f"RMSE: {rmse}")

if __name__ == "__main__":
    evaluate_model()

# To run the pipeline:
# valohai execution run --adhoc ingest_data
# valohai execution run --adhoc train_model
# valohai execution run --adhoc evaluate_model
Flexibility and Customization

Flexibility and Customization

ZenML's modular architecture allows for extensive customization and integration with your preferred tools and platforms, whereas Metaflow offers a more opinionated and rigid workflow structure.

Focus on Usability and Adoption

Focus on Usability and Adoption

ZenML prioritizes simplicity and ease of use, providing comprehensive documentation, tutorials, and community support to facilitate faster adoption and productivity for teams of all skill levels.

Agile ML Workflow Development

Agile ML Workflow Development

ZenML's lightweight and flexible pipeline definition enables rapid iteration and experimentation, allowing data scientists and ML engineers to quickly prototype and refine ML workflows using a familiar Python-based syntax.

Seamless Tool Integration

Seamless Tool Integration

ZenML seamlessly integrates with MLflow and other best-of-breed tools, allowing you to create a customized MLOps stack that fits your specific requirements. MLflow, as a standalone tool, may require more effort to integrate with other components in your ML ecosystem.

Reproducibility and Governance

Reproducibility and Governance

With built-in support for data versioning and lineage tracking, ZenML ensures reproducibility, traceability, and governance of your ML pipelines, facilitating compliance and collaboration.

Outperform E2E Platforms: Book Your Free ZenML Strategy Talk

E2E Platform Showdown

Explore the Advantages of ZenML Over Other E2E Platform Tools

Expand Your Knowledge

Broaden Your MLOps Understanding with ZenML

Dynamic Pipelines: A Skeptic's Guide

Dynamic Pipelines: A Skeptic's Guide

Agentic RAG without guardrails spirals out of control. Here's how ZenML's dynamic pipelines give you fan-out, budget limits, and lineage without limiting the LLMs.

Experience the ZenML Advantage

  • Seamlessly integrate with your existing ML infrastructure like Kubeflow and OpenShift AI
  • Develop pipelines effortlessly with intuitive Python decorators
  • Avoid vendor lock-in with our open-source, flexible framework
  • Customize your MLOps stack to fit your specific needs