- Add new Databricks step operator to run individual pipeline steps on Databricks
- Support nested dynamic pipelines, allowing one dynamic pipeline to be called from within another
- Add advanced training workload settings to Run:AI step operator including multiple mount types, workload templates, security context settings, port declarations, and parallelism configuration
- Add parent run information display in the dashboard run details view
- Improve Kubernetes string handling with separate sanitization for DNS-style names and looser label-value rules for metadata
- Increase maximum allowed size for ZenML secrets stored in SQL secrets store to 64KB
- Add optional tag settings to Databricks orchestrator to label jobs and cluster resources for cost tracking, ownership, and governance
- Fix signal handler registration during step execution to prevent errors when running many sync steps or interrupting pipelines
- Fix redundant RBAC permission checks during response model dehydration
- Allow step functions to use keyword-only arguments without causing failures
- Fix Kubernetes orchestrator step pod configuration by replacing hardcoded lookups with proper settings calls
- Improve Kubernetes job failure diagnostics to provide richer diagnostic information when dynamic pipeline jobs fail due to system issues
New Databricks Step Operator
You can now run individual pipeline steps on Databricks using the new Databricks step operator PR #4648. This is useful when you want specific steps to execute in the Databricks runtime while the rest of your pipeline uses a different orchestrator. The Databricks orchestrator also now supports optional tag settings to label jobs and cluster resources for cost tracking, ownership, and governance.
Nested Dynamic Pipelines
Dynamic pipelines can now be nested, allowing you to call one dynamic pipeline from within another PR #4775. This enables more modular and reusable pipeline designs.
Enhanced Run:AI Training Workload Configuration
The Run:AI step operator now supports advanced training workload settings PR #4780, including:
- Multiple mount types (PVC, ConfigMap, Secret, NFS, S3, HostPath)
- Workload templates via
workload_template_id - Security context settings (UID/GID, non-root execution, seccomp, capabilities)
- Port declarations and external URL exposure
- Training workload
parallelismandcompletions
Improved Kubernetes Job Failure Diagnostics
When dynamic pipeline jobs fail due to system issues (such as OOM kills), ZenML now provides richer diagnostic information PR #4800. This makes it easier to understand why Kubernetes terminated your pods.
Better Kubernetes Label Handling
Kubernetes string handling has been improved with separate sanitization for DNS-style names/keys and looser label-value rules for metadata like run, pipeline, and step IDs PR #4756. This makes it easier to navigate through runs in Kubernetes.
Increased Secret Size Limit
The maximum allowed size for ZenML secrets stored in the SQL secrets store has been increased to 64KB PR #4769. The limit applies to the combined size of all keys and values in a secret object.
Dashboard: Parent Run Display
The dashboard now displays parent run information in the run details view when available PR #1050.
-
Signal handling during step execution: Signal handlers are now properly unregistered after step execution, preventing strange errors when running many sync steps or interrupting pipelines PR #4784. Dynamic pipeline steps running in isolated environments or step operators are no longer affected by signal handling from the orchestrator.
-
RBAC performance: Fixed redundant RBAC permission checks during response model dehydration PR #4797. Previously, when permissions were already prefetched and denied, additional RBAC requests were sent unnecessarily for each sub-model.
-
Keyword-only arguments in steps: Step functions can now use keyword-only arguments without causing failures PR #4798.
-
Kubernetes orchestrator settings: Fixed step pod configuration by replacing legacy hardcoded
orchestrator.kuberneteslookups with properorchestrator.get_settings(...)calls PR #4803. Step pods now correctly apply orchestrator settings from canonical component keys while maintaining backward compatibility.
What's Changed
- Add version 0.94.2 to legacy docs by @github-actions[bot] in https://github.com/zenml-io/zenml/pull/4766
- Add 0.94.3 to the migration tests by @github-actions[bot] in https://github.com/zenml-io/zenml/pull/4768
- Revise Run:AI service account setup and troubleshooting by @safoinme in https://github.com/zenml-io/zenml/pull/4772
- Update dynamic pipelines docs by @schustmi in https://github.com/zenml-io/zenml/pull/4776
- Misc release-testing fixes by @schustmi in https://github.com/zenml-io/zenml/pull/4770
- Increase the max size of zenml secrets stored in the SQL secrets store by @stefannica in https://github.com/zenml-io/zenml/pull/4769
- Create run metadata for isolated steps (dynamic) by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/4785
- Better signal handling during step execution by @schustmi in https://github.com/zenml-io/zenml/pull/4784
- Bump the minor-and-patch group across 1 directory with 9 updates by @dependabot[bot] in https://github.com/zenml-io/zenml/pull/4795
- Fix O(N) global scan in artifact-version delete by @joaquinhuigomez in https://github.com/zenml-io/zenml/pull/4686
- Fix multiple RBAC calls during dehydration by @schustmi in https://github.com/zenml-io/zenml/pull/4797
- Clarify that DynamicPipelineRunner.wait() timeout is a soft timeout by @shaun0927 in https://github.com/zenml-io/zenml/pull/4741
- Fix typo in step creation error message by @shaun0927 in https://github.com/zenml-io/zenml/pull/4736
- Allow keyword only args in step function by @schustmi in https://github.com/zenml-io/zenml/pull/4798
- Kubernetes label sanitization by @bcdurak in https://github.com/zenml-io/zenml/pull/4756
- Allow non module-level definitions of steps and dynamic pipelines by @schustmi in https://github.com/zenml-io/zenml/pull/4799
- Added ability to get help with flavor specific configurations by @AlexejPenner in https://github.com/zenml-io/zenml/pull/4662
- Extract projects-backend release dispatch into dedicated workflow by @safoinme in https://github.com/zenml-io/zenml/pull/4720
- Fixing orchestrator setting resolution by @bcdurak in https://github.com/zenml-io/zenml/pull/4803
- Fix notify projects backend zizmor scan by @strickvl in https://github.com/zenml-io/zenml/pull/4808
- Fix
Check Linksworkflow failures (runai.md+ dangling preemption refs + Slack 403) by @strickvl in https://github.com/zenml-io/zenml/pull/4807 - Fix nightly PyPI trusted publishing by @strickvl in https://github.com/zenml-io/zenml/pull/4806
- Add
uv.lockto .gitignore by @strickvl in https://github.com/zenml-io/zenml/pull/4811 - Nested dynamic pipelines by @schustmi in https://github.com/zenml-io/zenml/pull/4775
- Refresh agent guidance docs by @strickvl in https://github.com/zenml-io/zenml/pull/4817
- Fix MLflow deployment healthcheck method by @strickvl in https://github.com/zenml-io/zenml/pull/4816
- Update docs for recent feature drift by @strickvl in https://github.com/zenml-io/zenml/pull/4818
- Add advanced Run:AI training workload settings by @safoinme in https://github.com/zenml-io/zenml/pull/4780
- Fix deployment invocation request fields by @schustmi in https://github.com/zenml-io/zenml/pull/4809
- Extra info on kubernetes-killed jobs by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/4800
- Introduce new Databricks step-operator and fix
tagsandcustom-tagsby @safoinme in https://github.com/zenml-io/zenml/pull/4648 - Fix PydanticAI agent example dependencies by @strickvl in https://github.com/zenml-io/zenml/pull/4823
- Refactor Databricks test cases to use temporary path for wheel directory by @safoinme in https://github.com/zenml-io/zenml/pull/4824
- Prepare release 0.94.4 by @github-actions[bot] in https://github.com/zenml-io/zenml/pull/4821
New Contributors
- @joaquinhuigomez made their first contribution in https://github.com/zenml-io/zenml/pull/4686
- @shaun0927 made their first contribution in https://github.com/zenml-io/zenml/pull/4741
Full Changelog: https://github.com/zenml-io/zenml/compare/0.94.3...0.94.4