zenml-nightly 0.63.0.dev20240801__py3-none-any.whl → 0.64.0.dev20240809__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 +2 -2
- RELEASE_NOTES.md +79 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +0 -4
- zenml/analytics/enums.py +0 -6
- zenml/cli/__init__.py +0 -61
- zenml/cli/base.py +1 -1
- zenml/cli/web_login.py +8 -0
- zenml/client.py +0 -4
- zenml/config/build_configuration.py +43 -17
- zenml/config/docker_settings.py +80 -57
- zenml/config/source.py +58 -0
- zenml/constants.py +9 -2
- zenml/entrypoints/base_entrypoint_configuration.py +53 -8
- zenml/enums.py +1 -1
- zenml/environment.py +25 -9
- zenml/image_builders/base_image_builder.py +1 -1
- zenml/image_builders/build_context.py +25 -72
- zenml/integrations/azure/__init__.py +4 -0
- zenml/integrations/azure/flavors/__init__.py +11 -0
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +263 -0
- zenml/{_hub → integrations/azure/orchestrators}/__init__.py +7 -2
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +544 -0
- zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +86 -0
- zenml/integrations/azure/step_operators/azureml_step_operator.py +3 -0
- zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +9 -0
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +7 -2
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +123 -6
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +1 -1
- zenml/integrations/mlflow/__init__.py +1 -1
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +3 -1
- zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +3 -0
- zenml/logger.py +13 -0
- zenml/models/__init__.py +0 -12
- zenml/models/v2/core/pipeline_deployment.py +21 -29
- zenml/models/v2/core/pipeline_run.py +13 -0
- zenml/models/v2/core/server_settings.py +12 -0
- zenml/models/v2/core/user.py +0 -21
- zenml/models/v2/misc/server_models.py +7 -1
- zenml/models/v2/misc/user_auth.py +0 -7
- zenml/new/pipelines/build_utils.py +193 -38
- zenml/new/pipelines/code_archive.py +157 -0
- zenml/new/pipelines/pipeline.py +29 -2
- zenml/new/pipelines/run_utils.py +67 -1
- zenml/service_connectors/service_connector_utils.py +14 -0
- zenml/stack_deployments/aws_stack_deployment.py +26 -3
- zenml/stack_deployments/azure_stack_deployment.py +11 -6
- zenml/stack_deployments/gcp_stack_deployment.py +24 -2
- zenml/stack_deployments/stack_deployment.py +17 -2
- zenml/steps/base_step.py +3 -0
- zenml/utils/archivable.py +149 -0
- zenml/utils/code_utils.py +244 -0
- zenml/utils/notebook_utils.py +122 -0
- zenml/utils/pipeline_docker_image_builder.py +3 -96
- zenml/utils/source_utils.py +109 -1
- zenml/zen_server/dashboard/assets/{404-CI13wQp4.js → 404-CRAA_Lew.js} +1 -1
- zenml/zen_server/dashboard/assets/@radix-BXWm7HOa.js +85 -0
- zenml/zen_server/dashboard/assets/{@react-router-CO-OsFwI.js → @react-router-l3lMcXA2.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-DIYUhKYX.js → @reactflow-CeVxyqYT.js} +2 -2
- zenml/zen_server/dashboard/assets/{@tanstack-k96lU_C-.js → @tanstack-FmcYZMuX.js} +4 -4
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-ErO9aOgK.js +1 -0
- zenml/zen_server/dashboard/assets/{AwarenessChannel-BNg5uWgI.js → AwarenessChannel-CLXo5rKM.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-Cyp7f4dM.js → CodeSnippet-D0VLxT2A.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-Cu_A9W57.js → CollapsibleCard-BaUPiVg0.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-DmQwTXjj.js → Commands-JrcZK-3j.js} +1 -1
- zenml/zen_server/dashboard/assets/CopyButton-Dbo52T1K.js +2 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-BvqItd-O.js → CsvVizualization-D3kAypDj.js} +3 -3
- zenml/zen_server/dashboard/assets/DisplayDate-DizbSeT-.js +1 -0
- zenml/zen_server/dashboard/assets/EditSecretDialog-Bd7mFLS4.js +1 -0
- zenml/zen_server/dashboard/assets/{EmptyState-BMLnFVlB.js → EmptyState-BHblM39I.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-DbXCTGua.js → Error-C6LeJSER.js} +1 -1
- zenml/zen_server/dashboard/assets/{ExecutionStatus-9zM7eaLh.js → ExecutionStatus-jH4OrWBq.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-BIiNc-uH.js → Helpbox-aAB2XP-z.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-iv1Nu1A0.js → Infobox-BQ0aty32.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-BvBtO2Dp.js → InlineAvatar-DpTLgM3Q.js} +1 -1
- zenml/zen_server/dashboard/assets/Lock-CNyJvf2r.js +1 -0
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-xp3hhULl.js → MarkdownVisualization-Bajxn0HY.js} +1 -1
- zenml/zen_server/dashboard/assets/NumberBox-BmKE0qnO.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-DUveqlva.js → PasswordChecker-yGGoJSB-.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-pSAvrGRS.js → ProviderRadio-BBqkIuTd.js} +1 -1
- zenml/zen_server/dashboard/assets/RadioItem-xLhXoiFV.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-C9R0mdaX.js +1 -0
- zenml/zen_server/dashboard/assets/{SetPassword-BOxpgh6N.js → SetPassword-52sNxNiO.js} +1 -1
- zenml/zen_server/dashboard/assets/{SuccessStep-CTSKN2lp.js → SuccessStep-DlkItqYG.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tick-Bnr2TpW6.js → Tick-uxv80Q6a.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-BeCeaRW5.js → UpdatePasswordSchemas-oN4G3sKz.js} +1 -1
- zenml/zen_server/dashboard/assets/{aws-BgKTfTfx.js → aws-0_3UsPif.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-i56092KI.js → check-circle-1_I207rW.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-D_ZlKMqH.js → chevron-down-BpaF8JqM.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-CZBOf6JM.js → chevron-right-double-Dk8e2L99.js} +1 -1
- zenml/zen_server/dashboard/assets/{cloud-only-qelmY92E.js → cloud-only-BkUuI0lZ.js} +1 -1
- zenml/zen_server/dashboard/assets/components-Br2ezRib.js +1 -0
- zenml/zen_server/dashboard/assets/{copy-BXNk6BjL.js → copy-f3XGPPxt.js} +1 -1
- zenml/zen_server/dashboard/assets/{database-1xWSgZfO.js → database-cXYNX9tt.js} +1 -1
- zenml/zen_server/dashboard/assets/{docker-CQMVm_4d.js → docker-8uj__HHK.js} +1 -1
- zenml/zen_server/dashboard/assets/{dots-horizontal-BObFzD5l.js → dots-horizontal-sKQlWEni.js} +1 -1
- zenml/zen_server/dashboard/assets/edit-C0MVvPD2.js +1 -0
- zenml/zen_server/dashboard/assets/{file-text-CqD_iu6l.js → file-text-B9JibxTs.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-bu_DgLKI.js → help-FuHlZwn0.js} +1 -1
- zenml/zen_server/dashboard/assets/index-Bd1xgUQG.js +1 -0
- zenml/zen_server/dashboard/assets/index-DaGknux4.css +1 -0
- zenml/zen_server/dashboard/assets/{index-KsTz2dHG.js → index-DhIZtpxB.js} +5 -5
- zenml/zen_server/dashboard/assets/{index.esm-CbHNSeVw.js → index.esm-DT4uyn2i.js} +1 -1
- zenml/zen_server/dashboard/assets/layout-D6oiSbfd.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-DRpbESS7.js → login-mutation-13A_JSVA.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-D8k8BVFf.js → logs-CgeE2vZP.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-Dfx9hfkf.js → not-found-B0Mmb90p.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-ClbU3KUi.js → package-DdkziX79.js} +1 -1
- zenml/zen_server/dashboard/assets/page-7-v2OBm-.js +1 -0
- zenml/zen_server/dashboard/assets/{page-f3jBVI5Z.js → page-B3ozwdD1.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DYBNGxJt.js → page-BGwA9B1M.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-C176KxyB.js → page-BkjAUyTA.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BnacgBiy.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CzucfYPo.js → page-BxF_KMQ3.js} +2 -2
- zenml/zen_server/dashboard/assets/page-C4POHC0K.js +1 -0
- zenml/zen_server/dashboard/assets/page-C9kudd44.js +9 -0
- zenml/zen_server/dashboard/assets/page-CA1j3GpJ.js +1 -0
- zenml/zen_server/dashboard/assets/page-CCY6yfmu.js +1 -0
- zenml/zen_server/dashboard/assets/page-CgTe7Bme.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DtpwnNXq.js → page-Cgn-6v2Y.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CxQmQqDw.js +1 -0
- zenml/zen_server/dashboard/assets/page-D2Goey3H.js +1 -0
- zenml/zen_server/dashboard/assets/page-DLpOnf7u.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DVPxY5fT.js → page-DSTQnBk-.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BoFtUD9H.js → page-DTysUGOy.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-p2hLJdS2.js → page-D_EXUFJb.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Db15QzsM.js +1 -0
- zenml/zen_server/dashboard/assets/{page-Btu39x7k.js → page-DugsjcQ_.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CZe9GEBF.js → page-OFKSPyN7.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CDgZmwxP.js → page-RnG-qhv9.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Cjn97HMv.js → page-T2BtjwPl.js} +1 -1
- zenml/zen_server/dashboard/assets/page-TXe1Eo3Z.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BxiWdeyg.js → page-YiF_fNbe.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-399pVZHU.js → page-hQaiQXfg.js} +1 -1
- zenml/zen_server/dashboard/assets/persist-3-5nOJ6m.js +1 -0
- zenml/zen_server/dashboard/assets/{play-circle-CNtZKDnW.js → play-circle-XSkLR12B.js} +1 -1
- zenml/zen_server/dashboard/assets/{plus-DOeLmm7C.js → plus-FB9-lEq_.js} +1 -1
- zenml/zen_server/dashboard/assets/refresh-COb6KYDi.js +1 -0
- zenml/zen_server/dashboard/assets/sharedSchema-BoYx_B_L.js +14 -0
- zenml/zen_server/dashboard/assets/{stack-detail-query-Ck7j7BP_.js → stack-detail-query-B-US_-wa.js} +1 -1
- zenml/zen_server/dashboard/assets/{terminal-By9cErXc.js → terminal-grtjrIEJ.js} +1 -1
- zenml/zen_server/dashboard/assets/trash-Cd5CSFqA.js +1 -0
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-f3ZT7psb.js → update-server-settings-mutation-B8GB_ubU.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-rGEp5Umh.js → url-hcMJkz8p.js} +1 -1
- zenml/zen_server/dashboard/assets/{zod-BtSyGx4C.js → zod-CnykDKJj.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
- zenml/zen_server/dashboard_legacy/index.html +1 -1
- zenml/zen_server/dashboard_legacy/{precache-manifest.2fa6e528a6e7447caaf35dadfe7514bb.js → precache-manifest.9c473c96a43298343a7ce1256183123b.js} +4 -4
- zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
- zenml/zen_server/dashboard_legacy/static/js/{main.4aab7e98.chunk.js → main.463c90b9.chunk.js} +2 -2
- zenml/zen_server/dashboard_legacy/static/js/{main.4aab7e98.chunk.js.map → main.463c90b9.chunk.js.map} +1 -1
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/routers/stack_deployment_endpoints.py +6 -0
- zenml/zen_server/routers/users_endpoints.py +0 -7
- zenml/zen_server/utils.py +75 -0
- zenml/zen_server/zen_server_api.py +52 -1
- zenml/zen_stores/base_zen_store.py +7 -1
- zenml/zen_stores/migrations/versions/0.64.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/026d4577b6a0_add_code_path.py +39 -0
- zenml/zen_stores/migrations/versions/3dcc5d20e82f_add_last_user_activity.py +51 -0
- zenml/zen_stores/migrations/versions/909550c7c4da_remove_user_hub_token.py +36 -0
- zenml/zen_stores/rest_zen_store.py +5 -3
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +3 -0
- zenml/zen_stores/schemas/pipeline_run_schemas.py +3 -0
- zenml/zen_stores/schemas/server_settings_schemas.py +2 -0
- zenml/zen_stores/schemas/user_schemas.py +0 -2
- zenml/zen_stores/sql_zen_store.py +25 -1
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/METADATA +3 -3
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/RECORD +174 -157
- zenml/_hub/client.py +0 -289
- zenml/_hub/constants.py +0 -21
- zenml/_hub/utils.py +0 -79
- zenml/cli/hub.py +0 -1116
- zenml/models/v2/misc/hub_plugin_models.py +0 -79
- zenml/zen_server/dashboard/assets/@radix-CFOkMR_E.js +0 -85
- zenml/zen_server/dashboard/assets/CopyButton-B3sWVJ4Z.js +0 -2
- zenml/zen_server/dashboard/assets/DisplayDate-DYgIjlDF.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-CXoBknpt.js +0 -1
- zenml/zen_server/dashboard/assets/components-DWe4cTjS.js +0 -1
- zenml/zen_server/dashboard/assets/index-vfjX_fJV.css +0 -1
- zenml/zen_server/dashboard/assets/page-C6tXXjnK.js +0 -1
- zenml/zen_server/dashboard/assets/page-CP9obrnG.js +0 -1
- zenml/zen_server/dashboard/assets/page-CaTOsNNw.js +0 -1
- zenml/zen_server/dashboard/assets/page-CmXmB_5i.js +0 -1
- zenml/zen_server/dashboard/assets/page-CvGAOfad.js +0 -1
- zenml/zen_server/dashboard/assets/page-D0bbc-qr.js +0 -5
- zenml/zen_server/dashboard/assets/page-DLEtD2ex.js +0 -1
- zenml/zen_server/dashboard/assets/page-DupV0aBd.js +0 -1
- zenml/zen_server/dashboard/assets/page-EweAR81y.js +0 -1
- zenml/zen_server/dashboard/assets/page-w-YaL77M.js +0 -9
- zenml/zen_server/dashboard/assets/persist-BReKApOc.js +0 -14
- zenml/zen_server/dashboard/assets/secrets-video-OBJ6irhH.svg +0 -21
- zenml/zen_server/dashboard/assets/stacks-video-7gfxpAq4.svg +0 -21
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,263 @@
|
|
1
|
+
# Copyright (c) ZenML GmbH 2024. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at:
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
12
|
+
# or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
"""Implementation of the AzureML Orchestrator flavor."""
|
15
|
+
|
16
|
+
from typing import TYPE_CHECKING, Optional, Type
|
17
|
+
|
18
|
+
from pydantic import Field, model_validator
|
19
|
+
|
20
|
+
from zenml.config.base_settings import BaseSettings
|
21
|
+
from zenml.integrations.azure import (
|
22
|
+
AZURE_RESOURCE_TYPE,
|
23
|
+
AZUREML_ORCHESTRATOR_FLAVOR,
|
24
|
+
)
|
25
|
+
from zenml.logger import get_logger
|
26
|
+
from zenml.models import ServiceConnectorRequirements
|
27
|
+
from zenml.orchestrators.base_orchestrator import (
|
28
|
+
BaseOrchestratorConfig,
|
29
|
+
BaseOrchestratorFlavor,
|
30
|
+
)
|
31
|
+
from zenml.utils.enum_utils import StrEnum
|
32
|
+
|
33
|
+
if TYPE_CHECKING:
|
34
|
+
from zenml.integrations.azure.orchestrators import AzureMLOrchestrator
|
35
|
+
|
36
|
+
logger = get_logger(__name__)
|
37
|
+
|
38
|
+
|
39
|
+
class AzureMLComputeTypes(StrEnum):
|
40
|
+
"""Enum for different types of compute on AzureML."""
|
41
|
+
|
42
|
+
SERVERLESS = "serverless"
|
43
|
+
COMPUTE_INSTANCE = "compute-instance"
|
44
|
+
COMPUTE_CLUSTER = "compute-cluster"
|
45
|
+
|
46
|
+
|
47
|
+
class AzureMLOrchestratorSettings(BaseSettings):
|
48
|
+
"""Settings for the AzureML orchestrator.
|
49
|
+
|
50
|
+
These settings adjust the compute resources that will be used by the
|
51
|
+
pipeline execution.
|
52
|
+
|
53
|
+
There are three possible use cases for this implementation:
|
54
|
+
|
55
|
+
1. Serverless compute (default behaviour):
|
56
|
+
- The `mode` is set to `serverless` (default behaviour).
|
57
|
+
- All the other parameters become irrelevant and will throw a
|
58
|
+
warning if set.
|
59
|
+
|
60
|
+
2. Compute instance:
|
61
|
+
- The `mode` is set to `compute-instance`.
|
62
|
+
- In this case, users have to provide a `compute-name`.
|
63
|
+
- If a compute instance exists with this name, this instance
|
64
|
+
will be used and all the other parameters become irrelevant
|
65
|
+
and will throw a warning if set.
|
66
|
+
- If a compute instance does not already exist, ZenML will
|
67
|
+
create it. You can use the parameters `compute_size` and
|
68
|
+
`idle_type_before_shutdown_minutes` for this operation.
|
69
|
+
|
70
|
+
3. Compute cluster:
|
71
|
+
- The `mode` is set to `compute-cluster`.
|
72
|
+
- In this case, users have to provide a `compute-name`.
|
73
|
+
- If a compute cluster exists with this name, this instance
|
74
|
+
will be used and all the other parameters become irrelevant
|
75
|
+
and will throw a warning if set.
|
76
|
+
- If a compute cluster does not already exist, ZenML will
|
77
|
+
create it. You can all the additional parameters for this
|
78
|
+
operation.
|
79
|
+
"""
|
80
|
+
|
81
|
+
# Mode for compute
|
82
|
+
mode: AzureMLComputeTypes = AzureMLComputeTypes.SERVERLESS
|
83
|
+
|
84
|
+
# Common Configuration for Compute Instances and Clusters
|
85
|
+
compute_name: Optional[str] = None
|
86
|
+
size: Optional[str] = None
|
87
|
+
|
88
|
+
# Additional configuration for a Compute Instance
|
89
|
+
idle_time_before_shutdown_minutes: Optional[int] = None
|
90
|
+
|
91
|
+
# Additional configuration for a Compute Cluster
|
92
|
+
idle_time_before_scaledown_down: Optional[int] = None
|
93
|
+
location: Optional[str] = None
|
94
|
+
min_instances: Optional[int] = None
|
95
|
+
max_instances: Optional[int] = None
|
96
|
+
tier: Optional[str] = None
|
97
|
+
|
98
|
+
@model_validator(mode="after")
|
99
|
+
def azureml_settings_validator(self) -> "AzureMLOrchestratorSettings":
|
100
|
+
"""Checks whether the right configuration is set based on mode.
|
101
|
+
|
102
|
+
Returns:
|
103
|
+
the instance itself.
|
104
|
+
|
105
|
+
Raises:
|
106
|
+
AssertionError: if a name is not provided when working with
|
107
|
+
instances and clusters.
|
108
|
+
"""
|
109
|
+
excluded_fields = {"subscription_id", "resource_group", "workspace"}
|
110
|
+
|
111
|
+
viable_configuration_fields = {
|
112
|
+
AzureMLComputeTypes.SERVERLESS: {"mode"},
|
113
|
+
AzureMLComputeTypes.COMPUTE_INSTANCE: {
|
114
|
+
"mode",
|
115
|
+
"compute_name",
|
116
|
+
"size",
|
117
|
+
"idle_time_before_shutdown_minutes",
|
118
|
+
},
|
119
|
+
AzureMLComputeTypes.COMPUTE_CLUSTER: {
|
120
|
+
"mode",
|
121
|
+
"compute_name",
|
122
|
+
"size",
|
123
|
+
"idle_time_before_scaledown_down",
|
124
|
+
"location",
|
125
|
+
"min_instances",
|
126
|
+
"max_instances",
|
127
|
+
"tier",
|
128
|
+
},
|
129
|
+
}
|
130
|
+
viable_fields = viable_configuration_fields[self.mode]
|
131
|
+
|
132
|
+
for field in self.model_fields_set:
|
133
|
+
if field not in viable_fields and field not in excluded_fields:
|
134
|
+
logger.warning(
|
135
|
+
"In the AzureML Orchestrator Settings, the mode of "
|
136
|
+
f"operation is set to {self.mode}. In this mode, you can "
|
137
|
+
f"not configure the parameter '{field}'. This "
|
138
|
+
"configuration will be ignored."
|
139
|
+
)
|
140
|
+
|
141
|
+
if (
|
142
|
+
self.mode == AzureMLComputeTypes.COMPUTE_INSTANCE
|
143
|
+
or self.mode == AzureMLComputeTypes.COMPUTE_CLUSTER
|
144
|
+
):
|
145
|
+
assert self.compute_name is not None, (
|
146
|
+
"When you are working with compute instances and clusters, "
|
147
|
+
"please define a name for the compute target."
|
148
|
+
)
|
149
|
+
|
150
|
+
return self
|
151
|
+
|
152
|
+
|
153
|
+
class AzureMLOrchestratorConfig(
|
154
|
+
BaseOrchestratorConfig, AzureMLOrchestratorSettings
|
155
|
+
):
|
156
|
+
"""Configuration for the AzureML orchestrator."""
|
157
|
+
|
158
|
+
subscription_id: str = Field(
|
159
|
+
description="Subscription ID that AzureML is running on."
|
160
|
+
)
|
161
|
+
resource_group: str = Field(
|
162
|
+
description="Name of the resource group that AzureML is running on.",
|
163
|
+
)
|
164
|
+
workspace: str = Field(
|
165
|
+
description="Name of the workspace that AzureML is running on."
|
166
|
+
)
|
167
|
+
|
168
|
+
@property
|
169
|
+
def is_remote(self) -> bool:
|
170
|
+
"""Checks if this stack component is running remotely.
|
171
|
+
|
172
|
+
This designation is used to determine if the stack component can be
|
173
|
+
used with a local ZenML database or if it requires a remote ZenML
|
174
|
+
server.
|
175
|
+
|
176
|
+
Returns:
|
177
|
+
True if this config is for a remote component, False otherwise.
|
178
|
+
"""
|
179
|
+
return True
|
180
|
+
|
181
|
+
@property
|
182
|
+
def is_synchronous(self) -> bool:
|
183
|
+
"""Whether the orchestrator runs synchronous or not.
|
184
|
+
|
185
|
+
Returns:
|
186
|
+
Whether the orchestrator runs synchronous or not.
|
187
|
+
"""
|
188
|
+
return False
|
189
|
+
|
190
|
+
|
191
|
+
class AzureMLOrchestratorFlavor(BaseOrchestratorFlavor):
|
192
|
+
"""Flavor for the AzureML orchestrator."""
|
193
|
+
|
194
|
+
@property
|
195
|
+
def name(self) -> str:
|
196
|
+
"""Name of the flavor.
|
197
|
+
|
198
|
+
Returns:
|
199
|
+
The name of the flavor.
|
200
|
+
"""
|
201
|
+
return AZUREML_ORCHESTRATOR_FLAVOR
|
202
|
+
|
203
|
+
@property
|
204
|
+
def service_connector_requirements(
|
205
|
+
self,
|
206
|
+
) -> Optional[ServiceConnectorRequirements]:
|
207
|
+
"""Service connector resource requirements for service connectors.
|
208
|
+
|
209
|
+
Specifies resource requirements that are used to filter the available
|
210
|
+
service connector types that are compatible with this flavor.
|
211
|
+
|
212
|
+
Returns:
|
213
|
+
Requirements for compatible service connectors, if a service
|
214
|
+
connector is required for this flavor.
|
215
|
+
"""
|
216
|
+
return ServiceConnectorRequirements(resource_type=AZURE_RESOURCE_TYPE)
|
217
|
+
|
218
|
+
@property
|
219
|
+
def docs_url(self) -> Optional[str]:
|
220
|
+
"""A URL to point at docs explaining this flavor.
|
221
|
+
|
222
|
+
Returns:
|
223
|
+
A flavor docs url.
|
224
|
+
"""
|
225
|
+
return self.generate_default_docs_url()
|
226
|
+
|
227
|
+
@property
|
228
|
+
def sdk_docs_url(self) -> Optional[str]:
|
229
|
+
"""A URL to point at SDK docs explaining this flavor.
|
230
|
+
|
231
|
+
Returns:
|
232
|
+
A flavor SDK docs url.
|
233
|
+
"""
|
234
|
+
return self.generate_default_sdk_docs_url()
|
235
|
+
|
236
|
+
@property
|
237
|
+
def logo_url(self) -> str:
|
238
|
+
"""A URL to represent the flavor in the dashboard.
|
239
|
+
|
240
|
+
Returns:
|
241
|
+
The flavor logo.
|
242
|
+
"""
|
243
|
+
return "https://public-flavor-logos.s3.eu-central-1.amazonaws.com/orchestrator/azureml.png"
|
244
|
+
|
245
|
+
@property
|
246
|
+
def config_class(self) -> Type[AzureMLOrchestratorConfig]:
|
247
|
+
"""Returns AzureMLOrchestratorConfig config class.
|
248
|
+
|
249
|
+
Returns:
|
250
|
+
The config class.
|
251
|
+
"""
|
252
|
+
return AzureMLOrchestratorConfig
|
253
|
+
|
254
|
+
@property
|
255
|
+
def implementation_class(self) -> Type["AzureMLOrchestrator"]:
|
256
|
+
"""Implementation class.
|
257
|
+
|
258
|
+
Returns:
|
259
|
+
The implementation class.
|
260
|
+
"""
|
261
|
+
from zenml.integrations.azure.orchestrators import AzureMLOrchestrator
|
262
|
+
|
263
|
+
return AzureMLOrchestrator
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) ZenML GmbH
|
1
|
+
# Copyright (c) ZenML GmbH 2024. All Rights Reserved.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -11,4 +11,9 @@
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
12
12
|
# or implied. See the License for the specific language governing
|
13
13
|
# permissions and limitations under the License.
|
14
|
-
"""
|
14
|
+
"""AzureML orchestrator."""
|
15
|
+
from zenml.integrations.azure.orchestrators.azureml_orchestrator import (
|
16
|
+
AzureMLOrchestrator,
|
17
|
+
)
|
18
|
+
|
19
|
+
__all__ = ["AzureMLOrchestrator"]
|