mlrun 1.3.3rc1__py3-none-any.whl → 1.4.0__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 +3 -3
- mlrun/__main__.py +79 -37
- mlrun/api/__init__.py +1 -1
- mlrun/api/api/__init__.py +1 -1
- mlrun/api/api/api.py +4 -4
- mlrun/api/api/deps.py +10 -21
- mlrun/api/api/endpoints/__init__.py +1 -1
- mlrun/api/api/endpoints/artifacts.py +64 -36
- mlrun/api/api/endpoints/auth.py +4 -4
- mlrun/api/api/endpoints/background_tasks.py +11 -11
- mlrun/api/api/endpoints/client_spec.py +5 -5
- mlrun/api/api/endpoints/clusterization_spec.py +6 -4
- mlrun/api/api/endpoints/feature_store.py +124 -115
- mlrun/api/api/endpoints/files.py +22 -14
- mlrun/api/api/endpoints/frontend_spec.py +28 -21
- mlrun/api/api/endpoints/functions.py +142 -87
- mlrun/api/api/endpoints/grafana_proxy.py +89 -442
- mlrun/api/api/endpoints/healthz.py +20 -7
- mlrun/api/api/endpoints/hub.py +320 -0
- mlrun/api/api/endpoints/internal/__init__.py +1 -1
- mlrun/api/api/endpoints/internal/config.py +1 -1
- mlrun/api/api/endpoints/internal/memory_reports.py +9 -9
- mlrun/api/api/endpoints/logs.py +11 -11
- mlrun/api/api/endpoints/model_endpoints.py +74 -70
- mlrun/api/api/endpoints/operations.py +13 -9
- mlrun/api/api/endpoints/pipelines.py +93 -88
- mlrun/api/api/endpoints/projects.py +35 -35
- mlrun/api/api/endpoints/runs.py +69 -27
- mlrun/api/api/endpoints/runtime_resources.py +28 -28
- mlrun/api/api/endpoints/schedules.py +98 -41
- mlrun/api/api/endpoints/secrets.py +37 -32
- mlrun/api/api/endpoints/submit.py +12 -12
- mlrun/api/api/endpoints/tags.py +20 -22
- mlrun/api/api/utils.py +251 -42
- mlrun/api/constants.py +1 -1
- mlrun/api/crud/__init__.py +18 -15
- mlrun/api/crud/artifacts.py +10 -10
- mlrun/api/crud/client_spec.py +4 -4
- mlrun/api/crud/clusterization_spec.py +3 -3
- mlrun/api/crud/feature_store.py +54 -46
- mlrun/api/crud/functions.py +3 -3
- mlrun/api/crud/hub.py +312 -0
- mlrun/api/crud/logs.py +11 -9
- mlrun/api/crud/model_monitoring/__init__.py +3 -3
- mlrun/api/crud/model_monitoring/grafana.py +435 -0
- mlrun/api/crud/model_monitoring/model_endpoints.py +352 -129
- mlrun/api/crud/notifications.py +149 -0
- mlrun/api/crud/pipelines.py +67 -52
- mlrun/api/crud/projects.py +51 -23
- mlrun/api/crud/runs.py +7 -5
- mlrun/api/crud/runtime_resources.py +13 -13
- mlrun/api/{db/filedb → crud/runtimes}/__init__.py +1 -1
- mlrun/api/crud/runtimes/nuclio/__init__.py +14 -0
- mlrun/api/crud/runtimes/nuclio/function.py +505 -0
- mlrun/api/crud/runtimes/nuclio/helpers.py +310 -0
- mlrun/api/crud/secrets.py +88 -46
- mlrun/api/crud/tags.py +5 -5
- mlrun/api/db/__init__.py +1 -1
- mlrun/api/db/base.py +102 -54
- mlrun/api/db/init_db.py +2 -3
- mlrun/api/db/session.py +4 -12
- mlrun/api/db/sqldb/__init__.py +1 -1
- mlrun/api/db/sqldb/db.py +439 -196
- mlrun/api/db/sqldb/helpers.py +1 -1
- mlrun/api/db/sqldb/models/__init__.py +3 -3
- mlrun/api/db/sqldb/models/models_mysql.py +82 -64
- mlrun/api/db/sqldb/models/models_sqlite.py +76 -64
- mlrun/api/db/sqldb/session.py +27 -20
- mlrun/api/initial_data.py +82 -24
- mlrun/api/launcher.py +196 -0
- mlrun/api/main.py +91 -22
- mlrun/api/middlewares.py +6 -5
- mlrun/api/migrations_mysql/env.py +1 -1
- mlrun/api/migrations_mysql/versions/28383af526f3_market_place_to_hub.py +40 -0
- mlrun/api/migrations_mysql/versions/32bae1b0e29c_increase_timestamp_fields_precision.py +1 -1
- mlrun/api/migrations_mysql/versions/4903aef6a91d_tag_foreign_key_and_cascades.py +1 -1
- mlrun/api/migrations_mysql/versions/5f1351c88a19_adding_background_tasks_table.py +1 -1
- mlrun/api/migrations_mysql/versions/88e656800d6a_add_requested_logs_column_and_index_to_.py +1 -1
- mlrun/api/migrations_mysql/versions/9d16de5f03a7_adding_data_versions_table.py +1 -1
- mlrun/api/migrations_mysql/versions/b86f5b53f3d7_adding_name_and_updated_to_runs_table.py +1 -1
- mlrun/api/migrations_mysql/versions/c4af40b0bf61_init.py +1 -1
- mlrun/api/migrations_mysql/versions/c905d15bd91d_notifications.py +72 -0
- mlrun/api/migrations_mysql/versions/ee041e8fdaa0_adding_next_run_time_column_to_schedule_.py +1 -1
- mlrun/api/migrations_sqlite/env.py +1 -1
- mlrun/api/migrations_sqlite/versions/11f8dd2dc9fe_init.py +1 -1
- mlrun/api/migrations_sqlite/versions/1c954f8cb32d_schedule_last_run_uri.py +1 -1
- mlrun/api/migrations_sqlite/versions/2b6d23c715aa_adding_feature_sets.py +1 -1
- mlrun/api/migrations_sqlite/versions/4acd9430b093_market_place_to_hub.py +77 -0
- mlrun/api/migrations_sqlite/versions/6401142f2d7c_adding_next_run_time_column_to_schedule_.py +1 -1
- mlrun/api/migrations_sqlite/versions/64d90a1a69bc_adding_background_tasks_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/803438ecd005_add_requested_logs_column_to_runs.py +1 -1
- mlrun/api/migrations_sqlite/versions/863114f0c659_refactoring_feature_set.py +1 -1
- mlrun/api/migrations_sqlite/versions/959ae00528ad_notifications.py +63 -0
- mlrun/api/migrations_sqlite/versions/accf9fc83d38_adding_data_versions_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/b68e8e897a28_schedule_labels.py +1 -1
- mlrun/api/migrations_sqlite/versions/bcd0c1f9720c_adding_project_labels.py +1 -1
- mlrun/api/migrations_sqlite/versions/cf21882f938e_schedule_id.py +1 -1
- mlrun/api/migrations_sqlite/versions/d781f58f607f_tag_object_name_string.py +1 -1
- mlrun/api/migrations_sqlite/versions/deac06871ace_adding_marketplace_sources_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/e1dd5983c06b_schedule_concurrency_limit.py +1 -1
- mlrun/api/migrations_sqlite/versions/e5594ed3ab53_adding_name_and_updated_to_runs_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/f4249b4ba6fa_adding_feature_vectors.py +1 -1
- mlrun/api/migrations_sqlite/versions/f7b5a1a03629_adding_feature_labels.py +1 -1
- mlrun/api/schemas/__init__.py +216 -138
- mlrun/api/utils/__init__.py +1 -1
- mlrun/api/utils/asyncio.py +1 -1
- mlrun/api/utils/auth/__init__.py +1 -1
- mlrun/api/utils/auth/providers/__init__.py +1 -1
- mlrun/api/utils/auth/providers/base.py +7 -7
- mlrun/api/utils/auth/providers/nop.py +6 -7
- mlrun/api/utils/auth/providers/opa.py +17 -17
- mlrun/api/utils/auth/verifier.py +36 -34
- mlrun/api/utils/background_tasks.py +24 -24
- mlrun/{builder.py → api/utils/builder.py} +216 -123
- mlrun/api/utils/clients/__init__.py +1 -1
- mlrun/api/utils/clients/chief.py +19 -4
- mlrun/api/utils/clients/iguazio.py +106 -60
- mlrun/api/utils/clients/log_collector.py +1 -1
- mlrun/api/utils/clients/nuclio.py +23 -23
- mlrun/api/utils/clients/protocols/grpc.py +2 -2
- mlrun/api/utils/db/__init__.py +1 -1
- mlrun/api/utils/db/alembic.py +1 -1
- mlrun/api/utils/db/backup.py +1 -1
- mlrun/api/utils/db/mysql.py +24 -25
- mlrun/api/utils/db/sql_collation.py +1 -1
- mlrun/api/utils/db/sqlite_migration.py +2 -2
- mlrun/api/utils/events/__init__.py +14 -0
- mlrun/api/utils/events/base.py +57 -0
- mlrun/api/utils/events/events_factory.py +41 -0
- mlrun/api/utils/events/iguazio.py +217 -0
- mlrun/api/utils/events/nop.py +55 -0
- mlrun/api/utils/helpers.py +16 -13
- mlrun/api/utils/memory_reports.py +1 -1
- mlrun/api/utils/periodic.py +6 -3
- mlrun/api/utils/projects/__init__.py +1 -1
- mlrun/api/utils/projects/follower.py +33 -33
- mlrun/api/utils/projects/leader.py +36 -34
- mlrun/api/utils/projects/member.py +27 -27
- mlrun/api/utils/projects/remotes/__init__.py +1 -1
- mlrun/api/utils/projects/remotes/follower.py +13 -13
- mlrun/api/utils/projects/remotes/leader.py +10 -10
- mlrun/api/utils/projects/remotes/nop_follower.py +27 -21
- mlrun/api/utils/projects/remotes/nop_leader.py +17 -16
- mlrun/api/utils/scheduler.py +140 -51
- mlrun/api/utils/singletons/__init__.py +1 -1
- mlrun/api/utils/singletons/db.py +9 -15
- mlrun/api/utils/singletons/k8s.py +677 -5
- mlrun/api/utils/singletons/logs_dir.py +1 -1
- mlrun/api/utils/singletons/project_member.py +1 -1
- mlrun/api/utils/singletons/scheduler.py +1 -1
- mlrun/artifacts/__init__.py +2 -2
- mlrun/artifacts/base.py +8 -2
- mlrun/artifacts/dataset.py +5 -3
- mlrun/artifacts/manager.py +7 -1
- mlrun/artifacts/model.py +15 -4
- mlrun/artifacts/plots.py +1 -1
- mlrun/common/__init__.py +1 -1
- mlrun/common/constants.py +15 -0
- mlrun/common/model_monitoring.py +209 -0
- mlrun/common/schemas/__init__.py +167 -0
- mlrun/{api → common}/schemas/artifact.py +13 -14
- mlrun/{api → common}/schemas/auth.py +10 -8
- mlrun/{api → common}/schemas/background_task.py +3 -3
- mlrun/{api → common}/schemas/client_spec.py +1 -1
- mlrun/{api → common}/schemas/clusterization_spec.py +3 -3
- mlrun/{api → common}/schemas/constants.py +21 -8
- mlrun/common/schemas/events.py +36 -0
- mlrun/{api → common}/schemas/feature_store.py +2 -1
- mlrun/{api → common}/schemas/frontend_spec.py +7 -6
- mlrun/{api → common}/schemas/function.py +5 -5
- mlrun/{api → common}/schemas/http.py +3 -3
- mlrun/common/schemas/hub.py +134 -0
- mlrun/{api → common}/schemas/k8s.py +3 -3
- mlrun/{api → common}/schemas/memory_reports.py +1 -1
- mlrun/common/schemas/model_endpoints.py +342 -0
- mlrun/common/schemas/notification.py +57 -0
- mlrun/{api → common}/schemas/object.py +6 -6
- mlrun/{api → common}/schemas/pipeline.py +3 -3
- mlrun/{api → common}/schemas/project.py +6 -5
- mlrun/common/schemas/regex.py +24 -0
- mlrun/common/schemas/runs.py +30 -0
- mlrun/{api → common}/schemas/runtime_resource.py +3 -3
- mlrun/{api → common}/schemas/schedule.py +19 -7
- mlrun/{api → common}/schemas/secret.py +3 -3
- mlrun/{api → common}/schemas/tag.py +2 -2
- mlrun/common/types.py +25 -0
- mlrun/config.py +152 -20
- mlrun/data_types/__init__.py +7 -2
- mlrun/data_types/data_types.py +4 -2
- mlrun/data_types/infer.py +1 -1
- mlrun/data_types/spark.py +10 -3
- mlrun/datastore/__init__.py +10 -3
- mlrun/datastore/azure_blob.py +1 -1
- mlrun/datastore/base.py +185 -53
- mlrun/datastore/datastore.py +1 -1
- mlrun/datastore/filestore.py +1 -1
- mlrun/datastore/google_cloud_storage.py +1 -1
- mlrun/datastore/inmem.py +4 -1
- mlrun/datastore/redis.py +1 -1
- mlrun/datastore/s3.py +1 -1
- mlrun/datastore/sources.py +192 -70
- mlrun/datastore/spark_udf.py +44 -0
- mlrun/datastore/store_resources.py +4 -4
- mlrun/datastore/targets.py +115 -45
- mlrun/datastore/utils.py +127 -5
- mlrun/datastore/v3io.py +1 -1
- mlrun/datastore/wasbfs/__init__.py +1 -1
- mlrun/datastore/wasbfs/fs.py +1 -1
- mlrun/db/__init__.py +7 -5
- mlrun/db/base.py +112 -68
- mlrun/db/httpdb.py +445 -277
- mlrun/db/nopdb.py +491 -0
- mlrun/db/sqldb.py +112 -65
- mlrun/errors.py +6 -1
- mlrun/execution.py +44 -22
- mlrun/feature_store/__init__.py +1 -1
- mlrun/feature_store/api.py +143 -95
- mlrun/feature_store/common.py +16 -20
- mlrun/feature_store/feature_set.py +42 -12
- mlrun/feature_store/feature_vector.py +32 -21
- mlrun/feature_store/ingestion.py +9 -12
- mlrun/feature_store/retrieval/__init__.py +3 -2
- mlrun/feature_store/retrieval/base.py +388 -66
- mlrun/feature_store/retrieval/dask_merger.py +63 -151
- mlrun/feature_store/retrieval/job.py +30 -12
- mlrun/feature_store/retrieval/local_merger.py +40 -133
- mlrun/feature_store/retrieval/spark_merger.py +129 -127
- mlrun/feature_store/retrieval/storey_merger.py +173 -0
- mlrun/feature_store/steps.py +132 -15
- mlrun/features.py +8 -3
- mlrun/frameworks/__init__.py +1 -1
- mlrun/frameworks/_common/__init__.py +1 -1
- mlrun/frameworks/_common/artifacts_library.py +1 -1
- mlrun/frameworks/_common/mlrun_interface.py +1 -1
- mlrun/frameworks/_common/model_handler.py +1 -1
- mlrun/frameworks/_common/plan.py +1 -1
- mlrun/frameworks/_common/producer.py +1 -1
- mlrun/frameworks/_common/utils.py +1 -1
- mlrun/frameworks/_dl_common/__init__.py +1 -1
- mlrun/frameworks/_dl_common/loggers/__init__.py +1 -1
- mlrun/frameworks/_dl_common/loggers/logger.py +1 -1
- mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +1 -1
- mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +1 -1
- mlrun/frameworks/_dl_common/model_handler.py +1 -1
- mlrun/frameworks/_dl_common/utils.py +1 -1
- mlrun/frameworks/_ml_common/__init__.py +1 -1
- mlrun/frameworks/_ml_common/artifacts_library.py +1 -1
- mlrun/frameworks/_ml_common/loggers/__init__.py +1 -1
- mlrun/frameworks/_ml_common/loggers/logger.py +1 -1
- mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +1 -1
- mlrun/frameworks/_ml_common/model_handler.py +1 -1
- mlrun/frameworks/_ml_common/pkl_model_server.py +13 -1
- mlrun/frameworks/_ml_common/plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/__init__.py +1 -1
- mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +1 -6
- mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/dataset_plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +1 -1
- mlrun/frameworks/_ml_common/producer.py +1 -1
- mlrun/frameworks/_ml_common/utils.py +1 -1
- mlrun/frameworks/auto_mlrun/__init__.py +1 -1
- mlrun/frameworks/auto_mlrun/auto_mlrun.py +1 -1
- mlrun/frameworks/huggingface/__init__.py +1 -1
- mlrun/frameworks/huggingface/model_server.py +1 -1
- mlrun/frameworks/lgbm/__init__.py +1 -1
- mlrun/frameworks/lgbm/callbacks/__init__.py +1 -1
- mlrun/frameworks/lgbm/callbacks/callback.py +1 -1
- mlrun/frameworks/lgbm/callbacks/logging_callback.py +1 -1
- mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +1 -1
- mlrun/frameworks/lgbm/model_handler.py +1 -1
- mlrun/frameworks/lgbm/model_server.py +1 -1
- mlrun/frameworks/lgbm/utils.py +1 -1
- mlrun/frameworks/onnx/__init__.py +1 -1
- mlrun/frameworks/onnx/dataset.py +1 -1
- mlrun/frameworks/onnx/mlrun_interface.py +1 -1
- mlrun/frameworks/onnx/model_handler.py +1 -1
- mlrun/frameworks/onnx/model_server.py +1 -1
- mlrun/frameworks/parallel_coordinates.py +1 -1
- mlrun/frameworks/pytorch/__init__.py +1 -1
- mlrun/frameworks/pytorch/callbacks/__init__.py +1 -1
- mlrun/frameworks/pytorch/callbacks/callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks/logging_callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks_handler.py +1 -1
- mlrun/frameworks/pytorch/mlrun_interface.py +1 -1
- mlrun/frameworks/pytorch/model_handler.py +1 -1
- mlrun/frameworks/pytorch/model_server.py +1 -1
- mlrun/frameworks/pytorch/utils.py +1 -1
- mlrun/frameworks/sklearn/__init__.py +1 -1
- mlrun/frameworks/sklearn/estimator.py +1 -1
- mlrun/frameworks/sklearn/metric.py +1 -1
- mlrun/frameworks/sklearn/metrics_library.py +1 -1
- mlrun/frameworks/sklearn/mlrun_interface.py +1 -1
- mlrun/frameworks/sklearn/model_handler.py +1 -1
- mlrun/frameworks/sklearn/utils.py +1 -1
- mlrun/frameworks/tf_keras/__init__.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/__init__.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/logging_callback.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +1 -1
- mlrun/frameworks/tf_keras/mlrun_interface.py +1 -1
- mlrun/frameworks/tf_keras/model_handler.py +1 -1
- mlrun/frameworks/tf_keras/model_server.py +1 -1
- mlrun/frameworks/tf_keras/utils.py +1 -1
- mlrun/frameworks/xgboost/__init__.py +1 -1
- mlrun/frameworks/xgboost/mlrun_interface.py +1 -1
- mlrun/frameworks/xgboost/model_handler.py +1 -1
- mlrun/frameworks/xgboost/utils.py +1 -1
- mlrun/k8s_utils.py +14 -765
- mlrun/kfpops.py +14 -17
- mlrun/launcher/__init__.py +13 -0
- mlrun/launcher/base.py +406 -0
- mlrun/launcher/client.py +159 -0
- mlrun/launcher/factory.py +50 -0
- mlrun/launcher/local.py +276 -0
- mlrun/launcher/remote.py +178 -0
- mlrun/lists.py +10 -2
- mlrun/mlutils/__init__.py +1 -1
- mlrun/mlutils/data.py +1 -1
- mlrun/mlutils/models.py +1 -1
- mlrun/mlutils/plots.py +1 -1
- mlrun/model.py +252 -14
- mlrun/model_monitoring/__init__.py +41 -0
- mlrun/model_monitoring/features_drift_table.py +1 -1
- mlrun/model_monitoring/helpers.py +123 -38
- mlrun/model_monitoring/model_endpoint.py +144 -0
- mlrun/model_monitoring/model_monitoring_batch.py +310 -259
- mlrun/model_monitoring/stores/__init__.py +106 -0
- mlrun/model_monitoring/stores/kv_model_endpoint_store.py +448 -0
- mlrun/model_monitoring/stores/model_endpoint_store.py +147 -0
- mlrun/model_monitoring/stores/models/__init__.py +23 -0
- mlrun/model_monitoring/stores/models/base.py +18 -0
- mlrun/model_monitoring/stores/models/mysql.py +100 -0
- mlrun/model_monitoring/stores/models/sqlite.py +98 -0
- mlrun/model_monitoring/stores/sql_model_endpoint_store.py +370 -0
- mlrun/model_monitoring/stream_processing_fs.py +239 -271
- mlrun/package/__init__.py +163 -0
- mlrun/package/context_handler.py +325 -0
- mlrun/package/errors.py +47 -0
- mlrun/package/packager.py +298 -0
- mlrun/{runtimes/package → package/packagers}/__init__.py +3 -1
- mlrun/package/packagers/default_packager.py +422 -0
- mlrun/package/packagers/numpy_packagers.py +612 -0
- mlrun/package/packagers/pandas_packagers.py +968 -0
- mlrun/package/packagers/python_standard_library_packagers.py +616 -0
- mlrun/package/packagers_manager.py +786 -0
- mlrun/package/utils/__init__.py +53 -0
- mlrun/package/utils/_archiver.py +226 -0
- mlrun/package/utils/_formatter.py +211 -0
- mlrun/package/utils/_pickler.py +234 -0
- mlrun/package/utils/_supported_format.py +71 -0
- mlrun/package/utils/log_hint_utils.py +93 -0
- mlrun/package/utils/type_hint_utils.py +298 -0
- mlrun/platforms/__init__.py +1 -1
- mlrun/platforms/iguazio.py +34 -2
- mlrun/platforms/other.py +1 -1
- mlrun/projects/__init__.py +1 -1
- mlrun/projects/operations.py +14 -9
- mlrun/projects/pipelines.py +31 -13
- mlrun/projects/project.py +762 -238
- mlrun/render.py +49 -19
- mlrun/run.py +57 -326
- mlrun/runtimes/__init__.py +3 -9
- mlrun/runtimes/base.py +247 -784
- mlrun/runtimes/constants.py +1 -1
- mlrun/runtimes/daskjob.py +45 -41
- mlrun/runtimes/funcdoc.py +43 -7
- mlrun/runtimes/function.py +66 -656
- mlrun/runtimes/function_reference.py +1 -1
- mlrun/runtimes/generators.py +1 -1
- mlrun/runtimes/kubejob.py +99 -116
- mlrun/runtimes/local.py +59 -66
- mlrun/runtimes/mpijob/__init__.py +1 -1
- mlrun/runtimes/mpijob/abstract.py +13 -15
- mlrun/runtimes/mpijob/v1.py +3 -1
- mlrun/runtimes/mpijob/v1alpha1.py +1 -1
- mlrun/runtimes/nuclio.py +1 -1
- mlrun/runtimes/pod.py +51 -26
- mlrun/runtimes/remotesparkjob.py +3 -1
- mlrun/runtimes/serving.py +12 -4
- mlrun/runtimes/sparkjob/__init__.py +1 -2
- mlrun/runtimes/sparkjob/abstract.py +44 -31
- mlrun/runtimes/sparkjob/spark3job.py +11 -9
- mlrun/runtimes/utils.py +61 -42
- mlrun/secrets.py +16 -18
- mlrun/serving/__init__.py +3 -2
- mlrun/serving/merger.py +1 -1
- mlrun/serving/remote.py +1 -1
- mlrun/serving/routers.py +39 -42
- mlrun/serving/server.py +23 -13
- mlrun/serving/serving_wrapper.py +1 -1
- mlrun/serving/states.py +172 -39
- mlrun/serving/utils.py +1 -1
- mlrun/serving/v1_serving.py +1 -1
- mlrun/serving/v2_serving.py +29 -21
- mlrun/utils/__init__.py +1 -2
- mlrun/utils/async_http.py +8 -1
- mlrun/utils/azure_vault.py +1 -1
- mlrun/utils/clones.py +2 -2
- mlrun/utils/condition_evaluator.py +65 -0
- mlrun/utils/db.py +52 -0
- mlrun/utils/helpers.py +188 -13
- mlrun/utils/http.py +89 -54
- mlrun/utils/logger.py +48 -8
- mlrun/utils/model_monitoring.py +132 -100
- mlrun/utils/notifications/__init__.py +1 -1
- mlrun/utils/notifications/notification/__init__.py +8 -6
- mlrun/utils/notifications/notification/base.py +20 -14
- mlrun/utils/notifications/notification/console.py +7 -4
- mlrun/utils/notifications/notification/git.py +36 -19
- mlrun/utils/notifications/notification/ipython.py +10 -8
- mlrun/utils/notifications/notification/slack.py +18 -13
- mlrun/utils/notifications/notification_pusher.py +377 -56
- mlrun/utils/regex.py +6 -1
- mlrun/utils/singleton.py +1 -1
- mlrun/utils/v3io_clients.py +1 -1
- mlrun/utils/vault.py +270 -269
- mlrun/utils/version/__init__.py +1 -1
- mlrun/utils/version/version.json +2 -2
- mlrun/utils/version/version.py +1 -1
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/METADATA +16 -10
- mlrun-1.4.0.dist-info/RECORD +434 -0
- mlrun/api/api/endpoints/marketplace.py +0 -257
- mlrun/api/crud/marketplace.py +0 -221
- mlrun/api/crud/model_monitoring/model_endpoint_store.py +0 -847
- mlrun/api/db/filedb/db.py +0 -518
- mlrun/api/schemas/marketplace.py +0 -128
- mlrun/api/schemas/model_endpoints.py +0 -185
- mlrun/db/filedb.py +0 -891
- mlrun/feature_store/retrieval/online.py +0 -92
- mlrun/model_monitoring/constants.py +0 -67
- mlrun/runtimes/package/context_handler.py +0 -711
- mlrun/runtimes/sparkjob/spark2job.py +0 -59
- mlrun-1.3.3rc1.dist-info/RECORD +0 -381
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/LICENSE +0 -0
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/WHEEL +0 -0
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/entry_points.txt +0 -0
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/top_level.txt +0 -0
mlrun/runtimes/constants.py
CHANGED
mlrun/runtimes/daskjob.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2023 Iguazio
|
|
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.
|
|
@@ -23,8 +23,9 @@ from deprecated import deprecated
|
|
|
23
23
|
from kubernetes.client.rest import ApiException
|
|
24
24
|
from sqlalchemy.orm import Session
|
|
25
25
|
|
|
26
|
-
import mlrun.
|
|
26
|
+
import mlrun.common.schemas
|
|
27
27
|
import mlrun.errors
|
|
28
|
+
import mlrun.k8s_utils
|
|
28
29
|
import mlrun.utils
|
|
29
30
|
import mlrun.utils.regex
|
|
30
31
|
from mlrun.api.db.base import DBInterface
|
|
@@ -33,7 +34,6 @@ from mlrun.runtimes.base import BaseRuntimeHandler
|
|
|
33
34
|
|
|
34
35
|
from ..config import config
|
|
35
36
|
from ..execution import MLClientCtx
|
|
36
|
-
from ..k8s_utils import get_k8s_helper
|
|
37
37
|
from ..model import RunObject
|
|
38
38
|
from ..render import ipython_display
|
|
39
39
|
from ..utils import logger, normalize_name, update_in
|
|
@@ -41,7 +41,7 @@ from .base import FunctionStatus, RuntimeClassMode
|
|
|
41
41
|
from .kubejob import KubejobRuntime
|
|
42
42
|
from .local import exec_from_params, load_module
|
|
43
43
|
from .pod import KubeResourceSpec, kube_resource_spec_to_pod_spec
|
|
44
|
-
from .utils import RunError, get_func_selector, get_resource_labels, log_std
|
|
44
|
+
from .utils import RunError, get_func_selector, get_k8s, get_resource_labels, log_std
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
def get_dask_resource():
|
|
@@ -106,6 +106,7 @@ class DaskSpec(KubeResourceSpec):
|
|
|
106
106
|
tolerations=None,
|
|
107
107
|
preemption_mode=None,
|
|
108
108
|
security_context=None,
|
|
109
|
+
clone_target_dir=None,
|
|
109
110
|
):
|
|
110
111
|
|
|
111
112
|
super().__init__(
|
|
@@ -135,6 +136,7 @@ class DaskSpec(KubeResourceSpec):
|
|
|
135
136
|
tolerations=tolerations,
|
|
136
137
|
preemption_mode=preemption_mode,
|
|
137
138
|
security_context=security_context,
|
|
139
|
+
clone_target_dir=clone_target_dir,
|
|
138
140
|
)
|
|
139
141
|
self.args = args
|
|
140
142
|
|
|
@@ -201,9 +203,7 @@ class DaskCluster(KubejobRuntime):
|
|
|
201
203
|
def __init__(self, spec=None, metadata=None):
|
|
202
204
|
super().__init__(spec, metadata)
|
|
203
205
|
self._cluster = None
|
|
204
|
-
self.use_remote = not
|
|
205
|
-
silent=True
|
|
206
|
-
).is_running_inside_kubernetes_cluster()
|
|
206
|
+
self.use_remote = not mlrun.k8s_utils.is_running_inside_kubernetes_cluster()
|
|
207
207
|
self.spec.build.base_image = self.spec.build.base_image or "daskdev/dask:latest"
|
|
208
208
|
|
|
209
209
|
@property
|
|
@@ -271,11 +271,11 @@ class DaskCluster(KubejobRuntime):
|
|
|
271
271
|
)
|
|
272
272
|
if (
|
|
273
273
|
background_task.status.state
|
|
274
|
-
in mlrun.
|
|
274
|
+
in mlrun.common.schemas.BackgroundTaskState.terminal_states()
|
|
275
275
|
):
|
|
276
276
|
if (
|
|
277
277
|
background_task.status.state
|
|
278
|
-
== mlrun.
|
|
278
|
+
== mlrun.common.schemas.BackgroundTaskState.failed
|
|
279
279
|
):
|
|
280
280
|
raise mlrun.errors.MLRunRuntimeError(
|
|
281
281
|
"Failed bringing up dask cluster"
|
|
@@ -352,10 +352,6 @@ class DaskCluster(KubejobRuntime):
|
|
|
352
352
|
f"remote scheduler at {addr} not ready, will try to restart {err_to_str(exc)}"
|
|
353
353
|
)
|
|
354
354
|
|
|
355
|
-
# todo: figure out if test is needed
|
|
356
|
-
# if self._is_remote_api():
|
|
357
|
-
# raise Exception('no access to Kubernetes API')
|
|
358
|
-
|
|
359
355
|
status = self.get_status()
|
|
360
356
|
if status != "running":
|
|
361
357
|
self._start()
|
|
@@ -671,7 +667,9 @@ def get_obj_status(selector=None, namespace=None):
|
|
|
671
667
|
if selector is None:
|
|
672
668
|
selector = []
|
|
673
669
|
|
|
674
|
-
k8s
|
|
670
|
+
import mlrun.api.utils.singletons.k8s
|
|
671
|
+
|
|
672
|
+
k8s = mlrun.api.utils.singletons.k8s.get_k8s_helper()
|
|
675
673
|
namespace = namespace or config.namespace
|
|
676
674
|
selector = ",".join(["dask.org/component=scheduler"] + selector)
|
|
677
675
|
pods = k8s.list_pods(namespace, selector=selector)
|
|
@@ -730,17 +728,19 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
|
|
|
730
728
|
def _enrich_list_resources_response(
|
|
731
729
|
self,
|
|
732
730
|
response: Union[
|
|
733
|
-
mlrun.
|
|
734
|
-
mlrun.
|
|
735
|
-
mlrun.
|
|
731
|
+
mlrun.common.schemas.RuntimeResources,
|
|
732
|
+
mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
|
|
733
|
+
mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
|
|
736
734
|
],
|
|
737
735
|
namespace: str,
|
|
738
736
|
label_selector: str = None,
|
|
739
|
-
group_by: Optional[
|
|
737
|
+
group_by: Optional[
|
|
738
|
+
mlrun.common.schemas.ListRuntimeResourcesGroupByField
|
|
739
|
+
] = None,
|
|
740
740
|
) -> Union[
|
|
741
|
-
mlrun.
|
|
742
|
-
mlrun.
|
|
743
|
-
mlrun.
|
|
741
|
+
mlrun.common.schemas.RuntimeResources,
|
|
742
|
+
mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
|
|
743
|
+
mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
|
|
744
744
|
]:
|
|
745
745
|
"""
|
|
746
746
|
Handling listing service resources
|
|
@@ -748,14 +748,13 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
|
|
|
748
748
|
enrich_needed = self._validate_if_enrich_is_needed_by_group_by(group_by)
|
|
749
749
|
if not enrich_needed:
|
|
750
750
|
return response
|
|
751
|
-
|
|
752
|
-
services = k8s_helper.v1api.list_namespaced_service(
|
|
751
|
+
services = get_k8s().v1api.list_namespaced_service(
|
|
753
752
|
namespace, label_selector=label_selector
|
|
754
753
|
)
|
|
755
754
|
service_resources = []
|
|
756
755
|
for service in services.items:
|
|
757
756
|
service_resources.append(
|
|
758
|
-
mlrun.
|
|
757
|
+
mlrun.common.schemas.RuntimeResource(
|
|
759
758
|
name=service.metadata.name, labels=service.metadata.labels
|
|
760
759
|
)
|
|
761
760
|
)
|
|
@@ -766,12 +765,14 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
|
|
|
766
765
|
def _build_output_from_runtime_resources(
|
|
767
766
|
self,
|
|
768
767
|
response: Union[
|
|
769
|
-
mlrun.
|
|
770
|
-
mlrun.
|
|
771
|
-
mlrun.
|
|
768
|
+
mlrun.common.schemas.RuntimeResources,
|
|
769
|
+
mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
|
|
770
|
+
mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
|
|
772
771
|
],
|
|
773
|
-
runtime_resources_list: List[mlrun.
|
|
774
|
-
group_by: Optional[
|
|
772
|
+
runtime_resources_list: List[mlrun.common.schemas.RuntimeResources],
|
|
773
|
+
group_by: Optional[
|
|
774
|
+
mlrun.common.schemas.ListRuntimeResourcesGroupByField
|
|
775
|
+
] = None,
|
|
775
776
|
):
|
|
776
777
|
enrich_needed = self._validate_if_enrich_is_needed_by_group_by(group_by)
|
|
777
778
|
if not enrich_needed:
|
|
@@ -786,13 +787,15 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
|
|
|
786
787
|
|
|
787
788
|
def _validate_if_enrich_is_needed_by_group_by(
|
|
788
789
|
self,
|
|
789
|
-
group_by: Optional[
|
|
790
|
+
group_by: Optional[
|
|
791
|
+
mlrun.common.schemas.ListRuntimeResourcesGroupByField
|
|
792
|
+
] = None,
|
|
790
793
|
) -> bool:
|
|
791
794
|
# Dask runtime resources are per function (and not per job) therefore, when grouping by job we're simply
|
|
792
795
|
# omitting the dask runtime resources
|
|
793
|
-
if group_by == mlrun.
|
|
796
|
+
if group_by == mlrun.common.schemas.ListRuntimeResourcesGroupByField.job:
|
|
794
797
|
return False
|
|
795
|
-
elif group_by == mlrun.
|
|
798
|
+
elif group_by == mlrun.common.schemas.ListRuntimeResourcesGroupByField.project:
|
|
796
799
|
return True
|
|
797
800
|
elif group_by is not None:
|
|
798
801
|
raise NotImplementedError(
|
|
@@ -803,14 +806,16 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
|
|
|
803
806
|
def _enrich_service_resources_in_response(
|
|
804
807
|
self,
|
|
805
808
|
response: Union[
|
|
806
|
-
mlrun.
|
|
807
|
-
mlrun.
|
|
808
|
-
mlrun.
|
|
809
|
+
mlrun.common.schemas.RuntimeResources,
|
|
810
|
+
mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
|
|
811
|
+
mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
|
|
809
812
|
],
|
|
810
|
-
service_resources: List[mlrun.
|
|
811
|
-
group_by: Optional[
|
|
813
|
+
service_resources: List[mlrun.common.schemas.RuntimeResource],
|
|
814
|
+
group_by: Optional[
|
|
815
|
+
mlrun.common.schemas.ListRuntimeResourcesGroupByField
|
|
816
|
+
] = None,
|
|
812
817
|
):
|
|
813
|
-
if group_by == mlrun.
|
|
818
|
+
if group_by == mlrun.common.schemas.ListRuntimeResourcesGroupByField.project:
|
|
814
819
|
for service_resource in service_resources:
|
|
815
820
|
self._add_resource_to_grouped_by_project_resources_response(
|
|
816
821
|
response, "service_resources", service_resource
|
|
@@ -845,14 +850,13 @@ class DaskRuntimeHandler(BaseRuntimeHandler):
|
|
|
845
850
|
if dask_component == "scheduler" and cluster_name:
|
|
846
851
|
service_names.append(cluster_name)
|
|
847
852
|
|
|
848
|
-
|
|
849
|
-
services = k8s_helper.v1api.list_namespaced_service(
|
|
853
|
+
services = get_k8s().v1api.list_namespaced_service(
|
|
850
854
|
namespace, label_selector=label_selector
|
|
851
855
|
)
|
|
852
856
|
for service in services.items:
|
|
853
857
|
try:
|
|
854
858
|
if force or service.metadata.name in service_names:
|
|
855
|
-
|
|
859
|
+
get_k8s().v1api.delete_namespaced_service(
|
|
856
860
|
service.metadata.name, namespace
|
|
857
861
|
)
|
|
858
862
|
logger.info(f"Deleted service: {service.metadata.name}")
|
mlrun/runtimes/funcdoc.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2023 Iguazio
|
|
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.
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import ast
|
|
16
16
|
import inspect
|
|
17
17
|
import re
|
|
18
|
+
import sys
|
|
18
19
|
|
|
19
20
|
from mlrun.model import FunctionEntrypoint
|
|
20
21
|
|
|
@@ -49,13 +50,23 @@ def param_dict(name="", type="", doc="", default=""):
|
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
|
|
52
|
-
def func_dict(
|
|
53
|
+
def func_dict(
|
|
54
|
+
name,
|
|
55
|
+
doc,
|
|
56
|
+
params,
|
|
57
|
+
returns,
|
|
58
|
+
lineno,
|
|
59
|
+
has_varargs: bool = False,
|
|
60
|
+
has_kwargs: bool = False,
|
|
61
|
+
):
|
|
53
62
|
return {
|
|
54
63
|
"name": name,
|
|
55
64
|
"doc": doc,
|
|
56
65
|
"params": params,
|
|
57
66
|
"return": returns,
|
|
58
67
|
"lineno": lineno,
|
|
68
|
+
"has_varargs": has_varargs,
|
|
69
|
+
"has_kwargs": has_kwargs,
|
|
59
70
|
}
|
|
60
71
|
|
|
61
72
|
|
|
@@ -165,6 +176,9 @@ def ast_func_info(func: ast.FunctionDef):
|
|
|
165
176
|
doc = ast.get_docstring(func) or ""
|
|
166
177
|
rtype = getattr(func.returns, "id", "")
|
|
167
178
|
params = [ast_param_dict(p) for p in func.args.args]
|
|
179
|
+
# adds info about *args and **kwargs to the function doc
|
|
180
|
+
has_varargs = func.args.vararg is not None
|
|
181
|
+
has_kwargs = func.args.kwarg is not None
|
|
168
182
|
defaults = func.args.defaults
|
|
169
183
|
if defaults:
|
|
170
184
|
for param, default in zip(params[-len(defaults) :], defaults):
|
|
@@ -176,6 +190,8 @@ def ast_func_info(func: ast.FunctionDef):
|
|
|
176
190
|
params=params,
|
|
177
191
|
returns=param_dict(type=rtype),
|
|
178
192
|
lineno=func.lineno,
|
|
193
|
+
has_varargs=has_varargs,
|
|
194
|
+
has_kwargs=has_kwargs,
|
|
179
195
|
)
|
|
180
196
|
|
|
181
197
|
if not doc.strip():
|
|
@@ -195,16 +211,33 @@ def ast_param_dict(param: ast.arg) -> dict:
|
|
|
195
211
|
|
|
196
212
|
def ann_type(ann):
|
|
197
213
|
if hasattr(ann, "slice"):
|
|
198
|
-
|
|
214
|
+
if isinstance(ann.value, ast.Attribute):
|
|
215
|
+
# value is an attribute, e.g. b of a.b - get the full path
|
|
216
|
+
name = get_attr_path(ann.value)
|
|
217
|
+
else:
|
|
218
|
+
name = ann.value.id
|
|
199
219
|
inner = ", ".join(ann_type(e) for e in iter_elems(ann.slice))
|
|
200
220
|
return f"{name}[{inner}]"
|
|
201
221
|
|
|
202
222
|
if isinstance(ann, ast.Attribute):
|
|
223
|
+
if isinstance(ann.value, ast.Attribute):
|
|
224
|
+
# value is an attribute, e.g. b of a.b - get the full path
|
|
225
|
+
return get_attr_path(ann)
|
|
226
|
+
|
|
203
227
|
return ann.attr
|
|
204
228
|
|
|
205
229
|
return getattr(ann, "id", "")
|
|
206
230
|
|
|
207
231
|
|
|
232
|
+
def get_attr_path(ann: ast.Attribute):
|
|
233
|
+
if isinstance(ann.value, ast.Attribute):
|
|
234
|
+
# value is an attribute, e.g. b of a.b - get the full path
|
|
235
|
+
return f"{get_attr_path(ann.value)}.{ann.attr}"
|
|
236
|
+
|
|
237
|
+
# value can be a subscript or name - get its annotation type and append the attribute
|
|
238
|
+
return f"{ann_type(ann.value)}.{ann.attr}"
|
|
239
|
+
|
|
240
|
+
|
|
208
241
|
def iter_elems(ann):
|
|
209
242
|
"""
|
|
210
243
|
Gets the elements of an ast.Subscript.slice, e.g. Union[int, str] -> [int, str]
|
|
@@ -219,10 +252,13 @@ def iter_elems(ann):
|
|
|
219
252
|
return [ann.value]
|
|
220
253
|
|
|
221
254
|
# From python 3.9, slice is an expr and we should evaluate it recursively. Left this for backward compatibility.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
255
|
+
# TODO: Remove this in 1.5.0 when we drop support for python 3.7
|
|
256
|
+
if sys.version_info < (3, 9):
|
|
257
|
+
if hasattr(ann.slice, "elts"):
|
|
258
|
+
return ann.slice.elts
|
|
259
|
+
elif hasattr(ann.slice, "value"):
|
|
260
|
+
return [ann.slice.value]
|
|
261
|
+
|
|
226
262
|
return [ann]
|
|
227
263
|
|
|
228
264
|
|