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
|
File without changes
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
"""SageMaker remote function data serializer/deserializer."""
|
|
14
|
+
from __future__ import absolute_import
|
|
15
|
+
|
|
16
|
+
from sagemaker.core.remote_function.errors import SerializationError
|
|
17
|
+
|
|
18
|
+
from sagemaker.core.helper.pipeline_variable import PipelineVariable
|
|
19
|
+
from sagemaker.core.workflow.parameters import (
|
|
20
|
+
ParameterInteger,
|
|
21
|
+
ParameterFloat,
|
|
22
|
+
ParameterString,
|
|
23
|
+
ParameterBoolean,
|
|
24
|
+
)
|
|
25
|
+
from sagemaker.core.workflow.execution_variables import ExecutionVariable
|
|
26
|
+
from sagemaker.core.workflow.properties import (
|
|
27
|
+
Properties,
|
|
28
|
+
PropertiesMap,
|
|
29
|
+
PropertiesList,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# Lazy import to avoid circular dependency
|
|
34
|
+
# DelayedReturn is in MLOps package which depends on Core
|
|
35
|
+
def _get_delayed_return_class():
|
|
36
|
+
"""Lazy import of DelayedReturn to avoid circular dependency."""
|
|
37
|
+
try:
|
|
38
|
+
from sagemaker.mlops.workflow.function_step import DelayedReturn
|
|
39
|
+
|
|
40
|
+
return DelayedReturn
|
|
41
|
+
except ImportError:
|
|
42
|
+
# If MLOps is not installed, return None
|
|
43
|
+
return None
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _pipeline_variable_reducer(pipeline_variable):
|
|
47
|
+
"""Reducer for pipeline variable."""
|
|
48
|
+
|
|
49
|
+
raise SerializationError(
|
|
50
|
+
"""Please pass the pipeline variable to the function decorated with @step as an argument.
|
|
51
|
+
Referencing to a pipeline variable from within the function
|
|
52
|
+
or passing a pipeline variable nested in a data structure are not supported."""
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# Build dispatch table with lazy loading for DelayedReturn
|
|
57
|
+
dispatch_table = {
|
|
58
|
+
ParameterInteger: _pipeline_variable_reducer,
|
|
59
|
+
ParameterFloat: _pipeline_variable_reducer,
|
|
60
|
+
ParameterString: _pipeline_variable_reducer,
|
|
61
|
+
ParameterBoolean: _pipeline_variable_reducer,
|
|
62
|
+
ExecutionVariable: _pipeline_variable_reducer,
|
|
63
|
+
PipelineVariable: _pipeline_variable_reducer,
|
|
64
|
+
Properties: _pipeline_variable_reducer,
|
|
65
|
+
PropertiesMap: _pipeline_variable_reducer,
|
|
66
|
+
PropertiesList: _pipeline_variable_reducer,
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
# Add DelayedReturn to dispatch table if MLOps is available
|
|
70
|
+
_delayed_return_class = _get_delayed_return_class()
|
|
71
|
+
if _delayed_return_class is not None:
|
|
72
|
+
dispatch_table[_delayed_return_class] = _pipeline_variable_reducer
|
|
@@ -0,0 +1,353 @@
|
|
|
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
|
+
"""SageMaker remote function data serializer/deserializer."""
|
|
14
|
+
from __future__ import absolute_import
|
|
15
|
+
|
|
16
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
17
|
+
from dataclasses import dataclass, field
|
|
18
|
+
from typing import Any, Union, Dict, List, Tuple
|
|
19
|
+
|
|
20
|
+
from sagemaker.core.s3 import s3_path_join
|
|
21
|
+
from sagemaker.core.remote_function.core.serialization import deserialize_obj_from_s3
|
|
22
|
+
from sagemaker.core.workflow.step_outputs import get_step
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class Context:
|
|
27
|
+
"""Context for an execution."""
|
|
28
|
+
|
|
29
|
+
step_name: str = None
|
|
30
|
+
execution_id: str = None
|
|
31
|
+
property_references: Dict[str, str] = field(default_factory=dict)
|
|
32
|
+
serialize_output_to_json: bool = False
|
|
33
|
+
func_step_s3_dir: str = None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@dataclass
|
|
37
|
+
class _Parameter:
|
|
38
|
+
"""Parameter to a function."""
|
|
39
|
+
|
|
40
|
+
name: str
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class _ParameterInteger(_Parameter):
|
|
44
|
+
"""Integer parameter to a function."""
|
|
45
|
+
|
|
46
|
+
...
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class _ParameterFloat(_Parameter):
|
|
50
|
+
"""Float parameter to a function."""
|
|
51
|
+
|
|
52
|
+
...
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class _ParameterString(_Parameter):
|
|
56
|
+
"""String parameter to a function."""
|
|
57
|
+
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class _ParameterBoolean(_Parameter):
|
|
62
|
+
"""Boolean parameter to a function."""
|
|
63
|
+
|
|
64
|
+
...
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@dataclass
|
|
68
|
+
class _Properties:
|
|
69
|
+
"""Properties of classic steps."""
|
|
70
|
+
|
|
71
|
+
path: str
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@dataclass
|
|
75
|
+
class _ExecutionVariable:
|
|
76
|
+
"""Execution variable."""
|
|
77
|
+
|
|
78
|
+
name: str
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@dataclass
|
|
82
|
+
class _S3BaseUriIdentifier:
|
|
83
|
+
"""Identifies that the class refers to function step s3 base uri.
|
|
84
|
+
|
|
85
|
+
The s3_base_uri = s3_root_uri + pipeline_name.
|
|
86
|
+
This identifier is resolved in function step runtime by SDK.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
NAME = "S3_BASE_URI"
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@dataclass
|
|
93
|
+
class _DelayedReturn:
|
|
94
|
+
"""Delayed return from a function."""
|
|
95
|
+
|
|
96
|
+
uri: Union[_Properties, List[Union[str, _Parameter, _ExecutionVariable]]]
|
|
97
|
+
reference_path: Tuple = field(default_factory=tuple)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class _ExecutionVariableResolver:
|
|
101
|
+
"""Resolve execution variables."""
|
|
102
|
+
|
|
103
|
+
def __init__(self, context: Context):
|
|
104
|
+
"""Resolve execution variables."""
|
|
105
|
+
self._context = context
|
|
106
|
+
|
|
107
|
+
def resolve(self, execution_variable: _ExecutionVariable):
|
|
108
|
+
"""Resolve a single execution variable.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
execution_variable: execution variable to resolve.
|
|
112
|
+
Returns:
|
|
113
|
+
resolved value
|
|
114
|
+
"""
|
|
115
|
+
return self._context.property_references[f"Execution.{execution_variable.name}"]
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class _ParameterResolver:
|
|
119
|
+
"""Resolve parameters."""
|
|
120
|
+
|
|
121
|
+
def __init__(self, context: Context):
|
|
122
|
+
"""Resolve parameters."""
|
|
123
|
+
self._context = context
|
|
124
|
+
|
|
125
|
+
def resolve(self, parameter: _Parameter):
|
|
126
|
+
"""Resolve a single property reference.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
parameter: parameter to resolve.
|
|
130
|
+
Returns:
|
|
131
|
+
resolved value
|
|
132
|
+
"""
|
|
133
|
+
if isinstance(parameter, _ParameterInteger):
|
|
134
|
+
return int(self._context.property_references[f"Parameters.{parameter.name}"])
|
|
135
|
+
if isinstance(parameter, _ParameterFloat):
|
|
136
|
+
return float(self._context.property_references[f"Parameters.{parameter.name}"])
|
|
137
|
+
if isinstance(parameter, _ParameterString):
|
|
138
|
+
return self._context.property_references[f"Parameters.{parameter.name}"]
|
|
139
|
+
|
|
140
|
+
return self._context.property_references[f"Parameters.{parameter.name}"] == "true"
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class _PropertiesResolver:
|
|
144
|
+
"""Resolve classic step properties."""
|
|
145
|
+
|
|
146
|
+
def __init__(self, context: Context):
|
|
147
|
+
"""Resolve classic step properties."""
|
|
148
|
+
self._context = context
|
|
149
|
+
|
|
150
|
+
def resolve(self, properties: _Properties):
|
|
151
|
+
"""Resolve classic step properties.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
properties: classic step properties.
|
|
155
|
+
Returns:
|
|
156
|
+
resolved value
|
|
157
|
+
"""
|
|
158
|
+
return self._context.property_references[properties.path]
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class _DelayedReturnResolver:
|
|
162
|
+
"""Resolve delayed returns."""
|
|
163
|
+
|
|
164
|
+
def __init__(
|
|
165
|
+
self,
|
|
166
|
+
delayed_returns: List[_DelayedReturn],
|
|
167
|
+
hmac_key: str,
|
|
168
|
+
properties_resolver: _PropertiesResolver,
|
|
169
|
+
parameter_resolver: _ParameterResolver,
|
|
170
|
+
execution_variable_resolver: _ExecutionVariableResolver,
|
|
171
|
+
s3_base_uri: str,
|
|
172
|
+
**settings,
|
|
173
|
+
):
|
|
174
|
+
"""Resolve delayed return.
|
|
175
|
+
|
|
176
|
+
Args:
|
|
177
|
+
delayed_returns: list of delayed returns to resolve.
|
|
178
|
+
hmac_key: key used to encrypt serialized and deserialized function and arguments.
|
|
179
|
+
properties_resolver: resolver used to resolve step properties.
|
|
180
|
+
parameter_resolver: resolver used to pipeline parameters.
|
|
181
|
+
execution_variable_resolver: resolver used to resolve execution variables.
|
|
182
|
+
s3_base_uri (str): the s3 base uri of the function step that
|
|
183
|
+
the serialized artifacts will be uploaded to.
|
|
184
|
+
The s3_base_uri = s3_root_uri + pipeline_name.
|
|
185
|
+
**settings: settings to pass to the deserialization function.
|
|
186
|
+
"""
|
|
187
|
+
self._s3_base_uri = s3_base_uri
|
|
188
|
+
self._parameter_resolver = parameter_resolver
|
|
189
|
+
self._execution_variable_resolver = execution_variable_resolver
|
|
190
|
+
self._properties_resolver = properties_resolver
|
|
191
|
+
# different delayed returns can have the same uri, so we need to dedupe
|
|
192
|
+
uris = {
|
|
193
|
+
self._resolve_delayed_return_uri(delayed_return) for delayed_return in delayed_returns
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
def deserialization_task(uri):
|
|
197
|
+
return uri, deserialize_obj_from_s3(
|
|
198
|
+
sagemaker_session=settings["sagemaker_session"],
|
|
199
|
+
s3_uri=uri,
|
|
200
|
+
hmac_key=hmac_key,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
with ThreadPoolExecutor() as executor:
|
|
204
|
+
self._deserialized_objects = dict(executor.map(deserialization_task, uris))
|
|
205
|
+
|
|
206
|
+
def resolve(self, delayed_return: _DelayedReturn) -> Any:
|
|
207
|
+
"""Resolve a single delayed return.
|
|
208
|
+
|
|
209
|
+
Args:
|
|
210
|
+
delayed_return: delayed return to resolve.
|
|
211
|
+
Returns:
|
|
212
|
+
resolved delayed return.
|
|
213
|
+
"""
|
|
214
|
+
deserialized_obj = self._deserialized_objects[
|
|
215
|
+
self._resolve_delayed_return_uri(delayed_return)
|
|
216
|
+
]
|
|
217
|
+
return _retrieve_child_item(delayed_return, deserialized_obj)
|
|
218
|
+
|
|
219
|
+
def _resolve_delayed_return_uri(self, delayed_return: _DelayedReturn):
|
|
220
|
+
"""Resolve the s3 uri of the delayed return."""
|
|
221
|
+
if isinstance(delayed_return.uri, _Properties):
|
|
222
|
+
return self._properties_resolver.resolve(delayed_return.uri)
|
|
223
|
+
|
|
224
|
+
# Keep the following old resolution logics to keep backward compatible
|
|
225
|
+
uri = []
|
|
226
|
+
for component in delayed_return.uri:
|
|
227
|
+
if isinstance(component, _Parameter):
|
|
228
|
+
uri.append(self._parameter_resolver.resolve(component))
|
|
229
|
+
elif isinstance(component, _ExecutionVariable):
|
|
230
|
+
uri.append(self._execution_variable_resolver.resolve(component))
|
|
231
|
+
elif isinstance(component, _S3BaseUriIdentifier):
|
|
232
|
+
uri.append(self._s3_base_uri)
|
|
233
|
+
else:
|
|
234
|
+
uri.append(component)
|
|
235
|
+
return s3_path_join(*uri)
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def _retrieve_child_item(delayed_return: _DelayedReturn, deserialized_obj: Any):
|
|
239
|
+
"""Retrieve child item from deserialized object."""
|
|
240
|
+
result = deserialized_obj
|
|
241
|
+
for component in delayed_return.reference_path:
|
|
242
|
+
result = result[component[1]]
|
|
243
|
+
return result
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def resolve_pipeline_variables(
|
|
247
|
+
context: Context,
|
|
248
|
+
func_args: Tuple,
|
|
249
|
+
func_kwargs: Dict,
|
|
250
|
+
hmac_key: str,
|
|
251
|
+
s3_base_uri: str,
|
|
252
|
+
**settings,
|
|
253
|
+
):
|
|
254
|
+
"""Resolve pipeline variables.
|
|
255
|
+
|
|
256
|
+
Args:
|
|
257
|
+
context: context for the execution.
|
|
258
|
+
func_args: function args.
|
|
259
|
+
func_kwargs: function kwargs.
|
|
260
|
+
hmac_key: key used to encrypt serialized and deserialized function and arguments.
|
|
261
|
+
s3_base_uri: the s3 base uri of the function step that the serialized artifacts
|
|
262
|
+
will be uploaded to. The s3_base_uri = s3_root_uri + pipeline_name.
|
|
263
|
+
**settings: settings to pass to the deserialization function.
|
|
264
|
+
"""
|
|
265
|
+
|
|
266
|
+
delayed_returns = []
|
|
267
|
+
|
|
268
|
+
if func_args is not None:
|
|
269
|
+
for arg in func_args:
|
|
270
|
+
if isinstance(arg, _DelayedReturn):
|
|
271
|
+
delayed_returns.append(arg)
|
|
272
|
+
if func_kwargs is not None:
|
|
273
|
+
for arg in func_kwargs.values():
|
|
274
|
+
if isinstance(arg, _DelayedReturn):
|
|
275
|
+
delayed_returns.append(arg)
|
|
276
|
+
|
|
277
|
+
# build the resolvers
|
|
278
|
+
parameter_resolver = _ParameterResolver(context)
|
|
279
|
+
execution_variable_resolver = _ExecutionVariableResolver(context)
|
|
280
|
+
properties_resolver = _PropertiesResolver(context)
|
|
281
|
+
delayed_return_resolver = _DelayedReturnResolver(
|
|
282
|
+
delayed_returns=delayed_returns,
|
|
283
|
+
hmac_key=hmac_key,
|
|
284
|
+
properties_resolver=properties_resolver,
|
|
285
|
+
parameter_resolver=parameter_resolver,
|
|
286
|
+
execution_variable_resolver=execution_variable_resolver,
|
|
287
|
+
s3_base_uri=s3_base_uri,
|
|
288
|
+
**settings,
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
# resolve the pipeline variables
|
|
292
|
+
resolved_func_args = None
|
|
293
|
+
if func_args is not None:
|
|
294
|
+
resolved_func_args = []
|
|
295
|
+
for arg in func_args:
|
|
296
|
+
if isinstance(arg, _Parameter):
|
|
297
|
+
resolved_func_args.append(parameter_resolver.resolve(arg))
|
|
298
|
+
elif isinstance(arg, _ExecutionVariable):
|
|
299
|
+
resolved_func_args.append(execution_variable_resolver.resolve(arg))
|
|
300
|
+
elif isinstance(arg, _Properties):
|
|
301
|
+
resolved_func_args.append(properties_resolver.resolve(arg))
|
|
302
|
+
elif isinstance(arg, _DelayedReturn):
|
|
303
|
+
resolved_func_args.append(delayed_return_resolver.resolve(arg))
|
|
304
|
+
else:
|
|
305
|
+
resolved_func_args.append(arg)
|
|
306
|
+
resolved_func_args = tuple(resolved_func_args)
|
|
307
|
+
|
|
308
|
+
resolved_func_kwargs = None
|
|
309
|
+
if func_kwargs is not None:
|
|
310
|
+
resolved_func_kwargs = {}
|
|
311
|
+
for key, value in func_kwargs.items():
|
|
312
|
+
if isinstance(value, _Parameter):
|
|
313
|
+
resolved_func_kwargs[key] = parameter_resolver.resolve(value)
|
|
314
|
+
elif isinstance(value, _ExecutionVariable):
|
|
315
|
+
resolved_func_kwargs[key] = execution_variable_resolver.resolve(value)
|
|
316
|
+
elif isinstance(value, _Properties):
|
|
317
|
+
resolved_func_kwargs[key] = properties_resolver.resolve(value)
|
|
318
|
+
elif isinstance(value, _DelayedReturn):
|
|
319
|
+
resolved_func_kwargs[key] = delayed_return_resolver.resolve(value)
|
|
320
|
+
else:
|
|
321
|
+
resolved_func_kwargs[key] = value
|
|
322
|
+
|
|
323
|
+
return resolved_func_args, resolved_func_kwargs
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
def convert_pipeline_variables_to_pickleable(func_args: Tuple, func_kwargs: Dict):
|
|
327
|
+
"""Convert pipeline variables to pickleable.
|
|
328
|
+
|
|
329
|
+
Args:
|
|
330
|
+
func_args: function args.
|
|
331
|
+
func_kwargs: function kwargs.
|
|
332
|
+
"""
|
|
333
|
+
|
|
334
|
+
from sagemaker.core.helper.pipeline_variable import PipelineVariable
|
|
335
|
+
|
|
336
|
+
from sagemaker.mlops.workflow.function_step import DelayedReturn
|
|
337
|
+
|
|
338
|
+
def convert(arg):
|
|
339
|
+
if isinstance(arg, DelayedReturn):
|
|
340
|
+
return _DelayedReturn(
|
|
341
|
+
uri=get_step(arg)._properties.OutputDataConfig.S3OutputPath._pickleable,
|
|
342
|
+
reference_path=arg._reference_path,
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
if isinstance(arg, PipelineVariable):
|
|
346
|
+
return arg._pickleable
|
|
347
|
+
|
|
348
|
+
return arg
|
|
349
|
+
|
|
350
|
+
converted_func_args = tuple(convert(arg) for arg in func_args)
|
|
351
|
+
converted_func_kwargs = {key: convert(arg) for key, arg in func_kwargs.items()}
|
|
352
|
+
|
|
353
|
+
return converted_func_args, converted_func_kwargs
|