Releases: zenml-io/zenml
0.55.1
If you are actively using the Model Control Plane features, we suggest that you directly upgrade to 0.55.1, bypassing 0.55.0.
This is a patch release bringing backward compatibility for breaking changes introduced in 0.55.0, so that appropriate migration actions can be performed at the desired pace. Please refer to the 0.55.0 release notes for specific information on breaking changes and how to update your code to align with the new way of doing things. We also have updated our documentation to serve you better and introduced PipelineNamespace
models in our API.
Also, this release is packed with Database recovery in case the upgrade failed to migrate the Database to a newer version of ZenML.
What's Changed
- Update skypilot docs by @safoinme in #2344
- Fast CI / Slow CI by @strickvl in #2268
- Add repeating tests and instafail error logging to testing in CI by @strickvl in #2334
- Added more info about metadata by @htahir1 in #2346
- Use GitHub as trusted publisher for PyPI publication by @strickvl in #2343
- Fix code in docs/questions about MCP by @wjayesh in #2340
- Update release notes for 0.55.0 by @avishniakov in #2351
- Fixed metadata docs by @htahir1 in #2350
- Add generate test duration file cron by @safoinme in #2347
- CI comments for slow CI and more conditional membership checking by @strickvl in #2356
- Backward compatible
ModelVersion
by @avishniakov in #2357 - Add model version created to analytics by @avishniakov in #2352
- Make CI run on the appropriate branch by @strickvl in #2358
- Add MVP pipeline namespace support by @schustmi in #2353
- Apply docker run args to skypilot orchestrator VM by @schustmi in #2342
- 📝 Minor docs improvements (basic step example) by @plattenschieber in #2348
- Add DB backup and recovery during DB schema migrations by @wjayesh in #2158
- Fix CI issues by @strickvl in #2363
New Contributors
- @plattenschieber made their first contribution in #2348
Full Changelog: 0.55.0...0.55.1
0.55.0
This release comes with a range of new features, bug fixes and documentation updates. The most notable changes are the ability to do lazy loading of Artifacts and their Metadata and Model and its Metadata inside the pipeline code using pipeline context object, and the ability to link Artifacts to Model Versions implicitly via the save_artifact
function.
Additionally, we've updated the documentation to include a new starter guide on how to manage artifacts, and a new production guide that walks you through how to configure your pipelines to run in production.
Breaking Change
The ModelVersion
concept was renamed to Model
going forward, which affects code bases using the Model Control Plane feature. This change is not backward compatible.
Pipeline decorator
@pipeline(model_version=ModelVersion(...))
-> @pipeline(model=Model(...))
Old syntax:
from zenml import pipeline, ModelVersion
@pipeline(model_version=ModelVersion(name="model_name",version="v42"))
def p():
...
New syntax:
from zenml import pipeline, Model
@pipeline(model=Model(name="model_name",version="v42"))
def p():
...
Step decorator
@step(model_version=ModelVersion(...))
-> @step(model=Model(...))
Old syntax:
from zenml import step, ModelVersion
@step(model_version=ModelVersion(name="model_name",version="v42"))
def s():
...
New syntax:
from zenml import step, Model
@step(model=Model(name="model_name",version="v42"))
def s():
...
Acquiring model configuration from pipeline/step context
Old syntax:
from zenml import pipeline, step, ModelVersion, get_step_context, get_pipeline_context
@pipeline(model_version=ModelVersion(name="model_name",version="v42"))
def p():
model_version = get_pipeline_context().model_version
...
@step(model_version=ModelVersion(name="model_name",version="v42"))
def s():
model_version = get_step_context().model_version
...
New syntax:
from zenml import pipeline, step, Model, get_step_context, get_pipeline_context
@pipeline(model=Model(name="model_name",version="v42"))
def p():
model = get_pipeline_context().model
...
@step(model=Model(name="model_name",version="v42"))
def s():
model = get_step_context().model
...
Usage of model configuration inside pipeline YAML config file
Old syntax:
model_version:
name: model_name
version: v42
...
New syntax:
model:
name: model_name
version: v42
...
ModelVersion.metadata
-> Model.run_metadata
Old syntax:
from zenml import ModelVersion
def s():
model_version = ModelVersion(name="model_name",version="production")
some_metadata = model_version.metadata["some_metadata"].value
...
New syntax:
from zenml import Model
def s():
model = Model(name="model_name",version="production")
some_metadata = model.run_metadata["some_metadata"].value
...
Those using the older syntax are requested to update their code accordingly.
Full set of changes are highlighted here: #2267
What's Changed
- Remove --name from service account creation in docs by @christianversloot in #2295
- Secrets store hot backup and restore by @stefannica in #2277
- Updating the README of the e2e template by @bcdurak in #2299
- Add missing docstring for Skypilot setting by @schustmi in #2305
- Update Manage artifacts starter guide docs by @JonathanLoscalzo in #2301
- Add some tiny details and move around a page by @htahir1 in #2297
- Model links lazy evaluation in pipeline code by @avishniakov in #2205
- Link artifact to MCP entity via function call or implicitly in
save_artifact
by @avishniakov in #2298 - Extend MCP/ACP listing capabilities by @avishniakov in #2285
- Add the latest
zenml
version to migration testing scripts by @strickvl in #2294 - Remove Python 3.7 check for Langchain Integration by @strickvl in #2308
- Allow spellcheck to run for docs changes by @strickvl in #2307
- Add helper message for
zenml up --blocking
login by @strickvl in #2290 - Fix secret migration from an external store in helm deployment by @stefannica in #2315
- Small docs fixes by @htahir1 in #2314
- Rename model version to a model by @avishniakov in #2267
- Updating the docs after the Skypilot tests by @bcdurak in #2311
- Remove unused Segment / Mixpanel generation workflow and script by @strickvl in #2319
- Add
log_step_metadata
utility function by @strickvl in #2322 - Add conditional checks to prevent scheduled actions running inside forked repositories by @strickvl in #2317
- RBAC resource sharing by @schustmi in #2320
- Fix typo in migration downgrade by @avishniakov in #2337
- Separate
skypilot
flavors into different folders by @safoinme in #2332 - Add warning for GCP integration when using Python >=3.11 by @strickvl in #2333
New Contributors
- @JonathanLoscalzo made their first contribution at #2301
Full Changelog: 0.54.1...0.55.0
0.43.1
Backports some important fixes that have been introduced in more recent versions
of ZenML to the 0.43.x release line.
Full Changelog: 0.43.0...0.43.1
0.42.2
Backports some important fixes that have been introduced in more recent versions
of ZenML to the 0.42.x release line.
Full Changelog: 0.42.1...0.42.2
0.53.1
Important
This release has been updated (16th January, 2024)
A bug was introduced in the helm chart starting from version 0.50.0. All releases from that version have been updated with the fix. More details: #2234
This minor release contains a hot fix for a bug that was introduced in 0.53.0
where the secrets manager flavors were not removed from the database
properly. This release fixes that issue.
What's Changed
- Remove secrets manager flavors from DB by @stefannica in #2182
Full Changelog: 0.53.0...0.53.1
0.53.0
Important
This release has been updated (16th January, 2024)
A bug was introduced in the helm chart starting from version 0.50.0. All releases from that version have been updated with the fix. More details: #2234
This release is packed with a deeply reworked quickstart example and starter template, the removal of secret manager stack component, improved experience with Cloud Secret Stores, support for tags and metadata directly in Model Versions, some breaking changes for Model Control Plane and a few bugfixes.
New features
Try out the new quickstart and starter template featuring the Model Control Plane
Maybe it slipped you by, but ZenML has a brand new feature, and it's called the Model Control Plane (MCP)! The MCP allows users to register their Models directly into their zenml servers, and associate metadata, runs, and artifacts with it. This gives users a model-centric view into ZenML, rather than a pipeline-centric one. Try it out now with the quickstart:
pip install "zenml[server,templates]"
mkdir zenml_starter_template
cd zenml_starter_template
copier copy --trust -r 2023.12.18 https://github.com/zenml-io/template-starter.git .
# or `zenml init --template starter`
# Now either read the README or run quickstart.ipynb
Alternatively, just clone the repo and run the quickstart.
Please note that while frontend features are Cloud Only, OSS users can still use the MCP via the CLI and Python SDK.
Breaking changes
Secret Manager stack components sunset
Upon upgrading, all Secrets Manager stack components will be removed from the Stacks that still contain them and from the database. This also implies that access to any remaining secrets managed through Secrets Manager stack components will be lost. If you still have secrets configured and managed through Secrets Manager stack components, please consider migrating all your existing secrets to the centralized secrets store before upgrading by means of the zenml secrets-manager secret migrate
CLI command. Also see the zenml secret --help
command for more information.
Renaming "endpoints" to "deployments" in Model Control Plane
This is just a renaming to provide better alignment with industry standards. Though, it will affect:
ArtifactConfig(..., is_endpoint_artifact=True)
now isArtifactConfig(..., is_deployment_artifact=True)
- CLI command
zenml model endpoint_artifacts ...
now iszenml model deployment_artifacts ...
Client().list_model_version_artifact_links(..., only_endpoint_artifacts=True)
now isClient().list_model_version_artifact_links(..., only_deployment_artifacts=True)
ModelVersion(...).get_endpoint_artifact(...)
now isModelVersion(...).get_deployment_artifact(...)
Major bugfixes
- Fix various bugs by @stefannica in #2147
- Adding a link from pipeline runs to code repositories by @bcdurak in #2146
- Fix Client doesn't recover from remote connection resets by @avishniakov in #2129
- Bugfix:
run_metadata
value returns string instead of other types by @avishniakov in #2149 KubernetesSparkStepOperator
imports fails by @avishniakov in #2159- Fix
get_pipeline_context().model_version.get_artifact(...)
flow by @avishniakov in #2162
What's Changed
- Model Versions are taggable by @avishniakov in #2102
- Adding a condition to the PR template by @bcdurak in #2140
- trying local caching for custom runners by @safoinme in #2148
- make template tests runs on ubuntu latest instead of custom runners by @safoinme in #2150
- Fix various bugs by @stefannica in #2147
- Fix
importlib
calling toimportlib.metadata
by @safoinme in #2160 - Debugging
zenml clean
by @bcdurak in #2119 - Add metadata to model versions by @avishniakov in #2109
- Adding a link from pipeline runs to code repositories by @bcdurak in #2146
- Moving tags to the body for artifacts and artifact versions by @bcdurak in #2138
- Fix MLFlow test by @avishniakov in #2161
- Fix Client doesn't recover from remote connection resets by @avishniakov in #2129
- Bugfix:
run_metadata
value returns string instead of other types by @avishniakov in #2149 KubernetesSparkStepOperator
imports fails by @avishniakov in #2159- Endpoint artifacts rename to deployment artifacts by @avishniakov in #2134
- Fix
get_pipeline_context().model_version.get_artifact(...)
flow by @avishniakov in #2162 - Add CodeRabbit config to repo base by @strickvl in #2165
- Feature: use service connectors to authenticate secrets stores. by @stefannica in #2154
- Add dependabot updates for Github Actions on CI by @strickvl in #2087
- Run DB migration testing using MySQL alongside SQLite by @strickvl in #2113
- Remove
precommit
by @strickvl in #2164 - Remove support for secrets managers by @stefannica in #2163
- Add MariaDB test harnesses by @christianversloot in #2155
- Feature/update quickstart from template by @AlexejPenner in #2157
- Bump MLFlow to 2.9.2 by @christianversloot in #2156
Full Changelog: 0.52.0...0.53.0
0.52.0
Important
This release has been updated (16th January, 2024)
A bug was introduced in the helm chart starting from version 0.50.0. All releases from that version have been updated with the fix. More details: #2234
This release adds the ability to pass in pipeline parameters as YAML configuration and fixes a couple of minor issues affecting the W&B integration and the way expiring credentials are refreshed when service connectors are used.
Breaking Change
The current pipeline YAML configurations are now being validated to ensure that configured parameters match what is available in the code. This means that if you have a pipeline that is configured with a parameter that has a different value that what is provided through code, the pipeline will fail to run. This is a breaking change, but it is a good thing as it will help you catch errors early on.
This is an example of a pipeline configuration that will fail to run:
parameters:
some_param: 24
steps:
my_step:
parameters:
input_2: 42
# run.py
@step
def my_step(input_1: int, input_2: int) -> None:
pass
@pipeline
def my_pipeline(some_param: int):
# here an error will be raised since `input_2` is
# `42` in config, but `43` was provided in the code
my_step(input_1=42, input_2=43)
if __name__=="__main__":
# here an error will be raised since `some_param` is
# `24` in config, but `23` was provided in the code
my_pipeline(23)
What's Changed
- Passing pipeline parameters as yaml config by @avishniakov in #2058
- Side-effect free tests by @avishniakov in #2065
- Fix various bugs by @stefannica in #2124
Full Changelog: 0.51.0...0.52.0
0.51.0
Important
This release has been updated (16th January, 2024)
A bug was introduced in the helm chart starting from version 0.50.0. All releases from that version have been updated with the fix. More details: #2234
This release comes with a breaking change to the model version model, a new use-case example for NLP, and a range of bug fixes and enhancements to the artifact management and pipeline run management features.
Breaking Change
- Artifact Version Table + Artifact Tagging by @fa9r in #2081
- Converting model models to use the new hydration paradigm by @bcdurak in #2101
New Example
- NLP Template Example is a new example that demonstrates how to use ZenML for NLP tasks. by @safoinme in #2070
What's Changed
- Updated to one quickstart again by @htahir1 in #2092
- Fix Nightly Build workflow files by @strickvl in #2090
- Make PyPi release depend on DB migration tests passing by @strickvl in #2088
- Bump
mlstacks
version in ZenML extra by @strickvl in #2091 - Fix SQL schema imports by @stefannica in #2098
- Fix migration for unowned stacks/components by @schustmi in #2099
- Polymorthic
run_metadata
by @avishniakov in #2064 - Update ruff formatter (for bugfixes) by @strickvl in #2106
- Lock in airflow version as higher versions will fail by @AlexejPenner in #2108
- Swap contents for HTMLString and MarkdownString in docs by @christianversloot in #2110
- Fix secrets list with cloud secrets stores and RBAC by @stefannica in #2107
- More track events by @htahir1 in #2112
- Fix pipeline run cascade deletion by @fa9r in #2104
- Take integrations tests out of unit tests folder by @safoinme in #2100
- Allow extra values when dehydrating response models by @schustmi in #2114
- Request optimizations by @schustmi in #2103
- Pagination in model versions by @avishniakov in #2115
- Add
StepContext.inputs
property by @fa9r in #2105
Full Changelog: 0.50.0...0.51.0
0.50.0
Important
This release has been updated (16th January, 2024)
A bug was introduced in the helm chart starting from version 0.50.0. All releases from that version have been updated with the fix. More details: #2234
In this release, we introduce key updates aimed at improving user experience and security.
The ModelConfig
object has been renamed to ModelVersion
for a more intuitive interface.
Additionally, the release features enhancements such as optimized model hydration for better performance,
alongside a range of bug fixes and contributions from both new and returning community members.
Breaking Change
- We have renamed the
ModelConfig
object toModelVersion
with other related changes to the model control plane,
the goal of this is to bring a simplified user-interface experience, so once ModelVersion is configured in
pipeline
orstep
it will travel into all other user-facing places: step context, client, etc. by @avishniakov in #2044 - introducing RBAC for server endpoints, ensuring users have appropriate permissions for actions on resources.
Additionally, it improves data handling by dehydrating response models to redact inaccessible information, while
service accounts retain full permissions due to current database constraints. by @schustmi in #1999 - We have completely reworked our API models. While the request models are mostly the same, now with the new hydration logic, most of
our response models feature a body and a metadata field which allow us to control the responses of our API and optimize the flow for
anyone using it By @bcdurak #1971 - We also worked on adding a new "Artifacts" tab to our dashboard. With these new changes, it will become much easier to understand
and adjust how ZenML versions your data. Moreover, by using "ExternalArtifacts", you will be able to save and load artifacts manually and
use them in your pipelines. By @fa9r #1943
Enhancements
- Improve alembic migration safety by @fa9r in #2073
- Model Link Filtering by Artifact / Run Name by @fa9r in #2074
Bug Fixes
- Fix tag<>resource ID generator to fix the issue of manipulating migrated tags properly #2056
- Fixes for
k3d
deployments viamlstacks
using the ZenML CLI wrapper #2059 - Fix some filter options for pipeline runs by @schustmi #2078
- Fix Label Studio image annotation example by @strickvl #2010
- Alembic migration fix for databases with scheduled pipelines with 2+ runs by @bcdurak #2072
- Model version endpoint fixes by @schustmi in #2060
ZenML Helm Chart Changes
- Make helm chart more robust to accidental secret deletions by @stefannica in #2053
- Separate helm hook resources from regular resources by @stefannica in #2055
Other Changes
- Connectors docs small fixes by @strickvl in #2050
- Feature/configurable service account for seldon predictor service by @Johnyz21 in #1725
- Adding NLP Template Example by @safoinme in #2051
- Fix CI by @fa9r in #2069
- Depaginate step runs to allow running pipelines with arbitrary step count by @schustmi in #2068
- Remove user name from orchestrator run name by @schustmi in #2067
- Artifacts Tab by @fa9r in #1943
- Add warnings/updates to Huggingface Spaces deployment docs by @strickvl in #2052
- Nightly builds by @strickvl in #2031
- Allow for custom disk size and type when using VertexAI Step Operator by @strickvl in #2054
- Set nightly builds to run at half-past the hour by @strickvl in #2077
- Set DCP template tag by @avishniakov in #2076
- Add missing dehydration in get_service_connector endpoint by @schustmi in #2080
- Replace
black
withruff format
/ bumpmypy
by @strickvl in #2082 - ModelVersion in pipeline context to pass in steps by @avishniakov in #2079
- Pin
bcrypt
by @strickvl in #2083
New Contributors
Full Changelog: 0.47.0...0.50.0
0.54.1
Release 0.54.1, includes a mix of updates new additions, and bug fixes. The most notable changes are the new production guide,
allowing multi-step VMs for the Skypilot orchestrator which allows you to configure a step to run on a specific VM or run the entire pipeline on a single VM, and some improvements to the Model Control Plane.
What's Changed
- Bump aquasecurity/trivy-action from 0.16.0 to 0.16.1 by @dependabot in #2244
- Bump crate-ci/typos from 1.16.26 to 1.17.0 by @dependabot in #2245
- Add YAML formatting standardisation to formatting & linting scripts by @strickvl in #2224
- Remove text annotation by @strickvl in #2246
- Add MariaDB migration testing by @strickvl in #2170
- Delete artifact links from model version via Client, ModelVersion and API by @avishniakov in #2191
- Default/Non-Default step params produce conflict with yaml ones as defaults are set in code by @avishniakov in #2247
- Prune of unused artifacts links via client by @avishniakov in #2192
- Rename nlp example by @safoinme in #2221
- Support refreshing service connector credentials in the Vertex step operator to support long-running jobs by @stefannica in #2198
- Refactor secrets stores to store all secret metadata in the DB by @stefannica in #2193
- Add
latest_version_id
to theModelResponse
by @avishniakov in #2266 - Remove
link_artifact
from docs for MCP by @strickvl in #2272 - Improve action by adding advice to KeyError when configured steps are not present in pipeline by @christianversloot in #2265
- Allow multi step configuration for skypilot by @safoinme in #2166
- Reworking the examples by @bcdurak in #2259
- A docs update for incorrect import in docs/book/user-guide/starter-guide/track-ml-models.md by @yo-harsh in #2279
- Allow
sklearn
versions > 1.3 by @Vishal-Padia in #2271 - Free
sklearn
dependency to allow all versions by @strickvl in #2281 - Misc CI bugfixes by @strickvl in #2260
- Fix
yamlfix
script to use--no-yamlfix
flag by @strickvl in #2280 - Fix dependabot settings autoformatting by
yamlfix
by @strickvl in #2282 - Add advice for next step to error on AuthorizationException by @christianversloot in #2264
- Allow skypilot to configure step or run full pipeline in one VM by @safoinme in #2276
- A docs update with production guide + restructured advanced guide by @htahir1 in #2232
- Prepare release 0.54.1 by @safoinme in #2284
- Add Escan to
teams.yml
by @strickvl in #2283 - Fix typos from docs updates by @strickvl in #2287
- Fix to file path for notebook quickstart by @jacksandom in #2288
- Fix
zenml-tutorial
path assignment incli.go()
by @safoinme in #2291
New Contributors
- @yo-harsh made their first contribution in #2279
- @Vishal-Padia made their first contribution in #2271
- @jacksandom made their first contribution in #2288
Full Changelog: 0.54.0...0.54.1