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.
Files changed (363) hide show
  1. sagemaker/core/__init__.py +16 -0
  2. sagemaker/core/_studio.py +116 -0
  3. sagemaker/core/_version.py +11 -0
  4. sagemaker/core/accept_types.py +131 -0
  5. sagemaker/core/analytics.py +744 -0
  6. sagemaker/core/apiutils/__init__.py +13 -0
  7. sagemaker/core/apiutils/_base_types.py +228 -0
  8. sagemaker/core/apiutils/_boto_functions.py +130 -0
  9. sagemaker/core/apiutils/_utils.py +34 -0
  10. sagemaker/core/base_deserializers.py +35 -0
  11. sagemaker/core/base_serializers.py +35 -0
  12. sagemaker/core/clarify/__init__.py +2898 -0
  13. sagemaker/core/collection.py +467 -0
  14. sagemaker/core/common_utils.py +2281 -0
  15. sagemaker/core/compute_resource_requirements/__init__.py +18 -0
  16. sagemaker/core/compute_resource_requirements/resource_requirements.py +94 -0
  17. sagemaker/core/config/__init__.py +181 -0
  18. sagemaker/core/config/config.py +238 -0
  19. sagemaker/core/config/config_manager.py +595 -0
  20. sagemaker/core/config/config_schema.py +1220 -0
  21. sagemaker/core/config/config_utils.py +297 -0
  22. {sagemaker_core/main → sagemaker/core}/config_schema.py +410 -4
  23. sagemaker/core/constants.py +73 -0
  24. sagemaker/core/content_types.py +137 -0
  25. sagemaker/core/debugger/__init__.py +39 -0
  26. sagemaker/core/debugger/debugger.py +945 -0
  27. sagemaker/core/debugger/framework_profile.py +292 -0
  28. sagemaker/core/debugger/metrics_config.py +468 -0
  29. sagemaker/core/debugger/profiler.py +42 -0
  30. sagemaker/core/debugger/profiler_config.py +190 -0
  31. sagemaker/core/debugger/profiler_constants.py +40 -0
  32. sagemaker/core/debugger/utils.py +148 -0
  33. sagemaker/core/deprecations.py +254 -0
  34. sagemaker/core/deserializers/__init__.py +10 -0
  35. sagemaker/core/deserializers/base.py +424 -0
  36. sagemaker/core/deserializers/implementations.py +157 -0
  37. sagemaker/core/drift_check_baselines.py +106 -0
  38. sagemaker/core/enums.py +51 -0
  39. sagemaker/core/environment_variables.py +101 -0
  40. sagemaker/core/exceptions.py +108 -0
  41. sagemaker/core/experiments/__init__.py +53 -0
  42. sagemaker/core/experiments/_api_types.py +251 -0
  43. sagemaker/core/experiments/_environment.py +124 -0
  44. sagemaker/core/experiments/_helper.py +294 -0
  45. sagemaker/core/experiments/_metrics.py +333 -0
  46. sagemaker/core/experiments/_run_context.py +58 -0
  47. sagemaker/core/experiments/_utils.py +216 -0
  48. sagemaker/core/experiments/experiment.py +244 -0
  49. sagemaker/core/experiments/run.py +970 -0
  50. sagemaker/core/experiments/trial.py +296 -0
  51. sagemaker/core/experiments/trial_component.py +387 -0
  52. sagemaker/core/explainer/__init__.py +24 -0
  53. sagemaker/core/explainer/clarify_explainer_config.py +298 -0
  54. sagemaker/core/explainer/explainer_config.py +44 -0
  55. sagemaker/core/fw_utils.py +1176 -0
  56. sagemaker/core/git_utils.py +349 -0
  57. sagemaker/core/helper/pipeline_variable.py +82 -0
  58. sagemaker/core/helper/session_helper.py +2965 -0
  59. sagemaker/core/huggingface/__init__.py +29 -0
  60. sagemaker/core/huggingface/llm_utils.py +150 -0
  61. sagemaker/core/huggingface/processing.py +139 -0
  62. sagemaker/core/huggingface/training_compiler/config.py +167 -0
  63. sagemaker/core/hyperparameters.py +172 -0
  64. sagemaker/core/image_retriever/__init__.py +3 -0
  65. sagemaker/core/image_retriever/image_retriever.py +640 -0
  66. sagemaker/core/image_retriever/image_retriever_utils.py +511 -0
  67. sagemaker/core/image_retriever/test.py +7 -0
  68. sagemaker/core/image_uri_config/__init__.py +13 -0
  69. sagemaker/core/image_uri_config/autogluon.json +1335 -0
  70. sagemaker/core/image_uri_config/blazingtext.json +50 -0
  71. sagemaker/core/image_uri_config/chainer.json +104 -0
  72. sagemaker/core/image_uri_config/clarify.json +39 -0
  73. sagemaker/core/image_uri_config/coach-mxnet.json +70 -0
  74. sagemaker/core/image_uri_config/coach-tensorflow.json +186 -0
  75. sagemaker/core/image_uri_config/data-wrangler.json +91 -0
  76. sagemaker/core/image_uri_config/debugger.json +34 -0
  77. sagemaker/core/image_uri_config/detailed-profiler.json +18 -0
  78. sagemaker/core/image_uri_config/djl-deepspeed.json +385 -0
  79. sagemaker/core/image_uri_config/djl-fastertransformer.json +167 -0
  80. sagemaker/core/image_uri_config/djl-lmi.json +136 -0
  81. sagemaker/core/image_uri_config/djl-neuronx.json +258 -0
  82. sagemaker/core/image_uri_config/djl-tensorrtllm.json +262 -0
  83. sagemaker/core/image_uri_config/factorization-machines.json +50 -0
  84. sagemaker/core/image_uri_config/forecasting-deepar.json +50 -0
  85. sagemaker/core/image_uri_config/huggingface-llm-neuronx.json +660 -0
  86. sagemaker/core/image_uri_config/huggingface-llm.json +1158 -0
  87. sagemaker/core/image_uri_config/huggingface-neuron.json +52 -0
  88. sagemaker/core/image_uri_config/huggingface-neuronx.json +510 -0
  89. sagemaker/core/image_uri_config/huggingface-tei-cpu.json +298 -0
  90. sagemaker/core/image_uri_config/huggingface-tei.json +298 -0
  91. sagemaker/core/image_uri_config/huggingface-training-compiler.json +195 -0
  92. sagemaker/core/image_uri_config/huggingface.json +2138 -0
  93. sagemaker/core/image_uri_config/hyperpod-recipes-neuron.json +52 -0
  94. sagemaker/core/image_uri_config/image-classification-neo.json +43 -0
  95. sagemaker/core/image_uri_config/image-classification.json +50 -0
  96. sagemaker/core/image_uri_config/inferentia-mxnet.json +88 -0
  97. sagemaker/core/image_uri_config/inferentia-pytorch.json +127 -0
  98. sagemaker/core/image_uri_config/inferentia-tensorflow.json +88 -0
  99. sagemaker/core/image_uri_config/instance_gpu_info.json +782 -0
  100. sagemaker/core/image_uri_config/ipinsights.json +50 -0
  101. sagemaker/core/image_uri_config/kmeans.json +50 -0
  102. sagemaker/core/image_uri_config/knn.json +50 -0
  103. sagemaker/core/image_uri_config/lda.json +26 -0
  104. sagemaker/core/image_uri_config/linear-learner.json +50 -0
  105. sagemaker/core/image_uri_config/model-monitor.json +42 -0
  106. sagemaker/core/image_uri_config/mxnet.json +1154 -0
  107. sagemaker/core/image_uri_config/neo-mxnet.json +64 -0
  108. sagemaker/core/image_uri_config/neo-pytorch.json +341 -0
  109. sagemaker/core/image_uri_config/neo-tensorflow.json +109 -0
  110. sagemaker/core/image_uri_config/ntm.json +50 -0
  111. sagemaker/core/image_uri_config/object-detection.json +50 -0
  112. sagemaker/core/image_uri_config/object2vec.json +50 -0
  113. sagemaker/core/image_uri_config/pca.json +50 -0
  114. sagemaker/core/image_uri_config/pytorch-neuron.json +43 -0
  115. sagemaker/core/image_uri_config/pytorch-smp.json +218 -0
  116. sagemaker/core/image_uri_config/pytorch-training-compiler.json +80 -0
  117. sagemaker/core/image_uri_config/pytorch.json +3101 -0
  118. sagemaker/core/image_uri_config/randomcutforest.json +50 -0
  119. sagemaker/core/image_uri_config/ray-pytorch.json +46 -0
  120. sagemaker/core/image_uri_config/ray-tensorflow.json +194 -0
  121. sagemaker/core/image_uri_config/sagemaker-base-python.json +46 -0
  122. sagemaker/core/image_uri_config/sagemaker-distribution.json +37 -0
  123. sagemaker/core/image_uri_config/sagemaker-geospatial.json +13 -0
  124. sagemaker/core/image_uri_config/sagemaker-tritonserver.json +212 -0
  125. sagemaker/core/image_uri_config/semantic-segmentation.json +50 -0
  126. sagemaker/core/image_uri_config/seq2seq.json +50 -0
  127. sagemaker/core/image_uri_config/sklearn.json +446 -0
  128. sagemaker/core/image_uri_config/spark.json +280 -0
  129. sagemaker/core/image_uri_config/sparkml-serving.json +97 -0
  130. sagemaker/core/image_uri_config/stabilityai.json +53 -0
  131. sagemaker/core/image_uri_config/tensorflow.json +5086 -0
  132. sagemaker/core/image_uri_config/vw.json +25 -0
  133. sagemaker/core/image_uri_config/xgboost-neo.json +43 -0
  134. sagemaker/core/image_uri_config/xgboost.json +888 -0
  135. sagemaker/core/image_uris.py +810 -0
  136. sagemaker/core/inference_config.py +144 -0
  137. sagemaker/core/inference_recommender/__init__.py +18 -0
  138. sagemaker/core/inference_recommender/inference_recommender_mixin.py +622 -0
  139. sagemaker/core/inputs.py +366 -0
  140. sagemaker/core/instance_group.py +61 -0
  141. sagemaker/core/instance_types.py +164 -0
  142. sagemaker/core/instance_types_gpu_info.py +43 -0
  143. sagemaker/core/interactive_apps/__init__.py +41 -0
  144. sagemaker/core/interactive_apps/base_interactive_app.py +204 -0
  145. sagemaker/core/interactive_apps/detail_profiler_app.py +139 -0
  146. sagemaker/core/interactive_apps/tensorboard.py +149 -0
  147. sagemaker/core/iterators.py +186 -0
  148. sagemaker/core/job.py +380 -0
  149. sagemaker/core/jumpstart/__init__.py +156 -0
  150. sagemaker/core/jumpstart/accessors.py +390 -0
  151. sagemaker/core/jumpstart/artifacts/__init__.py +69 -0
  152. sagemaker/core/jumpstart/artifacts/environment_variables.py +252 -0
  153. sagemaker/core/jumpstart/artifacts/hyperparameters.py +120 -0
  154. sagemaker/core/jumpstart/artifacts/image_uris.py +139 -0
  155. sagemaker/core/jumpstart/artifacts/incremental_training.py +87 -0
  156. sagemaker/core/jumpstart/artifacts/instance_types.py +223 -0
  157. sagemaker/core/jumpstart/artifacts/kwargs.py +289 -0
  158. sagemaker/core/jumpstart/artifacts/metric_definitions.py +117 -0
  159. sagemaker/core/jumpstart/artifacts/model_packages.py +202 -0
  160. sagemaker/core/jumpstart/artifacts/model_uris.py +252 -0
  161. sagemaker/core/jumpstart/artifacts/payloads.py +96 -0
  162. sagemaker/core/jumpstart/artifacts/predictors.py +540 -0
  163. sagemaker/core/jumpstart/artifacts/resource_names.py +86 -0
  164. sagemaker/core/jumpstart/artifacts/resource_requirements.py +162 -0
  165. sagemaker/core/jumpstart/artifacts/script_uris.py +172 -0
  166. sagemaker/core/jumpstart/cache.py +663 -0
  167. sagemaker/core/jumpstart/configs.py +50 -0
  168. sagemaker/core/jumpstart/constants.py +198 -0
  169. sagemaker/core/jumpstart/deserializers.py +81 -0
  170. sagemaker/core/jumpstart/document.py +76 -0
  171. sagemaker/core/jumpstart/enums.py +168 -0
  172. sagemaker/core/jumpstart/exceptions.py +236 -0
  173. sagemaker/core/jumpstart/factory/utils.py +833 -0
  174. sagemaker/core/jumpstart/filters.py +597 -0
  175. sagemaker/core/jumpstart/hub/__init__.py +0 -0
  176. sagemaker/core/jumpstart/hub/constants.py +16 -0
  177. sagemaker/core/jumpstart/hub/hub.py +291 -0
  178. sagemaker/core/jumpstart/hub/interfaces.py +936 -0
  179. sagemaker/core/jumpstart/hub/parser_utils.py +70 -0
  180. sagemaker/core/jumpstart/hub/parsers.py +288 -0
  181. sagemaker/core/jumpstart/hub/types.py +35 -0
  182. sagemaker/core/jumpstart/hub/utils.py +260 -0
  183. sagemaker/core/jumpstart/models.py +499 -0
  184. sagemaker/core/jumpstart/notebook_utils.py +575 -0
  185. sagemaker/core/jumpstart/parameters.py +20 -0
  186. sagemaker/core/jumpstart/payload_utils.py +239 -0
  187. sagemaker/core/jumpstart/region_config.json +163 -0
  188. sagemaker/core/jumpstart/search.py +171 -0
  189. sagemaker/core/jumpstart/serializers.py +81 -0
  190. sagemaker/core/jumpstart/session_utils.py +234 -0
  191. sagemaker/core/jumpstart/types.py +3044 -0
  192. sagemaker/core/jumpstart/utils.py +1731 -0
  193. sagemaker/core/jumpstart/validators.py +257 -0
  194. sagemaker/core/lambda_helper.py +312 -0
  195. sagemaker/core/lineage/__init__.py +42 -0
  196. sagemaker/core/lineage/_api_types.py +239 -0
  197. sagemaker/core/lineage/_utils.py +49 -0
  198. sagemaker/core/lineage/action.py +345 -0
  199. sagemaker/core/lineage/artifact.py +646 -0
  200. sagemaker/core/lineage/association.py +190 -0
  201. sagemaker/core/lineage/context.py +505 -0
  202. sagemaker/core/lineage/lineage_trial_component.py +191 -0
  203. sagemaker/core/lineage/query.py +732 -0
  204. sagemaker/core/lineage/visualizer.py +346 -0
  205. sagemaker/core/local/__init__.py +18 -0
  206. sagemaker/core/local/data.py +413 -0
  207. sagemaker/core/local/entities.py +678 -0
  208. sagemaker/core/local/exceptions.py +17 -0
  209. sagemaker/core/local/image.py +1243 -0
  210. sagemaker/core/local/local_session.py +739 -0
  211. sagemaker/core/local/utils.py +245 -0
  212. sagemaker/core/logs.py +181 -0
  213. sagemaker/core/metadata_properties.py +56 -0
  214. sagemaker/core/metric_definitions.py +91 -0
  215. sagemaker/core/mlflow/__init__.py +38 -0
  216. sagemaker/core/mlflow/forward_sagemaker_metrics.py +44 -0
  217. sagemaker/core/model_card/__init__.py +26 -0
  218. sagemaker/core/model_life_cycle.py +51 -0
  219. sagemaker/core/model_metrics.py +160 -0
  220. sagemaker/core/model_monitor/__init__.py +66 -0
  221. sagemaker/core/model_monitor/clarify_model_monitoring.py +1495 -0
  222. sagemaker/core/model_monitor/cron_expression_generator.py +82 -0
  223. sagemaker/core/model_monitor/data_capture_config.py +115 -0
  224. sagemaker/core/model_monitor/data_quality_monitoring_config.py +66 -0
  225. sagemaker/core/model_monitor/dataset_format.py +102 -0
  226. sagemaker/core/model_monitor/model_monitoring.py +4266 -0
  227. sagemaker/core/model_monitor/monitoring_alert.py +76 -0
  228. sagemaker/core/model_monitor/monitoring_files.py +506 -0
  229. sagemaker/core/model_monitor/utils.py +793 -0
  230. sagemaker/core/model_registry.py +480 -0
  231. sagemaker/core/model_uris.py +97 -0
  232. sagemaker/core/modules/__init__.py +19 -0
  233. sagemaker/core/modules/configs.py +226 -0
  234. sagemaker/core/modules/constants.py +37 -0
  235. sagemaker/core/modules/distributed.py +182 -0
  236. sagemaker/core/modules/local_core/__init__.py +0 -0
  237. sagemaker/core/modules/local_core/local_container.py +605 -0
  238. sagemaker/core/modules/templates.py +83 -0
  239. sagemaker/core/modules/train/__init__.py +14 -0
  240. sagemaker/core/modules/train/container_drivers/__init__.py +14 -0
  241. sagemaker/core/modules/train/container_drivers/common/__init__.py +14 -0
  242. sagemaker/core/modules/train/container_drivers/common/utils.py +213 -0
  243. sagemaker/core/modules/train/container_drivers/distributed_drivers/__init__.py +14 -0
  244. sagemaker/core/modules/train/container_drivers/distributed_drivers/basic_script_driver.py +81 -0
  245. sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_driver.py +123 -0
  246. sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_utils.py +302 -0
  247. sagemaker/core/modules/train/container_drivers/distributed_drivers/torchrun_driver.py +129 -0
  248. sagemaker/core/modules/train/container_drivers/scripts/__init__.py +14 -0
  249. sagemaker/core/modules/train/container_drivers/scripts/environment.py +305 -0
  250. sagemaker/core/modules/train/sm_recipes/__init__.py +0 -0
  251. sagemaker/core/modules/train/sm_recipes/utils.py +330 -0
  252. sagemaker/core/modules/types.py +19 -0
  253. sagemaker/core/modules/utils.py +194 -0
  254. sagemaker/core/network.py +185 -0
  255. sagemaker/core/parameter.py +173 -0
  256. sagemaker/core/payloads.py +185 -0
  257. sagemaker/core/processing.py +1597 -0
  258. sagemaker/core/remote_function/__init__.py +19 -0
  259. sagemaker/core/remote_function/checkpoint_location.py +47 -0
  260. sagemaker/core/remote_function/client.py +1285 -0
  261. sagemaker/core/remote_function/core/__init__.py +0 -0
  262. sagemaker/core/remote_function/core/_custom_dispatch_table.py +72 -0
  263. sagemaker/core/remote_function/core/pipeline_variables.py +353 -0
  264. sagemaker/core/remote_function/core/serialization.py +422 -0
  265. sagemaker/core/remote_function/core/stored_function.py +226 -0
  266. sagemaker/core/remote_function/custom_file_filter.py +128 -0
  267. sagemaker/core/remote_function/errors.py +104 -0
  268. sagemaker/core/remote_function/invoke_function.py +172 -0
  269. sagemaker/core/remote_function/job.py +2140 -0
  270. sagemaker/core/remote_function/logging_config.py +38 -0
  271. sagemaker/core/remote_function/runtime_environment/__init__.py +14 -0
  272. sagemaker/core/remote_function/runtime_environment/bootstrap_runtime_environment.py +605 -0
  273. sagemaker/core/remote_function/runtime_environment/mpi_utils_remote.py +252 -0
  274. sagemaker/core/remote_function/runtime_environment/runtime_environment_manager.py +554 -0
  275. sagemaker/core/remote_function/runtime_environment/spark_app.py +18 -0
  276. sagemaker/core/remote_function/spark_config.py +149 -0
  277. sagemaker/core/resource_requirements.py +168 -0
  278. {sagemaker_core/main → sagemaker/core}/resources.py +20121 -11728
  279. sagemaker/core/s3/__init__.py +41 -0
  280. sagemaker/core/s3/client.py +367 -0
  281. sagemaker/core/s3/utils.py +175 -0
  282. sagemaker/core/script_uris.py +93 -0
  283. sagemaker/core/serializers/__init__.py +11 -0
  284. sagemaker/core/serializers/base.py +510 -0
  285. sagemaker/core/serializers/implementations.py +159 -0
  286. sagemaker/core/serializers/utils.py +223 -0
  287. sagemaker/core/serverless_inference_config.py +63 -0
  288. sagemaker/core/session_settings.py +55 -0
  289. sagemaker/core/shapes/__init__.py +3 -0
  290. sagemaker/core/shapes/model_card_shapes.py +159 -0
  291. {sagemaker_core/main → sagemaker/core/shapes}/shapes.py +6384 -1865
  292. sagemaker/core/spark/__init__.py +16 -0
  293. sagemaker/core/spark/defaults.py +16 -0
  294. sagemaker/core/spark/processing.py +1380 -0
  295. sagemaker/core/telemetry/__init__.py +23 -0
  296. sagemaker/core/telemetry/constants.py +84 -0
  297. sagemaker/core/telemetry/telemetry_logging.py +284 -0
  298. sagemaker/core/tools/__init__.py +1 -0
  299. {sagemaker_core → sagemaker/core}/tools/codegen.py +4 -4
  300. {sagemaker_core → sagemaker/core}/tools/constants.py +23 -15
  301. {sagemaker_core → sagemaker/core}/tools/data_extractor.py +1 -1
  302. {sagemaker_core → sagemaker/core}/tools/method.py +1 -1
  303. sagemaker/core/tools/model_card/generate_model_card_from_schema.py +562 -0
  304. {sagemaker_core → sagemaker/core}/tools/resources_codegen.py +165 -98
  305. {sagemaker_core → sagemaker/core}/tools/resources_extractor.py +5 -13
  306. {sagemaker_core → sagemaker/core}/tools/shapes_codegen.py +16 -17
  307. {sagemaker_core → sagemaker/core}/tools/shapes_extractor.py +29 -67
  308. {sagemaker_core → sagemaker/core}/tools/templates.py +39 -17
  309. sagemaker/core/training/__init__.py +14 -0
  310. sagemaker/core/training/configs.py +333 -0
  311. sagemaker/core/training/constants.py +37 -0
  312. sagemaker/core/training/utils.py +77 -0
  313. sagemaker/core/training_compiler/__init__.py +16 -0
  314. sagemaker/core/training_compiler/config.py +197 -0
  315. sagemaker/core/training_compiler_config.py +197 -0
  316. sagemaker/core/transformer.py +793 -0
  317. sagemaker/core/user_agent.py +76 -0
  318. sagemaker/core/utilities/__init__.py +24 -0
  319. sagemaker/core/utilities/cache.py +169 -0
  320. sagemaker/core/utilities/search_expression.py +133 -0
  321. sagemaker/core/utils/__init__.py +48 -0
  322. sagemaker/core/utils/code_injection/__init__.py +0 -0
  323. {sagemaker_core/main → sagemaker/core/utils}/code_injection/codec.py +2 -2
  324. {sagemaker_core/main → sagemaker/core/utils}/code_injection/shape_dag.py +6479 -136
  325. {sagemaker_core/main → sagemaker/core/utils}/exceptions.py +8 -8
  326. sagemaker_core/main/default_configs_helper.py → sagemaker/core/utils/intelligent_defaults_helper.py +5 -6
  327. {sagemaker_core/main → sagemaker/core/utils}/logs.py +1 -2
  328. {sagemaker_core/main → sagemaker/core/utils}/utils.py +25 -20
  329. sagemaker/core/workflow/__init__.py +152 -0
  330. sagemaker/core/workflow/conditions.py +313 -0
  331. sagemaker/core/workflow/entities.py +58 -0
  332. sagemaker/core/workflow/execution_variables.py +89 -0
  333. sagemaker/core/workflow/functions.py +193 -0
  334. sagemaker/core/workflow/parameters.py +222 -0
  335. sagemaker/core/workflow/pipeline_context.py +394 -0
  336. sagemaker/core/workflow/pipeline_definition_config.py +31 -0
  337. sagemaker/core/workflow/properties.py +285 -0
  338. sagemaker/core/workflow/step_outputs.py +65 -0
  339. sagemaker/core/workflow/utilities.py +507 -0
  340. sagemaker/lineage/__init__.py +33 -0
  341. sagemaker/lineage/action.py +28 -0
  342. sagemaker/lineage/artifact.py +28 -0
  343. sagemaker/lineage/context.py +28 -0
  344. sagemaker/lineage/lineage_trial_component.py +28 -0
  345. {sagemaker_core-1.0.47.dist-info → sagemaker_core-2.1.1.dist-info}/METADATA +28 -9
  346. sagemaker_core-2.1.1.dist-info/RECORD +355 -0
  347. sagemaker_core-2.1.1.dist-info/top_level.txt +1 -0
  348. sagemaker_core/__init__.py +0 -4
  349. sagemaker_core/_version.py +0 -3
  350. sagemaker_core/helper/session_helper.py +0 -769
  351. sagemaker_core/resources/__init__.py +0 -1
  352. sagemaker_core/shapes/__init__.py +0 -1
  353. sagemaker_core/tools/__init__.py +0 -1
  354. sagemaker_core-1.0.47.dist-info/RECORD +0 -35
  355. sagemaker_core-1.0.47.dist-info/top_level.txt +0 -1
  356. {sagemaker_core → sagemaker/core}/helper/__init__.py +0 -0
  357. {sagemaker_core/main → sagemaker/core/huggingface/training_compiler}/__init__.py +0 -0
  358. {sagemaker_core/main/code_injection → sagemaker/core/jumpstart/factory}/__init__.py +0 -0
  359. {sagemaker_core/main → sagemaker/core/utils}/code_injection/base.py +0 -0
  360. {sagemaker_core/main → sagemaker/core/utils}/code_injection/constants.py +0 -0
  361. {sagemaker_core/main → sagemaker/core/utils}/user_agent.py +0 -0
  362. {sagemaker_core-1.0.47.dist-info → sagemaker_core-2.1.1.dist-info}/WHEEL +0 -0
  363. {sagemaker_core-1.0.47.dist-info → sagemaker_core-2.1.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,467 @@
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
+
14
+ """This module contains code related to Amazon SageMaker Collections in the Model Registry.
15
+
16
+ Use these methods to help you create and maintain your Collections.
17
+ """
18
+
19
+ from __future__ import absolute_import
20
+ import json
21
+ import time
22
+ from typing import List
23
+
24
+
25
+ from botocore.exceptions import ClientError
26
+ from sagemaker.core.helper.session_helper import Session
27
+
28
+
29
+ class Collection(object):
30
+ """Sets up an Amazon SageMaker Collection."""
31
+
32
+ def __init__(self, sagemaker_session):
33
+ """Initializes a Collection instance.
34
+
35
+ A Collection is a logical grouping of Model Groups.
36
+
37
+ Args:
38
+ sagemaker_session (sagemaker.session.Session): A Session object which
39
+ manages interactions between Amazon SageMaker APIs and other
40
+ AWS services needed. If unspecified, a session is created using
41
+ the default AWS configuration chain.
42
+ """
43
+
44
+ self.sagemaker_session = sagemaker_session or Session()
45
+
46
+ def _check_access_error(self, err: ClientError):
47
+ """Checks if the error is related to the access error and provide the relevant message.
48
+
49
+ Args:
50
+ err: The client error to check.
51
+ """
52
+
53
+ error_code = err.response["Error"]["Code"]
54
+ if error_code == "AccessDeniedException":
55
+ raise Exception(
56
+ f"{error_code}: This account needs to attach a custom policy "
57
+ "to the user role to gain access to Collections. Refer - "
58
+ "https://docs.aws.amazon.com/sagemaker/latest/dg/modelcollections-permissions.html"
59
+ )
60
+
61
+ def _add_model_group(self, model_package_group, tag_rule_key, tag_rule_value):
62
+ """Adds a Model Group to a Collection.
63
+
64
+ Args:
65
+ model_package_group (str): The name of the Model Group.
66
+ tag_rule_key (str): The tag key of the destination collection.
67
+ tag_rule_value (str): The tag value of the destination collection.
68
+ """
69
+ model_group_details = self.sagemaker_session.sagemaker_client.describe_model_package_group(
70
+ ModelPackageGroupName=model_package_group
71
+ )
72
+ self.sagemaker_session.sagemaker_client.add_tags(
73
+ ResourceArn=model_group_details["ModelPackageGroupArn"],
74
+ Tags=[
75
+ {
76
+ "Key": tag_rule_key,
77
+ "Value": tag_rule_value,
78
+ }
79
+ ],
80
+ )
81
+
82
+ def _remove_model_group(self, model_package_group, tag_rule_key):
83
+ """Removes a Model Group from a Collection.
84
+
85
+ Args:
86
+ model_package_group (str): The name of the Model Group
87
+ tag_rule_key (str): The tag key of the Collection from which to remove the Model Group.
88
+ """
89
+ model_group_details = self.sagemaker_session.sagemaker_client.describe_model_package_group(
90
+ ModelPackageGroupName=model_package_group
91
+ )
92
+ self.sagemaker_session.sagemaker_client.delete_tags(
93
+ ResourceArn=model_group_details["ModelPackageGroupArn"], TagKeys=[tag_rule_key]
94
+ )
95
+
96
+ def create(self, collection_name: str, parent_collection_name: str = None):
97
+ """Creates a Collection.
98
+
99
+ Args:
100
+ collection_name (str): The name of the Collection to create.
101
+ parent_collection_name (str): The name of the parent Collection.
102
+ Is ``None`` if the Collection is created at the root level.
103
+ """
104
+
105
+ tag_rule_key = f"sagemaker:collection-path:{int(time.time() * 1000)}"
106
+ tags_on_collection = {
107
+ "sagemaker:collection": "true",
108
+ "sagemaker:collection-path:root": "true",
109
+ }
110
+ tag_rule_values = [collection_name]
111
+
112
+ if parent_collection_name is not None:
113
+ parent_tag_rules = self._get_collection_tag_rule(collection_name=parent_collection_name)
114
+ parent_tag_rule_key = parent_tag_rules["tag_rule_key"]
115
+ parent_tag_value = parent_tag_rules["tag_rule_value"]
116
+ tags_on_collection = {
117
+ parent_tag_rule_key: parent_tag_value,
118
+ "sagemaker:collection": "true",
119
+ }
120
+ tag_rule_values = [f"{parent_tag_value}/{collection_name}"]
121
+ try:
122
+ resource_filters = [
123
+ "AWS::SageMaker::ModelPackageGroup",
124
+ "AWS::ResourceGroups::Group",
125
+ ]
126
+
127
+ tag_filters = [
128
+ {
129
+ "Key": tag_rule_key,
130
+ "Values": tag_rule_values,
131
+ }
132
+ ]
133
+ resource_query = {
134
+ "Query": json.dumps(
135
+ {"ResourceTypeFilters": resource_filters, "TagFilters": tag_filters}
136
+ ),
137
+ "Type": "TAG_FILTERS_1_0",
138
+ }
139
+ collection_create_response = self.sagemaker_session.create_group(
140
+ collection_name, resource_query, tags_on_collection
141
+ )
142
+ return {
143
+ "Name": collection_create_response["Group"]["Name"],
144
+ "Arn": collection_create_response["Group"]["GroupArn"],
145
+ }
146
+ except ClientError as e:
147
+ message = e.response["Error"]["Message"]
148
+ error_code = e.response["Error"]["Code"]
149
+
150
+ if error_code == "BadRequestException" and "group already exists" in message:
151
+ raise ValueError("Collection with the given name already exists")
152
+ self._check_access_error(err=e)
153
+ raise
154
+
155
+ def delete(self, collections: List[str]):
156
+ """Deletes a list of Collections.
157
+
158
+ Args:
159
+ collections (List[str]): A list of Collections to delete.
160
+ Only deletes a Collection if it is empty.
161
+ """
162
+
163
+ if len(collections) > 10:
164
+ raise ValueError("Can delete upto 10 collections at a time")
165
+
166
+ delete_collection_failures = []
167
+ deleted_collection = []
168
+ collection_filter = [
169
+ {
170
+ "Name": "resource-type",
171
+ "Values": ["AWS::ResourceGroups::Group", "AWS::SageMaker::ModelPackageGroup"],
172
+ },
173
+ ]
174
+
175
+ # loops over the list of collection and deletes one at a time.
176
+ for collection in collections:
177
+ try:
178
+ collection_details = self.sagemaker_session.list_group_resources(
179
+ group=collection, filters=collection_filter
180
+ )
181
+ except ClientError as e:
182
+ self._check_access_error(err=e)
183
+ delete_collection_failures.append(
184
+ {"collection": collection, "message": e.response["Error"]["Message"]}
185
+ )
186
+ continue
187
+ if collection_details.get("Resources") and len(collection_details["Resources"]) > 0:
188
+ delete_collection_failures.append(
189
+ {"collection": collection, "message": "Validation error: Collection not empty"}
190
+ )
191
+ else:
192
+ try:
193
+ self.sagemaker_session.delete_resource_group(group=collection)
194
+ deleted_collection.append(collection)
195
+ except ClientError as e:
196
+ self._check_access_error(err=e)
197
+ delete_collection_failures.append(
198
+ {"collection": collection, "message": e.response["Error"]["Message"]}
199
+ )
200
+ return {
201
+ "deleted_collections": deleted_collection,
202
+ "delete_collection_failures": delete_collection_failures,
203
+ }
204
+
205
+ def _get_collection_tag_rule(self, collection_name: str):
206
+ """Returns the tag rule key and value for a Collection."""
207
+
208
+ if collection_name is not None:
209
+ try:
210
+ group_query = self.sagemaker_session.get_resource_group_query(group=collection_name)
211
+ except ClientError as e:
212
+ error_code = e.response["Error"]["Code"]
213
+
214
+ if error_code == "NotFoundException":
215
+ raise ValueError(f"Cannot find collection: {collection_name}")
216
+ self._check_access_error(err=e)
217
+ raise
218
+ if group_query.get("GroupQuery"):
219
+ tag_rule_query = json.loads(
220
+ group_query["GroupQuery"].get("ResourceQuery", {}).get("Query", "")
221
+ )
222
+ tag_rule = tag_rule_query.get("TagFilters", [])[0]
223
+ if not tag_rule:
224
+ raise "Unsupported parent_collection_name"
225
+ tag_rule_value = tag_rule["Values"][0]
226
+ tag_rule_key = tag_rule["Key"]
227
+
228
+ return {
229
+ "tag_rule_key": tag_rule_key,
230
+ "tag_rule_value": tag_rule_value,
231
+ }
232
+ raise ValueError("Collection name is required")
233
+
234
+ def add_model_groups(self, collection_name: str, model_groups: List[str]):
235
+ """Adds a list of Model Groups to a Collection.
236
+
237
+ Args:
238
+ collection_name (str): The name of the Collection.
239
+ model_groups (List[str]): The names of the Model Groups to add to the Collection.
240
+ """
241
+ if len(model_groups) > 10:
242
+ raise Exception("Model groups can have a maximum length of 10")
243
+ tag_rules = self._get_collection_tag_rule(collection_name=collection_name)
244
+ tag_rule_key = tag_rules["tag_rule_key"]
245
+ tag_rule_value = tag_rules["tag_rule_value"]
246
+
247
+ add_groups_success = []
248
+ add_groups_failure = []
249
+ if tag_rule_key is not None and tag_rule_value is not None:
250
+ for model_group in model_groups:
251
+ try:
252
+ self._add_model_group(
253
+ model_package_group=model_group,
254
+ tag_rule_key=tag_rule_key,
255
+ tag_rule_value=tag_rule_value,
256
+ )
257
+ add_groups_success.append(model_group)
258
+ except ClientError as e:
259
+ self._check_access_error(err=e)
260
+ message = e.response["Error"]["Message"]
261
+ add_groups_failure.append(
262
+ {
263
+ "model_group": model_group,
264
+ "failure_reason": message,
265
+ }
266
+ )
267
+ return {
268
+ "added_groups": add_groups_success,
269
+ "failure": add_groups_failure,
270
+ }
271
+
272
+ def remove_model_groups(self, collection_name: str, model_groups: List[str]):
273
+ """Removes a list of Model Groups from a Collection.
274
+
275
+ Args:
276
+ collection_name (str): The name of the Collection.
277
+ model_groups (List[str]): The names of the Model Groups to remove.
278
+ """
279
+
280
+ if len(model_groups) > 10:
281
+ raise Exception("Model groups can have a maximum length of 10")
282
+ tag_rules = self._get_collection_tag_rule(collection_name=collection_name)
283
+
284
+ tag_rule_key = tag_rules["tag_rule_key"]
285
+ tag_rule_value = tag_rules["tag_rule_value"]
286
+
287
+ remove_groups_success = []
288
+ remove_groups_failure = []
289
+ if tag_rule_key is not None and tag_rule_value is not None:
290
+ for model_group in model_groups:
291
+ try:
292
+ self._remove_model_group(
293
+ model_package_group=model_group,
294
+ tag_rule_key=tag_rule_key,
295
+ )
296
+ remove_groups_success.append(model_group)
297
+ except ClientError as e:
298
+ self._check_access_error(err=e)
299
+ message = e.response["Error"]["Message"]
300
+ remove_groups_failure.append(
301
+ {
302
+ "model_group": model_group,
303
+ "failure_reason": message,
304
+ }
305
+ )
306
+ return {
307
+ "removed_groups": remove_groups_success,
308
+ "failure": remove_groups_failure,
309
+ }
310
+
311
+ def move_model_group(
312
+ self, source_collection_name: str, model_group: str, destination_collection_name: str
313
+ ):
314
+ """Moves a Model Group from one Collection to another.
315
+
316
+ Args:
317
+ source_collection_name (str): The name of the source Collection.
318
+ model_group (str): The name of the Model Group to move.
319
+ destination_collection_name (str): The name of the destination Collection.
320
+ """
321
+ remove_details = self.remove_model_groups(
322
+ collection_name=source_collection_name, model_groups=[model_group]
323
+ )
324
+ if len(remove_details["failure"]) == 1:
325
+ raise Exception(remove_details["failure"][0]["failure"])
326
+
327
+ added_details = self.add_model_groups(
328
+ collection_name=destination_collection_name, model_groups=[model_group]
329
+ )
330
+
331
+ if len(added_details["failure"]) == 1:
332
+ # adding the Model Group back to the source collection in case of an add failure
333
+ self.add_model_groups(
334
+ collection_name=source_collection_name, model_groups=[model_group]
335
+ )
336
+ raise Exception(added_details["failure"][0]["failure"])
337
+
338
+ return {
339
+ "moved_success": model_group,
340
+ }
341
+
342
+ def _convert_tag_collection_response(self, tag_collections: List[str]):
343
+ """Converts a Collection response from the tag api to a Collection list response.
344
+
345
+ Args:
346
+ tag_collections List[dict]: The Collection list response from the tag api.
347
+ """
348
+ collection_details = []
349
+ for collection in tag_collections:
350
+ collection_arn = collection["ResourceARN"]
351
+ collection_name = collection_arn.split("group/")[1]
352
+ collection_details.append(
353
+ {
354
+ "Name": collection_name,
355
+ "Arn": collection_arn,
356
+ "Type": "Collection",
357
+ }
358
+ )
359
+ return collection_details
360
+
361
+ def _convert_group_resource_response(
362
+ self, group_resource_details: List[dict], is_model_group: bool = False
363
+ ):
364
+ """Converts a Collection response from the resource group api to a Collection list response.
365
+
366
+ Args:
367
+ group_resource_details (List[dict]): The Collection list response from the
368
+ resource group api.
369
+ is_model_group (bool): Indicates if the response is of Collection or Model Group type.
370
+ """
371
+ collection_details = []
372
+ if group_resource_details["Resources"]:
373
+ for resource_group in group_resource_details["Resources"]:
374
+ collection_arn = resource_group["Identifier"]["ResourceArn"]
375
+ collection_name = collection_arn.split("group/")[1]
376
+ collection_details.append(
377
+ {
378
+ "Name": collection_name,
379
+ "Arn": collection_arn,
380
+ "Type": (
381
+ resource_group["Identifier"]["ResourceType"]
382
+ if is_model_group
383
+ else "Collection"
384
+ ),
385
+ }
386
+ )
387
+ return collection_details
388
+
389
+ def _get_full_list_resource(self, collection_name, collection_filter):
390
+ """Iterates the full resource group list and returns the appended paginated response.
391
+
392
+ Args:
393
+ collection_name (str): The name of the Collection from which to get details.
394
+ collection_filter (dict): Filter details to pass to get the resource list.
395
+ """
396
+ list_group_response = self.sagemaker_session.list_group_resources(
397
+ group=collection_name, filters=collection_filter
398
+ )
399
+ next_token = list_group_response.get("NextToken")
400
+ while next_token is not None:
401
+
402
+ paginated_group_response = self.sagemaker_session.list_group_resources(
403
+ group=collection_name,
404
+ filters=collection_filter,
405
+ next_token=next_token,
406
+ )
407
+ list_group_response["Resources"] = (
408
+ list_group_response["Resources"] + paginated_group_response["Resources"]
409
+ )
410
+ list_group_response["ResourceIdentifiers"] = (
411
+ list_group_response["ResourceIdentifiers"]
412
+ + paginated_group_response["ResourceIdentifiers"]
413
+ )
414
+ next_token = paginated_group_response.get("NextToken")
415
+
416
+ return list_group_response
417
+
418
+ def list_collection(self, collection_name: str = None):
419
+ """Lists the contents of the specified Collection.
420
+
421
+ If there is no Collection with the name ``collection_name``, lists all the
422
+ Collections at the root level.
423
+
424
+ Args:
425
+ collection_name (str): The name of the Collection whose contents are listed.
426
+ """
427
+ collection_content = []
428
+ if collection_name is None:
429
+ tag_filters = [
430
+ {
431
+ "Key": "sagemaker:collection-path:root",
432
+ "Values": ["true"],
433
+ },
434
+ ]
435
+ resource_type_filters = ["resource-groups:group"]
436
+ tag_collections = self.sagemaker_session.get_tagging_resources(
437
+ tag_filters=tag_filters, resource_type_filters=resource_type_filters
438
+ )
439
+
440
+ return self._convert_tag_collection_response(tag_collections)
441
+
442
+ collection_filter = [
443
+ {
444
+ "Name": "resource-type",
445
+ "Values": ["AWS::ResourceGroups::Group"],
446
+ },
447
+ ]
448
+ list_group_response = self._get_full_list_resource(
449
+ collection_name=collection_name, collection_filter=collection_filter
450
+ )
451
+ collection_content = self._convert_group_resource_response(list_group_response)
452
+
453
+ collection_filter = [
454
+ {
455
+ "Name": "resource-type",
456
+ "Values": ["AWS::SageMaker::ModelPackageGroup"],
457
+ },
458
+ ]
459
+ list_group_response = self._get_full_list_resource(
460
+ collection_name=collection_name, collection_filter=collection_filter
461
+ )
462
+
463
+ collection_content = collection_content + self._convert_group_resource_response(
464
+ list_group_response, True
465
+ )
466
+
467
+ return collection_content