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,509 @@
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
+ """Functions for generating ECR image URIs for pre-built SageMaker Docker images."""
14
+ from __future__ import absolute_import
15
+
16
+ import json
17
+ import logging
18
+ import os
19
+ from typing import Optional
20
+ from packaging.version import Version
21
+ import requests
22
+
23
+
24
+ from sagemaker.core.serverless_inference_config import ServerlessInferenceConfig
25
+ from sagemaker.core.training_compiler_config import TrainingCompilerConfig
26
+ from sagemaker.core.fw_utils import (
27
+ GRAVITON_ALLOWED_TARGET_INSTANCE_FAMILY,
28
+ GRAVITON_ALLOWED_FRAMEWORKS,
29
+ )
30
+ from sagemaker.core.common_utils import _botocore_resolver, get_instance_type_family
31
+
32
+ logger = logging.getLogger(__name__)
33
+
34
+ ECR_URI_TEMPLATE = "{registry}.dkr.{hostname}/{repository}"
35
+ HUGGING_FACE_FRAMEWORK = "huggingface"
36
+ HUGGING_FACE_LLM_FRAMEWORK = "huggingface-llm"
37
+ HUGGING_FACE_TEI_GPU_FRAMEWORK = "huggingface-tei"
38
+ HUGGING_FACE_TEI_CPU_FRAMEWORK = "huggingface-tei-cpu"
39
+ HUGGING_FACE_LLM_NEURONX_FRAMEWORK = "huggingface-llm-neuronx"
40
+ XGBOOST_FRAMEWORK = "xgboost"
41
+ SKLEARN_FRAMEWORK = "sklearn"
42
+ TRAINIUM_ALLOWED_FRAMEWORKS = "pytorch"
43
+ INFERENCE_GRAVITON = "inference_graviton"
44
+ DATA_WRANGLER_FRAMEWORK = "data-wrangler"
45
+ STABILITYAI_FRAMEWORK = "stabilityai"
46
+ SAGEMAKER_TRITONSERVER_FRAMEWORK = "sagemaker-tritonserver"
47
+
48
+
49
+ def _get_image_tag(
50
+ container_version,
51
+ distributed,
52
+ final_image_scope,
53
+ framework,
54
+ inference_tool,
55
+ instance_type,
56
+ processor,
57
+ py_version,
58
+ tag_prefix,
59
+ version,
60
+ ):
61
+ """Return image tag based on framework, container, and compute configuration(s)."""
62
+ instance_type_family = get_instance_type_family(instance_type)
63
+ if framework in (XGBOOST_FRAMEWORK, SKLEARN_FRAMEWORK):
64
+ if instance_type_family and final_image_scope == INFERENCE_GRAVITON:
65
+ _validate_arg(
66
+ instance_type_family,
67
+ GRAVITON_ALLOWED_TARGET_INSTANCE_FAMILY,
68
+ "instance type",
69
+ )
70
+ if (
71
+ instance_type_family in GRAVITON_ALLOWED_TARGET_INSTANCE_FAMILY
72
+ or final_image_scope == INFERENCE_GRAVITON
73
+ ):
74
+ version_to_arm64_tag_mapping = {
75
+ "xgboost": {
76
+ "1.5-1": "1.5-1-arm64",
77
+ "1.3-1": "1.3-1-arm64",
78
+ },
79
+ "sklearn": {
80
+ "1.0-1": "1.0-1-arm64-cpu-py3",
81
+ },
82
+ }
83
+ tag = version_to_arm64_tag_mapping[framework][version]
84
+ else:
85
+ tag = _format_tag(tag_prefix, processor, py_version, container_version, inference_tool)
86
+ else:
87
+ tag = _format_tag(tag_prefix, processor, py_version, container_version, inference_tool)
88
+
89
+ if instance_type is not None and _should_auto_select_container_version(
90
+ instance_type, distributed
91
+ ):
92
+ container_versions = {
93
+ "tensorflow-2.3-gpu-py37": "cu110-ubuntu18.04-v3",
94
+ "tensorflow-2.3.1-gpu-py37": "cu110-ubuntu18.04",
95
+ "tensorflow-2.3.2-gpu-py37": "cu110-ubuntu18.04",
96
+ "tensorflow-1.15-gpu-py37": "cu110-ubuntu18.04-v8",
97
+ "tensorflow-1.15.4-gpu-py37": "cu110-ubuntu18.04",
98
+ "tensorflow-1.15.5-gpu-py37": "cu110-ubuntu18.04",
99
+ "mxnet-1.8-gpu-py37": "cu110-ubuntu16.04-v1",
100
+ "mxnet-1.8.0-gpu-py37": "cu110-ubuntu16.04",
101
+ "pytorch-1.6-gpu-py36": "cu110-ubuntu18.04-v3",
102
+ "pytorch-1.6.0-gpu-py36": "cu110-ubuntu18.04",
103
+ "pytorch-1.6-gpu-py3": "cu110-ubuntu18.04-v3",
104
+ "pytorch-1.6.0-gpu-py3": "cu110-ubuntu18.04",
105
+ }
106
+ key = "-".join([framework, tag])
107
+ if key in container_versions:
108
+ tag = "-".join([tag, container_versions[key]])
109
+
110
+ # Triton images don't have a trailing -gpu tag. Only -cpu images do.
111
+ if framework == SAGEMAKER_TRITONSERVER_FRAMEWORK:
112
+ if processor == "gpu":
113
+ tag = tag.rstrip("-gpu")
114
+
115
+ return tag
116
+
117
+
118
+ def _config_for_framework_and_scope(framework, image_scope, accelerator_type=None):
119
+ """Loads the JSON config for the given framework and image scope."""
120
+ config = config_for_framework(framework)
121
+
122
+ if accelerator_type:
123
+ _validate_accelerator_type(accelerator_type)
124
+
125
+ if image_scope not in ("eia", "inference"):
126
+ logger.warning(
127
+ "Elastic inference is for inference only. Ignoring image scope: %s.",
128
+ image_scope,
129
+ )
130
+ image_scope = "eia"
131
+
132
+ available_scopes = config.get("scope", list(config.keys()))
133
+
134
+ if len(available_scopes) == 1:
135
+ if image_scope and image_scope != available_scopes[0]:
136
+ logger.warning(
137
+ "Defaulting to only supported image scope: %s. Ignoring image scope: %s.",
138
+ available_scopes[0],
139
+ image_scope,
140
+ )
141
+ image_scope = available_scopes[0]
142
+
143
+ if not image_scope and "scope" in config and set(available_scopes) == {"training", "inference"}:
144
+ logger.info(
145
+ "Same images used for training and inference. Defaulting to image scope: %s.",
146
+ available_scopes[0],
147
+ )
148
+ image_scope = available_scopes[0]
149
+
150
+ _validate_arg(image_scope, available_scopes, "image scope")
151
+ return config if "scope" in config else config[image_scope]
152
+
153
+
154
+ def _validate_instance_deprecation(framework, instance_type, version):
155
+ """Check if instance type is deprecated for a certain framework with a certain version"""
156
+ if get_instance_type_family(instance_type) == "p2":
157
+ if (framework == "pytorch" and Version(version) >= Version("1.13")) or (
158
+ framework == "tensorflow" and Version(version) >= Version("2.12")
159
+ ):
160
+ raise ValueError(
161
+ "P2 instances have been deprecated for sagemaker jobs starting PyTorch 1.13 and TensorFlow 2.12"
162
+ "For information about supported instance types please refer to "
163
+ "https://aws.amazon.com/sagemaker/pricing/"
164
+ )
165
+
166
+
167
+ def _validate_for_suppported_frameworks_and_instance_type(framework, instance_type):
168
+ """Validate if framework is supported for the instance_type"""
169
+ # Validate for Trainium allowed frameworks
170
+ if (
171
+ instance_type is not None
172
+ and "trn" in instance_type
173
+ and framework not in TRAINIUM_ALLOWED_FRAMEWORKS
174
+ ):
175
+ _validate_framework(framework, TRAINIUM_ALLOWED_FRAMEWORKS, "framework", "Trainium")
176
+
177
+ # Validate for Graviton allowed frameowrks
178
+ if (
179
+ instance_type is not None
180
+ and get_instance_type_family(instance_type) in GRAVITON_ALLOWED_TARGET_INSTANCE_FAMILY
181
+ and framework not in GRAVITON_ALLOWED_FRAMEWORKS
182
+ ):
183
+ _validate_framework(framework, GRAVITON_ALLOWED_FRAMEWORKS, "framework", "Graviton")
184
+
185
+
186
+ def config_for_framework(framework):
187
+ """Loads the JSON config for the given framework."""
188
+ fname = os.path.join(os.path.dirname(__file__), "..", "image_uri_config", "{}.json".format(framework))
189
+ with open(fname) as f:
190
+ return json.load(f)
191
+
192
+
193
+ def _get_final_image_scope(framework, instance_type, image_scope):
194
+ """Return final image scope based on provided framework and instance type."""
195
+ if (
196
+ framework in GRAVITON_ALLOWED_FRAMEWORKS
197
+ and get_instance_type_family(instance_type) in GRAVITON_ALLOWED_TARGET_INSTANCE_FAMILY
198
+ ):
199
+ return INFERENCE_GRAVITON
200
+ if image_scope is None and framework in (XGBOOST_FRAMEWORK, SKLEARN_FRAMEWORK):
201
+ # Preserves backwards compatibility with XGB/SKLearn configs which no
202
+ # longer define top-level "scope" keys after introducing support for
203
+ # Graviton inference. Training and inference configs for XGB/SKLearn are
204
+ # identical, so default to training.
205
+ return "training"
206
+ return image_scope
207
+
208
+
209
+ def _get_inference_tool(inference_tool, instance_type):
210
+ """Extract the inference tool name from instance type."""
211
+ if not inference_tool:
212
+ instance_type_family = get_instance_type_family(instance_type)
213
+ if instance_type_family.startswith("inf") or instance_type_family.startswith("trn"):
214
+ return "neuron"
215
+ return inference_tool
216
+
217
+
218
+ def _get_latest_versions(list_of_versions):
219
+ """Extract the latest version from the input list of available versions."""
220
+ return sorted(list_of_versions, reverse=True)[0]
221
+
222
+
223
+ def _get_latest_version(framework, version, image_scope):
224
+ """Get the latest version from the input framework"""
225
+ if version:
226
+ return version
227
+ try:
228
+ framework_config = config_for_framework(framework)
229
+ except FileNotFoundError:
230
+ raise ValueError("Invalid framework {}".format(framework))
231
+
232
+ if not framework_config:
233
+ raise ValueError("Invalid framework {}".format(framework))
234
+
235
+ if not version:
236
+ version = _fetch_latest_version_from_config(framework_config, image_scope)
237
+ return version
238
+
239
+
240
+ def _validate_accelerator_type(accelerator_type):
241
+ """Raises a ``ValueError`` if ``accelerator_type`` is invalid."""
242
+ if not accelerator_type.startswith("ml.eia") and accelerator_type != "local_sagemaker_notebook":
243
+ raise ValueError(
244
+ "Invalid SageMaker Elastic Inference accelerator type: {}. "
245
+ "See https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html".format(accelerator_type)
246
+ )
247
+
248
+
249
+ def _validate_version_and_set_if_needed(version, config, framework, image_scope):
250
+ """Checks if the framework/algorithm version is one of the supported versions."""
251
+ if not config:
252
+ config = config_for_framework(framework)
253
+ available_versions = list(config["versions"].keys())
254
+ aliased_versions = list(config.get("version_aliases", {}).keys())
255
+ if len(available_versions) == 1 and version not in aliased_versions:
256
+ return available_versions[0]
257
+ if not version:
258
+ version = _get_latest_version(framework, version, image_scope)
259
+ _validate_arg(version, available_versions + aliased_versions, "{} version".format(framework))
260
+ return version
261
+
262
+
263
+ def _version_for_config(version, config):
264
+ """Returns the version string for retrieving a framework version's specific config."""
265
+ if "version_aliases" in config:
266
+ if version in config["version_aliases"].keys():
267
+ return config["version_aliases"][version]
268
+
269
+ return version
270
+
271
+
272
+ def _registry_from_region(region, registry_dict):
273
+ """Returns the ECR registry (AWS account number) for the given region."""
274
+ _validate_arg(region, registry_dict.keys(), "region")
275
+ return registry_dict[region]
276
+
277
+
278
+ def _processor(instance_type, available_processors, serverless_inference_config=None):
279
+ """Returns the processor type for the given instance type."""
280
+ if not available_processors:
281
+ logger.info("Ignoring unnecessary instance type: %s.", instance_type)
282
+ return None
283
+
284
+ if len(available_processors) == 1 and not instance_type:
285
+ logger.info("Defaulting to only supported image scope: %s.", available_processors[0])
286
+ return available_processors[0]
287
+
288
+ if serverless_inference_config is not None:
289
+ logger.info("Defaulting to CPU type when using serverless inference")
290
+ return "cpu"
291
+
292
+ if not instance_type:
293
+ raise ValueError(
294
+ "Empty SageMaker instance type. For options, see: "
295
+ "https://aws.amazon.com/sagemaker/pricing/instance-types"
296
+ )
297
+
298
+ if instance_type.startswith("local"):
299
+ processor = "cpu" if instance_type == "local" else "gpu"
300
+ elif instance_type.startswith("neuron"):
301
+ processor = "neuron"
302
+ else:
303
+ # looks for either "ml.<family>.<size>" or "ml_<family>"
304
+ family = get_instance_type_family(instance_type)
305
+ if family:
306
+ # For some frameworks, we have optimized images for specific families, e.g c5 or p3.
307
+ # In those cases, we use the family name in the image tag. In other cases, we use
308
+ # 'cpu' or 'gpu'.
309
+ if family in available_processors:
310
+ processor = family
311
+ elif family.startswith("inf"):
312
+ processor = "inf"
313
+ elif family.startswith("trn"):
314
+ processor = "trn"
315
+ elif family[0] in ("g", "p"):
316
+ processor = "gpu"
317
+ else:
318
+ processor = "cpu"
319
+ else:
320
+ raise ValueError(
321
+ "Invalid SageMaker instance type: {}. For options, see: "
322
+ "https://aws.amazon.com/sagemaker/pricing/instance-types".format(instance_type)
323
+ )
324
+
325
+ _validate_arg(processor, available_processors, "processor")
326
+ return processor
327
+
328
+
329
+ def _should_auto_select_container_version(instance_type, distributed):
330
+ """Returns a boolean that indicates whether to use an auto-selected container version."""
331
+ p4d = False
332
+ if instance_type:
333
+ # looks for either "ml.<family>.<size>" or "ml_<family>"
334
+ family = get_instance_type_family(instance_type)
335
+ if family:
336
+ p4d = family == "p4d"
337
+
338
+ return p4d or distributed
339
+
340
+
341
+ def _validate_py_version_and_set_if_needed(py_version, version_config, framework):
342
+ """Checks if the Python version is one of the supported versions."""
343
+ if "repository" in version_config:
344
+ available_versions = version_config.get("py_versions")
345
+ else:
346
+ available_versions = list(version_config.keys())
347
+
348
+ if not available_versions:
349
+ if py_version:
350
+ logger.info("Ignoring unnecessary Python version: %s.", py_version)
351
+ return None
352
+
353
+ if py_version is None and defaults.SPARK_NAME == framework:
354
+ return None
355
+
356
+ if py_version is None and len(available_versions) == 1:
357
+ logger.info("Defaulting to only available Python version: %s", available_versions[0])
358
+ return available_versions[0]
359
+
360
+ _validate_arg(py_version, available_versions, "Python version")
361
+ return py_version
362
+
363
+
364
+ def _validate_arg(arg, available_options, arg_name):
365
+ """Checks if the arg is in the available options, and raises a ``ValueError`` if not."""
366
+ if arg not in available_options:
367
+ raise ValueError(
368
+ "Unsupported {arg_name}: {arg}. You may need to upgrade your SDK version "
369
+ "(pip install -U sagemaker) for newer {arg_name}s. Supported {arg_name}(s): "
370
+ "{options}.".format(arg_name=arg_name, arg=arg, options=", ".join(available_options))
371
+ )
372
+
373
+
374
+ def _validate_framework(framework, allowed_frameworks, arg_name, hardware_name):
375
+ """Checks if the framework is in the allowed frameworks, and raises a ``ValueError`` if not."""
376
+ if framework not in allowed_frameworks:
377
+ raise ValueError(
378
+ f"Unsupported {arg_name}: {framework}. "
379
+ f"Supported {arg_name}(s) for {hardware_name} instances: {allowed_frameworks}."
380
+ )
381
+
382
+
383
+ def _format_tag(tag_prefix, processor, py_version, container_version, inference_tool=None):
384
+ """Creates a tag for the image URI."""
385
+ if inference_tool:
386
+ return "-".join(x for x in (tag_prefix, inference_tool, py_version, container_version) if x)
387
+ return "-".join(x for x in (tag_prefix, processor, py_version, container_version) if x)
388
+
389
+
390
+ def _fetch_latest_version_from_config( # pylint: disable=R0911
391
+ framework_config: dict, image_scope: Optional[str] = None
392
+ ) -> Optional[str]:
393
+ """Helper function to fetch the latest version as a string from a framework's config
394
+
395
+ Args:
396
+ framework_config (dict): A framework config dict.
397
+ image_scope (str): Scope of the image, eg: training, inference
398
+ Returns:
399
+ Version string if latest version found else None
400
+ """
401
+ if image_scope in framework_config:
402
+ if image_scope_config := framework_config[image_scope]:
403
+ if "version_aliases" in image_scope_config:
404
+ if "latest" in image_scope_config["version_aliases"]:
405
+ return image_scope_config["version_aliases"]["latest"]
406
+ top_version = None
407
+ bottom_version = None
408
+
409
+ if "versions" in framework_config:
410
+ versions = list(framework_config["versions"].keys())
411
+ if len(versions) == 1:
412
+ return versions[0]
413
+ top_version = versions[0]
414
+ bottom_version = versions[-1]
415
+ if top_version == "latest" or bottom_version == "latest":
416
+ return None
417
+ elif (
418
+ image_scope is not None
419
+ and image_scope in framework_config
420
+ and "versions" in framework_config[image_scope]
421
+ ):
422
+ versions = list(framework_config[image_scope]["versions"].keys())
423
+ top_version = versions[0]
424
+ bottom_version = versions[-1]
425
+ elif "processing" in framework_config and "versions" in framework_config["processing"]:
426
+ versions = list(framework_config["processing"]["versions"].keys())
427
+ top_version = versions[0]
428
+ bottom_version = versions[-1]
429
+ if top_version and bottom_version:
430
+ if top_version.endswith(".x") or bottom_version.endswith(".x"):
431
+ top_number = int(top_version[:-2])
432
+ bottom_number = int(bottom_version[:-2])
433
+ max_version = max(top_number, bottom_number)
434
+ return f"{max_version}.x"
435
+ if Version(top_version) >= Version(bottom_version):
436
+ return top_version
437
+ return bottom_version
438
+
439
+ return None
440
+
441
+
442
+ def _retrieve_pytorch_uri_inputs_are_all_default(
443
+ version: Optional[str] = None,
444
+ py_version: Optional[str] = None,
445
+ instance_type: Optional[str] = None,
446
+ accelerator_type: Optional[str] = None,
447
+ image_scope: Optional[str] = None,
448
+ container_version: str = None,
449
+ distributed: bool = False,
450
+ smp: bool = False,
451
+ training_compiler_config: TrainingCompilerConfig = None,
452
+ sdk_version: Optional[str] = None,
453
+ inference_tool: Optional[str] = None,
454
+ serverless_inference_config: ServerlessInferenceConfig = None,
455
+ ) -> bool:
456
+ """
457
+ Determine if the inputs for _retrieve_pytorch_uri() are all default values.
458
+ """
459
+ return (
460
+ not version
461
+ and not py_version
462
+ and not instance_type
463
+ and not accelerator_type
464
+ and not image_scope
465
+ and not container_version
466
+ and not distributed
467
+ and not smp
468
+ and not training_compiler_config
469
+ and not sdk_version
470
+ and not inference_tool
471
+ and not serverless_inference_config
472
+ )
473
+
474
+
475
+ def _retrieve_latest_pytorch_training_uri(region: str):
476
+ """
477
+ Retrive the URI for the latest PyTorch training image for CPU
478
+ """
479
+ config = config_for_framework("pytorch")
480
+ image_scope = "training"
481
+
482
+ latest_version = _fetch_latest_version_from_config(config, image_scope)
483
+ version_config = config[image_scope]["versions"][latest_version]
484
+ py_version = _validate_py_version_and_set_if_needed(None, version_config, None)
485
+
486
+ endpoint_data = _botocore_resolver().construct_endpoint("ecr", region)
487
+ if region == "il-central-1" and not endpoint_data:
488
+ endpoint_data = {"hostname": "ecr.{}.amazonaws.com".format(region)}
489
+
490
+ registry = _registry_from_region(region, version_config["registries"])
491
+ hostname = endpoint_data["hostname"]
492
+ repo = version_config["repository"]
493
+
494
+ tag = _get_image_tag(
495
+ container_version="ec2",
496
+ distributed=False,
497
+ final_image_scope=image_scope,
498
+ framework="pytorch",
499
+ inference_tool="",
500
+ instance_type="",
501
+ processor="cpu",
502
+ py_version=py_version,
503
+ tag_prefix=latest_version,
504
+ version=latest_version,
505
+ )
506
+ if tag:
507
+ repo += ":{}".format(tag)
508
+
509
+ return ECR_URI_TEMPLATE.format(registry=registry, hostname=hostname, repository=repo)
@@ -0,0 +1,7 @@
1
+ a = 1
2
+ b = 2
3
+ print(locals())
4
+ args = dict(locals())
5
+ print(args)
6
+ locals()["a"] = 3
7
+ print(a)