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.
Files changed (358) hide show
  1. sagemaker/__init__.py +2 -0
  2. sagemaker/core/__init__.py +16 -0
  3. sagemaker/core/_studio.py +116 -0
  4. sagemaker/core/_version.py +11 -0
  5. sagemaker/core/accept_types.py +131 -0
  6. sagemaker/core/analytics.py +744 -0
  7. sagemaker/core/apiutils/__init__.py +13 -0
  8. sagemaker/core/apiutils/_base_types.py +228 -0
  9. sagemaker/core/apiutils/_boto_functions.py +130 -0
  10. sagemaker/core/apiutils/_utils.py +34 -0
  11. sagemaker/core/base_deserializers.py +35 -0
  12. sagemaker/core/base_serializers.py +35 -0
  13. sagemaker/core/clarify/__init__.py +2898 -0
  14. sagemaker/core/collection.py +467 -0
  15. sagemaker/core/common_utils.py +2399 -0
  16. sagemaker/core/compute_resource_requirements/__init__.py +18 -0
  17. sagemaker/core/compute_resource_requirements/resource_requirements.py +94 -0
  18. sagemaker/core/config/__init__.py +181 -0
  19. sagemaker/core/config/config.py +238 -0
  20. sagemaker/core/config/config_manager.py +595 -0
  21. sagemaker/core/config/config_schema.py +1220 -0
  22. sagemaker/core/config/config_utils.py +297 -0
  23. {sagemaker_core/main → sagemaker/core}/config_schema.py +408 -3
  24. sagemaker/core/constants.py +73 -0
  25. sagemaker/core/content_types.py +137 -0
  26. sagemaker/core/debugger/__init__.py +39 -0
  27. sagemaker/core/debugger/debugger.py +945 -0
  28. sagemaker/core/debugger/framework_profile.py +292 -0
  29. sagemaker/core/debugger/metrics_config.py +468 -0
  30. sagemaker/core/debugger/profiler.py +42 -0
  31. sagemaker/core/debugger/profiler_config.py +190 -0
  32. sagemaker/core/debugger/profiler_constants.py +40 -0
  33. sagemaker/core/debugger/utils.py +148 -0
  34. sagemaker/core/deprecations.py +254 -0
  35. sagemaker/core/deserializers/__init__.py +10 -0
  36. sagemaker/core/deserializers/base.py +424 -0
  37. sagemaker/core/deserializers/implementations.py +157 -0
  38. sagemaker/core/drift_check_baselines.py +106 -0
  39. sagemaker/core/enums.py +51 -0
  40. sagemaker/core/environment_variables.py +101 -0
  41. sagemaker/core/exceptions.py +108 -0
  42. sagemaker/core/experiments/__init__.py +53 -0
  43. sagemaker/core/experiments/_api_types.py +251 -0
  44. sagemaker/core/experiments/_environment.py +124 -0
  45. sagemaker/core/experiments/_helper.py +294 -0
  46. sagemaker/core/experiments/_metrics.py +333 -0
  47. sagemaker/core/experiments/_run_context.py +58 -0
  48. sagemaker/core/experiments/_utils.py +216 -0
  49. sagemaker/core/experiments/experiment.py +247 -0
  50. sagemaker/core/experiments/run.py +970 -0
  51. sagemaker/core/experiments/trial.py +296 -0
  52. sagemaker/core/experiments/trial_component.py +387 -0
  53. sagemaker/core/explainer/__init__.py +24 -0
  54. sagemaker/core/explainer/clarify_explainer_config.py +298 -0
  55. sagemaker/core/explainer/explainer_config.py +44 -0
  56. sagemaker/core/fw_utils.py +1220 -0
  57. sagemaker/core/git_utils.py +415 -0
  58. sagemaker/core/helper/pipeline_variable.py +82 -0
  59. sagemaker/core/helper/session_helper.py +2977 -0
  60. sagemaker/core/hyperparameters.py +172 -0
  61. sagemaker/core/image_retriever/__init__.py +3 -0
  62. sagemaker/core/image_retriever/image_retriever.py +640 -0
  63. sagemaker/core/image_retriever/image_retriever_utils.py +509 -0
  64. sagemaker/core/image_retriever/test.py +7 -0
  65. sagemaker/core/image_uri_config/autogluon.json +1335 -0
  66. sagemaker/core/image_uri_config/blazingtext.json +50 -0
  67. sagemaker/core/image_uri_config/chainer.json +104 -0
  68. sagemaker/core/image_uri_config/clarify.json +39 -0
  69. sagemaker/core/image_uri_config/coach-mxnet.json +70 -0
  70. sagemaker/core/image_uri_config/coach-tensorflow.json +186 -0
  71. sagemaker/core/image_uri_config/data-wrangler.json +91 -0
  72. sagemaker/core/image_uri_config/debugger.json +34 -0
  73. sagemaker/core/image_uri_config/detailed-profiler.json +18 -0
  74. sagemaker/core/image_uri_config/djl-deepspeed.json +385 -0
  75. sagemaker/core/image_uri_config/djl-fastertransformer.json +167 -0
  76. sagemaker/core/image_uri_config/djl-lmi.json +136 -0
  77. sagemaker/core/image_uri_config/djl-neuronx.json +258 -0
  78. sagemaker/core/image_uri_config/djl-tensorrtllm.json +262 -0
  79. sagemaker/core/image_uri_config/factorization-machines.json +50 -0
  80. sagemaker/core/image_uri_config/forecasting-deepar.json +50 -0
  81. sagemaker/core/image_uri_config/huggingface-llm-neuronx.json +770 -0
  82. sagemaker/core/image_uri_config/huggingface-llm.json +1267 -0
  83. sagemaker/core/image_uri_config/huggingface-neuron.json +52 -0
  84. sagemaker/core/image_uri_config/huggingface-neuronx.json +686 -0
  85. sagemaker/core/image_uri_config/huggingface-tei-cpu.json +298 -0
  86. sagemaker/core/image_uri_config/huggingface-tei.json +298 -0
  87. sagemaker/core/image_uri_config/huggingface-training-compiler.json +195 -0
  88. sagemaker/core/image_uri_config/huggingface-vllm-neuronx.json +38 -0
  89. sagemaker/core/image_uri_config/huggingface.json +2287 -0
  90. sagemaker/core/image_uri_config/hyperpod-recipes-neuron.json +52 -0
  91. sagemaker/core/image_uri_config/image-classification-neo.json +43 -0
  92. sagemaker/core/image_uri_config/image-classification.json +50 -0
  93. sagemaker/core/image_uri_config/inferentia-mxnet.json +88 -0
  94. sagemaker/core/image_uri_config/inferentia-pytorch.json +127 -0
  95. sagemaker/core/image_uri_config/inferentia-tensorflow.json +88 -0
  96. sagemaker/core/image_uri_config/instance_gpu_info.json +782 -0
  97. sagemaker/core/image_uri_config/ipinsights.json +50 -0
  98. sagemaker/core/image_uri_config/kmeans.json +50 -0
  99. sagemaker/core/image_uri_config/knn.json +50 -0
  100. sagemaker/core/image_uri_config/lda.json +26 -0
  101. sagemaker/core/image_uri_config/linear-learner.json +50 -0
  102. sagemaker/core/image_uri_config/model-monitor.json +42 -0
  103. sagemaker/core/image_uri_config/mxnet.json +1154 -0
  104. sagemaker/core/image_uri_config/neo-mxnet.json +64 -0
  105. sagemaker/core/image_uri_config/neo-pytorch.json +341 -0
  106. sagemaker/core/image_uri_config/neo-tensorflow.json +109 -0
  107. sagemaker/core/image_uri_config/ntm.json +50 -0
  108. sagemaker/core/image_uri_config/object-detection.json +50 -0
  109. sagemaker/core/image_uri_config/object2vec.json +50 -0
  110. sagemaker/core/image_uri_config/pca.json +50 -0
  111. sagemaker/core/image_uri_config/pytorch-neuron.json +43 -0
  112. sagemaker/core/image_uri_config/pytorch-smp.json +218 -0
  113. sagemaker/core/image_uri_config/pytorch-training-compiler.json +80 -0
  114. sagemaker/core/image_uri_config/pytorch.json +3101 -0
  115. sagemaker/core/image_uri_config/randomcutforest.json +50 -0
  116. sagemaker/core/image_uri_config/ray-pytorch.json +46 -0
  117. sagemaker/core/image_uri_config/ray-tensorflow.json +194 -0
  118. sagemaker/core/image_uri_config/sagemaker-base-python.json +46 -0
  119. sagemaker/core/image_uri_config/sagemaker-distribution.json +37 -0
  120. sagemaker/core/image_uri_config/sagemaker-geospatial.json +13 -0
  121. sagemaker/core/image_uri_config/sagemaker-tritonserver.json +252 -0
  122. sagemaker/core/image_uri_config/semantic-segmentation.json +50 -0
  123. sagemaker/core/image_uri_config/seq2seq.json +50 -0
  124. sagemaker/core/image_uri_config/sklearn.json +494 -0
  125. sagemaker/core/image_uri_config/spark.json +280 -0
  126. sagemaker/core/image_uri_config/sparkml-serving.json +97 -0
  127. sagemaker/core/image_uri_config/stabilityai.json +53 -0
  128. sagemaker/core/image_uri_config/tensorflow.json +5086 -0
  129. sagemaker/core/image_uri_config/vw.json +25 -0
  130. sagemaker/core/image_uri_config/xgboost-neo.json +43 -0
  131. sagemaker/core/image_uri_config/xgboost.json +972 -0
  132. sagemaker/core/image_uris.py +816 -0
  133. sagemaker/core/inference_config.py +144 -0
  134. sagemaker/core/inference_recommender/__init__.py +18 -0
  135. sagemaker/core/inference_recommender/inference_recommender_mixin.py +622 -0
  136. sagemaker/core/inputs.py +366 -0
  137. sagemaker/core/instance_group.py +61 -0
  138. sagemaker/core/instance_types.py +164 -0
  139. sagemaker/core/instance_types_gpu_info.py +43 -0
  140. sagemaker/core/interactive_apps/__init__.py +41 -0
  141. sagemaker/core/interactive_apps/base_interactive_app.py +204 -0
  142. sagemaker/core/interactive_apps/detail_profiler_app.py +139 -0
  143. sagemaker/core/interactive_apps/tensorboard.py +149 -0
  144. sagemaker/core/iterators.py +197 -0
  145. sagemaker/core/job.py +380 -0
  146. sagemaker/core/jumpstart/__init__.py +156 -0
  147. sagemaker/core/jumpstart/accessors.py +390 -0
  148. sagemaker/core/jumpstart/artifacts/__init__.py +69 -0
  149. sagemaker/core/jumpstart/artifacts/environment_variables.py +252 -0
  150. sagemaker/core/jumpstart/artifacts/hyperparameters.py +120 -0
  151. sagemaker/core/jumpstart/artifacts/image_uris.py +139 -0
  152. sagemaker/core/jumpstart/artifacts/incremental_training.py +87 -0
  153. sagemaker/core/jumpstart/artifacts/instance_types.py +223 -0
  154. sagemaker/core/jumpstart/artifacts/kwargs.py +289 -0
  155. sagemaker/core/jumpstart/artifacts/metric_definitions.py +117 -0
  156. sagemaker/core/jumpstart/artifacts/model_packages.py +202 -0
  157. sagemaker/core/jumpstart/artifacts/model_uris.py +252 -0
  158. sagemaker/core/jumpstart/artifacts/payloads.py +96 -0
  159. sagemaker/core/jumpstart/artifacts/predictors.py +540 -0
  160. sagemaker/core/jumpstart/artifacts/resource_names.py +86 -0
  161. sagemaker/core/jumpstart/artifacts/resource_requirements.py +162 -0
  162. sagemaker/core/jumpstart/artifacts/script_uris.py +172 -0
  163. sagemaker/core/jumpstart/cache.py +663 -0
  164. sagemaker/core/jumpstart/configs.py +50 -0
  165. sagemaker/core/jumpstart/constants.py +198 -0
  166. sagemaker/core/jumpstart/deserializers.py +81 -0
  167. sagemaker/core/jumpstart/document.py +76 -0
  168. sagemaker/core/jumpstart/enums.py +168 -0
  169. sagemaker/core/jumpstart/exceptions.py +236 -0
  170. sagemaker/core/jumpstart/factory/utils.py +833 -0
  171. sagemaker/core/jumpstart/filters.py +597 -0
  172. sagemaker/core/jumpstart/hub/constants.py +16 -0
  173. sagemaker/core/jumpstart/hub/hub.py +291 -0
  174. sagemaker/core/jumpstart/hub/interfaces.py +936 -0
  175. sagemaker/core/jumpstart/hub/parser_utils.py +70 -0
  176. sagemaker/core/jumpstart/hub/parsers.py +288 -0
  177. sagemaker/core/jumpstart/hub/types.py +35 -0
  178. sagemaker/core/jumpstart/hub/utils.py +260 -0
  179. sagemaker/core/jumpstart/models.py +501 -0
  180. sagemaker/core/jumpstart/notebook_utils.py +575 -0
  181. sagemaker/core/jumpstart/parameters.py +20 -0
  182. sagemaker/core/jumpstart/payload_utils.py +239 -0
  183. sagemaker/core/jumpstart/region_config.json +171 -0
  184. sagemaker/core/jumpstart/search.py +171 -0
  185. sagemaker/core/jumpstart/serializers.py +81 -0
  186. sagemaker/core/jumpstart/session_utils.py +234 -0
  187. sagemaker/core/jumpstart/types.py +3044 -0
  188. sagemaker/core/jumpstart/utils.py +1731 -0
  189. sagemaker/core/jumpstart/validators.py +257 -0
  190. sagemaker/core/lambda_helper.py +312 -0
  191. sagemaker/core/lineage/__init__.py +42 -0
  192. sagemaker/core/lineage/_api_types.py +239 -0
  193. sagemaker/core/lineage/_utils.py +49 -0
  194. sagemaker/core/lineage/action.py +345 -0
  195. sagemaker/core/lineage/artifact.py +646 -0
  196. sagemaker/core/lineage/association.py +190 -0
  197. sagemaker/core/lineage/context.py +505 -0
  198. sagemaker/core/lineage/lineage_trial_component.py +191 -0
  199. sagemaker/core/lineage/query.py +732 -0
  200. sagemaker/core/lineage/visualizer.py +346 -0
  201. sagemaker/core/local/__init__.py +18 -0
  202. sagemaker/core/local/data.py +423 -0
  203. sagemaker/core/local/entities.py +678 -0
  204. sagemaker/core/local/exceptions.py +17 -0
  205. sagemaker/core/local/image.py +1243 -0
  206. sagemaker/core/local/local_session.py +739 -0
  207. sagemaker/core/local/utils.py +246 -0
  208. sagemaker/core/logs.py +181 -0
  209. sagemaker/core/metadata_properties.py +56 -0
  210. sagemaker/core/metric_definitions.py +91 -0
  211. sagemaker/core/mlflow/__init__.py +38 -0
  212. sagemaker/core/mlflow/forward_sagemaker_metrics.py +44 -0
  213. sagemaker/core/model_card/__init__.py +26 -0
  214. sagemaker/core/model_life_cycle.py +51 -0
  215. sagemaker/core/model_metrics.py +160 -0
  216. sagemaker/core/model_monitor/__init__.py +66 -0
  217. sagemaker/core/model_monitor/clarify_model_monitoring.py +1497 -0
  218. sagemaker/core/model_monitor/cron_expression_generator.py +82 -0
  219. sagemaker/core/model_monitor/data_capture_config.py +115 -0
  220. sagemaker/core/model_monitor/data_quality_monitoring_config.py +66 -0
  221. sagemaker/core/model_monitor/dataset_format.py +102 -0
  222. sagemaker/core/model_monitor/model_monitoring.py +4266 -0
  223. sagemaker/core/model_monitor/monitoring_alert.py +76 -0
  224. sagemaker/core/model_monitor/monitoring_files.py +506 -0
  225. sagemaker/core/model_monitor/utils.py +793 -0
  226. sagemaker/core/model_registry.py +480 -0
  227. sagemaker/core/model_uris.py +97 -0
  228. sagemaker/core/modules/__init__.py +19 -0
  229. sagemaker/core/modules/configs.py +239 -0
  230. sagemaker/core/modules/constants.py +37 -0
  231. sagemaker/core/modules/distributed.py +182 -0
  232. sagemaker/core/modules/local_core/local_container.py +605 -0
  233. sagemaker/core/modules/templates.py +83 -0
  234. sagemaker/core/modules/train/__init__.py +14 -0
  235. sagemaker/core/modules/train/container_drivers/__init__.py +14 -0
  236. sagemaker/core/modules/train/container_drivers/common/__init__.py +14 -0
  237. sagemaker/core/modules/train/container_drivers/common/utils.py +205 -0
  238. sagemaker/core/modules/train/container_drivers/distributed_drivers/__init__.py +14 -0
  239. sagemaker/core/modules/train/container_drivers/distributed_drivers/basic_script_driver.py +81 -0
  240. sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_driver.py +123 -0
  241. sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_utils.py +302 -0
  242. sagemaker/core/modules/train/container_drivers/distributed_drivers/torchrun_driver.py +129 -0
  243. sagemaker/core/modules/train/container_drivers/scripts/__init__.py +14 -0
  244. sagemaker/core/modules/train/container_drivers/scripts/environment.py +305 -0
  245. sagemaker/core/modules/train/sm_recipes/__init__.py +0 -0
  246. sagemaker/core/modules/train/sm_recipes/utils.py +330 -0
  247. sagemaker/core/modules/types.py +19 -0
  248. sagemaker/core/modules/utils.py +194 -0
  249. sagemaker/core/network.py +185 -0
  250. sagemaker/core/parameter.py +173 -0
  251. sagemaker/core/payloads.py +185 -0
  252. sagemaker/core/processing.py +1599 -0
  253. sagemaker/core/remote_function/__init__.py +19 -0
  254. sagemaker/core/remote_function/checkpoint_location.py +47 -0
  255. sagemaker/core/remote_function/client.py +1310 -0
  256. sagemaker/core/remote_function/core/__init__.py +0 -0
  257. sagemaker/core/remote_function/core/_custom_dispatch_table.py +72 -0
  258. sagemaker/core/remote_function/core/pipeline_variables.py +347 -0
  259. sagemaker/core/remote_function/core/serialization.py +410 -0
  260. sagemaker/core/remote_function/core/stored_function.py +223 -0
  261. sagemaker/core/remote_function/custom_file_filter.py +128 -0
  262. sagemaker/core/remote_function/errors.py +102 -0
  263. sagemaker/core/remote_function/invoke_function.py +167 -0
  264. sagemaker/core/remote_function/job.py +2121 -0
  265. sagemaker/core/remote_function/logging_config.py +38 -0
  266. sagemaker/core/remote_function/runtime_environment/__init__.py +14 -0
  267. sagemaker/core/remote_function/runtime_environment/bootstrap_runtime_environment.py +605 -0
  268. sagemaker/core/remote_function/runtime_environment/mpi_utils_remote.py +252 -0
  269. sagemaker/core/remote_function/runtime_environment/runtime_environment_manager.py +554 -0
  270. sagemaker/core/remote_function/runtime_environment/spark_app.py +18 -0
  271. sagemaker/core/remote_function/spark_config.py +149 -0
  272. sagemaker/core/resource_requirements.py +168 -0
  273. {sagemaker_core/main → sagemaker/core}/resources.py +19098 -10895
  274. sagemaker/core/s3/__init__.py +41 -0
  275. sagemaker/core/s3/client.py +367 -0
  276. sagemaker/core/s3/utils.py +175 -0
  277. sagemaker/core/script_uris.py +93 -0
  278. sagemaker/core/serializers/__init__.py +11 -0
  279. sagemaker/core/serializers/base.py +510 -0
  280. sagemaker/core/serializers/implementations.py +159 -0
  281. sagemaker/core/serializers/utils.py +223 -0
  282. sagemaker/core/serverless_inference_config.py +63 -0
  283. sagemaker/core/session_settings.py +55 -0
  284. sagemaker/core/shapes/__init__.py +3 -0
  285. sagemaker/core/shapes/model_card_shapes.py +159 -0
  286. {sagemaker_core/main → sagemaker/core/shapes}/shapes.py +5810 -1806
  287. sagemaker/core/spark/__init__.py +16 -0
  288. sagemaker/core/spark/defaults.py +16 -0
  289. sagemaker/core/spark/processing.py +1380 -0
  290. sagemaker/core/telemetry/__init__.py +23 -0
  291. sagemaker/core/telemetry/constants.py +82 -0
  292. sagemaker/core/telemetry/telemetry_logging.py +285 -0
  293. sagemaker/core/tools/__init__.py +1 -0
  294. {sagemaker_core → sagemaker/core}/tools/codegen.py +4 -4
  295. {sagemaker_core → sagemaker/core}/tools/constants.py +23 -15
  296. {sagemaker_core → sagemaker/core}/tools/data_extractor.py +1 -1
  297. {sagemaker_core → sagemaker/core}/tools/method.py +1 -1
  298. sagemaker/core/tools/model_card/generate_model_card_from_schema.py +562 -0
  299. {sagemaker_core → sagemaker/core}/tools/resources_codegen.py +165 -98
  300. {sagemaker_core → sagemaker/core}/tools/resources_extractor.py +5 -13
  301. {sagemaker_core → sagemaker/core}/tools/shapes_codegen.py +16 -17
  302. {sagemaker_core → sagemaker/core}/tools/shapes_extractor.py +29 -67
  303. {sagemaker_core → sagemaker/core}/tools/templates.py +39 -17
  304. sagemaker/core/training/__init__.py +14 -0
  305. sagemaker/core/training/configs.py +345 -0
  306. sagemaker/core/training/constants.py +37 -0
  307. sagemaker/core/training/utils.py +77 -0
  308. sagemaker/core/training_compiler/__init__.py +16 -0
  309. sagemaker/core/training_compiler/config.py +197 -0
  310. sagemaker/core/training_compiler_config.py +197 -0
  311. sagemaker/core/transformer.py +793 -0
  312. sagemaker/core/user_agent.py +76 -0
  313. sagemaker/core/utilities/__init__.py +24 -0
  314. sagemaker/core/utilities/cache.py +169 -0
  315. sagemaker/core/utilities/search_expression.py +133 -0
  316. sagemaker/core/utils/__init__.py +48 -0
  317. sagemaker/core/utils/code_injection/__init__.py +0 -0
  318. {sagemaker_core/main → sagemaker/core/utils}/code_injection/codec.py +2 -2
  319. {sagemaker_core/main → sagemaker/core/utils}/code_injection/shape_dag.py +5979 -176
  320. {sagemaker_core/main → sagemaker/core/utils}/exceptions.py +8 -8
  321. sagemaker_core/main/default_configs_helper.py → sagemaker/core/utils/intelligent_defaults_helper.py +5 -6
  322. {sagemaker_core/main → sagemaker/core/utils}/logs.py +1 -2
  323. {sagemaker_core/main → sagemaker/core/utils}/utils.py +27 -22
  324. sagemaker/core/workflow/__init__.py +152 -0
  325. sagemaker/core/workflow/conditions.py +313 -0
  326. sagemaker/core/workflow/entities.py +58 -0
  327. sagemaker/core/workflow/execution_variables.py +89 -0
  328. sagemaker/core/workflow/functions.py +193 -0
  329. sagemaker/core/workflow/parameters.py +222 -0
  330. sagemaker/core/workflow/pipeline_context.py +394 -0
  331. sagemaker/core/workflow/pipeline_definition_config.py +31 -0
  332. sagemaker/core/workflow/properties.py +285 -0
  333. sagemaker/core/workflow/step_outputs.py +65 -0
  334. sagemaker/core/workflow/utilities.py +514 -0
  335. sagemaker/lineage/__init__.py +33 -0
  336. sagemaker/lineage/action.py +28 -0
  337. sagemaker/lineage/artifact.py +28 -0
  338. sagemaker/lineage/context.py +28 -0
  339. sagemaker/lineage/lineage_trial_component.py +28 -0
  340. {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.3.1.dist-info}/METADATA +28 -9
  341. sagemaker_core-2.3.1.dist-info/RECORD +351 -0
  342. sagemaker_core-2.3.1.dist-info/top_level.txt +1 -0
  343. sagemaker_core/_version.py +0 -3
  344. sagemaker_core/helper/session_helper.py +0 -769
  345. sagemaker_core/resources/__init__.py +0 -1
  346. sagemaker_core/shapes/__init__.py +0 -1
  347. sagemaker_core/tools/__init__.py +0 -1
  348. sagemaker_core-1.0.62.dist-info/RECORD +0 -35
  349. sagemaker_core-1.0.62.dist-info/top_level.txt +0 -1
  350. {sagemaker_core → sagemaker/core/helper}/__init__.py +0 -0
  351. {sagemaker_core/helper → sagemaker/core/jumpstart/factory}/__init__.py +0 -0
  352. {sagemaker_core/main → sagemaker/core/jumpstart/hub}/__init__.py +0 -0
  353. {sagemaker_core/main/code_injection → sagemaker/core/modules/local_core}/__init__.py +0 -0
  354. {sagemaker_core/main → sagemaker/core/utils}/code_injection/base.py +0 -0
  355. {sagemaker_core/main → sagemaker/core/utils}/code_injection/constants.py +0 -0
  356. {sagemaker_core/main → sagemaker/core/utils}/user_agent.py +0 -0
  357. {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.3.1.dist-info}/WHEEL +0 -0
  358. {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.3.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,423 @@
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
+ """Placeholder docstring"""
14
+ from __future__ import absolute_import
15
+
16
+ import os
17
+ import platform
18
+ import sys
19
+ import tempfile
20
+ from abc import ABCMeta
21
+ from abc import abstractmethod
22
+ from six import with_metaclass
23
+
24
+ from six.moves.urllib.parse import urlparse
25
+
26
+ import sagemaker.core
27
+ from sagemaker.core.common_utils import _SENSITIVE_SYSTEM_PATHS
28
+
29
+
30
+ def get_data_source_instance(data_source, sagemaker_session):
31
+ """Return an Instance of :class:`sagemaker.local.data.DataSource`.
32
+
33
+ The instance can handle the provided data_source URI.
34
+
35
+ data_source can be either file:// or s3://
36
+
37
+ Args:
38
+ data_source (str): a valid URI that points to a data source.
39
+ sagemaker_session (:class:`sagemaker.core.helper.session.Session`): a SageMaker Session to
40
+ interact with S3 if required.
41
+
42
+ Returns:
43
+ sagemaker.local.data.DataSource: an Instance of a Data Source
44
+
45
+ Raises:
46
+ ValueError: If parsed_uri scheme is neither `file` nor `s3` , raise an
47
+ error.
48
+ """
49
+ parsed_uri = urlparse(data_source)
50
+ if parsed_uri.scheme == "file":
51
+ return LocalFileDataSource(parsed_uri.netloc + parsed_uri.path)
52
+ if parsed_uri.scheme == "s3":
53
+ return S3DataSource(parsed_uri.netloc, parsed_uri.path, sagemaker_session)
54
+ raise ValueError(
55
+ "data_source must be either file or s3. parsed_uri.scheme: {}".format(parsed_uri.scheme)
56
+ )
57
+
58
+
59
+ def get_splitter_instance(split_type):
60
+ """Return an Instance of :class:`sagemaker.local.data.Splitter`.
61
+
62
+ The instance returned is according to the specified `split_type`.
63
+
64
+ Args:
65
+ split_type (str): either 'Line' or 'RecordIO'. Can be left as None to
66
+ signal no data split will happen.
67
+
68
+ Returns
69
+ :class:`sagemaker.local.data.Splitter`: an Instance of a Splitter
70
+ """
71
+ if split_type == "None" or split_type is None:
72
+ return NoneSplitter()
73
+ if split_type == "Line":
74
+ return LineSplitter()
75
+ if split_type == "RecordIO":
76
+ return RecordIOSplitter()
77
+ raise ValueError("Invalid Split Type: %s" % split_type)
78
+
79
+
80
+ def get_batch_strategy_instance(strategy, splitter):
81
+ """Return an Instance of :class:`sagemaker.local.data.BatchStrategy` according to `strategy`
82
+
83
+ Args:
84
+ strategy (str): Either 'SingleRecord' or 'MultiRecord'
85
+ splitter (:class:`sagemaker.local.data.Splitter): splitter to get the data from.
86
+
87
+ Returns
88
+ :class:`sagemaker.local.data.BatchStrategy`: an Instance of a BatchStrategy
89
+ """
90
+ if strategy == "SingleRecord":
91
+ return SingleRecordStrategy(splitter)
92
+ if strategy == "MultiRecord":
93
+ return MultiRecordStrategy(splitter)
94
+ raise ValueError('Invalid Batch Strategy: %s - Valid Strategies: "SingleRecord", "MultiRecord"')
95
+
96
+
97
+ class DataSource(with_metaclass(ABCMeta, object)):
98
+ """Placeholder docstring"""
99
+
100
+ @abstractmethod
101
+ def get_file_list(self):
102
+ """Retrieve the list of absolute paths to all the files in this data source.
103
+
104
+ Returns:
105
+ List[str]: List of absolute paths.
106
+ """
107
+
108
+ @abstractmethod
109
+ def get_root_dir(self):
110
+ """Retrieve the absolute path to the root directory of this data source.
111
+
112
+ Returns:
113
+ str: absolute path to the root directory of this data source.
114
+ """
115
+
116
+
117
+ class LocalFileDataSource(DataSource):
118
+ """Represents a data source within the local filesystem."""
119
+
120
+ def __init__(self, root_path):
121
+ super(LocalFileDataSource, self).__init__()
122
+
123
+ self.root_path = os.path.abspath(root_path)
124
+
125
+ # Validate that the path is not in restricted locations
126
+ for restricted_path in _SENSITIVE_SYSTEM_PATHS:
127
+ if self.root_path != "/" and self.root_path.startswith(restricted_path):
128
+ raise ValueError(
129
+ f"Local Mode does not support mounting from restricted system paths. "
130
+ f"Got: {root_path}"
131
+ )
132
+
133
+ if not os.path.exists(self.root_path):
134
+ raise RuntimeError("Invalid data source: %s does not exist." % self.root_path)
135
+
136
+ def get_file_list(self):
137
+ """Retrieve the list of absolute paths to all the files in this data source.
138
+
139
+ Returns:
140
+ List[str] List of absolute paths.
141
+ """
142
+ if os.path.isdir(self.root_path):
143
+ return [
144
+ os.path.join(self.root_path, f)
145
+ for f in os.listdir(self.root_path)
146
+ if os.path.isfile(os.path.join(self.root_path, f))
147
+ ]
148
+ return [self.root_path]
149
+
150
+ def get_root_dir(self):
151
+ """Retrieve the absolute path to the root directory of this data source.
152
+
153
+ Returns:
154
+ str: absolute path to the root directory of this data source.
155
+ """
156
+ if os.path.isdir(self.root_path):
157
+ return self.root_path
158
+ return os.path.dirname(self.root_path)
159
+
160
+
161
+ class S3DataSource(DataSource):
162
+ """Defines a data source given by a bucket and S3 prefix.
163
+
164
+ The contents will be downloaded and then processed as local data.
165
+ """
166
+
167
+ def __init__(self, bucket, prefix, sagemaker_session):
168
+ """Create an S3DataSource instance.
169
+
170
+ Args:
171
+ bucket (str): S3 bucket name
172
+ prefix (str): S3 prefix path to the data
173
+ sagemaker_session (:class:`sagemaker.core.helper.session.Session`): a sagemaker_session with the
174
+ desired settings
175
+ to talk to S3
176
+ """
177
+ super(S3DataSource, self).__init__()
178
+
179
+ # Create a temporary dir to store the S3 contents
180
+ root_dir = sagemaker.core.config.config_manager.SageMakerConfig.get_config_value(
181
+ "local.container_root", sagemaker_session.config
182
+ )
183
+ if root_dir:
184
+ root_dir = os.path.abspath(root_dir)
185
+
186
+ working_dir = tempfile.mkdtemp(dir=root_dir)
187
+ # Docker cannot mount Mac OS /var folder properly see
188
+ # https://forums.docker.com/t/var-folders-isnt-mounted-properly/9600
189
+ # Only apply this workaround if the user didn't provide an alternate storage root dir.
190
+ if root_dir is None and platform.system() == "Darwin":
191
+ working_dir = "/private{}".format(working_dir)
192
+
193
+ sagemaker.core.common_utils.download_folder(bucket, prefix, working_dir, sagemaker_session)
194
+ self.files = LocalFileDataSource(working_dir)
195
+
196
+ def get_file_list(self):
197
+ """Retrieve the list of absolute paths to all the files in this data source.
198
+
199
+ Returns:
200
+ List[str]: List of absolute paths.
201
+ """
202
+ return self.files.get_file_list()
203
+
204
+ def get_root_dir(self):
205
+ """Retrieve the absolute path to the root directory of this data source.
206
+
207
+ Returns:
208
+ str: absolute path to the root directory of this data source.
209
+ """
210
+ return self.files.get_root_dir()
211
+
212
+
213
+ class Splitter(with_metaclass(ABCMeta, object)):
214
+ """Placeholder docstring"""
215
+
216
+ @abstractmethod
217
+ def split(self, file):
218
+ """Split a file into records using a specific strategy
219
+
220
+ Args:
221
+ file (str): path to the file to split
222
+
223
+ Returns:
224
+ generator for the individual records that were split from the file
225
+ """
226
+
227
+
228
+ class NoneSplitter(Splitter):
229
+ """Does not split records, essentially reads the whole file."""
230
+
231
+ # non-utf8 characters.
232
+ _textchars = bytearray({7, 8, 9, 10, 12, 13, 27} | set(range(0x20, 0x100)) - {0x7F})
233
+
234
+ def split(self, filename):
235
+ """Split a file into records using a specific strategy.
236
+
237
+ For this NoneSplitter there is no actual split happening and the file
238
+ is returned as a whole.
239
+
240
+ Args:
241
+ filename (str): path to the file to split
242
+
243
+ Returns: generator for the individual records that were split from
244
+ the file
245
+ """
246
+ with open(filename, "rb") as f:
247
+ buf = f.read()
248
+ if not self._is_binary(buf):
249
+ buf = buf.decode()
250
+ yield buf
251
+
252
+ def _is_binary(self, buf):
253
+ """Check whether `buf` contains binary data.
254
+
255
+ Returns True if `buf` contains any non-utf-8 characters.
256
+
257
+ Args:
258
+ buf (bytes): data to inspect
259
+
260
+ Returns:
261
+ True if data is binary, otherwise False
262
+ """
263
+ return bool(buf.translate(None, self._textchars))
264
+
265
+
266
+ class LineSplitter(Splitter):
267
+ """Split records by new line."""
268
+
269
+ def split(self, file):
270
+ """Split a file into records using a specific strategy
271
+
272
+ This LineSplitter splits the file on each line break.
273
+
274
+ Args:
275
+ file (str): path to the file to split
276
+
277
+ Returns: generator for the individual records that were split from
278
+ the file
279
+ """
280
+ with open(file, "r") as f:
281
+ for line in f:
282
+ yield line
283
+
284
+
285
+ class RecordIOSplitter(Splitter):
286
+ """Split using Amazon Recordio.
287
+
288
+ Not useful for string content.
289
+
290
+ Note: This class depends on the deprecated sagemaker.core.amazon module
291
+ and is no longer functional.
292
+ """
293
+
294
+ def split(self, file):
295
+ """Split a file into records using a specific strategy
296
+
297
+ This RecordIOSplitter splits the data into individual RecordIO
298
+ records.
299
+
300
+ Args:
301
+ file (str): path to the file to split
302
+
303
+ Returns: generator for the individual records that were split from
304
+ the file
305
+
306
+ Raises:
307
+ NotImplementedError: This functionality has been removed due to
308
+ deprecation of sagemaker.core.amazon module
309
+ """
310
+ raise NotImplementedError(
311
+ "RecordIOSplitter is no longer supported. "
312
+ "The sagemaker.core.amazon module has been deprecated and removed."
313
+ )
314
+
315
+
316
+ class BatchStrategy(with_metaclass(ABCMeta, object)):
317
+ """Placeholder docstring"""
318
+
319
+ def __init__(self, splitter):
320
+ """Create a Batch Strategy Instance
321
+
322
+ Args:
323
+ splitter (sagemaker.local.data.Splitter): A Splitter to pre-process
324
+ the data before batching.
325
+ """
326
+ self.splitter = splitter
327
+
328
+ @abstractmethod
329
+ def pad(self, file, size):
330
+ """Group together as many records as possible to fit in the specified size.
331
+
332
+ Args:
333
+ file (str): file path to read the records from.
334
+ size (int): maximum size in MB that each group of records will be
335
+ fitted to. passing 0 means unlimited size.
336
+
337
+ Returns:
338
+ generator of records
339
+ """
340
+
341
+
342
+ class MultiRecordStrategy(BatchStrategy):
343
+ """Feed multiple records at a time for batch inference.
344
+
345
+ Will group up as many records as possible within the payload specified.
346
+ """
347
+
348
+ def pad(self, file, size=6):
349
+ """Group together as many records as possible to fit in the specified size.
350
+
351
+ Args:
352
+ file (str): file path to read the records from.
353
+ size (int): maximum size in MB that each group of records will be
354
+ fitted to. passing 0 means unlimited size.
355
+
356
+ Returns:
357
+ generator of records
358
+ """
359
+ buffer = ""
360
+ for element in self.splitter.split(file):
361
+ if _payload_size_within_limit(buffer + element, size):
362
+ buffer += element
363
+ else:
364
+ tmp = buffer
365
+ buffer = element
366
+ yield tmp
367
+ if _validate_payload_size(buffer, size):
368
+ yield buffer
369
+
370
+
371
+ class SingleRecordStrategy(BatchStrategy):
372
+ """Feed a single record at a time for batch inference.
373
+
374
+ If a single record does not fit within the payload specified it will
375
+ throw a RuntimeError.
376
+ """
377
+
378
+ def pad(self, file, size=6):
379
+ """Group together as many records as possible to fit in the specified size.
380
+
381
+ This SingleRecordStrategy will not group any record and will return
382
+ them one by one as long as they are within the maximum size.
383
+
384
+ Args:
385
+ file (str): file path to read the records from.
386
+ size (int): maximum size in MB that each group of records will be
387
+ fitted to. passing 0 means unlimited size.
388
+
389
+ Returns:
390
+ generator of records
391
+ """
392
+ for element in self.splitter.split(file):
393
+ if _validate_payload_size(element, size):
394
+ yield element
395
+
396
+
397
+ def _payload_size_within_limit(payload, size):
398
+ """Placeholder docstring."""
399
+ size_in_bytes = size * 1024 * 1024
400
+ if size == 0:
401
+ return True
402
+ return sys.getsizeof(payload) < size_in_bytes
403
+
404
+
405
+ def _validate_payload_size(payload, size):
406
+ """Check if a payload is within the size in MB threshold.
407
+
408
+ Raise an exception if the payload is beyond the size in MB threshold.
409
+
410
+ Args:
411
+ payload: data that will be checked
412
+ size (int): max size in MB
413
+
414
+ Returns:
415
+ bool: True if within bounds. if size=0 it will always return True
416
+
417
+ Raises:
418
+ RuntimeError: If the payload is larger a runtime error is thrown.
419
+ """
420
+
421
+ if _payload_size_within_limit(payload, size):
422
+ return True
423
+ raise RuntimeError("Record is larger than %sMB. Please increase your max_payload" % size)