.. _ml-pipelines:
ML Pipelines
==========================
This section covers how we build, configure, and deploy machine learning pipelines using
`Hydra `_ + `hydra-zen `_
for configuration, `Flyte `_ for orchestration, and Scaffold as the glue between them.
.. toctree::
:maxdepth: 1
:caption: Contents:
quickstart
full_example
deployment
flyte_launcher
advanced
integrations
gotchas
**Why these tools?**
As ML projects move from proof-of-concept to production, managing configuration, reproducibility,
and cloud execution manually becomes prohibitively expensive. Classical software engineering has
solved this with version control and CI/CD — but ML systems have additional dimensions: you need
to version not just code but also configuration and data, and you need to build and deploy not just
a package but an entire training system.
Manual steps compound quickly. Imagine that every change to a learning rate required you to manually
rebuild a Docker image, push it, register the workflow, and trigger a run. The maintenance cost
would be unsustainable.
The combination of hydra-zen and Flyte solves this:
- **hydra-zen** keeps all configuration in Python — versioned, composable, type-checked.
No scattered YAML files. Configs are first-class code artifacts that live next to the logic they
configure and travel with it through version control.
- **Flyte** orchestrates multi-task pipelines in Kubernetes pods, provides caching, and gives you
a UI to monitor executions, inspect outputs, and re-run specific tasks. Pipelines and their
configuration become versioned, reproducible artifacts that can be delivered to a client or
research partner, or replayed exactly months later.
- **Scaffold's Flyte launcher** collapses the five manual steps of building images, serializing,
registering, and executing a workflow into one CLI call — from a developer machine or from a
CI/CD pipeline.
Together these tools let you reach a state where a single config change in version control triggers
CI/CD to test, build, register, and run a new version of the training workflow automatically — what
Google refers to as
`MLOps level 2 `_
and Martin Fowler calls `CD4ML `_.
**When should you use Flyte?**
Local execution is always the starting point. Reach for Flyte when you need any of the following
— and especially when you need several of them together:
- **Scale** — a task needs more RAM, GPUs, or parallelism than your laptop can provide
- **Reproducibility** — every run is a versioned, inspectable artifact in the Flyte UI
- **Scheduling** — workflows that run on a cron schedule without manual intervention
- **Deliverability** — pipelines as versioned artifacts, shareable with clients or partners
- **CD4ML** — CI/CD automatically registers and runs a new workflow version on every merge
**How it works at a glance**
A pipeline file follows a five-step structure:
1. **Configure Logic** — define your domain classes and create :code:`builds()` configs for them
2. **Implement Logic** — write plain Python functions (no Flyte or hydra dependencies)
3. **Configure Tasks and Workflow** — compose task and workflow configs; register named variants
4. **Implement Tasks and Workflow** — wrap functions in :code:`@runtime_task` and :code:`@workflow`
5. **Run** — :code:`main()` handles local execution; :code:`__main__` flushes stores and calls :code:`main()`
See :ref:`quickstart` for a minimal working example.