zenml-nightly 0.70.0.dev20241201__py3-none-any.whl → 0.71.0.dev20241223__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +4 -4
- RELEASE_NOTES.md +112 -0
- zenml/VERSION +1 -1
- zenml/artifacts/artifact_config.py +8 -5
- zenml/artifacts/utils.py +3 -1
- zenml/cli/__init__.py +4 -4
- zenml/cli/base.py +1 -1
- zenml/cli/pipeline.py +48 -79
- zenml/cli/server.py +19 -19
- zenml/client.py +54 -2
- zenml/config/secret_reference_mixin.py +1 -1
- zenml/config/server_config.py +4 -0
- zenml/constants.py +10 -0
- zenml/image_builders/base_image_builder.py +5 -2
- zenml/image_builders/build_context.py +7 -16
- zenml/integrations/aws/__init__.py +3 -0
- zenml/integrations/aws/flavors/__init__.py +6 -0
- zenml/integrations/aws/flavors/aws_image_builder_flavor.py +146 -0
- zenml/integrations/aws/image_builders/__init__.py +20 -0
- zenml/integrations/aws/image_builders/aws_image_builder.py +307 -0
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +1 -1
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +2 -1
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +11 -0
- zenml/integrations/kubernetes/step_operators/kubernetes_step_operator.py +0 -1
- zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +11 -0
- zenml/integrations/neptune/experiment_trackers/neptune_experiment_tracker.py +7 -5
- zenml/integrations/neptune/experiment_trackers/run_state.py +69 -53
- zenml/integrations/registry.py +2 -2
- zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +12 -0
- zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +13 -5
- zenml/materializers/built_in_materializer.py +1 -1
- zenml/model/model.py +12 -16
- zenml/model/utils.py +3 -1
- zenml/models/v2/base/filter.py +26 -30
- zenml/models/v2/base/scoped.py +258 -5
- zenml/models/v2/core/artifact_version.py +15 -26
- zenml/models/v2/core/code_repository.py +1 -12
- zenml/models/v2/core/component.py +5 -46
- zenml/models/v2/core/flavor.py +1 -11
- zenml/models/v2/core/model.py +1 -57
- zenml/models/v2/core/model_version.py +5 -33
- zenml/models/v2/core/model_version_artifact.py +11 -3
- zenml/models/v2/core/model_version_pipeline_run.py +14 -3
- zenml/models/v2/core/pipeline.py +47 -55
- zenml/models/v2/core/pipeline_build.py +67 -12
- zenml/models/v2/core/pipeline_deployment.py +0 -10
- zenml/models/v2/core/pipeline_run.py +91 -29
- zenml/models/v2/core/run_template.py +21 -29
- zenml/models/v2/core/schedule.py +0 -10
- zenml/models/v2/core/secret.py +0 -14
- zenml/models/v2/core/service.py +9 -16
- zenml/models/v2/core/service_connector.py +0 -11
- zenml/models/v2/core/stack.py +21 -30
- zenml/models/v2/core/step_run.py +18 -14
- zenml/models/v2/core/trigger.py +19 -3
- zenml/orchestrators/base_orchestrator.py +13 -1
- zenml/orchestrators/output_utils.py +5 -1
- zenml/orchestrators/step_launcher.py +9 -13
- zenml/orchestrators/step_run_utils.py +8 -204
- zenml/orchestrators/utils.py +55 -27
- zenml/pipelines/build_utils.py +12 -0
- zenml/service_connectors/service_connector_utils.py +3 -9
- zenml/stack/stack_component.py +1 -1
- zenml/stack_deployments/aws_stack_deployment.py +22 -0
- zenml/utils/archivable.py +65 -36
- zenml/utils/code_utils.py +8 -4
- zenml/utils/docker_utils.py +9 -0
- zenml/zen_server/auth.py +9 -10
- zenml/zen_server/dashboard/assets/{404-NVXKFp-x.js → 404-Cqu3EDCm.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-CK0KJUen.js → @reactflow-D2Y7BWwz.js} +1 -1
- zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-DezXKmDf.js → AlertDialogDropdownItem-BHd71pVS.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-JzR8CEtw.js → CodeSnippet-DIonwetW.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-DQW_ktMO.js → CollapsibleCard-CDnC97pB.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-DL2kwkRd.js → Commands-BVEXKAOj.js} +1 -1
- zenml/zen_server/dashboard/assets/{ComponentBadge-D_g62Wv8.js → ComponentBadge-CrRvovox.js} +1 -1
- zenml/zen_server/dashboard/assets/{CopyButton-LNcWaa14.js → CopyButton-B6wGAhQv.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-DknpE5ej.js → CsvVizualization-CjcT7LMm.js} +5 -5
- zenml/zen_server/dashboard/assets/DeleteAlertDialog-D2ELtM2W.js +1 -0
- zenml/zen_server/dashboard/assets/{DialogItem-Bxf8FuAT.js → DialogItem-DXIMhBgU.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-DYflYyps.js → Error-B8uUfTpL.js} +1 -1
- zenml/zen_server/dashboard/assets/{ExecutionStatus-C7zyIQKZ.js → ExecutionStatus-ibAdY-dG.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-oYSGpLqd.js → Helpbox-BfAfhKHw.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-Cx4xGoXR.js → Infobox-M_SMOu96.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-DiGOWNKF.js → InlineAvatar-DBA0a0-a.js} +1 -1
- zenml/zen_server/dashboard/assets/{NestedCollapsible-DYbgyKxK.js → NestedCollapsible-DpgmEFKw.js} +1 -1
- zenml/zen_server/dashboard/assets/{Partials-03iZf8-N.js → Partials-D_ldD9if.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProBadge-D_EB8HNo.js → ProBadge-DQbfFotM.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProCta-DqNS4v3x.js → ProCta-Bcpb4rcY.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderIcon-Bki2aw8w.js → ProviderIcon-BZpgPigN.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-8f43sPD4.js → ProviderRadio-DWPnMuQ1.js} +1 -1
- zenml/zen_server/dashboard/assets/RunSelector-DgRGaAc6.js +1 -0
- zenml/zen_server/dashboard/assets/{RunsBody-07YEO7qI.js → RunsBody-KecfSkjY.js} +1 -1
- zenml/zen_server/dashboard/assets/{SearchField-lp1KgU4e.js → SearchField-n-ILHnaP.js} +1 -1
- zenml/zen_server/dashboard/assets/{SecretTooltip-CgnbyeOx.js → SecretTooltip-B8MrX5yu.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-CpP418A2.js → SetPassword-B_IVq_wg.js} +1 -1
- zenml/zen_server/dashboard/assets/StackList-TWPBYnkF.js +1 -0
- zenml/zen_server/dashboard/assets/{Tabs-BktHkCJJ.js → Tabs-Rg857zmd.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tick-BlMoIlJT.js → Tick-COg4A-xo.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-Sc0A0pP-.js → UpdatePasswordSchemas-C6Aj3hm6.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-YYduL4fj.js → UsageReason-BTLbx7w4.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-dgmizSJC.js → WizardFooter-BCAj69Vj.js} +1 -1
- zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-D-c2G6lV.js → all-pipeline-runs-query-DMXkDrV2.js} +1 -1
- zenml/zen_server/dashboard/assets/code-snippets-CqONne41.js +13 -0
- zenml/zen_server/dashboard/assets/{create-stack-DM_JPgef.js → create-stack-HfdbhLs4.js} +1 -1
- zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +1 -0
- zenml/zen_server/dashboard/assets/delete-run-DZ4hIXff.js +1 -0
- zenml/zen_server/dashboard/assets/{form-schemas-K6FYKjwa.js → form-schemas-B0AVEd9b.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-BAkC7FXi.js → index-DPqSWjug.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-CEV4Cvaf.js → index-DScjfBRb.js} +1 -1
- zenml/zen_server/dashboard/assets/index-DXvT1_Um.css +1 -0
- zenml/zen_server/dashboard/assets/{index-CCOPpudF.js → index-FO-p0GU7.js} +5 -5
- zenml/zen_server/dashboard/assets/{index-B1mVPYxf.js → index-I3bKUGUj.js} +1 -1
- zenml/zen_server/dashboard/assets/key-icon-aH-QIa5R.js +1 -0
- zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-hf-lK87O.js → login-mutation-BQeo4wTY.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-BGirLjU-.js → not-found-gAJ5aDdR.js} +1 -1
- zenml/zen_server/dashboard/assets/page-9Y9-gig0.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DjRJCGb3.js → page-AUwiQ14W.js} +1 -1
- zenml/zen_server/dashboard/assets/page-B6XU7yYT.js +2 -0
- zenml/zen_server/dashboard/assets/{page-C00YAkaB.js → page-BKZYc2Zv.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CdMWnQak.js → page-BU9FG4sR.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-D7S3aCbF.js → page-B_Apk3xg.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Djikxq_S.js → page-BdowiCbr.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Bg8OjTRe.js +1 -0
- zenml/zen_server/dashboard/assets/page-BxL4qD4_.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DakHVWXF.js → page-CWxT5K5J.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CXuQufSe.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DLC-bNBP.js → page-CcQr8CPP.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CD-DcWoy.js → page-Ce4Hrjnr.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CiYxgZP_.js +1 -0
- zenml/zen_server/dashboard/assets/page-Cldq1mpe.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BDigxVpo.js → page-D4wdonLm.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-D6uU2ax4.js → page-D8ObrbH8.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DXSTpqRD.js → page-DFuAUGt4.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CbpvrsDL.js → page-DGazBpuP.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-COXXJj1k.js → page-DO1UcqPX.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DRYXdL5o.js +1 -0
- zenml/zen_server/dashboard/assets/{page-Df-Fw0aq.js → page-DYEquBC2.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Dk32IeZm.js +1 -0
- zenml/zen_server/dashboard/assets/{page-yYC9OI-E.js → page-I3nKFGie.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-6m6yHHlE.js → page-M0w-n6vn.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Vcxara9U.js → page-R5dx3xGF.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BR68V0V1.js → page-bT5pOvcB.js} +1 -1
- zenml/zen_server/dashboard/assets/page-hUqK889I.js +6 -0
- zenml/zen_server/dashboard/assets/{page-CjGdWY13.js → page-h_Stveon.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-D01JhjQB.js → page-r8XK5vR7.js} +1 -1
- zenml/zen_server/dashboard/assets/page-u_-ZXBKb.js +1 -0
- zenml/zen_server/dashboard/assets/page-zaMqB_ao.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-GjC8PZoC.js → persist-AppN1B0J.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-Coz7ZWvz.js → persist-DAUi_3za.js} +1 -1
- zenml/zen_server/dashboard/assets/service-BqqeXLEe.js +2 -0
- zenml/zen_server/dashboard/assets/{sharedSchema-CQb14VSr.js → sharedSchema-uXN9FLLk.js} +1 -1
- zenml/zen_server/dashboard/assets/{stack-detail-query-OPEW-cDJ.js → stack-detail-query-XfZBiBP2.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-LwuQfHYn.js → update-server-settings-mutation-BWmgVJwA.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-CkvKAnwF.js → url-BLwMbzES.js} +1 -1
- zenml/zen_server/dashboard/index.html +4 -4
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/rbac/rbac_sql_zen_store.py +173 -0
- zenml/zen_server/routers/auth_endpoints.py +22 -11
- zenml/zen_server/routers/steps_endpoints.py +7 -1
- zenml/zen_server/template_execution/utils.py +3 -1
- zenml/zen_server/utils.py +4 -3
- zenml/zen_stores/base_zen_store.py +10 -2
- zenml/zen_stores/migrations/versions/0.71.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/26351d482b9e_add_step_run_unique_constraint.py +37 -0
- zenml/zen_stores/migrations/versions/a1237ba94fd8_add_model_version_producer_run_unique_.py +68 -0
- zenml/zen_stores/rest_zen_store.py +76 -43
- zenml/zen_stores/schemas/model_schemas.py +42 -6
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +7 -7
- zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -6
- zenml/zen_stores/schemas/pipeline_schemas.py +5 -0
- zenml/zen_stores/schemas/step_run_schemas.py +8 -1
- zenml/zen_stores/sql_zen_store.py +332 -100
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.71.0.dev20241223.dist-info}/METADATA +5 -5
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.71.0.dev20241223.dist-info}/RECORD +179 -164
- zenml/zen_server/dashboard/assets/RunSelector-DkPiIiNr.js +0 -1
- zenml/zen_server/dashboard/assets/StackList-WvuKQusZ.js +0 -1
- zenml/zen_server/dashboard/assets/delete-run-CJdh1P_h.js +0 -1
- zenml/zen_server/dashboard/assets/index-DlGvJQPn.css +0 -1
- zenml/zen_server/dashboard/assets/page-0JE_-Ec1.js +0 -1
- zenml/zen_server/dashboard/assets/page-BRLpxOt0.js +0 -1
- zenml/zen_server/dashboard/assets/page-BU7huvKw.js +0 -6
- zenml/zen_server/dashboard/assets/page-BvqLv2Ky.js +0 -1
- zenml/zen_server/dashboard/assets/page-CwxrFarU.js +0 -1
- zenml/zen_server/dashboard/assets/page-DfbXf_8s.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dnovpa0i.js +0 -3
- zenml/zen_server/dashboard/assets/page-Dot3LPmL.js +0 -1
- zenml/zen_server/dashboard/assets/page-Xynx4btY.js +0 -14
- zenml/zen_server/dashboard/assets/page-YpKAqVSa.js +0 -1
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.71.0.dev20241223.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.71.0.dev20241223.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.70.0.dev20241201.dist-info → zenml_nightly-0.71.0.dev20241223.dist-info}/entry_points.txt +0 -0
README.md
CHANGED
@@ -147,7 +147,7 @@ Or, through our CLI command:
|
|
147
147
|
zenml stack deploy --provider aws
|
148
148
|
```
|
149
149
|
|
150
|
-
Alternatively, if the necessary pieces of infrastructure
|
150
|
+
Alternatively, if the necessary pieces of infrastructure are already deployed, you can register a cloud stack seamlessly through the stack wizard:
|
151
151
|
|
152
152
|
```bash
|
153
153
|
zenml stack register <STACK_NAME> --provider aws
|
@@ -195,9 +195,9 @@ def trainer(training_df: pd.DataFrame) -> Annotated["model", torch.nn.Module]:
|
|
195
195
|
|
196
196
|

