sagemaker-core 1.0.47__py3-none-any.whl → 2.1.1__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.
- sagemaker/core/__init__.py +16 -0
- sagemaker/core/_studio.py +116 -0
- sagemaker/core/_version.py +11 -0
- sagemaker/core/accept_types.py +131 -0
- sagemaker/core/analytics.py +744 -0
- sagemaker/core/apiutils/__init__.py +13 -0
- sagemaker/core/apiutils/_base_types.py +228 -0
- sagemaker/core/apiutils/_boto_functions.py +130 -0
- sagemaker/core/apiutils/_utils.py +34 -0
- sagemaker/core/base_deserializers.py +35 -0
- sagemaker/core/base_serializers.py +35 -0
- sagemaker/core/clarify/__init__.py +2898 -0
- sagemaker/core/collection.py +467 -0
- sagemaker/core/common_utils.py +2281 -0
- sagemaker/core/compute_resource_requirements/__init__.py +18 -0
- sagemaker/core/compute_resource_requirements/resource_requirements.py +94 -0
- sagemaker/core/config/__init__.py +181 -0
- sagemaker/core/config/config.py +238 -0
- sagemaker/core/config/config_manager.py +595 -0
- sagemaker/core/config/config_schema.py +1220 -0
- sagemaker/core/config/config_utils.py +297 -0
- {sagemaker_core/main → sagemaker/core}/config_schema.py +410 -4
- sagemaker/core/constants.py +73 -0
- sagemaker/core/content_types.py +137 -0
- sagemaker/core/debugger/__init__.py +39 -0
- sagemaker/core/debugger/debugger.py +945 -0
- sagemaker/core/debugger/framework_profile.py +292 -0
- sagemaker/core/debugger/metrics_config.py +468 -0
- sagemaker/core/debugger/profiler.py +42 -0
- sagemaker/core/debugger/profiler_config.py +190 -0
- sagemaker/core/debugger/profiler_constants.py +40 -0
- sagemaker/core/debugger/utils.py +148 -0
- sagemaker/core/deprecations.py +254 -0
- sagemaker/core/deserializers/__init__.py +10 -0
- sagemaker/core/deserializers/base.py +424 -0
- sagemaker/core/deserializers/implementations.py +157 -0
- sagemaker/core/drift_check_baselines.py +106 -0
- sagemaker/core/enums.py +51 -0
- sagemaker/core/environment_variables.py +101 -0
- sagemaker/core/exceptions.py +108 -0
- sagemaker/core/experiments/__init__.py +53 -0
- sagemaker/core/experiments/_api_types.py +251 -0
- sagemaker/core/experiments/_environment.py +124 -0
- sagemaker/core/experiments/_helper.py +294 -0
- sagemaker/core/experiments/_metrics.py +333 -0
- sagemaker/core/experiments/_run_context.py +58 -0
- sagemaker/core/experiments/_utils.py +216 -0
- sagemaker/core/experiments/experiment.py +244 -0
- sagemaker/core/experiments/run.py +970 -0
- sagemaker/core/experiments/trial.py +296 -0
- sagemaker/core/experiments/trial_component.py +387 -0
- sagemaker/core/explainer/__init__.py +24 -0
- sagemaker/core/explainer/clarify_explainer_config.py +298 -0
- sagemaker/core/explainer/explainer_config.py +44 -0
- sagemaker/core/fw_utils.py +1176 -0
- sagemaker/core/git_utils.py +349 -0
- sagemaker/core/helper/pipeline_variable.py +82 -0
- sagemaker/core/helper/session_helper.py +2965 -0
- sagemaker/core/huggingface/__init__.py +29 -0
- sagemaker/core/huggingface/llm_utils.py +150 -0
- sagemaker/core/huggingface/processing.py +139 -0
- sagemaker/core/huggingface/training_compiler/config.py +167 -0
- sagemaker/core/hyperparameters.py +172 -0
- sagemaker/core/image_retriever/__init__.py +3 -0
- sagemaker/core/image_retriever/image_retriever.py +640 -0
- sagemaker/core/image_retriever/image_retriever_utils.py +511 -0
- sagemaker/core/image_retriever/test.py +7 -0
- sagemaker/core/image_uri_config/__init__.py +13 -0
- sagemaker/core/image_uri_config/autogluon.json +1335 -0
- sagemaker/core/image_uri_config/blazingtext.json +50 -0
- sagemaker/core/image_uri_config/chainer.json +104 -0
- sagemaker/core/image_uri_config/clarify.json +39 -0
- sagemaker/core/image_uri_config/coach-mxnet.json +70 -0
- sagemaker/core/image_uri_config/coach-tensorflow.json +186 -0
- sagemaker/core/image_uri_config/data-wrangler.json +91 -0
- sagemaker/core/image_uri_config/debugger.json +34 -0
- sagemaker/core/image_uri_config/detailed-profiler.json +18 -0
- sagemaker/core/image_uri_config/djl-deepspeed.json +385 -0
- sagemaker/core/image_uri_config/djl-fastertransformer.json +167 -0
- sagemaker/core/image_uri_config/djl-lmi.json +136 -0
- sagemaker/core/image_uri_config/djl-neuronx.json +258 -0
- sagemaker/core/image_uri_config/djl-tensorrtllm.json +262 -0
- sagemaker/core/image_uri_config/factorization-machines.json +50 -0
- sagemaker/core/image_uri_config/forecasting-deepar.json +50 -0
- sagemaker/core/image_uri_config/huggingface-llm-neuronx.json +660 -0
- sagemaker/core/image_uri_config/huggingface-llm.json +1158 -0
- sagemaker/core/image_uri_config/huggingface-neuron.json +52 -0
- sagemaker/core/image_uri_config/huggingface-neuronx.json +510 -0
- sagemaker/core/image_uri_config/huggingface-tei-cpu.json +298 -0
- sagemaker/core/image_uri_config/huggingface-tei.json +298 -0
- sagemaker/core/image_uri_config/huggingface-training-compiler.json +195 -0
- sagemaker/core/image_uri_config/huggingface.json +2138 -0
- sagemaker/core/image_uri_config/hyperpod-recipes-neuron.json +52 -0
- sagemaker/core/image_uri_config/image-classification-neo.json +43 -0
- sagemaker/core/image_uri_config/image-classification.json +50 -0
- sagemaker/core/image_uri_config/inferentia-mxnet.json +88 -0
- sagemaker/core/image_uri_config/inferentia-pytorch.json +127 -0
- sagemaker/core/image_uri_config/inferentia-tensorflow.json +88 -0
- sagemaker/core/image_uri_config/instance_gpu_info.json +782 -0
- sagemaker/core/image_uri_config/ipinsights.json +50 -0
- sagemaker/core/image_uri_config/kmeans.json +50 -0
- sagemaker/core/image_uri_config/knn.json +50 -0
- sagemaker/core/image_uri_config/lda.json +26 -0
- sagemaker/core/image_uri_config/linear-learner.json +50 -0
- sagemaker/core/image_uri_config/model-monitor.json +42 -0
- sagemaker/core/image_uri_config/mxnet.json +1154 -0
- sagemaker/core/image_uri_config/neo-mxnet.json +64 -0
- sagemaker/core/image_uri_config/neo-pytorch.json +341 -0
- sagemaker/core/image_uri_config/neo-tensorflow.json +109 -0
- sagemaker/core/image_uri_config/ntm.json +50 -0
- sagemaker/core/image_uri_config/object-detection.json +50 -0
- sagemaker/core/image_uri_config/object2vec.json +50 -0
- sagemaker/core/image_uri_config/pca.json +50 -0
- sagemaker/core/image_uri_config/pytorch-neuron.json +43 -0
- sagemaker/core/image_uri_config/pytorch-smp.json +218 -0
- sagemaker/core/image_uri_config/pytorch-training-compiler.json +80 -0
- sagemaker/core/image_uri_config/pytorch.json +3101 -0
- sagemaker/core/image_uri_config/randomcutforest.json +50 -0
- sagemaker/core/image_uri_config/ray-pytorch.json +46 -0
- sagemaker/core/image_uri_config/ray-tensorflow.json +194 -0
- sagemaker/core/image_uri_config/sagemaker-base-python.json +46 -0
- sagemaker/core/image_uri_config/sagemaker-distribution.json +37 -0
- sagemaker/core/image_uri_config/sagemaker-geospatial.json +13 -0
- sagemaker/core/image_uri_config/sagemaker-tritonserver.json +212 -0
- sagemaker/core/image_uri_config/semantic-segmentation.json +50 -0
- sagemaker/core/image_uri_config/seq2seq.json +50 -0
- sagemaker/core/image_uri_config/sklearn.json +446 -0
- sagemaker/core/image_uri_config/spark.json +280 -0
- sagemaker/core/image_uri_config/sparkml-serving.json +97 -0
- sagemaker/core/image_uri_config/stabilityai.json +53 -0
- sagemaker/core/image_uri_config/tensorflow.json +5086 -0
- sagemaker/core/image_uri_config/vw.json +25 -0
- sagemaker/core/image_uri_config/xgboost-neo.json +43 -0
- sagemaker/core/image_uri_config/xgboost.json +888 -0
- sagemaker/core/image_uris.py +810 -0
- sagemaker/core/inference_config.py +144 -0
- sagemaker/core/inference_recommender/__init__.py +18 -0
- sagemaker/core/inference_recommender/inference_recommender_mixin.py +622 -0
- sagemaker/core/inputs.py +366 -0
- sagemaker/core/instance_group.py +61 -0
- sagemaker/core/instance_types.py +164 -0
- sagemaker/core/instance_types_gpu_info.py +43 -0
- sagemaker/core/interactive_apps/__init__.py +41 -0
- sagemaker/core/interactive_apps/base_interactive_app.py +204 -0
- sagemaker/core/interactive_apps/detail_profiler_app.py +139 -0
- sagemaker/core/interactive_apps/tensorboard.py +149 -0
- sagemaker/core/iterators.py +186 -0
- sagemaker/core/job.py +380 -0
- sagemaker/core/jumpstart/__init__.py +156 -0
- sagemaker/core/jumpstart/accessors.py +390 -0
- sagemaker/core/jumpstart/artifacts/__init__.py +69 -0
- sagemaker/core/jumpstart/artifacts/environment_variables.py +252 -0
- sagemaker/core/jumpstart/artifacts/hyperparameters.py +120 -0
- sagemaker/core/jumpstart/artifacts/image_uris.py +139 -0
- sagemaker/core/jumpstart/artifacts/incremental_training.py +87 -0
- sagemaker/core/jumpstart/artifacts/instance_types.py +223 -0
- sagemaker/core/jumpstart/artifacts/kwargs.py +289 -0
- sagemaker/core/jumpstart/artifacts/metric_definitions.py +117 -0
- sagemaker/core/jumpstart/artifacts/model_packages.py +202 -0
- sagemaker/core/jumpstart/artifacts/model_uris.py +252 -0
- sagemaker/core/jumpstart/artifacts/payloads.py +96 -0
- sagemaker/core/jumpstart/artifacts/predictors.py +540 -0
- sagemaker/core/jumpstart/artifacts/resource_names.py +86 -0
- sagemaker/core/jumpstart/artifacts/resource_requirements.py +162 -0
- sagemaker/core/jumpstart/artifacts/script_uris.py +172 -0
- sagemaker/core/jumpstart/cache.py +663 -0
- sagemaker/core/jumpstart/configs.py +50 -0
- sagemaker/core/jumpstart/constants.py +198 -0
- sagemaker/core/jumpstart/deserializers.py +81 -0
- sagemaker/core/jumpstart/document.py +76 -0
- sagemaker/core/jumpstart/enums.py +168 -0
- sagemaker/core/jumpstart/exceptions.py +236 -0
- sagemaker/core/jumpstart/factory/utils.py +833 -0
- sagemaker/core/jumpstart/filters.py +597 -0
- sagemaker/core/jumpstart/hub/__init__.py +0 -0
- sagemaker/core/jumpstart/hub/constants.py +16 -0
- sagemaker/core/jumpstart/hub/hub.py +291 -0
- sagemaker/core/jumpstart/hub/interfaces.py +936 -0
- sagemaker/core/jumpstart/hub/parser_utils.py +70 -0
- sagemaker/core/jumpstart/hub/parsers.py +288 -0
- sagemaker/core/jumpstart/hub/types.py +35 -0
- sagemaker/core/jumpstart/hub/utils.py +260 -0
- sagemaker/core/jumpstart/models.py +499 -0
- sagemaker/core/jumpstart/notebook_utils.py +575 -0
- sagemaker/core/jumpstart/parameters.py +20 -0
- sagemaker/core/jumpstart/payload_utils.py +239 -0
- sagemaker/core/jumpstart/region_config.json +163 -0
- sagemaker/core/jumpstart/search.py +171 -0
- sagemaker/core/jumpstart/serializers.py +81 -0
- sagemaker/core/jumpstart/session_utils.py +234 -0
- sagemaker/core/jumpstart/types.py +3044 -0
- sagemaker/core/jumpstart/utils.py +1731 -0
- sagemaker/core/jumpstart/validators.py +257 -0
- sagemaker/core/lambda_helper.py +312 -0
- sagemaker/core/lineage/__init__.py +42 -0
- sagemaker/core/lineage/_api_types.py +239 -0
- sagemaker/core/lineage/_utils.py +49 -0
- sagemaker/core/lineage/action.py +345 -0
- sagemaker/core/lineage/artifact.py +646 -0
- sagemaker/core/lineage/association.py +190 -0
- sagemaker/core/lineage/context.py +505 -0
- sagemaker/core/lineage/lineage_trial_component.py +191 -0
- sagemaker/core/lineage/query.py +732 -0
- sagemaker/core/lineage/visualizer.py +346 -0
- sagemaker/core/local/__init__.py +18 -0
- sagemaker/core/local/data.py +413 -0
- sagemaker/core/local/entities.py +678 -0
- sagemaker/core/local/exceptions.py +17 -0
- sagemaker/core/local/image.py +1243 -0
- sagemaker/core/local/local_session.py +739 -0
- sagemaker/core/local/utils.py +245 -0
- sagemaker/core/logs.py +181 -0
- sagemaker/core/metadata_properties.py +56 -0
- sagemaker/core/metric_definitions.py +91 -0
- sagemaker/core/mlflow/__init__.py +38 -0
- sagemaker/core/mlflow/forward_sagemaker_metrics.py +44 -0
- sagemaker/core/model_card/__init__.py +26 -0
- sagemaker/core/model_life_cycle.py +51 -0
- sagemaker/core/model_metrics.py +160 -0
- sagemaker/core/model_monitor/__init__.py +66 -0
- sagemaker/core/model_monitor/clarify_model_monitoring.py +1495 -0
- sagemaker/core/model_monitor/cron_expression_generator.py +82 -0
- sagemaker/core/model_monitor/data_capture_config.py +115 -0
- sagemaker/core/model_monitor/data_quality_monitoring_config.py +66 -0
- sagemaker/core/model_monitor/dataset_format.py +102 -0
- sagemaker/core/model_monitor/model_monitoring.py +4266 -0
- sagemaker/core/model_monitor/monitoring_alert.py +76 -0
- sagemaker/core/model_monitor/monitoring_files.py +506 -0
- sagemaker/core/model_monitor/utils.py +793 -0
- sagemaker/core/model_registry.py +480 -0
- sagemaker/core/model_uris.py +97 -0
- sagemaker/core/modules/__init__.py +19 -0
- sagemaker/core/modules/configs.py +226 -0
- sagemaker/core/modules/constants.py +37 -0
- sagemaker/core/modules/distributed.py +182 -0
- sagemaker/core/modules/local_core/__init__.py +0 -0
- sagemaker/core/modules/local_core/local_container.py +605 -0
- sagemaker/core/modules/templates.py +83 -0
- sagemaker/core/modules/train/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/common/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/common/utils.py +213 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/basic_script_driver.py +81 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_driver.py +123 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_utils.py +302 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/torchrun_driver.py +129 -0
- sagemaker/core/modules/train/container_drivers/scripts/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/scripts/environment.py +305 -0
- sagemaker/core/modules/train/sm_recipes/__init__.py +0 -0
- sagemaker/core/modules/train/sm_recipes/utils.py +330 -0
- sagemaker/core/modules/types.py +19 -0
- sagemaker/core/modules/utils.py +194 -0
- sagemaker/core/network.py +185 -0
- sagemaker/core/parameter.py +173 -0
- sagemaker/core/payloads.py +185 -0
- sagemaker/core/processing.py +1597 -0
- sagemaker/core/remote_function/__init__.py +19 -0
- sagemaker/core/remote_function/checkpoint_location.py +47 -0
- sagemaker/core/remote_function/client.py +1285 -0
- sagemaker/core/remote_function/core/__init__.py +0 -0
- sagemaker/core/remote_function/core/_custom_dispatch_table.py +72 -0
- sagemaker/core/remote_function/core/pipeline_variables.py +353 -0
- sagemaker/core/remote_function/core/serialization.py +422 -0
- sagemaker/core/remote_function/core/stored_function.py +226 -0
- sagemaker/core/remote_function/custom_file_filter.py +128 -0
- sagemaker/core/remote_function/errors.py +104 -0
- sagemaker/core/remote_function/invoke_function.py +172 -0
- sagemaker/core/remote_function/job.py +2140 -0
- sagemaker/core/remote_function/logging_config.py +38 -0
- sagemaker/core/remote_function/runtime_environment/__init__.py +14 -0
- sagemaker/core/remote_function/runtime_environment/bootstrap_runtime_environment.py +605 -0
- sagemaker/core/remote_function/runtime_environment/mpi_utils_remote.py +252 -0
- sagemaker/core/remote_function/runtime_environment/runtime_environment_manager.py +554 -0
- sagemaker/core/remote_function/runtime_environment/spark_app.py +18 -0
- sagemaker/core/remote_function/spark_config.py +149 -0
- sagemaker/core/resource_requirements.py +168 -0
- {sagemaker_core/main → sagemaker/core}/resources.py +20121 -11728
- sagemaker/core/s3/__init__.py +41 -0
- sagemaker/core/s3/client.py +367 -0
- sagemaker/core/s3/utils.py +175 -0
- sagemaker/core/script_uris.py +93 -0
- sagemaker/core/serializers/__init__.py +11 -0
- sagemaker/core/serializers/base.py +510 -0
- sagemaker/core/serializers/implementations.py +159 -0
- sagemaker/core/serializers/utils.py +223 -0
- sagemaker/core/serverless_inference_config.py +63 -0
- sagemaker/core/session_settings.py +55 -0
- sagemaker/core/shapes/__init__.py +3 -0
- sagemaker/core/shapes/model_card_shapes.py +159 -0
- {sagemaker_core/main → sagemaker/core/shapes}/shapes.py +6384 -1865
- sagemaker/core/spark/__init__.py +16 -0
- sagemaker/core/spark/defaults.py +16 -0
- sagemaker/core/spark/processing.py +1380 -0
- sagemaker/core/telemetry/__init__.py +23 -0
- sagemaker/core/telemetry/constants.py +84 -0
- sagemaker/core/telemetry/telemetry_logging.py +284 -0
- sagemaker/core/tools/__init__.py +1 -0
- {sagemaker_core → sagemaker/core}/tools/codegen.py +4 -4
- {sagemaker_core → sagemaker/core}/tools/constants.py +23 -15
- {sagemaker_core → sagemaker/core}/tools/data_extractor.py +1 -1
- {sagemaker_core → sagemaker/core}/tools/method.py +1 -1
- sagemaker/core/tools/model_card/generate_model_card_from_schema.py +562 -0
- {sagemaker_core → sagemaker/core}/tools/resources_codegen.py +165 -98
- {sagemaker_core → sagemaker/core}/tools/resources_extractor.py +5 -13
- {sagemaker_core → sagemaker/core}/tools/shapes_codegen.py +16 -17
- {sagemaker_core → sagemaker/core}/tools/shapes_extractor.py +29 -67
- {sagemaker_core → sagemaker/core}/tools/templates.py +39 -17
- sagemaker/core/training/__init__.py +14 -0
- sagemaker/core/training/configs.py +333 -0
- sagemaker/core/training/constants.py +37 -0
- sagemaker/core/training/utils.py +77 -0
- sagemaker/core/training_compiler/__init__.py +16 -0
- sagemaker/core/training_compiler/config.py +197 -0
- sagemaker/core/training_compiler_config.py +197 -0
- sagemaker/core/transformer.py +793 -0
- sagemaker/core/user_agent.py +76 -0
- sagemaker/core/utilities/__init__.py +24 -0
- sagemaker/core/utilities/cache.py +169 -0
- sagemaker/core/utilities/search_expression.py +133 -0
- sagemaker/core/utils/__init__.py +48 -0
- sagemaker/core/utils/code_injection/__init__.py +0 -0
- {sagemaker_core/main → sagemaker/core/utils}/code_injection/codec.py +2 -2
- {sagemaker_core/main → sagemaker/core/utils}/code_injection/shape_dag.py +6479 -136
- {sagemaker_core/main → sagemaker/core/utils}/exceptions.py +8 -8
- sagemaker_core/main/default_configs_helper.py → sagemaker/core/utils/intelligent_defaults_helper.py +5 -6
- {sagemaker_core/main → sagemaker/core/utils}/logs.py +1 -2
- {sagemaker_core/main → sagemaker/core/utils}/utils.py +25 -20
- sagemaker/core/workflow/__init__.py +152 -0
- sagemaker/core/workflow/conditions.py +313 -0
- sagemaker/core/workflow/entities.py +58 -0
- sagemaker/core/workflow/execution_variables.py +89 -0
- sagemaker/core/workflow/functions.py +193 -0
- sagemaker/core/workflow/parameters.py +222 -0
- sagemaker/core/workflow/pipeline_context.py +394 -0
- sagemaker/core/workflow/pipeline_definition_config.py +31 -0
- sagemaker/core/workflow/properties.py +285 -0
- sagemaker/core/workflow/step_outputs.py +65 -0
- sagemaker/core/workflow/utilities.py +507 -0
- sagemaker/lineage/__init__.py +33 -0
- sagemaker/lineage/action.py +28 -0
- sagemaker/lineage/artifact.py +28 -0
- sagemaker/lineage/context.py +28 -0
- sagemaker/lineage/lineage_trial_component.py +28 -0
- {sagemaker_core-1.0.47.dist-info → sagemaker_core-2.1.1.dist-info}/METADATA +28 -9
- sagemaker_core-2.1.1.dist-info/RECORD +355 -0
- sagemaker_core-2.1.1.dist-info/top_level.txt +1 -0
- sagemaker_core/__init__.py +0 -4
- sagemaker_core/_version.py +0 -3
- sagemaker_core/helper/session_helper.py +0 -769
- sagemaker_core/resources/__init__.py +0 -1
- sagemaker_core/shapes/__init__.py +0 -1
- sagemaker_core/tools/__init__.py +0 -1
- sagemaker_core-1.0.47.dist-info/RECORD +0 -35
- sagemaker_core-1.0.47.dist-info/top_level.txt +0 -1
- {sagemaker_core → sagemaker/core}/helper/__init__.py +0 -0
- {sagemaker_core/main → sagemaker/core/huggingface/training_compiler}/__init__.py +0 -0
- {sagemaker_core/main/code_injection → sagemaker/core/jumpstart/factory}/__init__.py +0 -0
- {sagemaker_core/main → sagemaker/core/utils}/code_injection/base.py +0 -0
- {sagemaker_core/main → sagemaker/core/utils}/code_injection/constants.py +0 -0
- {sagemaker_core/main → sagemaker/core/utils}/user_agent.py +0 -0
- {sagemaker_core-1.0.47.dist-info → sagemaker_core-2.1.1.dist-info}/WHEEL +0 -0
- {sagemaker_core-1.0.47.dist-info → sagemaker_core-2.1.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
"""This module contains code related to the MonitoringAlerts."""
|
|
14
|
+
from __future__ import print_function, absolute_import
|
|
15
|
+
|
|
16
|
+
import attr
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@attr.define
|
|
20
|
+
class ModelDashboardIndicatorAction(object):
|
|
21
|
+
"""An abstraction represents the monitoring dashboard indicator action summary.
|
|
22
|
+
|
|
23
|
+
Attributes:
|
|
24
|
+
enabled (bool): A boolean flag indicating if the model dashboard indicator is enabled or not.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
enabled: bool = attr.ib()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@attr.define
|
|
31
|
+
class MonitoringAlertActions(object):
|
|
32
|
+
"""An abstraction represents the monitoring action.
|
|
33
|
+
|
|
34
|
+
Attributes:
|
|
35
|
+
model_dashboard_indicator (ModelDashboardIndicatorAction):
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
model_dashboard_indicator: ModelDashboardIndicatorAction = attr.ib()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@attr.define
|
|
42
|
+
class MonitoringAlertSummary(object):
|
|
43
|
+
"""An abstraction represents the monitoring alert summary.
|
|
44
|
+
|
|
45
|
+
Attributes:
|
|
46
|
+
alert_name (str): Monitoring alert name.
|
|
47
|
+
creation_time (str): Creation time of the alert.
|
|
48
|
+
last_modified_time (str): Last modified time of the alert.
|
|
49
|
+
alert_status (str): Alert status, either InAlert or Ok.
|
|
50
|
+
data_points_to_alert (int): Data points to evaluate to determine the alert status.
|
|
51
|
+
evaluation_period (int): Period to evaluate the alert status.
|
|
52
|
+
actions (MonitoringAlertActions): A list of actions to take when monitoring is InAlert
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
alert_name: str = attr.ib()
|
|
56
|
+
creation_time: str = attr.ib()
|
|
57
|
+
last_modified_time: str = attr.ib()
|
|
58
|
+
alert_status: str = attr.ib()
|
|
59
|
+
data_points_to_alert: int = attr.ib()
|
|
60
|
+
evaluation_period: int = attr.ib()
|
|
61
|
+
actions: MonitoringAlertActions = attr.ib()
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@attr.define
|
|
65
|
+
class MonitoringAlertHistorySummary(object):
|
|
66
|
+
"""An abstraction represents the monitoring alert history summary.
|
|
67
|
+
|
|
68
|
+
Attributes:
|
|
69
|
+
alert_name (str): Monitoring alert name.
|
|
70
|
+
creation_time (str): Creation time of the alert.
|
|
71
|
+
alert_status (str): Alert status, either InAlert or Ok.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
alert_name: str = attr.ib()
|
|
75
|
+
creation_time: str = attr.ib()
|
|
76
|
+
alert_status: str = attr.ib()
|
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
"""This module contains code related to the ModelMonitoringFile class.
|
|
14
|
+
|
|
15
|
+
Codes are used for managing the constraints and statistics JSON files generated and consumed by
|
|
16
|
+
Amazon SageMaker Model Monitoring Schedules.
|
|
17
|
+
"""
|
|
18
|
+
from __future__ import print_function, absolute_import
|
|
19
|
+
|
|
20
|
+
import json
|
|
21
|
+
import logging
|
|
22
|
+
import os
|
|
23
|
+
import uuid
|
|
24
|
+
|
|
25
|
+
from botocore.exceptions import ClientError
|
|
26
|
+
|
|
27
|
+
from sagemaker.core import s3
|
|
28
|
+
from sagemaker.core.helper.session_helper import Session
|
|
29
|
+
|
|
30
|
+
NO_SUCH_KEY_CODE = "NoSuchKey"
|
|
31
|
+
|
|
32
|
+
logger = logging.getLogger(__name__)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ModelMonitoringFile(object):
|
|
36
|
+
"""Represents a file with a body and an S3 uri."""
|
|
37
|
+
|
|
38
|
+
def __init__(self, body_dict, file_s3_uri, kms_key, sagemaker_session):
|
|
39
|
+
"""Initializes a file with a body and an S3 uri.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
body_dict (str): The body of the JSON file.
|
|
43
|
+
file_s3_uri (str): The uri of the JSON file.
|
|
44
|
+
kms_key (str): The kms key to be used to decrypt the file in S3.
|
|
45
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
46
|
+
object, used for SageMaker interactions (default: None). If not
|
|
47
|
+
specified, one is created using the default AWS configuration
|
|
48
|
+
chain.
|
|
49
|
+
|
|
50
|
+
"""
|
|
51
|
+
self.body_dict = body_dict
|
|
52
|
+
self.file_s3_uri = file_s3_uri
|
|
53
|
+
self.kms_key = kms_key
|
|
54
|
+
self.session = sagemaker_session
|
|
55
|
+
|
|
56
|
+
def save(self, new_save_location_s3_uri=None):
|
|
57
|
+
"""Save the current instance's body to s3 using the instance's s3 path.
|
|
58
|
+
|
|
59
|
+
The S3 path can be overridden by providing one. This also overrides the
|
|
60
|
+
default save location for this object.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
new_save_location_s3_uri (str): Optional. The S3 path to save the file to. If not
|
|
64
|
+
provided, the file is saved in place in S3. If provided, the file's S3 path is
|
|
65
|
+
permanently updated.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
str: The s3 location to which the file was saved.
|
|
69
|
+
|
|
70
|
+
"""
|
|
71
|
+
if new_save_location_s3_uri is not None:
|
|
72
|
+
self.file_s3_uri = new_save_location_s3_uri
|
|
73
|
+
|
|
74
|
+
return s3.S3Uploader.upload_string_as_file_body(
|
|
75
|
+
body=json.dumps(self.body_dict),
|
|
76
|
+
desired_s3_uri=self.file_s3_uri,
|
|
77
|
+
kms_key=self.kms_key,
|
|
78
|
+
sagemaker_session=self.session,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class Statistics(ModelMonitoringFile):
|
|
83
|
+
"""Represents the statistics JSON file used in Amazon SageMaker Model Monitoring."""
|
|
84
|
+
|
|
85
|
+
def __init__(self, body_dict, statistics_file_s3_uri, kms_key=None, sagemaker_session=None):
|
|
86
|
+
"""Initializes the Statistics object used in Amazon SageMaker Model Monitoring.
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
body_dict (str): The body of the statistics JSON file.
|
|
90
|
+
statistics_file_s3_uri (str): The uri of the statistics JSON file.
|
|
91
|
+
kms_key (str): The kms key to be used to decrypt the file in S3.
|
|
92
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
93
|
+
object, used for SageMaker interactions (default: None). If not
|
|
94
|
+
specified, one is created using the default AWS configuration
|
|
95
|
+
chain.
|
|
96
|
+
|
|
97
|
+
"""
|
|
98
|
+
super(Statistics, self).__init__(
|
|
99
|
+
body_dict=body_dict,
|
|
100
|
+
file_s3_uri=statistics_file_s3_uri,
|
|
101
|
+
kms_key=kms_key,
|
|
102
|
+
sagemaker_session=sagemaker_session,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
@classmethod
|
|
106
|
+
def from_s3_uri(cls, statistics_file_s3_uri, kms_key=None, sagemaker_session=None):
|
|
107
|
+
"""Generates a Statistics object from an s3 uri.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
statistics_file_s3_uri (str): The uri of the statistics JSON file.
|
|
111
|
+
kms_key (str): The kms key to be used to decrypt the file in S3.
|
|
112
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
113
|
+
object, used for SageMaker interactions (default: None). If not
|
|
114
|
+
specified, one is created using the default AWS configuration
|
|
115
|
+
chain.
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
sagemaker.model_monitor.Statistics: The instance of Statistics generated from
|
|
119
|
+
the s3 uri.
|
|
120
|
+
|
|
121
|
+
"""
|
|
122
|
+
try:
|
|
123
|
+
body_dict = json.loads(
|
|
124
|
+
s3.S3Downloader.read_file(
|
|
125
|
+
s3_uri=statistics_file_s3_uri, sagemaker_session=sagemaker_session
|
|
126
|
+
)
|
|
127
|
+
)
|
|
128
|
+
except ClientError as error:
|
|
129
|
+
logger.warning(
|
|
130
|
+
"\nCould not retrieve statistics file at location '%s'. "
|
|
131
|
+
"To manually retrieve Statistics object from a given uri, "
|
|
132
|
+
"use 'my_model_monitor.statistics(my_s3_uri)' or "
|
|
133
|
+
"'Statistics.from_s3_uri(my_s3_uri)'",
|
|
134
|
+
statistics_file_s3_uri,
|
|
135
|
+
)
|
|
136
|
+
raise error
|
|
137
|
+
|
|
138
|
+
return cls(
|
|
139
|
+
body_dict=body_dict, statistics_file_s3_uri=statistics_file_s3_uri, kms_key=kms_key
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
@classmethod
|
|
143
|
+
def from_string(
|
|
144
|
+
cls, statistics_file_string, kms_key=None, file_name=None, sagemaker_session=None
|
|
145
|
+
):
|
|
146
|
+
"""Generates a Statistics object from an s3 uri.
|
|
147
|
+
|
|
148
|
+
Args:
|
|
149
|
+
statistics_file_string (str): The uri of the statistics JSON file.
|
|
150
|
+
kms_key (str): The kms key to be used to encrypt the file in S3.
|
|
151
|
+
file_name (str): The file name to use when uploading to S3.
|
|
152
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
153
|
+
object, used for SageMaker interactions (default: None). If not
|
|
154
|
+
specified, one is created using the default AWS configuration
|
|
155
|
+
chain.
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
sagemaker.model_monitor.Statistics: The instance of Statistics generated from
|
|
159
|
+
the s3 uri.
|
|
160
|
+
|
|
161
|
+
"""
|
|
162
|
+
sagemaker_session = sagemaker_session or Session()
|
|
163
|
+
file_name = file_name or "statistics.json"
|
|
164
|
+
desired_s3_uri = s3.s3_path_join(
|
|
165
|
+
"s3://",
|
|
166
|
+
sagemaker_session.default_bucket(),
|
|
167
|
+
sagemaker_session.default_bucket_prefix,
|
|
168
|
+
"monitoring",
|
|
169
|
+
str(uuid.uuid4()),
|
|
170
|
+
file_name,
|
|
171
|
+
)
|
|
172
|
+
s3_uri = s3.S3Uploader.upload_string_as_file_body(
|
|
173
|
+
body=statistics_file_string,
|
|
174
|
+
desired_s3_uri=desired_s3_uri,
|
|
175
|
+
kms_key=kms_key,
|
|
176
|
+
sagemaker_session=sagemaker_session,
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
return Statistics.from_s3_uri(
|
|
180
|
+
statistics_file_s3_uri=s3_uri, kms_key=kms_key, sagemaker_session=sagemaker_session
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
@classmethod
|
|
184
|
+
def from_file_path(cls, statistics_file_path, kms_key=None, sagemaker_session=None):
|
|
185
|
+
"""Initializes a Statistics object from a file path.
|
|
186
|
+
|
|
187
|
+
Args:
|
|
188
|
+
statistics_file_path (str): The path to the statistics file.
|
|
189
|
+
kms_key (str): The kms_key to use when encrypting the file in S3.
|
|
190
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
191
|
+
object, used for SageMaker interactions (default: None). If not
|
|
192
|
+
specified, one is created using the default AWS configuration
|
|
193
|
+
chain.
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
sagemaker.model_monitor.Statistics: The instance of Statistics generated from
|
|
197
|
+
the local file path.
|
|
198
|
+
|
|
199
|
+
"""
|
|
200
|
+
file_name = os.path.basename(statistics_file_path)
|
|
201
|
+
|
|
202
|
+
with open(statistics_file_path, "r") as f:
|
|
203
|
+
file_body = f.read()
|
|
204
|
+
|
|
205
|
+
return Statistics.from_string(
|
|
206
|
+
statistics_file_string=file_body,
|
|
207
|
+
file_name=file_name,
|
|
208
|
+
kms_key=kms_key,
|
|
209
|
+
sagemaker_session=sagemaker_session,
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
class Constraints(ModelMonitoringFile):
|
|
214
|
+
"""Represents the constraints JSON file used in Amazon SageMaker Model Monitoring."""
|
|
215
|
+
|
|
216
|
+
def __init__(self, body_dict, constraints_file_s3_uri, kms_key=None, sagemaker_session=None):
|
|
217
|
+
"""Initializes the Constraints object used in Amazon SageMaker Model Monitoring.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
body_dict (str): The body of the constraints JSON file.
|
|
221
|
+
constraints_file_s3_uri (str): The uri of the constraints JSON file.
|
|
222
|
+
kms_key (str): The kms key to be used to decrypt the file in S3.
|
|
223
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
224
|
+
object, used for SageMaker interactions (default: None). If not
|
|
225
|
+
specified, one is created using the default AWS configuration
|
|
226
|
+
chain.
|
|
227
|
+
|
|
228
|
+
"""
|
|
229
|
+
super(Constraints, self).__init__(
|
|
230
|
+
body_dict=body_dict,
|
|
231
|
+
file_s3_uri=constraints_file_s3_uri,
|
|
232
|
+
kms_key=kms_key,
|
|
233
|
+
sagemaker_session=sagemaker_session,
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
@classmethod
|
|
237
|
+
def from_s3_uri(cls, constraints_file_s3_uri, kms_key=None, sagemaker_session=None):
|
|
238
|
+
"""Generates a Constraints object from an s3 uri.
|
|
239
|
+
|
|
240
|
+
Args:
|
|
241
|
+
constraints_file_s3_uri (str): The uri of the constraints JSON file.
|
|
242
|
+
kms_key (str): The kms key to be used to decrypt the file in S3.
|
|
243
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
244
|
+
object, used for SageMaker interactions (default: None). If not
|
|
245
|
+
specified, one is created using the default AWS configuration
|
|
246
|
+
chain.
|
|
247
|
+
|
|
248
|
+
Returns:
|
|
249
|
+
sagemaker.model_monitor.Constraints: The instance of Constraints generated from
|
|
250
|
+
the s3 uri.
|
|
251
|
+
|
|
252
|
+
"""
|
|
253
|
+
try:
|
|
254
|
+
body_dict = json.loads(
|
|
255
|
+
s3.S3Downloader.read_file(
|
|
256
|
+
s3_uri=constraints_file_s3_uri, sagemaker_session=sagemaker_session
|
|
257
|
+
)
|
|
258
|
+
)
|
|
259
|
+
except ClientError as error:
|
|
260
|
+
logger.warning(
|
|
261
|
+
"\nCould not retrieve constraints file at location '%s'. "
|
|
262
|
+
"To manually retrieve Constraints object from a given uri, "
|
|
263
|
+
"use 'my_model_monitor.constraints(my_s3_uri)' or "
|
|
264
|
+
"'Constraints.from_s3_uri(my_s3_uri)'",
|
|
265
|
+
constraints_file_s3_uri,
|
|
266
|
+
)
|
|
267
|
+
raise error
|
|
268
|
+
|
|
269
|
+
return cls(
|
|
270
|
+
body_dict=body_dict,
|
|
271
|
+
constraints_file_s3_uri=constraints_file_s3_uri,
|
|
272
|
+
kms_key=kms_key,
|
|
273
|
+
sagemaker_session=sagemaker_session,
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
@classmethod
|
|
277
|
+
def from_string(
|
|
278
|
+
cls, constraints_file_string, kms_key=None, file_name=None, sagemaker_session=None
|
|
279
|
+
):
|
|
280
|
+
"""Generates a Constraints object from an s3 uri.
|
|
281
|
+
|
|
282
|
+
Args:
|
|
283
|
+
constraints_file_string (str): The uri of the constraints JSON file.
|
|
284
|
+
kms_key (str): The kms key to be used to encrypt the file in S3.
|
|
285
|
+
file_name (str): The file name to use when uploading to S3.
|
|
286
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
287
|
+
object, used for SageMaker interactions (default: None). If not
|
|
288
|
+
specified, one is created using the default AWS configuration
|
|
289
|
+
chain.
|
|
290
|
+
|
|
291
|
+
Returns:
|
|
292
|
+
sagemaker.model_monitor.Constraints: The instance of Constraints generated from
|
|
293
|
+
the s3 uri.
|
|
294
|
+
|
|
295
|
+
"""
|
|
296
|
+
sagemaker_session = sagemaker_session or Session()
|
|
297
|
+
file_name = file_name or "constraints.json"
|
|
298
|
+
desired_s3_uri = s3.s3_path_join(
|
|
299
|
+
"s3://",
|
|
300
|
+
sagemaker_session.default_bucket(),
|
|
301
|
+
sagemaker_session.default_bucket_prefix,
|
|
302
|
+
"monitoring",
|
|
303
|
+
str(uuid.uuid4()),
|
|
304
|
+
file_name,
|
|
305
|
+
)
|
|
306
|
+
s3_uri = s3.S3Uploader.upload_string_as_file_body(
|
|
307
|
+
body=constraints_file_string,
|
|
308
|
+
desired_s3_uri=desired_s3_uri,
|
|
309
|
+
kms_key=kms_key,
|
|
310
|
+
sagemaker_session=sagemaker_session,
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
return Constraints.from_s3_uri(
|
|
314
|
+
constraints_file_s3_uri=s3_uri, kms_key=kms_key, sagemaker_session=sagemaker_session
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
@classmethod
|
|
318
|
+
def from_file_path(cls, constraints_file_path, kms_key=None, sagemaker_session=None):
|
|
319
|
+
"""Initializes a Constraints object from a file path.
|
|
320
|
+
|
|
321
|
+
Args:
|
|
322
|
+
constraints_file_path (str): The path to the constraints file.
|
|
323
|
+
kms_key (str): The kms_key to use when encrypting the file in S3.
|
|
324
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
325
|
+
object, used for SageMaker interactions (default: None). If not
|
|
326
|
+
specified, one is created using the default AWS configuration
|
|
327
|
+
chain.
|
|
328
|
+
|
|
329
|
+
Returns:
|
|
330
|
+
sagemaker.model_monitor.Constraints: The instance of Constraints generated from
|
|
331
|
+
the local file path.
|
|
332
|
+
|
|
333
|
+
"""
|
|
334
|
+
file_name = os.path.basename(constraints_file_path)
|
|
335
|
+
|
|
336
|
+
with open(constraints_file_path, "r") as f:
|
|
337
|
+
file_body = f.read()
|
|
338
|
+
|
|
339
|
+
return Constraints.from_string(
|
|
340
|
+
constraints_file_string=file_body,
|
|
341
|
+
file_name=file_name,
|
|
342
|
+
kms_key=kms_key,
|
|
343
|
+
sagemaker_session=sagemaker_session,
|
|
344
|
+
)
|
|
345
|
+
|
|
346
|
+
def set_monitoring(self, enable_monitoring, feature_name=None):
|
|
347
|
+
"""Sets the monitoring flags on this Constraints object.
|
|
348
|
+
|
|
349
|
+
If feature-name is provided, modify the feature-level override.
|
|
350
|
+
Else, modify the top-level monitoring flag.
|
|
351
|
+
|
|
352
|
+
Args:
|
|
353
|
+
enable_monitoring (bool): Whether to enable monitoring or not.
|
|
354
|
+
feature_name (str): Sets the feature-level monitoring flag if provided. Otherwise,
|
|
355
|
+
sets the file-level override.
|
|
356
|
+
|
|
357
|
+
"""
|
|
358
|
+
monitoring_api_map = {True: "Enabled", False: "Disabled"}
|
|
359
|
+
flag = monitoring_api_map[enable_monitoring]
|
|
360
|
+
if feature_name is None:
|
|
361
|
+
self.body_dict["monitoring_config"]["evaluate_constraints"] = flag
|
|
362
|
+
else:
|
|
363
|
+
for feature in self.body_dict["features"]:
|
|
364
|
+
if feature["name"] == feature_name:
|
|
365
|
+
string_constraints = feature["string_constraints"]
|
|
366
|
+
if string_constraints.get("monitoring_config_overrides") is None:
|
|
367
|
+
string_constraints["monitoring_config_overrides"] = {}
|
|
368
|
+
string_constraints["monitoring_config_overrides"]["evaluate_constraints"] = flag
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
class ConstraintViolations(ModelMonitoringFile):
|
|
372
|
+
"""Represents the constraint violations JSON file used in Amazon SageMaker Model Monitoring."""
|
|
373
|
+
|
|
374
|
+
def __init__(
|
|
375
|
+
self, body_dict, constraint_violations_file_s3_uri, kms_key=None, sagemaker_session=None
|
|
376
|
+
):
|
|
377
|
+
"""Initializes the ConstraintViolations object used in Amazon SageMaker Model Monitoring.
|
|
378
|
+
|
|
379
|
+
Args:
|
|
380
|
+
body_dict (str): The body of the constraint violations JSON file.
|
|
381
|
+
constraint_violations_file_s3_uri (str): The uri of the constraint violations JSON file.
|
|
382
|
+
kms_key (str): The kms key to be used to decrypt the file in S3.
|
|
383
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
384
|
+
object, used for SageMaker interactions (default: None). If not
|
|
385
|
+
specified, one is created using the default AWS configuration
|
|
386
|
+
chain.
|
|
387
|
+
|
|
388
|
+
"""
|
|
389
|
+
super(ConstraintViolations, self).__init__(
|
|
390
|
+
body_dict=body_dict,
|
|
391
|
+
file_s3_uri=constraint_violations_file_s3_uri,
|
|
392
|
+
kms_key=kms_key,
|
|
393
|
+
sagemaker_session=sagemaker_session,
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
@classmethod
|
|
397
|
+
def from_s3_uri(cls, constraint_violations_file_s3_uri, kms_key=None, sagemaker_session=None):
|
|
398
|
+
"""Generates a ConstraintViolations object from an s3 uri.
|
|
399
|
+
|
|
400
|
+
Args:
|
|
401
|
+
constraint_violations_file_s3_uri (str): The uri of the constraint violations JSON file.
|
|
402
|
+
kms_key (str): The kms key to be used to decrypt the file in S3.
|
|
403
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
404
|
+
object, used for SageMaker interactions (default: None). If not
|
|
405
|
+
specified, one is created using the default AWS configuration
|
|
406
|
+
chain.
|
|
407
|
+
|
|
408
|
+
Returns:
|
|
409
|
+
sagemaker.model_monitor.ConstraintViolations: The instance of ConstraintViolations
|
|
410
|
+
generated from the s3 uri.
|
|
411
|
+
|
|
412
|
+
"""
|
|
413
|
+
try:
|
|
414
|
+
body_dict = json.loads(
|
|
415
|
+
s3.S3Downloader.read_file(
|
|
416
|
+
s3_uri=constraint_violations_file_s3_uri, sagemaker_session=sagemaker_session
|
|
417
|
+
)
|
|
418
|
+
)
|
|
419
|
+
except ClientError as error:
|
|
420
|
+
print(
|
|
421
|
+
"\nCould not retrieve constraints file at location '{}'. "
|
|
422
|
+
"To manually retrieve ConstraintViolations object from a given uri, "
|
|
423
|
+
"use 'my_model_monitor.constraints(my_s3_uri)' or "
|
|
424
|
+
"'ConstraintViolations.from_s3_uri(my_s3_uri)'".format(
|
|
425
|
+
constraint_violations_file_s3_uri
|
|
426
|
+
)
|
|
427
|
+
)
|
|
428
|
+
raise error
|
|
429
|
+
|
|
430
|
+
return cls(
|
|
431
|
+
body_dict=body_dict,
|
|
432
|
+
constraint_violations_file_s3_uri=constraint_violations_file_s3_uri,
|
|
433
|
+
kms_key=kms_key,
|
|
434
|
+
)
|
|
435
|
+
|
|
436
|
+
@classmethod
|
|
437
|
+
def from_string(
|
|
438
|
+
cls, constraint_violations_file_string, kms_key=None, file_name=None, sagemaker_session=None
|
|
439
|
+
):
|
|
440
|
+
"""Generates a ConstraintViolations object from an s3 uri.
|
|
441
|
+
|
|
442
|
+
Args:
|
|
443
|
+
constraint_violations_file_string (str): The uri of the constraint violations JSON file.
|
|
444
|
+
kms_key (str): The kms key to be used to encrypt the file in S3.
|
|
445
|
+
file_name (str): The file name to use when uploading to S3.
|
|
446
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
447
|
+
object, used for SageMaker interactions (default: None). If not
|
|
448
|
+
specified, one is created using the default AWS configuration
|
|
449
|
+
chain.
|
|
450
|
+
|
|
451
|
+
Returns:
|
|
452
|
+
sagemaker.model_monitor.ConstraintViolations: The instance of ConstraintViolations
|
|
453
|
+
generated from the s3 uri.
|
|
454
|
+
|
|
455
|
+
"""
|
|
456
|
+
sagemaker_session = sagemaker_session or Session()
|
|
457
|
+
file_name = file_name or "constraint_violations.json"
|
|
458
|
+
desired_s3_uri = s3.s3_path_join(
|
|
459
|
+
"s3://",
|
|
460
|
+
sagemaker_session.default_bucket(),
|
|
461
|
+
sagemaker_session.default_bucket_prefix,
|
|
462
|
+
"monitoring",
|
|
463
|
+
str(uuid.uuid4()),
|
|
464
|
+
file_name,
|
|
465
|
+
)
|
|
466
|
+
s3_uri = s3.S3Uploader.upload_string_as_file_body(
|
|
467
|
+
body=constraint_violations_file_string,
|
|
468
|
+
desired_s3_uri=desired_s3_uri,
|
|
469
|
+
kms_key=kms_key,
|
|
470
|
+
sagemaker_session=sagemaker_session,
|
|
471
|
+
)
|
|
472
|
+
|
|
473
|
+
return ConstraintViolations.from_s3_uri(
|
|
474
|
+
constraint_violations_file_s3_uri=s3_uri,
|
|
475
|
+
kms_key=kms_key,
|
|
476
|
+
sagemaker_session=sagemaker_session,
|
|
477
|
+
)
|
|
478
|
+
|
|
479
|
+
@classmethod
|
|
480
|
+
def from_file_path(cls, constraint_violations_file_path, kms_key=None, sagemaker_session=None):
|
|
481
|
+
"""Initializes a ConstraintViolations object from a file path.
|
|
482
|
+
|
|
483
|
+
Args:
|
|
484
|
+
constraint_violations_file_path (str): The path to the constraint violations file.
|
|
485
|
+
kms_key (str): The kms_key to use when encrypting the file in S3.
|
|
486
|
+
sagemaker_session (sagemaker.core.helper.session.Session): A SageMaker Session
|
|
487
|
+
object, used for SageMaker interactions (default: None). If not
|
|
488
|
+
specified, one is created using the default AWS configuration
|
|
489
|
+
chain.
|
|
490
|
+
|
|
491
|
+
Returns:
|
|
492
|
+
sagemaker.model_monitor.ConstraintViolations: The instance of ConstraintViolations
|
|
493
|
+
generated from the local file path.
|
|
494
|
+
|
|
495
|
+
"""
|
|
496
|
+
file_name = os.path.basename(constraint_violations_file_path)
|
|
497
|
+
|
|
498
|
+
with open(constraint_violations_file_path, "r") as f:
|
|
499
|
+
file_body = f.read()
|
|
500
|
+
|
|
501
|
+
return ConstraintViolations.from_string(
|
|
502
|
+
constraint_violations_file_string=file_body,
|
|
503
|
+
file_name=file_name,
|
|
504
|
+
kms_key=kms_key,
|
|
505
|
+
sagemaker_session=sagemaker_session,
|
|
506
|
+
)
|