mlrun 1.6.4rc2__py3-none-any.whl → 1.7.0rc20__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.
Potentially problematic release.
This version of mlrun might be problematic. Click here for more details.
- mlrun/__init__.py +11 -1
- mlrun/__main__.py +26 -112
- mlrun/alerts/__init__.py +15 -0
- mlrun/alerts/alert.py +144 -0
- mlrun/api/schemas/__init__.py +5 -4
- mlrun/artifacts/__init__.py +8 -3
- mlrun/artifacts/base.py +46 -257
- mlrun/artifacts/dataset.py +11 -192
- mlrun/artifacts/manager.py +47 -48
- mlrun/artifacts/model.py +31 -159
- mlrun/artifacts/plots.py +23 -380
- mlrun/common/constants.py +69 -0
- mlrun/common/db/sql_session.py +2 -3
- mlrun/common/formatters/__init__.py +19 -0
- mlrun/common/formatters/artifact.py +21 -0
- mlrun/common/formatters/base.py +78 -0
- mlrun/common/formatters/function.py +41 -0
- mlrun/common/formatters/pipeline.py +53 -0
- mlrun/common/formatters/project.py +51 -0
- mlrun/common/helpers.py +1 -2
- mlrun/common/model_monitoring/helpers.py +9 -5
- mlrun/{runtimes → common/runtimes}/constants.py +37 -9
- mlrun/common/schemas/__init__.py +24 -4
- mlrun/common/schemas/alert.py +203 -0
- mlrun/common/schemas/api_gateway.py +148 -0
- mlrun/common/schemas/artifact.py +18 -8
- mlrun/common/schemas/auth.py +11 -5
- mlrun/common/schemas/background_task.py +1 -1
- mlrun/common/schemas/client_spec.py +4 -1
- mlrun/common/schemas/feature_store.py +16 -16
- mlrun/common/schemas/frontend_spec.py +8 -7
- mlrun/common/schemas/function.py +5 -1
- mlrun/common/schemas/hub.py +11 -18
- mlrun/common/schemas/memory_reports.py +2 -2
- mlrun/common/schemas/model_monitoring/__init__.py +18 -3
- mlrun/common/schemas/model_monitoring/constants.py +83 -26
- mlrun/common/schemas/model_monitoring/grafana.py +13 -9
- mlrun/common/schemas/model_monitoring/model_endpoints.py +99 -16
- mlrun/common/schemas/notification.py +4 -4
- mlrun/common/schemas/object.py +2 -2
- mlrun/{runtimes/mpijob/v1alpha1.py → common/schemas/pagination.py} +10 -13
- mlrun/common/schemas/pipeline.py +1 -10
- mlrun/common/schemas/project.py +24 -23
- mlrun/common/schemas/runtime_resource.py +8 -12
- mlrun/common/schemas/schedule.py +3 -3
- mlrun/common/schemas/tag.py +1 -2
- mlrun/common/schemas/workflow.py +2 -2
- mlrun/common/types.py +7 -1
- mlrun/config.py +54 -17
- mlrun/data_types/to_pandas.py +10 -12
- mlrun/datastore/__init__.py +5 -8
- mlrun/datastore/alibaba_oss.py +130 -0
- mlrun/datastore/azure_blob.py +17 -5
- mlrun/datastore/base.py +62 -39
- mlrun/datastore/datastore.py +28 -9
- mlrun/datastore/datastore_profile.py +146 -20
- mlrun/datastore/filestore.py +0 -1
- mlrun/datastore/google_cloud_storage.py +6 -2
- mlrun/datastore/hdfs.py +56 -0
- mlrun/datastore/inmem.py +2 -2
- mlrun/datastore/redis.py +6 -2
- mlrun/datastore/s3.py +9 -0
- mlrun/datastore/snowflake_utils.py +43 -0
- mlrun/datastore/sources.py +201 -96
- mlrun/datastore/spark_utils.py +1 -2
- mlrun/datastore/store_resources.py +7 -7
- mlrun/datastore/targets.py +358 -104
- mlrun/datastore/utils.py +72 -58
- mlrun/datastore/v3io.py +5 -1
- mlrun/db/base.py +185 -35
- mlrun/db/factory.py +1 -1
- mlrun/db/httpdb.py +614 -179
- mlrun/db/nopdb.py +210 -26
- mlrun/errors.py +12 -1
- mlrun/execution.py +41 -24
- mlrun/feature_store/__init__.py +0 -2
- mlrun/feature_store/api.py +40 -72
- mlrun/feature_store/common.py +1 -1
- mlrun/feature_store/feature_set.py +76 -55
- mlrun/feature_store/feature_vector.py +28 -30
- mlrun/feature_store/ingestion.py +7 -6
- mlrun/feature_store/retrieval/base.py +16 -11
- mlrun/feature_store/retrieval/conversion.py +11 -13
- mlrun/feature_store/retrieval/dask_merger.py +2 -0
- mlrun/feature_store/retrieval/job.py +9 -3
- mlrun/feature_store/retrieval/local_merger.py +2 -0
- mlrun/feature_store/retrieval/spark_merger.py +34 -24
- mlrun/feature_store/steps.py +37 -34
- mlrun/features.py +9 -20
- mlrun/frameworks/_common/artifacts_library.py +9 -9
- mlrun/frameworks/_common/mlrun_interface.py +5 -5
- mlrun/frameworks/_common/model_handler.py +48 -48
- mlrun/frameworks/_common/plan.py +2 -3
- mlrun/frameworks/_common/producer.py +3 -4
- mlrun/frameworks/_common/utils.py +5 -5
- mlrun/frameworks/_dl_common/loggers/logger.py +6 -7
- mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +9 -9
- mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +23 -47
- mlrun/frameworks/_ml_common/artifacts_library.py +1 -2
- mlrun/frameworks/_ml_common/loggers/logger.py +3 -4
- mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +4 -5
- mlrun/frameworks/_ml_common/model_handler.py +24 -24
- mlrun/frameworks/_ml_common/pkl_model_server.py +2 -2
- mlrun/frameworks/_ml_common/plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +2 -3
- mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +2 -3
- mlrun/frameworks/_ml_common/plans/dataset_plan.py +3 -3
- mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +3 -3
- mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +4 -4
- mlrun/frameworks/_ml_common/utils.py +4 -4
- mlrun/frameworks/auto_mlrun/auto_mlrun.py +9 -9
- mlrun/frameworks/huggingface/model_server.py +4 -4
- mlrun/frameworks/lgbm/__init__.py +33 -33
- mlrun/frameworks/lgbm/callbacks/callback.py +2 -4
- mlrun/frameworks/lgbm/callbacks/logging_callback.py +4 -5
- mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +4 -5
- mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +1 -3
- mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +6 -6
- mlrun/frameworks/lgbm/model_handler.py +10 -10
- mlrun/frameworks/lgbm/model_server.py +6 -6
- mlrun/frameworks/lgbm/utils.py +5 -5
- mlrun/frameworks/onnx/dataset.py +8 -8
- mlrun/frameworks/onnx/mlrun_interface.py +3 -3
- mlrun/frameworks/onnx/model_handler.py +6 -6
- mlrun/frameworks/onnx/model_server.py +7 -7
- mlrun/frameworks/parallel_coordinates.py +4 -3
- mlrun/frameworks/pytorch/__init__.py +18 -18
- mlrun/frameworks/pytorch/callbacks/callback.py +4 -5
- mlrun/frameworks/pytorch/callbacks/logging_callback.py +17 -17
- mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +11 -11
- mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +23 -29
- mlrun/frameworks/pytorch/callbacks_handler.py +38 -38
- mlrun/frameworks/pytorch/mlrun_interface.py +20 -20
- mlrun/frameworks/pytorch/model_handler.py +17 -17
- mlrun/frameworks/pytorch/model_server.py +7 -7
- mlrun/frameworks/sklearn/__init__.py +13 -13
- mlrun/frameworks/sklearn/estimator.py +4 -4
- mlrun/frameworks/sklearn/metrics_library.py +14 -14
- mlrun/frameworks/sklearn/mlrun_interface.py +3 -6
- mlrun/frameworks/sklearn/model_handler.py +2 -2
- mlrun/frameworks/tf_keras/__init__.py +10 -7
- mlrun/frameworks/tf_keras/callbacks/logging_callback.py +15 -15
- mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +11 -11
- mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +19 -23
- mlrun/frameworks/tf_keras/mlrun_interface.py +9 -11
- mlrun/frameworks/tf_keras/model_handler.py +14 -14
- mlrun/frameworks/tf_keras/model_server.py +6 -6
- mlrun/frameworks/xgboost/__init__.py +13 -13
- mlrun/frameworks/xgboost/model_handler.py +6 -6
- mlrun/k8s_utils.py +14 -16
- mlrun/launcher/__init__.py +1 -1
- mlrun/launcher/base.py +16 -15
- mlrun/launcher/client.py +8 -6
- mlrun/launcher/factory.py +1 -1
- mlrun/launcher/local.py +17 -11
- mlrun/launcher/remote.py +16 -10
- mlrun/lists.py +7 -6
- mlrun/model.py +238 -73
- mlrun/model_monitoring/__init__.py +1 -1
- mlrun/model_monitoring/api.py +138 -315
- mlrun/model_monitoring/application.py +5 -296
- mlrun/model_monitoring/applications/__init__.py +24 -0
- mlrun/model_monitoring/applications/_application_steps.py +157 -0
- mlrun/model_monitoring/applications/base.py +282 -0
- mlrun/model_monitoring/applications/context.py +214 -0
- mlrun/model_monitoring/applications/evidently_base.py +211 -0
- mlrun/model_monitoring/applications/histogram_data_drift.py +349 -0
- mlrun/model_monitoring/applications/results.py +99 -0
- mlrun/model_monitoring/controller.py +104 -84
- mlrun/model_monitoring/controller_handler.py +13 -5
- mlrun/model_monitoring/db/__init__.py +18 -0
- mlrun/model_monitoring/{stores → db/stores}/__init__.py +43 -36
- mlrun/model_monitoring/db/stores/base/__init__.py +15 -0
- mlrun/model_monitoring/{stores/model_endpoint_store.py → db/stores/base/store.py} +64 -40
- mlrun/model_monitoring/db/stores/sqldb/__init__.py +13 -0
- mlrun/model_monitoring/db/stores/sqldb/models/__init__.py +71 -0
- mlrun/model_monitoring/{stores → db/stores/sqldb}/models/base.py +109 -5
- mlrun/model_monitoring/db/stores/sqldb/models/mysql.py +88 -0
- mlrun/model_monitoring/{stores/models/mysql.py → db/stores/sqldb/models/sqlite.py} +19 -13
- mlrun/model_monitoring/db/stores/sqldb/sql_store.py +684 -0
- mlrun/model_monitoring/db/stores/v3io_kv/__init__.py +13 -0
- mlrun/model_monitoring/{stores/kv_model_endpoint_store.py → db/stores/v3io_kv/kv_store.py} +310 -165
- mlrun/model_monitoring/db/tsdb/__init__.py +100 -0
- mlrun/model_monitoring/db/tsdb/base.py +329 -0
- mlrun/model_monitoring/db/tsdb/helpers.py +30 -0
- mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +15 -0
- mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +240 -0
- mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +45 -0
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +397 -0
- mlrun/model_monitoring/db/tsdb/v3io/__init__.py +15 -0
- mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +117 -0
- mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +630 -0
- mlrun/model_monitoring/evidently_application.py +6 -118
- mlrun/model_monitoring/features_drift_table.py +134 -106
- mlrun/model_monitoring/helpers.py +127 -28
- mlrun/model_monitoring/metrics/__init__.py +13 -0
- mlrun/model_monitoring/metrics/histogram_distance.py +127 -0
- mlrun/model_monitoring/model_endpoint.py +3 -2
- mlrun/model_monitoring/prometheus.py +1 -4
- mlrun/model_monitoring/stream_processing.py +62 -231
- mlrun/model_monitoring/tracking_policy.py +9 -2
- mlrun/model_monitoring/writer.py +152 -124
- mlrun/package/__init__.py +6 -6
- mlrun/package/context_handler.py +5 -5
- mlrun/package/packager.py +7 -7
- mlrun/package/packagers/default_packager.py +6 -6
- mlrun/package/packagers/numpy_packagers.py +15 -15
- mlrun/package/packagers/pandas_packagers.py +5 -5
- mlrun/package/packagers/python_standard_library_packagers.py +10 -10
- mlrun/package/packagers_manager.py +19 -23
- mlrun/package/utils/_formatter.py +6 -6
- mlrun/package/utils/_pickler.py +2 -2
- mlrun/package/utils/_supported_format.py +4 -4
- mlrun/package/utils/log_hint_utils.py +2 -2
- mlrun/package/utils/type_hint_utils.py +4 -9
- mlrun/platforms/__init__.py +11 -10
- mlrun/platforms/iguazio.py +24 -203
- mlrun/projects/operations.py +35 -21
- mlrun/projects/pipelines.py +68 -99
- mlrun/projects/project.py +830 -266
- mlrun/render.py +3 -11
- mlrun/run.py +162 -166
- mlrun/runtimes/__init__.py +62 -7
- mlrun/runtimes/base.py +39 -32
- mlrun/runtimes/daskjob.py +8 -8
- mlrun/runtimes/databricks_job/databricks_cancel_task.py +1 -1
- mlrun/runtimes/databricks_job/databricks_runtime.py +7 -7
- mlrun/runtimes/databricks_job/databricks_wrapper.py +1 -1
- mlrun/runtimes/funcdoc.py +0 -28
- mlrun/runtimes/function_reference.py +1 -1
- mlrun/runtimes/kubejob.py +28 -122
- mlrun/runtimes/local.py +6 -3
- mlrun/runtimes/mpijob/__init__.py +0 -20
- mlrun/runtimes/mpijob/abstract.py +9 -10
- mlrun/runtimes/mpijob/v1.py +1 -1
- mlrun/{model_monitoring/stores/models/sqlite.py → runtimes/nuclio/__init__.py} +7 -9
- mlrun/runtimes/nuclio/api_gateway.py +709 -0
- mlrun/runtimes/nuclio/application/__init__.py +15 -0
- mlrun/runtimes/nuclio/application/application.py +523 -0
- mlrun/runtimes/nuclio/application/reverse_proxy.go +95 -0
- mlrun/runtimes/{function.py → nuclio/function.py} +112 -73
- mlrun/runtimes/{nuclio.py → nuclio/nuclio.py} +6 -6
- mlrun/runtimes/{serving.py → nuclio/serving.py} +45 -51
- mlrun/runtimes/pod.py +286 -88
- mlrun/runtimes/remotesparkjob.py +2 -2
- mlrun/runtimes/sparkjob/spark3job.py +51 -34
- mlrun/runtimes/utils.py +7 -75
- mlrun/secrets.py +9 -5
- mlrun/serving/remote.py +2 -7
- mlrun/serving/routers.py +13 -10
- mlrun/serving/server.py +22 -26
- mlrun/serving/states.py +99 -25
- mlrun/serving/utils.py +3 -3
- mlrun/serving/v1_serving.py +6 -7
- mlrun/serving/v2_serving.py +59 -20
- mlrun/track/tracker.py +2 -1
- mlrun/track/tracker_manager.py +3 -3
- mlrun/track/trackers/mlflow_tracker.py +1 -2
- mlrun/utils/async_http.py +5 -7
- mlrun/utils/azure_vault.py +1 -1
- mlrun/utils/clones.py +1 -2
- mlrun/utils/condition_evaluator.py +3 -3
- mlrun/utils/db.py +3 -3
- mlrun/utils/helpers.py +183 -197
- mlrun/utils/http.py +2 -5
- mlrun/utils/logger.py +76 -14
- mlrun/utils/notifications/notification/__init__.py +17 -12
- mlrun/utils/notifications/notification/base.py +14 -2
- mlrun/utils/notifications/notification/console.py +2 -0
- mlrun/utils/notifications/notification/git.py +3 -1
- mlrun/utils/notifications/notification/ipython.py +3 -1
- mlrun/utils/notifications/notification/slack.py +101 -21
- mlrun/utils/notifications/notification/webhook.py +11 -1
- mlrun/utils/notifications/notification_pusher.py +155 -30
- mlrun/utils/retryer.py +208 -0
- mlrun/utils/singleton.py +1 -1
- mlrun/utils/v3io_clients.py +2 -4
- mlrun/utils/version/version.json +2 -2
- mlrun/utils/version/version.py +2 -6
- {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/METADATA +31 -19
- mlrun-1.7.0rc20.dist-info/RECORD +353 -0
- mlrun/kfpops.py +0 -868
- mlrun/model_monitoring/batch.py +0 -1095
- mlrun/model_monitoring/stores/models/__init__.py +0 -27
- mlrun/model_monitoring/stores/sql_model_endpoint_store.py +0 -384
- mlrun/platforms/other.py +0 -306
- mlrun-1.6.4rc2.dist-info/RECORD +0 -314
- {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/LICENSE +0 -0
- {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/WHEEL +0 -0
- {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/entry_points.txt +0 -0
- {mlrun-1.6.4rc2.dist-info → mlrun-1.7.0rc20.dist-info}/top_level.txt +0 -0
mlrun/frameworks/onnx/dataset.py
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
15
|
import math
|
|
16
|
-
from typing import Callable,
|
|
16
|
+
from typing import Callable, Union
|
|
17
17
|
|
|
18
18
|
import numpy as np
|
|
19
19
|
|
|
@@ -25,11 +25,11 @@ class ONNXDataset:
|
|
|
25
25
|
|
|
26
26
|
def __init__(
|
|
27
27
|
self,
|
|
28
|
-
x: Union[np.ndarray,
|
|
29
|
-
y: Union[np.ndarray,
|
|
28
|
+
x: Union[np.ndarray, list[np.ndarray]],
|
|
29
|
+
y: Union[np.ndarray, list[np.ndarray]] = None,
|
|
30
30
|
batch_size: int = 1,
|
|
31
|
-
x_transforms:
|
|
32
|
-
y_transforms:
|
|
31
|
+
x_transforms: list[Callable[[np.ndarray], np.ndarray]] = None,
|
|
32
|
+
y_transforms: list[Callable[[np.ndarray], np.ndarray]] = None,
|
|
33
33
|
is_batched_transforms: bool = False,
|
|
34
34
|
):
|
|
35
35
|
"""
|
|
@@ -71,7 +71,7 @@ class ONNXDataset:
|
|
|
71
71
|
self._index = 0
|
|
72
72
|
return self
|
|
73
73
|
|
|
74
|
-
def __next__(self) -> Union[np.ndarray,
|
|
74
|
+
def __next__(self) -> Union[np.ndarray, tuple[np.ndarray, np.ndarray]]:
|
|
75
75
|
"""
|
|
76
76
|
Get the next item in line (by the inner index) since calling '__iter__'. If ground truth was provided (y),
|
|
77
77
|
a tuple of (x, y) will be returned. Otherwise x.
|
|
@@ -92,7 +92,7 @@ class ONNXDataset:
|
|
|
92
92
|
|
|
93
93
|
def __getitem__(
|
|
94
94
|
self, index: int
|
|
95
|
-
) -> Union[np.ndarray,
|
|
95
|
+
) -> Union[np.ndarray, tuple[np.ndarray, np.ndarray]]:
|
|
96
96
|
"""
|
|
97
97
|
Get the item at the given index. If ground truth was provided, a tuple of (x, y) will be returned. Otherwise x.
|
|
98
98
|
|
|
@@ -155,7 +155,7 @@ class ONNXDataset:
|
|
|
155
155
|
def _call_transforms(
|
|
156
156
|
self,
|
|
157
157
|
items: np.ndarray,
|
|
158
|
-
transforms:
|
|
158
|
+
transforms: list[Callable[[np.ndarray], np.ndarray]],
|
|
159
159
|
is_batched: bool,
|
|
160
160
|
):
|
|
161
161
|
"""
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
|
-
from typing import Callable
|
|
15
|
+
from typing import Callable
|
|
16
16
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
import onnx
|
|
@@ -35,7 +35,7 @@ class ONNXMLRunInterface:
|
|
|
35
35
|
def __init__(
|
|
36
36
|
self,
|
|
37
37
|
model: onnx.ModelProto,
|
|
38
|
-
execution_providers:
|
|
38
|
+
execution_providers: list[str] = None,
|
|
39
39
|
context: mlrun.MLClientCtx = None,
|
|
40
40
|
):
|
|
41
41
|
# Set the context:
|
|
@@ -74,7 +74,7 @@ class ONNXMLRunInterface:
|
|
|
74
74
|
def evaluate(
|
|
75
75
|
self,
|
|
76
76
|
dataset: ONNXDataset,
|
|
77
|
-
metrics:
|
|
77
|
+
metrics: list[Callable[[np.ndarray, np.ndarray], float]],
|
|
78
78
|
):
|
|
79
79
|
pass
|
|
80
80
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
15
|
import os
|
|
16
|
-
from typing import
|
|
16
|
+
from typing import Union
|
|
17
17
|
|
|
18
18
|
import onnx
|
|
19
19
|
import onnxoptimizer
|
|
@@ -60,7 +60,7 @@ class ONNXModelHandler(ModelHandler):
|
|
|
60
60
|
:raise MLRunInvalidArgumentError: There was no model or model directory supplied.
|
|
61
61
|
"""
|
|
62
62
|
# Setup the base handler class:
|
|
63
|
-
super(
|
|
63
|
+
super().__init__(
|
|
64
64
|
model=model,
|
|
65
65
|
model_path=model_path,
|
|
66
66
|
model_name=model_name,
|
|
@@ -71,7 +71,7 @@ class ONNXModelHandler(ModelHandler):
|
|
|
71
71
|
# TODO: output_path won't work well with logging artifacts. Need to look into changing the logic of 'log_artifact'.
|
|
72
72
|
def save(
|
|
73
73
|
self, output_path: str = None, **kwargs
|
|
74
|
-
) -> Union[
|
|
74
|
+
) -> Union[dict[str, Artifact], None]:
|
|
75
75
|
"""
|
|
76
76
|
Save the handled model at the given output path. If a MLRun context is available, the saved model files will be
|
|
77
77
|
logged and returned as artifacts.
|
|
@@ -81,7 +81,7 @@ class ONNXModelHandler(ModelHandler):
|
|
|
81
81
|
|
|
82
82
|
:return The saved model additional artifacts (if needed) dictionary if context is available and None otherwise.
|
|
83
83
|
"""
|
|
84
|
-
super(
|
|
84
|
+
super().save(output_path=output_path)
|
|
85
85
|
|
|
86
86
|
# Set the output path:
|
|
87
87
|
if output_path is None:
|
|
@@ -97,7 +97,7 @@ class ONNXModelHandler(ModelHandler):
|
|
|
97
97
|
"""
|
|
98
98
|
Load the specified model in this handler.
|
|
99
99
|
"""
|
|
100
|
-
super(
|
|
100
|
+
super().load()
|
|
101
101
|
|
|
102
102
|
# Check that the model is well-formed:
|
|
103
103
|
# TODO: Currently not working well with HuggingFace models so we skip it
|
|
@@ -106,7 +106,7 @@ class ONNXModelHandler(ModelHandler):
|
|
|
106
106
|
# Load the ONNX model:
|
|
107
107
|
self._model = onnx.load(self._model_file)
|
|
108
108
|
|
|
109
|
-
def optimize(self, optimizations:
|
|
109
|
+
def optimize(self, optimizations: list[str] = None, fixed_point: bool = False):
|
|
110
110
|
"""
|
|
111
111
|
Use ONNX optimizer to optimize the ONNX model. The optimizations supported can be seen by calling
|
|
112
112
|
'onnxoptimizer.get_available_passes()'
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
|
-
from typing import Any,
|
|
15
|
+
from typing import Any, Union
|
|
16
16
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
import onnx
|
|
@@ -37,7 +37,7 @@ class ONNXModelServer(V2ModelServer):
|
|
|
37
37
|
model: onnx.ModelProto = None,
|
|
38
38
|
model_path: str = None,
|
|
39
39
|
model_name: str = None,
|
|
40
|
-
execution_providers:
|
|
40
|
+
execution_providers: list[Union[str, tuple[str, dict[str, Any]]]] = None,
|
|
41
41
|
protocol: str = None,
|
|
42
42
|
**class_args,
|
|
43
43
|
):
|
|
@@ -76,7 +76,7 @@ class ONNXModelServer(V2ModelServer):
|
|
|
76
76
|
:param protocol: -
|
|
77
77
|
:param class_args: -
|
|
78
78
|
"""
|
|
79
|
-
super(
|
|
79
|
+
super().__init__(
|
|
80
80
|
context=context,
|
|
81
81
|
name=name,
|
|
82
82
|
model_path=model_path,
|
|
@@ -98,8 +98,8 @@ class ONNXModelServer(V2ModelServer):
|
|
|
98
98
|
# Prepare inference parameters:
|
|
99
99
|
self._model_handler: ONNXModelHandler = None
|
|
100
100
|
self._inference_session: onnxruntime.InferenceSession = None
|
|
101
|
-
self._input_layers:
|
|
102
|
-
self._output_layers:
|
|
101
|
+
self._input_layers: list[str] = None
|
|
102
|
+
self._output_layers: list[str] = None
|
|
103
103
|
|
|
104
104
|
def load(self):
|
|
105
105
|
"""
|
|
@@ -134,7 +134,7 @@ class ONNXModelServer(V2ModelServer):
|
|
|
134
134
|
output_layer.name for output_layer in self._inference_session.get_outputs()
|
|
135
135
|
]
|
|
136
136
|
|
|
137
|
-
def predict(self, request:
|
|
137
|
+
def predict(self, request: dict[str, Any]) -> np.ndarray:
|
|
138
138
|
"""
|
|
139
139
|
Infer the inputs through the model using ONNXRunTime and return its output. The inferred data will be
|
|
140
140
|
read from the "inputs" key of the request.
|
|
@@ -155,7 +155,7 @@ class ONNXModelServer(V2ModelServer):
|
|
|
155
155
|
},
|
|
156
156
|
)
|
|
157
157
|
|
|
158
|
-
def explain(self, request:
|
|
158
|
+
def explain(self, request: dict[str, Any]) -> str:
|
|
159
159
|
"""
|
|
160
160
|
Return a string explaining what model is being serve in this serving function and the function name.
|
|
161
161
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
import datetime
|
|
16
16
|
import os
|
|
17
|
-
from typing import
|
|
17
|
+
from typing import Union
|
|
18
18
|
|
|
19
19
|
import numpy as np
|
|
20
20
|
import pandas as pd
|
|
@@ -239,7 +239,7 @@ def _runs_list_to_df(runs_list, extend_iterations=False):
|
|
|
239
239
|
|
|
240
240
|
@filter_warnings("ignore", FutureWarning)
|
|
241
241
|
def compare_run_objects(
|
|
242
|
-
runs_list: Union[mlrun.model.RunObject,
|
|
242
|
+
runs_list: Union[mlrun.model.RunObject, list[mlrun.model.RunObject]],
|
|
243
243
|
hide_identical: bool = True,
|
|
244
244
|
exclude: list = None,
|
|
245
245
|
show: bool = None,
|
|
@@ -295,7 +295,7 @@ def compare_db_runs(
|
|
|
295
295
|
iter=False,
|
|
296
296
|
start_time_from: datetime = None,
|
|
297
297
|
hide_identical: bool = True,
|
|
298
|
-
exclude: list =
|
|
298
|
+
exclude: list = None,
|
|
299
299
|
show=None,
|
|
300
300
|
colorscale: str = "Blues",
|
|
301
301
|
filename=None,
|
|
@@ -332,6 +332,7 @@ def compare_db_runs(
|
|
|
332
332
|
**query_args,
|
|
333
333
|
)
|
|
334
334
|
|
|
335
|
+
exclude = exclude or []
|
|
335
336
|
runs_df = _runs_list_to_df(runs_list)
|
|
336
337
|
plot_as_html = gen_pcp_plot(
|
|
337
338
|
runs_df,
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
15
|
# flake8: noqa - this is until we take care of the F401 violations with respect to __all__ & sphinx
|
|
16
|
-
from typing import Any,
|
|
16
|
+
from typing import Any, Union
|
|
17
17
|
|
|
18
18
|
from torch.nn import Module
|
|
19
19
|
from torch.optim import Optimizer
|
|
@@ -35,23 +35,23 @@ def train(
|
|
|
35
35
|
loss_function: Module,
|
|
36
36
|
optimizer: Optimizer,
|
|
37
37
|
validation_set: DataLoader = None,
|
|
38
|
-
metric_functions:
|
|
38
|
+
metric_functions: list[PyTorchTypes.MetricFunctionType] = None,
|
|
39
39
|
scheduler=None,
|
|
40
40
|
scheduler_step_frequency: Union[int, float, str] = "epoch",
|
|
41
41
|
epochs: int = 1,
|
|
42
42
|
training_iterations: int = None,
|
|
43
43
|
validation_iterations: int = None,
|
|
44
|
-
callbacks_list:
|
|
44
|
+
callbacks_list: list[Callback] = None,
|
|
45
45
|
use_cuda: bool = True,
|
|
46
46
|
use_horovod: bool = None,
|
|
47
47
|
auto_log: bool = True,
|
|
48
48
|
model_name: str = None,
|
|
49
|
-
modules_map: Union[
|
|
50
|
-
custom_objects_map: Union[
|
|
49
|
+
modules_map: Union[dict[str, Union[None, str, list[str]]], str] = None,
|
|
50
|
+
custom_objects_map: Union[dict[str, Union[str, list[str]]], str] = None,
|
|
51
51
|
custom_objects_directory: str = None,
|
|
52
52
|
tensorboard_directory: str = None,
|
|
53
|
-
mlrun_callback_kwargs:
|
|
54
|
-
tensorboard_callback_kwargs:
|
|
53
|
+
mlrun_callback_kwargs: dict[str, Any] = None,
|
|
54
|
+
tensorboard_callback_kwargs: dict[str, Any] = None,
|
|
55
55
|
context: mlrun.MLClientCtx = None,
|
|
56
56
|
) -> PyTorchModelHandler:
|
|
57
57
|
"""
|
|
@@ -112,7 +112,7 @@ def train(
|
|
|
112
112
|
|
|
113
113
|
{
|
|
114
114
|
"/.../custom_optimizer.py": "optimizer",
|
|
115
|
-
"/.../custom_layers.py": ["layer1", "layer2"]
|
|
115
|
+
"/.../custom_layers.py": ["layer1", "layer2"],
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
All the paths will be accessed from the given 'custom_objects_directory',
|
|
@@ -205,19 +205,19 @@ def evaluate(
|
|
|
205
205
|
dataset: DataLoader,
|
|
206
206
|
model: Module = None,
|
|
207
207
|
loss_function: Module = None,
|
|
208
|
-
metric_functions:
|
|
208
|
+
metric_functions: list[PyTorchTypes.MetricFunctionType] = None,
|
|
209
209
|
iterations: int = None,
|
|
210
|
-
callbacks_list:
|
|
210
|
+
callbacks_list: list[Callback] = None,
|
|
211
211
|
use_cuda: bool = True,
|
|
212
212
|
use_horovod: bool = False,
|
|
213
213
|
auto_log: bool = True,
|
|
214
214
|
model_name: str = None,
|
|
215
|
-
modules_map: Union[
|
|
216
|
-
custom_objects_map: Union[
|
|
215
|
+
modules_map: Union[dict[str, Union[None, str, list[str]]], str] = None,
|
|
216
|
+
custom_objects_map: Union[dict[str, Union[str, list[str]]], str] = None,
|
|
217
217
|
custom_objects_directory: str = None,
|
|
218
|
-
mlrun_callback_kwargs:
|
|
218
|
+
mlrun_callback_kwargs: dict[str, Any] = None,
|
|
219
219
|
context: mlrun.MLClientCtx = None,
|
|
220
|
-
) ->
|
|
220
|
+
) -> tuple[PyTorchModelHandler, list[PyTorchTypes.MetricValueType]]:
|
|
221
221
|
"""
|
|
222
222
|
Use MLRun's PyTorch interface to evaluate the model with the given parameters. For more information and further
|
|
223
223
|
options regarding the auto logging, see 'PyTorchMLRunInterface' documentation. Notice for auto-logging: In order to
|
|
@@ -264,7 +264,7 @@ def evaluate(
|
|
|
264
264
|
|
|
265
265
|
{
|
|
266
266
|
"/.../custom_optimizer.py": "optimizer",
|
|
267
|
-
"/.../custom_layers.py": ["layer1", "layer2"]
|
|
267
|
+
"/.../custom_layers.py": ["layer1", "layer2"],
|
|
268
268
|
}
|
|
269
269
|
|
|
270
270
|
All the paths will be accessed from the given 'custom_objects_directory', meaning
|
|
@@ -343,9 +343,9 @@ def evaluate(
|
|
|
343
343
|
def _parse_callbacks_kwargs(
|
|
344
344
|
handler: PyTorchModelHandler,
|
|
345
345
|
tensorboard_directory: Union[str, None],
|
|
346
|
-
mlrun_callback_kwargs: Union[
|
|
347
|
-
tensorboard_callback_kwargs: Union[
|
|
348
|
-
) ->
|
|
346
|
+
mlrun_callback_kwargs: Union[dict[str, Any], None],
|
|
347
|
+
tensorboard_callback_kwargs: Union[dict[str, Any], None],
|
|
348
|
+
) -> tuple[dict, dict]:
|
|
349
349
|
"""
|
|
350
350
|
Parse the given parameters into the MLRun and Tensorboard callbacks kwargs.
|
|
351
351
|
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
15
|
from abc import ABC, abstractmethod
|
|
16
|
-
from typing import List
|
|
17
16
|
|
|
18
17
|
from torch import Tensor
|
|
19
18
|
from torch.nn import Module
|
|
@@ -68,7 +67,7 @@ class Callback(ABC):
|
|
|
68
67
|
validation_set: DataLoader = None,
|
|
69
68
|
loss_function: Module = None,
|
|
70
69
|
optimizer: Optimizer = None,
|
|
71
|
-
metric_functions:
|
|
70
|
+
metric_functions: list[PyTorchTypes.MetricFunctionType] = None,
|
|
72
71
|
scheduler=None,
|
|
73
72
|
):
|
|
74
73
|
"""
|
|
@@ -141,7 +140,7 @@ class Callback(ABC):
|
|
|
141
140
|
pass
|
|
142
141
|
|
|
143
142
|
def on_validation_end(
|
|
144
|
-
self, loss_value: PyTorchTypes.MetricValueType, metric_values:
|
|
143
|
+
self, loss_value: PyTorchTypes.MetricValueType, metric_values: list[float]
|
|
145
144
|
) -> bool:
|
|
146
145
|
"""
|
|
147
146
|
Before the validation (in a training case it will be per epoch) ends, this method will be called.
|
|
@@ -258,7 +257,7 @@ class Callback(ABC):
|
|
|
258
257
|
"""
|
|
259
258
|
pass
|
|
260
259
|
|
|
261
|
-
def on_train_metrics_end(self, metric_values:
|
|
260
|
+
def on_train_metrics_end(self, metric_values: list[PyTorchTypes.MetricValueType]):
|
|
262
261
|
"""
|
|
263
262
|
After the training calculation of the metrics, this method will be called.
|
|
264
263
|
|
|
@@ -273,7 +272,7 @@ class Callback(ABC):
|
|
|
273
272
|
pass
|
|
274
273
|
|
|
275
274
|
def on_validation_metrics_end(
|
|
276
|
-
self, metric_values:
|
|
275
|
+
self, metric_values: list[PyTorchTypes.MetricValueType]
|
|
277
276
|
):
|
|
278
277
|
"""
|
|
279
278
|
After the validating calculation of the metrics, this method will be called.
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
|
-
from typing import Callable,
|
|
15
|
+
from typing import Callable, Union
|
|
16
16
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
from torch import Tensor
|
|
@@ -59,15 +59,15 @@ class LoggingCallback(Callback):
|
|
|
59
59
|
def __init__(
|
|
60
60
|
self,
|
|
61
61
|
context: mlrun.MLClientCtx = None,
|
|
62
|
-
dynamic_hyperparameters:
|
|
62
|
+
dynamic_hyperparameters: dict[
|
|
63
63
|
str,
|
|
64
|
-
|
|
64
|
+
tuple[
|
|
65
65
|
str,
|
|
66
|
-
Union[
|
|
66
|
+
Union[list[Union[str, int]], Callable[[], PyTorchTypes.TrackableType]],
|
|
67
67
|
],
|
|
68
68
|
] = None,
|
|
69
|
-
static_hyperparameters:
|
|
70
|
-
str, Union[PyTorchTypes.TrackableType,
|
|
69
|
+
static_hyperparameters: dict[
|
|
70
|
+
str, Union[PyTorchTypes.TrackableType, tuple[str, list[Union[str, int]]]]
|
|
71
71
|
] = None,
|
|
72
72
|
auto_log: bool = False,
|
|
73
73
|
):
|
|
@@ -100,7 +100,7 @@ class LoggingCallback(Callback):
|
|
|
100
100
|
:param auto_log: Whether or not to enable auto logging, trying to track common static and dynamic
|
|
101
101
|
hyperparameters.
|
|
102
102
|
"""
|
|
103
|
-
super(
|
|
103
|
+
super().__init__()
|
|
104
104
|
|
|
105
105
|
# Store the configurations:
|
|
106
106
|
self._dynamic_hyperparameters_keys = (
|
|
@@ -117,7 +117,7 @@ class LoggingCallback(Callback):
|
|
|
117
117
|
self._is_training = None # type: bool
|
|
118
118
|
self._auto_log = auto_log
|
|
119
119
|
|
|
120
|
-
def get_training_results(self) ->
|
|
120
|
+
def get_training_results(self) -> dict[str, list[list[float]]]:
|
|
121
121
|
"""
|
|
122
122
|
Get the training results logged. The results will be stored in a dictionary where each key is the metric name
|
|
123
123
|
and the value is a list of lists of values. The first list is by epoch and the second list is by iteration
|
|
@@ -127,7 +127,7 @@ class LoggingCallback(Callback):
|
|
|
127
127
|
"""
|
|
128
128
|
return self._logger.training_results
|
|
129
129
|
|
|
130
|
-
def get_validation_results(self) ->
|
|
130
|
+
def get_validation_results(self) -> dict[str, list[list[float]]]:
|
|
131
131
|
"""
|
|
132
132
|
Get the validation results logged. The results will be stored in a dictionary where each key is the metric name
|
|
133
133
|
and the value is a list of lists of values. The first list is by epoch and the second list is by iteration
|
|
@@ -137,7 +137,7 @@ class LoggingCallback(Callback):
|
|
|
137
137
|
"""
|
|
138
138
|
return self._logger.validation_results
|
|
139
139
|
|
|
140
|
-
def get_static_hyperparameters(self) ->
|
|
140
|
+
def get_static_hyperparameters(self) -> dict[str, PyTorchTypes.TrackableType]:
|
|
141
141
|
"""
|
|
142
142
|
Get the static hyperparameters logged. The hyperparameters will be stored in a dictionary where each key is the
|
|
143
143
|
hyperparameter name and the value is his logged value.
|
|
@@ -148,7 +148,7 @@ class LoggingCallback(Callback):
|
|
|
148
148
|
|
|
149
149
|
def get_dynamic_hyperparameters(
|
|
150
150
|
self,
|
|
151
|
-
) ->
|
|
151
|
+
) -> dict[str, list[PyTorchTypes.TrackableType]]:
|
|
152
152
|
"""
|
|
153
153
|
Get the dynamic hyperparameters logged. The hyperparameters will be stored in a dictionary where each key is the
|
|
154
154
|
hyperparameter name and the value is a list of his logged values per epoch.
|
|
@@ -157,7 +157,7 @@ class LoggingCallback(Callback):
|
|
|
157
157
|
"""
|
|
158
158
|
return self._logger.dynamic_hyperparameters
|
|
159
159
|
|
|
160
|
-
def get_summaries(self) ->
|
|
160
|
+
def get_summaries(self) -> dict[str, list[float]]:
|
|
161
161
|
"""
|
|
162
162
|
Get the validation summaries of the metrics results. The summaries will be stored in a dictionary where each key
|
|
163
163
|
is the metric names and the value is a list of all the summary values per epoch.
|
|
@@ -210,7 +210,7 @@ class LoggingCallback(Callback):
|
|
|
210
210
|
self._add_auto_hyperparameters()
|
|
211
211
|
# # Static hyperparameters:
|
|
212
212
|
for name, value in self._static_hyperparameters_keys.items():
|
|
213
|
-
if isinstance(value,
|
|
213
|
+
if isinstance(value, tuple):
|
|
214
214
|
# Its a parameter that needed to be extracted via key chain.
|
|
215
215
|
self._logger.log_static_hyperparameter(
|
|
216
216
|
parameter_name=name,
|
|
@@ -294,7 +294,7 @@ class LoggingCallback(Callback):
|
|
|
294
294
|
self._logger.set_mode(mode=LoggingMode.EVALUATION)
|
|
295
295
|
|
|
296
296
|
def on_validation_end(
|
|
297
|
-
self, loss_value: PyTorchTypes.MetricValueType, metric_values:
|
|
297
|
+
self, loss_value: PyTorchTypes.MetricValueType, metric_values: list[float]
|
|
298
298
|
):
|
|
299
299
|
"""
|
|
300
300
|
Before the validation (in a training case it will be per epoch) ends, this method will be called to log the
|
|
@@ -372,7 +372,7 @@ class LoggingCallback(Callback):
|
|
|
372
372
|
result=float(loss_value),
|
|
373
373
|
)
|
|
374
374
|
|
|
375
|
-
def on_train_metrics_end(self, metric_values:
|
|
375
|
+
def on_train_metrics_end(self, metric_values: list[PyTorchTypes.MetricValueType]):
|
|
376
376
|
"""
|
|
377
377
|
After the training calculation of the metrics, this method will be called to log the metrics values.
|
|
378
378
|
|
|
@@ -389,7 +389,7 @@ class LoggingCallback(Callback):
|
|
|
389
389
|
)
|
|
390
390
|
|
|
391
391
|
def on_validation_metrics_end(
|
|
392
|
-
self, metric_values:
|
|
392
|
+
self, metric_values: list[PyTorchTypes.MetricValueType]
|
|
393
393
|
):
|
|
394
394
|
"""
|
|
395
395
|
After the validating calculation of the metrics, this method will be called to log the metrics values.
|
|
@@ -456,7 +456,7 @@ class LoggingCallback(Callback):
|
|
|
456
456
|
self,
|
|
457
457
|
source: str,
|
|
458
458
|
key_chain: Union[
|
|
459
|
-
|
|
459
|
+
list[Union[str, int]], Callable[[], PyTorchTypes.TrackableType]
|
|
460
460
|
],
|
|
461
461
|
) -> PyTorchTypes.TrackableType:
|
|
462
462
|
"""
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
|
-
from typing import Callable,
|
|
15
|
+
from typing import Callable, Union
|
|
16
16
|
|
|
17
17
|
import torch
|
|
18
18
|
from torch import Tensor
|
|
@@ -53,20 +53,20 @@ class MLRunLoggingCallback(LoggingCallback):
|
|
|
53
53
|
context: mlrun.MLClientCtx,
|
|
54
54
|
model_handler: PyTorchModelHandler,
|
|
55
55
|
log_model_tag: str = "",
|
|
56
|
-
log_model_labels:
|
|
57
|
-
log_model_parameters:
|
|
58
|
-
log_model_extra_data:
|
|
56
|
+
log_model_labels: dict[str, PyTorchTypes.TrackableType] = None,
|
|
57
|
+
log_model_parameters: dict[str, PyTorchTypes.TrackableType] = None,
|
|
58
|
+
log_model_extra_data: dict[
|
|
59
59
|
str, Union[PyTorchTypes.TrackableType, Artifact]
|
|
60
60
|
] = None,
|
|
61
|
-
dynamic_hyperparameters:
|
|
61
|
+
dynamic_hyperparameters: dict[
|
|
62
62
|
str,
|
|
63
|
-
|
|
63
|
+
tuple[
|
|
64
64
|
str,
|
|
65
|
-
Union[
|
|
65
|
+
Union[list[Union[str, int]], Callable[[], PyTorchTypes.TrackableType]],
|
|
66
66
|
],
|
|
67
67
|
] = None,
|
|
68
|
-
static_hyperparameters:
|
|
69
|
-
str, Union[PyTorchTypes.TrackableType,
|
|
68
|
+
static_hyperparameters: dict[
|
|
69
|
+
str, Union[PyTorchTypes.TrackableType, tuple[str, list[Union[str, int]]]]
|
|
70
70
|
] = None,
|
|
71
71
|
auto_log: bool = False,
|
|
72
72
|
):
|
|
@@ -107,7 +107,7 @@ class MLRunLoggingCallback(LoggingCallback):
|
|
|
107
107
|
:param auto_log: Whether or not to enable auto logging for logging the context parameters and
|
|
108
108
|
trying to track common static and dynamic hyperparameters.
|
|
109
109
|
"""
|
|
110
|
-
super(
|
|
110
|
+
super().__init__(
|
|
111
111
|
dynamic_hyperparameters=dynamic_hyperparameters,
|
|
112
112
|
static_hyperparameters=static_hyperparameters,
|
|
113
113
|
auto_log=auto_log,
|
|
@@ -160,7 +160,7 @@ class MLRunLoggingCallback(LoggingCallback):
|
|
|
160
160
|
|
|
161
161
|
:param epoch: The epoch that has just ended.
|
|
162
162
|
"""
|
|
163
|
-
super(
|
|
163
|
+
super().on_epoch_end(epoch=epoch)
|
|
164
164
|
|
|
165
165
|
# Create child context to hold the current epoch's results:
|
|
166
166
|
self._logger.log_epoch_to_context(epoch=epoch)
|