|
197
197
|
|
198
|
-
### Purpose built for machine learning with
|
198
|
+
### Purpose built for machine learning with integrations to your favorite tools
|
199
199
|
|
200
|
-
While ZenML brings a lot of value of the box, it also integrates into your existing tooling and infrastructure without you having to be locked in.
|
200
|
+
While ZenML brings a lot of value out of the box, it also integrates into your existing tooling and infrastructure without you having to be locked in.
|
201
201
|
|
202
202
|
```python
|
203
203
|
from bentoml._internal.bento import bento
|
@@ -333,7 +333,7 @@ the Apache License Version 2.0.
|
|
333
333
|
<a href="https://github.com/zenml-io/zenml-projects">Projects Showcase</a>
|
334
334
|
<br />
|
335
335
|
<br />
|
336
|
-
🎉 Version 0.
|
336
|
+
🎉 Version 0.71.0 is out. Check out the release notes
|
337
337
|
<a href="https://github.com/zenml-io/zenml/releases">here</a>.
|
338
338
|
<br />
|
339
339
|
🖥️ Download our VS Code Extension <a href="https://marketplace.visualstudio.com/items?itemName=ZenML.zenml-vscode">here</a>.
|
RELEASE_NOTES.md
CHANGED
@@ -1,5 +1,117 @@
|
|
1
1
|
<!-- markdown-link-check-disable -->
|
2
2
|
|
3
|
+
# 0.71.0
|
4
|
+
|
5
|
+
ZenML version 0.71.0 delivers a new Modal step operator integration as its
|
6
|
+
core feature, enabling efficient cloud execution for ML pipelines with granular
|
7
|
+
hardware configuration options. The release strengthens enterprise capabilities
|
8
|
+
through improved token management and dashboard features, while expanding
|
9
|
+
artifact handling with dynamic naming and enhanced visualization support.
|
10
|
+
Additionally, it includes various infrastructure improvements and bug fixes
|
11
|
+
that enhance the platform's stability and usability, particularly around
|
12
|
+
Docker connectivity, Kubernetes management, and service connector operations.
|
13
|
+
|
14
|
+
## New Feature: Modal Step Operator Integration
|
15
|
+
|
16
|
+
ZenML now [integrates with Modal](https://modal.com/), bringing lightning-fast
|
17
|
+
cloud execution capabilities to your ML pipelines. This new step operator[
|
18
|
+
https://docs.zenml.io/stack-components/step-operators/modal] allows you to
|
19
|
+
execute individual pipeline steps on Modal's specialized compute instances,
|
20
|
+
offering notable speed particularly for Docker image building and hardware
|
21
|
+
provisioning. With simple configuration options, you can precisely specify
|
22
|
+
hardware requirements like GPU type, CPU count, and memory for each step,
|
23
|
+
making it ideal for resource-intensive ML workloads.
|
24
|
+
|
25
|
+
## Other Highlights
|
26
|
+
|
27
|
+
- **Workload API Token Management:** Refactored token management for improved
|
28
|
+
security with a generic API token dispenser.
|
29
|
+
- **Dashboard Enhancements:**
|
30
|
+
- Introduced service account management capabilities.
|
31
|
+
- Added API key creation and integration features.
|
32
|
+
- **Dynamic Artifact Naming:** Introduced capability to dynamically name
|
33
|
+
artifacts.
|
34
|
+
- **Visualization Enhancements:** Made dictionaries and lists visualizable,
|
35
|
+
added JSON visualization type.
|
36
|
+
|
37
|
+
## Additional Features and Improvements
|
38
|
+
|
39
|
+
- Improved error messages for Docker daemon connectivity
|
40
|
+
- Enhanced SageMaker URL handling
|
41
|
+
- Simplified model version artifact linkage
|
42
|
+
- Added testing for pipeline templates
|
43
|
+
- Improved Kubernetes pod and label length management
|
44
|
+
- Allowed skipping type annotations for step inputs
|
45
|
+
- Enabled using feature service instances instead of just names
|
46
|
+
|
47
|
+
## Bug Fixes
|
48
|
+
|
49
|
+
- Fixed issues with getting out of an inaccessible active stack
|
50
|
+
- Fixed race conditions in the service connector type registry
|
51
|
+
- Resolved migration test complications
|
52
|
+
- Corrected documentation links
|
53
|
+
- Fixed artifact store and artifact URI handling
|
54
|
+
- Addressed various scalability and compatibility issues
|
55
|
+
|
56
|
+
## Documentation Updates
|
57
|
+
|
58
|
+
- Added documentation redirects
|
59
|
+
- Updated PyTorch documentation links
|
60
|
+
- Improved service connector documentation
|
61
|
+
|
62
|
+
## What's Changed
|
63
|
+
* Refactored workload API token management for better security and implemented generic API token dispenser by @stefannica in https://github.com/zenml-io/zenml/pull/3154
|
64
|
+
* Add 0.70.0 to the migration tests by @avishniakov in https://github.com/zenml-io/zenml/pull/3190
|
65
|
+
* Adjustments to the PR template by @bcdurak in https://github.com/zenml-io/zenml/pull/3194
|
66
|
+
* [docs] Fix links in the how-to section of docs by @wjayesh in https://github.com/zenml-io/zenml/pull/3196
|
67
|
+
* Fixing sagemaker urls to take the settings into consideration by @bcdurak in https://github.com/zenml-io/zenml/pull/3195
|
68
|
+
* Add cached run into testing of migrations by @avishniakov in https://github.com/zenml-io/zenml/pull/3199
|
69
|
+
* Fix service connector type registry race conditions by @stefannica in https://github.com/zenml-io/zenml/pull/3202
|
70
|
+
* Refactor container resource configuration in Vertex Orchestrator test by @avishniakov in https://github.com/zenml-io/zenml/pull/3203
|
71
|
+
* [docs] Add missing redirects by @wjayesh in https://github.com/zenml-io/zenml/pull/3200
|
72
|
+
* Add links to `uv` new PyTorch documentation by @strickvl in https://github.com/zenml-io/zenml/pull/3204
|
73
|
+
* Fix broken docs link by @strickvl in https://github.com/zenml-io/zenml/pull/3208
|
74
|
+
* Bugfix for getting out of an inaccessible active stack with no permissions by @bcdurak in https://github.com/zenml-io/zenml/pull/3198
|
75
|
+
* Simplify model version artifact linkage by @schustmi in https://github.com/zenml-io/zenml/pull/3175
|
76
|
+
* Reenable macos testing by @avishniakov in https://github.com/zenml-io/zenml/pull/3205
|
77
|
+
* Various fixes and improvements by @stefannica in https://github.com/zenml-io/zenml/pull/3211
|
78
|
+
* Pass config path during zenml pipeline build by @schustmi in https://github.com/zenml-io/zenml/pull/3212
|
79
|
+
* Add test for running templates by @schustmi in https://github.com/zenml-io/zenml/pull/3192
|
80
|
+
* Fix service connector docstring by @schustmi in https://github.com/zenml-io/zenml/pull/3216
|
81
|
+
* Improve error message when docker daemon is not reachable by @schustmi in https://github.com/zenml-io/zenml/pull/3214
|
82
|
+
* Don't run migration for empty updates by @schustmi in https://github.com/zenml-io/zenml/pull/3210
|
83
|
+
* Remove `--check` from format script and fix naming by @safoinme in https://github.com/zenml-io/zenml/pull/3218
|
84
|
+
* More scalability improvements by @schustmi in https://github.com/zenml-io/zenml/pull/3206
|
85
|
+
* Use correct keyword for artifact store open by @schustmi in https://github.com/zenml-io/zenml/pull/3220
|
86
|
+
* Fix passing of some sagemaker settings by @schustmi in https://github.com/zenml-io/zenml/pull/3221
|
87
|
+
* Add hint when trying to connect with api key by @schustmi in https://github.com/zenml-io/zenml/pull/3222
|
88
|
+
* Allow passing None values as parameter for optional complex types by @schustmi in https://github.com/zenml-io/zenml/pull/3215
|
89
|
+
* Limit kubernetes pod and label length by @schustmi in https://github.com/zenml-io/zenml/pull/3217
|
90
|
+
* Updating the quickstart example to use the new `log_metadata` by @bcdurak in https://github.com/zenml-io/zenml/pull/3188
|
91
|
+
* Allow skipping type annotations for step inputs by @schustmi in https://github.com/zenml-io/zenml/pull/3223
|
92
|
+
* Modal Step Operator by @strickvl in https://github.com/zenml-io/zenml/pull/2948
|
93
|
+
* Add dynamic artifacts naming, documentation and tests by @avishniakov in https://github.com/zenml-io/zenml/pull/3201
|
94
|
+
* Run template CLI command and bugfix by @schustmi in https://github.com/zenml-io/zenml/pull/3225
|
95
|
+
* Make dicts/lists visualizable and add JSON as viz type by @wjayesh in https://github.com/zenml-io/zenml/pull/2882
|
96
|
+
* Instances of the `FeatureService`s are now used instead of only the names of the FeatureServices. by @aiakide in https://github.com/zenml-io/zenml/pull/3209
|
97
|
+
* Quickstart fixes by @schustmi in https://github.com/zenml-io/zenml/pull/3227
|
98
|
+
* Add missing docs by @schustmi in https://github.com/zenml-io/zenml/pull/3226
|
99
|
+
* Misc cleanup by @schustmi in https://github.com/zenml-io/zenml/pull/3229
|
100
|
+
* Fix input resolution for steps with dynamic artifact names by @schustmi in https://github.com/zenml-io/zenml/pull/3228
|
101
|
+
* Follow-up on the `run_metadata` changes by @bcdurak in https://github.com/zenml-io/zenml/pull/3193
|
102
|
+
* Fixed broken links by @htahir1 in https://github.com/zenml-io/zenml/pull/3232
|
103
|
+
* Fixed wandb login problem in Quickstart by @htahir1 in https://github.com/zenml-io/zenml/pull/3233
|
104
|
+
* Misc bugfixes by @schustmi in https://github.com/zenml-io/zenml/pull/3234
|
105
|
+
* Add additional way to fetch docker repo digest by @schustmi in https://github.com/zenml-io/zenml/pull/3231
|
106
|
+
* AWS Image Builder implementation by @stefannica in https://github.com/zenml-io/zenml/pull/2904
|
107
|
+
* Disable client-side caching for some orchestrators by @schustmi in https://github.com/zenml-io/zenml/pull/3235
|
108
|
+
* Fix artifact uris for artifacts with name placeholders by @schustmi in https://github.com/zenml-io/zenml/pull/3237
|
109
|
+
* Materializer test fix on Windows by @bcdurak in https://github.com/zenml-io/zenml/pull/3238
|
110
|
+
* Fix GET step run endpoint to return unhydrated response if requested by @schustmi in https://github.com/zenml-io/zenml/pull/3240
|
111
|
+
* Pipeline run API token fixes and improvements by @stefannica in https://github.com/zenml-io/zenml/pull/3242
|
112
|
+
|
113
|
+
**Full Changelog**: https://github.com/zenml-io/zenml/compare/0.70.0...0.71.0
|
114
|
+
|
3
115
|
# 0.70.0
|
4
116
|
|
5
117
|
The **ZenML 0.70.0** release includes a significant number of database schema changes and migrations, which means upgrading to this version will require extra caution. As always, please make sure to make a copy of your production database before upgrading.
|
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.71.0.dev20241223
|
@@ -104,15 +104,18 @@ class ArtifactConfig(BaseModel):
|
|
104
104
|
)
|
105
105
|
elif is_model_artifact:
|
106
106
|
logger.warning(
|
107
|
-
"`ArtifactConfig
|
108
|
-
"removed soon. Use `ArtifactConfig
|
107
|
+
"`ArtifactConfig(..., is_model_artifact=True)` is deprecated "
|
108
|
+
"and will be removed soon. Use `ArtifactConfig(..., "
|
109
|
+
"artifact_type=ArtifactType.MODEL)` instead. For more info: "
|
110
|
+
"https://docs.zenml.io/user-guide/starter-guide/manage-artifacts"
|
109
111
|
)
|
110
112
|
data.setdefault("artifact_type", ArtifactType.MODEL)
|
111
113
|
elif is_deployment_artifact:
|
112
114
|
logger.warning(
|
113
|
-
"`ArtifactConfig
|
114
|
-
"will be removed soon. Use `ArtifactConfig
|
115
|
-
"instead."
|
115
|
+
"`ArtifactConfig(..., is_deployment_artifact=True)` is "
|
116
|
+
"deprecated and will be removed soon. Use `ArtifactConfig(..., "
|
117
|
+
"artifact_type=ArtifactType.SERVICE)` instead. For more info: "
|
118
|
+
"https://docs.zenml.io/user-guide/starter-guide/manage-artifacts"
|
116
119
|
)
|
117
120
|
data.setdefault("artifact_type", ArtifactType.SERVICE)
|
118
121
|
|
zenml/artifacts/utils.py
CHANGED
@@ -414,7 +414,9 @@ def log_artifact_metadata(
|
|
414
414
|
"""
|
415
415
|
logger.warning(
|
416
416
|
"The `log_artifact_metadata` function is deprecated and will soon be "
|
417
|
-
"removed.
|
417
|
+
"removed. Instead, you can consider using: "
|
418
|
+
"`log_metadata(metadata={...}, infer_artifact=True, ...)` instead. For more "
|
419
|
+
"info: https://docs.zenml.io/how-to/model-management-metrics/track-metrics-metadata/attach-metadata-to-an-artifact"
|
418
420
|
)
|
419
421
|
|
420
422
|
from zenml import log_metadata
|
zenml/cli/__init__.py
CHANGED
@@ -1987,7 +1987,7 @@ Secrets management
|
|
1987
1987
|
------------------
|
1988
1988
|
|
1989
1989
|
ZenML offers a way to [securely store secrets associated with your other
|
1990
|
-
stack components and infrastructure](https://docs.zenml.io/getting-started/deploying-zenml/
|
1990
|
+
stack components and infrastructure](https://docs.zenml.io/getting-started/deploying-zenml/secret-management).
|
1991
1991
|
A ZenML Secret is a collection or grouping of key-value pairs stored by the
|
1992
1992
|
ZenML secrets store. ZenML Secrets are identified by a unique name which
|
1993
1993
|
allows you to fetch or reference them in your pipelines and stacks.
|
@@ -2083,7 +2083,7 @@ challenge in configuring uninterrupted, secure access to infrastructure
|
|
2083
2083
|
resources. In ZenML, Service Connectors streamline this process by abstracting
|
2084
2084
|
away the complexity of authentication and help you connect your stack to your
|
2085
2085
|
resources. You can find the full docs on the ZenML service connectors
|
2086
|
-
[here](https://docs.zenml.io/how-to/auth-management).
|
2086
|
+
[here](https://docs.zenml.io/how-to/infrastructure-deployment/auth-management).
|
2087
2087
|
|
2088
2088
|
The ZenML CLI features a variety of commands to help you manage your service
|
2089
2089
|
connectors. First of all, to explore all the types of service connectors
|
@@ -2113,7 +2113,7 @@ zenml service-connector register SERVICE_CONNECTOR_NAME \
|
|
2113
2113
|
```
|
2114
2114
|
|
2115
2115
|
For more details on how to create a service connector, please refer to our
|
2116
|
-
[docs](https://docs.zenml.io/how-to/auth-management).
|
2116
|
+
[docs](https://docs.zenml.io/how-to/infrastructure-deployment/auth-management).
|
2117
2117
|
|
2118
2118
|
To check if your service connector is registered properly, you can `verify` it.
|
2119
2119
|
By doing this, you can both check if it is configured correctly and also, you
|
@@ -2367,7 +2367,7 @@ defining the pipeline is not in your current directory, the module path consists
|
|
2367
2367
|
of the full path to the file, separated by dots, e.g.
|
2368
2368
|
`some_directory.some_file.my_pipeline`.
|
2369
2369
|
|
2370
|
-
To [build Docker images for your pipeline](https://docs.zenml.io/how-to/customize-docker-builds)
|
2370
|
+
To [build Docker images for your pipeline](https://docs.zenml.io/how-to/infrastructure-deployment/customize-docker-builds)
|
2371
2371
|
without actually running the pipeline, use:
|
2372
2372
|
|
2373
2373
|
```bash
|
zenml/cli/base.py
CHANGED
@@ -264,7 +264,7 @@ def init(
|
|
264
264
|
f"will only take effect when you're running ZenML from the initialized "
|
265
265
|
f"repository root, or from a subdirectory. For more information on "
|
266
266
|
f"repositories and configurations, please visit "
|
267
|
-
f"https://docs.zenml.io/user-guide/
|
267
|
+
f"https://docs.zenml.io/user-guide/production-guide/understand-stacks."
|
268
268
|
)
|
269
269
|
|
270
270
|
|
zenml/cli/pipeline.py
CHANGED
@@ -40,6 +40,35 @@ from zenml.utils.yaml_utils import write_yaml
|
|
40
40
|
logger = get_logger(__name__)
|
41
41
|
|
42
42
|
|
43
|
+
def _import_pipeline(source: str) -> Pipeline:
|
44
|
+
"""Import a pipeline.
|
45
|
+
|
46
|
+
Args:
|
47
|
+
source: The pipeline source.
|
48
|
+
|
49
|
+
Returns:
|
50
|
+
The pipeline.
|
51
|
+
"""
|
52
|
+
try:
|
53
|
+
pipeline_instance = source_utils.load(source)
|
54
|
+
except ModuleNotFoundError as e:
|
55
|
+
source_root = source_utils.get_source_root()
|
56
|
+
cli_utils.error(
|
57
|
+
f"Unable to import module `{e.name}`. Make sure the source path is "
|
58
|
+
f"relative to your source root `{source_root}`."
|
59
|
+
)
|
60
|
+
except AttributeError as e:
|
61
|
+
cli_utils.error("Unable to load attribute from module: " + str(e))
|
62
|
+
|
63
|
+
if not isinstance(pipeline_instance, Pipeline):
|
64
|
+
cli_utils.error(
|
65
|
+
f"The given source path `{source}` does not resolve to a pipeline "
|
66
|
+
"object."
|
67
|
+
)
|
68
|
+
|
69
|
+
return pipeline_instance
|
70
|
+
|
71
|
+
|
43
72
|
@cli.group(cls=TagGroup, tag=CliCategories.MANAGEMENT_TOOLS)
|
44
73
|
def pipeline() -> None:
|
45
74
|
"""Interact with pipelines, runs and schedules."""
|
@@ -85,22 +114,7 @@ def register_pipeline(
|
|
85
114
|
"source code root."
|
86
115
|
)
|
87
116
|
|
88
|
-
|
89
|
-
pipeline_instance = source_utils.load(source)
|
90
|
-
except ModuleNotFoundError as e:
|
91
|
-
source_root = source_utils.get_source_root()
|
92
|
-
cli_utils.error(
|
93
|
-
f"Unable to import module `{e.name}`. Make sure the source path is "
|
94
|
-
f"relative to your source root `{source_root}`."
|
95
|
-
)
|
96
|
-
except AttributeError as e:
|
97
|
-
cli_utils.error("Unable to load attribute from module: " + str(e))
|
98
|
-
|
99
|
-
if not isinstance(pipeline_instance, Pipeline):
|
100
|
-
cli_utils.error(
|
101
|
-
f"The given source path `{source}` does not resolve to a pipeline "
|
102
|
-
"object."
|
103
|
-
)
|
117
|
+
pipeline_instance = _import_pipeline(source=source)
|
104
118
|
|
105
119
|
parameters: Dict[str, Any] = {}
|
106
120
|
if parameters_path:
|
@@ -176,24 +190,9 @@ def build_pipeline(
|
|
176
190
|
"your source code root."
|
177
191
|
)
|
178
192
|
|
179
|
-
try:
|
180
|
-
pipeline_instance = source_utils.load(source)
|
181
|
-
except ModuleNotFoundError as e:
|
182
|
-
source_root = source_utils.get_source_root()
|
183
|
-
cli_utils.error(
|
184
|
-
f"Unable to import module `{e.name}`. Make sure the source path is "
|
185
|
-
f"relative to your source root `{source_root}`."
|
186
|
-
)
|
187
|
-
except AttributeError as e:
|
188
|
-
cli_utils.error("Unable to load attribute from module: " + str(e))
|
189
|
-
|
190
|
-
if not isinstance(pipeline_instance, Pipeline):
|
191
|
-
cli_utils.error(
|
192
|
-
f"The given source path `{source}` does not resolve to a pipeline "
|
193
|
-
"object."
|
194
|
-
)
|
195
|
-
|
196
193
|
with cli_utils.temporary_active_stack(stack_name_or_id=stack_name_or_id):
|
194
|
+
pipeline_instance = _import_pipeline(source=source)
|
195
|
+
|
197
196
|
pipeline_instance = pipeline_instance.with_options(
|
198
197
|
config_path=config_path
|
199
198
|
)
|
@@ -277,36 +276,21 @@ def run_pipeline(
|
|
277
276
|
"your source code root."
|
278
277
|
)
|
279
278
|
|
280
|
-
try:
|
281
|
-
pipeline_instance = source_utils.load(source)
|
282
|
-
except ModuleNotFoundError as e:
|
283
|
-
source_root = source_utils.get_source_root()
|
284
|
-
cli_utils.error(
|
285
|
-
f"Unable to import module `{e.name}`. Make sure the source path is "
|
286
|
-
f"relative to your source root `{source_root}`."
|
287
|
-
)
|
288
|
-
except AttributeError as e:
|
289
|
-
cli_utils.error("Unable to load attribute from module: " + str(e))
|
290
|
-
|
291
|
-
if not isinstance(pipeline_instance, Pipeline):
|
292
|
-
cli_utils.error(
|
293
|
-
f"The given source path `{source}` does not resolve to a pipeline "
|
294
|
-
"object."
|
295
|
-
)
|
296
|
-
|
297
|
-
build: Union[str, PipelineBuildBase, None] = None
|
298
|
-
if build_path_or_id:
|
299
|
-
if uuid_utils.is_valid_uuid(build_path_or_id):
|
300
|
-
build = build_path_or_id
|
301
|
-
elif os.path.exists(build_path_or_id):
|
302
|
-
build = PipelineBuildBase.from_yaml(build_path_or_id)
|
303
|
-
else:
|
304
|
-
cli_utils.error(
|
305
|
-
f"The specified build {build_path_or_id} is not a valid UUID "
|
306
|
-
"or file path."
|
307
|
-
)
|
308
|
-
|
309
279
|
with cli_utils.temporary_active_stack(stack_name_or_id=stack_name_or_id):
|
280
|
+
pipeline_instance = _import_pipeline(source=source)
|
281
|
+
|
282
|
+
build: Union[str, PipelineBuildBase, None] = None
|
283
|
+
if build_path_or_id:
|
284
|
+
if uuid_utils.is_valid_uuid(build_path_or_id):
|
285
|
+
build = build_path_or_id
|
286
|
+
elif os.path.exists(build_path_or_id):
|
287
|
+
build = PipelineBuildBase.from_yaml(build_path_or_id)
|
288
|
+
else:
|
289
|
+
cli_utils.error(
|
290
|
+
f"The specified build {build_path_or_id} is not a valid UUID "
|
291
|
+
"or file path."
|
292
|
+
)
|
293
|
+
|
310
294
|
pipeline_instance = pipeline_instance.with_options(
|
311
295
|
config_path=config_path,
|
312
296
|
build=build,
|
@@ -369,24 +353,9 @@ def create_run_template(
|
|
369
353
|
"init` at your source code root."
|
370
354
|
)
|
371
355
|
|
372
|
-
try:
|
373
|
-
pipeline_instance = source_utils.load(source)
|
374
|
-
except ModuleNotFoundError as e:
|
375
|
-
source_root = source_utils.get_source_root()
|
376
|
-
cli_utils.error(
|
377
|
-
f"Unable to import module `{e.name}`. Make sure the source path is "
|
378
|
-
f"relative to your source root `{source_root}`."
|
379
|
-
)
|
380
|
-
except AttributeError as e:
|
381
|
-
cli_utils.error("Unable to load attribute from module: " + str(e))
|
382
|
-
|
383
|
-
if not isinstance(pipeline_instance, Pipeline):
|
384
|
-
cli_utils.error(
|
385
|
-
f"The given source path `{source}` does not resolve to a pipeline "
|
386
|
-
"object."
|
387
|
-
)
|
388
|
-
|
389
356
|
with cli_utils.temporary_active_stack(stack_name_or_id=stack_name_or_id):
|
357
|
+
pipeline_instance = _import_pipeline(source=source)
|
358
|
+
|
390
359
|
pipeline_instance = pipeline_instance.with_options(
|
391
360
|
config_path=config_path
|
392
361
|
)
|
zenml/cli/server.py
CHANGED
@@ -587,25 +587,6 @@ def server_list(verbose: bool = False, all: bool = False) -> None:
|
|
587
587
|
accessible_pro_servers = client.tenant.list(member_only=not all)
|
588
588
|
except AuthorizationException as e:
|
589
589
|
cli_utils.warning(f"ZenML Pro authorization error: {e}")
|
590
|
-
else:
|
591
|
-
if not all:
|
592
|
-
accessible_pro_servers = [
|
593
|
-
s
|
594
|
-
for s in accessible_pro_servers
|
595
|
-
if s.status == TenantStatus.AVAILABLE
|
596
|
-
]
|
597
|
-
|
598
|
-
if not accessible_pro_servers:
|
599
|
-
cli_utils.declare(
|
600
|
-
"No ZenML Pro servers that are accessible to the current "
|
601
|
-
"user could be found."
|
602
|
-
)
|
603
|
-
if not all:
|
604
|
-
cli_utils.declare(
|
605
|
-
"Hint: use the `--all` flag to show all ZenML servers, "
|
606
|
-
"including those that the client is not currently "
|
607
|
-
"authorized to access or are not running."
|
608
|
-
)
|
609
590
|
|
610
591
|
# We update the list of stored ZenML Pro servers with the ones that the
|
611
592
|
# client is a member of
|
@@ -633,6 +614,25 @@ def server_list(verbose: bool = False, all: bool = False) -> None:
|
|
633
614
|
stored_server.update_server_info(accessible_server)
|
634
615
|
pro_servers.append(stored_server)
|
635
616
|
|
617
|
+
if not all:
|
618
|
+
accessible_pro_servers = [
|
619
|
+
s
|
620
|
+
for s in accessible_pro_servers
|
621
|
+
if s.status == TenantStatus.AVAILABLE
|
622
|
+
]
|
623
|
+
|
624
|
+
if not accessible_pro_servers:
|
625
|
+
cli_utils.declare(
|
626
|
+
"No ZenML Pro servers that are accessible to the current "
|
627
|
+
"user could be found."
|
628
|
+
)
|
629
|
+
if not all:
|
630
|
+
cli_utils.declare(
|
631
|
+
"Hint: use the `--all` flag to show all ZenML servers, "
|
632
|
+
"including those that the client is not currently "
|
633
|
+
"authorized to access or are not running."
|
634
|
+
)
|
635
|
+
|
636
636
|
elif pro_servers:
|
637
637
|
cli_utils.warning(
|
638
638
|
"The ZenML Pro authentication has expired. Please re-login "
|