sagemaker-core 1.0.62__py3-none-any.whl → 2.3.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/__init__.py +2 -0
- 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 +2399 -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 +408 -3
- 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 +247 -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 +1220 -0
- sagemaker/core/git_utils.py +415 -0
- sagemaker/core/helper/pipeline_variable.py +82 -0
- sagemaker/core/helper/session_helper.py +2977 -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 +509 -0
- sagemaker/core/image_retriever/test.py +7 -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 +770 -0
- sagemaker/core/image_uri_config/huggingface-llm.json +1267 -0
- sagemaker/core/image_uri_config/huggingface-neuron.json +52 -0
- sagemaker/core/image_uri_config/huggingface-neuronx.json +686 -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-vllm-neuronx.json +38 -0
- sagemaker/core/image_uri_config/huggingface.json +2287 -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 +252 -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 +494 -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 +972 -0
- sagemaker/core/image_uris.py +816 -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 +197 -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/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 +501 -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 +171 -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 +423 -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 +246 -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 +1497 -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 +239 -0
- sagemaker/core/modules/constants.py +37 -0
- sagemaker/core/modules/distributed.py +182 -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 +205 -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 +1599 -0
- sagemaker/core/remote_function/__init__.py +19 -0
- sagemaker/core/remote_function/checkpoint_location.py +47 -0
- sagemaker/core/remote_function/client.py +1310 -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 +347 -0
- sagemaker/core/remote_function/core/serialization.py +410 -0
- sagemaker/core/remote_function/core/stored_function.py +223 -0
- sagemaker/core/remote_function/custom_file_filter.py +128 -0
- sagemaker/core/remote_function/errors.py +102 -0
- sagemaker/core/remote_function/invoke_function.py +167 -0
- sagemaker/core/remote_function/job.py +2121 -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 +19098 -10895
- 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 +5810 -1806
- 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 +82 -0
- sagemaker/core/telemetry/telemetry_logging.py +285 -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 +345 -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 +5979 -176
- {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 +27 -22
- 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 +514 -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.62.dist-info → sagemaker_core-2.3.1.dist-info}/METADATA +28 -9
- sagemaker_core-2.3.1.dist-info/RECORD +351 -0
- sagemaker_core-2.3.1.dist-info/top_level.txt +1 -0
- 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.62.dist-info/RECORD +0 -35
- sagemaker_core-1.0.62.dist-info/top_level.txt +0 -1
- {sagemaker_core → sagemaker/core/helper}/__init__.py +0 -0
- {sagemaker_core/helper → sagemaker/core/jumpstart/factory}/__init__.py +0 -0
- {sagemaker_core/main → sagemaker/core/jumpstart/hub}/__init__.py +0 -0
- {sagemaker_core/main/code_injection → sagemaker/core/modules/local_core}/__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.62.dist-info → sagemaker_core-2.3.1.dist-info}/WHEEL +0 -0
- {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.3.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
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 is used to define the Spark job config to remote function."""
|
|
14
|
+
from __future__ import absolute_import
|
|
15
|
+
|
|
16
|
+
from typing import Optional, List, Dict, Union
|
|
17
|
+
import attr
|
|
18
|
+
from urllib.parse import urlparse
|
|
19
|
+
from sagemaker.core.workflow import is_pipeline_variable
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _validate_configuration(instance, attribute, configuration):
|
|
23
|
+
# pylint: disable=unused-argument
|
|
24
|
+
"""This is the helper method to validate the spark configuration"""
|
|
25
|
+
if configuration:
|
|
26
|
+
SparkConfigUtils.validate_configuration(configuration=configuration)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _validate_s3_uri(instance, attribute, s3_uri):
|
|
30
|
+
# pylint: disable=unused-argument
|
|
31
|
+
"""This is the helper method to validate the s3 uri"""
|
|
32
|
+
if s3_uri:
|
|
33
|
+
SparkConfigUtils.validate_s3_uri(s3_uri)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@attr.s(frozen=True)
|
|
37
|
+
class SparkConfig:
|
|
38
|
+
"""This is the class to initialize the spark configurations for remote function
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
submit_jars (Optional[List[str]]): A list which contains paths to the jars which
|
|
42
|
+
are going to be submitted to Spark job. The location can be a valid s3 uri or
|
|
43
|
+
local path to the jar. Defaults to ``None``.
|
|
44
|
+
submit_py_files (Optional[List[str]]): A list which contains paths to the python
|
|
45
|
+
files which are going to be submitted to Spark job. The location can be a
|
|
46
|
+
valid s3 uri or local path to the python file. Defaults to ``None``.
|
|
47
|
+
submit_files (Optional[List[str]]): A list which contains paths to the files which
|
|
48
|
+
are going to be submitted to Spark job. The location can be a valid s3 uri or
|
|
49
|
+
local path to the python file. Defaults to ``None``.
|
|
50
|
+
configuration (list[dict] or dict): Configuration for Hadoop, Spark, or Hive.
|
|
51
|
+
List or dictionary of EMR-style classifications.
|
|
52
|
+
https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html
|
|
53
|
+
spark_event_logs_s3_uri (str): S3 path where Spark application events will
|
|
54
|
+
be published to.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
submit_jars: Optional[List[str]] = attr.ib(default=None)
|
|
58
|
+
submit_py_files: Optional[List[str]] = attr.ib(default=None)
|
|
59
|
+
submit_files: Optional[List[str]] = attr.ib(default=None)
|
|
60
|
+
configuration: Optional[Union[List[Dict], Dict]] = attr.ib(
|
|
61
|
+
default=None, validator=_validate_configuration
|
|
62
|
+
)
|
|
63
|
+
spark_event_logs_uri: Optional[str] = attr.ib(default=None, validator=_validate_s3_uri)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class SparkConfigUtils:
|
|
67
|
+
"""Util class for spark configurations"""
|
|
68
|
+
|
|
69
|
+
_valid_configuration_keys = ["Classification", "Properties", "Configurations"]
|
|
70
|
+
_valid_configuration_classifications = [
|
|
71
|
+
"core-site",
|
|
72
|
+
"hadoop-env",
|
|
73
|
+
"hadoop-log4j",
|
|
74
|
+
"hive-env",
|
|
75
|
+
"hive-log4j",
|
|
76
|
+
"hive-exec-log4j",
|
|
77
|
+
"hive-site",
|
|
78
|
+
"spark-defaults",
|
|
79
|
+
"spark-env",
|
|
80
|
+
"spark-log4j",
|
|
81
|
+
"spark-hive-site",
|
|
82
|
+
"spark-metrics",
|
|
83
|
+
"yarn-env",
|
|
84
|
+
"yarn-site",
|
|
85
|
+
"export",
|
|
86
|
+
]
|
|
87
|
+
|
|
88
|
+
@staticmethod
|
|
89
|
+
def validate_configuration(configuration: Dict):
|
|
90
|
+
"""Validates the user-provided Hadoop/Spark/Hive configuration.
|
|
91
|
+
|
|
92
|
+
This ensures that the list or dictionary the user provides will serialize to
|
|
93
|
+
JSON matching the schema of EMR's application configuration
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
configuration (Dict): A dict that contains the configuration overrides to
|
|
97
|
+
the default values. For more information, please visit:
|
|
98
|
+
https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html
|
|
99
|
+
"""
|
|
100
|
+
emr_configure_apps_url = (
|
|
101
|
+
"https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html"
|
|
102
|
+
)
|
|
103
|
+
if isinstance(configuration, dict):
|
|
104
|
+
keys = configuration.keys()
|
|
105
|
+
if "Classification" not in keys or "Properties" not in keys:
|
|
106
|
+
raise ValueError(
|
|
107
|
+
f"Missing one or more required keys in configuration dictionary "
|
|
108
|
+
f"{configuration} Please see {emr_configure_apps_url} for more information"
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
for key in keys:
|
|
112
|
+
if key not in SparkConfigUtils._valid_configuration_keys:
|
|
113
|
+
raise ValueError(
|
|
114
|
+
f"Invalid key: {key}. "
|
|
115
|
+
f"Must be one of {SparkConfigUtils._valid_configuration_keys}. "
|
|
116
|
+
f"Please see {emr_configure_apps_url} for more information."
|
|
117
|
+
)
|
|
118
|
+
if key == "Classification":
|
|
119
|
+
if (
|
|
120
|
+
configuration[key]
|
|
121
|
+
not in SparkConfigUtils._valid_configuration_classifications
|
|
122
|
+
):
|
|
123
|
+
raise ValueError(
|
|
124
|
+
f"Invalid classification: {key}. Must be one of "
|
|
125
|
+
f"{SparkConfigUtils._valid_configuration_classifications}"
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
if isinstance(configuration, list):
|
|
129
|
+
for item in configuration:
|
|
130
|
+
SparkConfigUtils.validate_configuration(item)
|
|
131
|
+
|
|
132
|
+
# TODO (guoqioa@): method only checks urlparse scheme, need to perform deep s3 validation
|
|
133
|
+
@staticmethod
|
|
134
|
+
def validate_s3_uri(spark_output_s3_path):
|
|
135
|
+
"""Validate whether the URI uses an S3 scheme.
|
|
136
|
+
|
|
137
|
+
In the future, this validation will perform deeper S3 validation.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
spark_output_s3_path (str): The URI of the Spark output S3 Path.
|
|
141
|
+
"""
|
|
142
|
+
if is_pipeline_variable(spark_output_s3_path):
|
|
143
|
+
return
|
|
144
|
+
|
|
145
|
+
if urlparse(spark_output_s3_path).scheme != "s3":
|
|
146
|
+
raise ValueError(
|
|
147
|
+
f"Invalid s3 path: {spark_output_s3_path}. Please enter something like "
|
|
148
|
+
"s3://bucket-name/folder-name"
|
|
149
|
+
)
|
|
@@ -0,0 +1,168 @@
|
|
|
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
|
+
"""Accessors to retrieve resource requirements."""
|
|
14
|
+
|
|
15
|
+
from __future__ import absolute_import
|
|
16
|
+
|
|
17
|
+
import logging
|
|
18
|
+
from typing import Optional, Dict
|
|
19
|
+
|
|
20
|
+
from sagemaker.core.jumpstart import utils as jumpstart_utils
|
|
21
|
+
from sagemaker.core.jumpstart import artifacts
|
|
22
|
+
from sagemaker.core.jumpstart.constants import DEFAULT_JUMPSTART_SAGEMAKER_SESSION
|
|
23
|
+
from sagemaker.core.jumpstart.enums import JumpStartModelType
|
|
24
|
+
from sagemaker.core.helper.session_helper import Session
|
|
25
|
+
|
|
26
|
+
LOGGER = logging.getLogger("sagemaker")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ResourceRequirements(object):
|
|
30
|
+
"""Configures the compute resources for a Model."""
|
|
31
|
+
|
|
32
|
+
def __init__(
|
|
33
|
+
self,
|
|
34
|
+
requests: Optional[Dict[str, int]] = None,
|
|
35
|
+
limits: Optional[Dict[str, int]] = None,
|
|
36
|
+
):
|
|
37
|
+
"""Initializes a ResourceRequirements object for an Amazon SageMaker inference component.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
requests (dict): Basic resource to be requested, including num_cpus, memory (in MB),
|
|
41
|
+
accelerator_memory (in MB), copies.
|
|
42
|
+
limits (dict): Max resource limit to be requested, including memory (in MB).
|
|
43
|
+
|
|
44
|
+
Example:
|
|
45
|
+
requests = {
|
|
46
|
+
num_cpus: 1,
|
|
47
|
+
memory: 1024,
|
|
48
|
+
copies: 5
|
|
49
|
+
},
|
|
50
|
+
limits = {
|
|
51
|
+
memory: 2048
|
|
52
|
+
}
|
|
53
|
+
"""
|
|
54
|
+
self.requests = requests
|
|
55
|
+
self.limits = limits
|
|
56
|
+
self.num_accelerators: Optional[int] = None
|
|
57
|
+
self.num_cpus: Optional[int] = None
|
|
58
|
+
self.min_memory: Optional[int] = None
|
|
59
|
+
self.max_memory: Optional[int] = None
|
|
60
|
+
self.copy_count = 1
|
|
61
|
+
|
|
62
|
+
if requests:
|
|
63
|
+
if "num_accelerators" in requests:
|
|
64
|
+
self.num_accelerators = requests["num_accelerators"]
|
|
65
|
+
if "num_cpus" in requests:
|
|
66
|
+
self.num_cpus = requests["num_cpus"]
|
|
67
|
+
if "memory" in requests:
|
|
68
|
+
self.min_memory = requests["memory"]
|
|
69
|
+
if "copies" in requests:
|
|
70
|
+
self.copy_count = requests["copies"]
|
|
71
|
+
if limits:
|
|
72
|
+
if "memory" in limits:
|
|
73
|
+
self.max_memory = limits["memory"]
|
|
74
|
+
|
|
75
|
+
def __str__(self) -> str:
|
|
76
|
+
"""Overriding str(*) method to make more human-readable."""
|
|
77
|
+
return f"ResourceRequirements(requests={self.requests}, limits={self.limits})"
|
|
78
|
+
|
|
79
|
+
def __eq__(self, other) -> bool:
|
|
80
|
+
"""Implement equal method for easy unit testing."""
|
|
81
|
+
return self.requests == other.requests and self.limits == other.limits
|
|
82
|
+
|
|
83
|
+
def get_compute_resource_requirements(self) -> dict:
|
|
84
|
+
"""Returns a dict of resource requirements."""
|
|
85
|
+
resource_requirements = {
|
|
86
|
+
"MinMemoryRequiredInMb": self.min_memory,
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if self.max_memory:
|
|
90
|
+
resource_requirements.update({"MaxMemoryRequiredInMb": self.max_memory})
|
|
91
|
+
if self.num_cpus:
|
|
92
|
+
resource_requirements.update({"NumberOfCpuCoresRequired": self.num_cpus})
|
|
93
|
+
if self.num_accelerators:
|
|
94
|
+
resource_requirements.update(
|
|
95
|
+
{"NumberOfAcceleratorDevicesRequired": self.num_accelerators}
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
return resource_requirements
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def retrieve_default(
|
|
102
|
+
region: Optional[str] = None,
|
|
103
|
+
model_id: Optional[str] = None,
|
|
104
|
+
model_version: Optional[str] = None,
|
|
105
|
+
hub_arn: Optional[str] = None,
|
|
106
|
+
scope: Optional[str] = None,
|
|
107
|
+
tolerate_vulnerable_model: bool = False,
|
|
108
|
+
tolerate_deprecated_model: bool = False,
|
|
109
|
+
model_type: JumpStartModelType = JumpStartModelType.OPEN_WEIGHTS,
|
|
110
|
+
sagemaker_session: Session = DEFAULT_JUMPSTART_SAGEMAKER_SESSION,
|
|
111
|
+
instance_type: Optional[str] = None,
|
|
112
|
+
config_name: Optional[str] = None,
|
|
113
|
+
) -> ResourceRequirements:
|
|
114
|
+
"""Retrieves the default resource requirements for the model matching the given arguments.
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
region (str): The AWS Region for which to retrieve the default resource requirements.
|
|
118
|
+
Defaults to ``None``.
|
|
119
|
+
model_id (str): The model ID of the model for which to
|
|
120
|
+
retrieve the default resource requirements. (Default: None).
|
|
121
|
+
model_version (str): The version of the model for which to retrieve the
|
|
122
|
+
default resource requirements. (Default: None).
|
|
123
|
+
hub_arn (str): The arn of the SageMaker Hub for which to retrieve
|
|
124
|
+
model details from. (Default: None).
|
|
125
|
+
scope (str): The model type, i.e. what it is used for.
|
|
126
|
+
Valid values: "training" and "inference".
|
|
127
|
+
tolerate_vulnerable_model (bool): True if vulnerable versions of model
|
|
128
|
+
specifications should be tolerated (exception not raised). If False, raises an
|
|
129
|
+
exception if the script used by this version of the model has dependencies with known
|
|
130
|
+
security vulnerabilities. (Default: False).
|
|
131
|
+
tolerate_deprecated_model (bool): True if deprecated models should be tolerated
|
|
132
|
+
(exception not raised). False if these models should raise an exception.
|
|
133
|
+
(Default: False).
|
|
134
|
+
sagemaker_session (sagemaker.session.Session): A SageMaker Session
|
|
135
|
+
object, used for SageMaker interactions. If not
|
|
136
|
+
specified, one is created using the default AWS configuration
|
|
137
|
+
chain. (Default: sagemaker.jumpstart.constants.DEFAULT_JUMPSTART_SAGEMAKER_SESSION).
|
|
138
|
+
instance_type (str): An instance type to optionally supply in order to get
|
|
139
|
+
host requirements specific for the instance type.
|
|
140
|
+
config_name (Optional[str]): Name of the JumpStart Model config to apply. (Default: None).
|
|
141
|
+
Returns:
|
|
142
|
+
str: The default resource requirements to use for the model.
|
|
143
|
+
|
|
144
|
+
Raises:
|
|
145
|
+
ValueError: If the combination of arguments specified is not supported.
|
|
146
|
+
"""
|
|
147
|
+
if not jumpstart_utils.is_jumpstart_model_input(model_id, model_version):
|
|
148
|
+
raise ValueError(
|
|
149
|
+
"Must specify JumpStart `model_id` and `model_version` "
|
|
150
|
+
"when retrieving resource requirements."
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
if scope is None:
|
|
154
|
+
raise ValueError("Must specify scope for resource requirements.")
|
|
155
|
+
|
|
156
|
+
return artifacts._retrieve_default_resources(
|
|
157
|
+
model_id=model_id,
|
|
158
|
+
model_version=model_version,
|
|
159
|
+
hub_arn=hub_arn,
|
|
160
|
+
scope=scope,
|
|
161
|
+
region=region,
|
|
162
|
+
tolerate_vulnerable_model=tolerate_vulnerable_model,
|
|
163
|
+
tolerate_deprecated_model=tolerate_deprecated_model,
|
|
164
|
+
model_type=model_type,
|
|
165
|
+
sagemaker_session=sagemaker_session,
|
|
166
|
+
instance_type=instance_type,
|
|
167
|
+
config_name=config_name,
|
|
168
|
+
)
|