sagemaker-core 1.0.62__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 (362) 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 +408 -3
  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/constants.py +16 -0
  176. sagemaker/core/jumpstart/hub/hub.py +291 -0
  177. sagemaker/core/jumpstart/hub/interfaces.py +936 -0
  178. sagemaker/core/jumpstart/hub/parser_utils.py +70 -0
  179. sagemaker/core/jumpstart/hub/parsers.py +288 -0
  180. sagemaker/core/jumpstart/hub/types.py +35 -0
  181. sagemaker/core/jumpstart/hub/utils.py +260 -0
  182. sagemaker/core/jumpstart/models.py +499 -0
  183. sagemaker/core/jumpstart/notebook_utils.py +575 -0
  184. sagemaker/core/jumpstart/parameters.py +20 -0
  185. sagemaker/core/jumpstart/payload_utils.py +239 -0
  186. sagemaker/core/jumpstart/region_config.json +163 -0
  187. sagemaker/core/jumpstart/search.py +171 -0
  188. sagemaker/core/jumpstart/serializers.py +81 -0
  189. sagemaker/core/jumpstart/session_utils.py +234 -0
  190. sagemaker/core/jumpstart/types.py +3044 -0
  191. sagemaker/core/jumpstart/utils.py +1731 -0
  192. sagemaker/core/jumpstart/validators.py +257 -0
  193. sagemaker/core/lambda_helper.py +312 -0
  194. sagemaker/core/lineage/__init__.py +42 -0
  195. sagemaker/core/lineage/_api_types.py +239 -0
  196. sagemaker/core/lineage/_utils.py +49 -0
  197. sagemaker/core/lineage/action.py +345 -0
  198. sagemaker/core/lineage/artifact.py +646 -0
  199. sagemaker/core/lineage/association.py +190 -0
  200. sagemaker/core/lineage/context.py +505 -0
  201. sagemaker/core/lineage/lineage_trial_component.py +191 -0
  202. sagemaker/core/lineage/query.py +732 -0
  203. sagemaker/core/lineage/visualizer.py +346 -0
  204. sagemaker/core/local/__init__.py +18 -0
  205. sagemaker/core/local/data.py +413 -0
  206. sagemaker/core/local/entities.py +678 -0
  207. sagemaker/core/local/exceptions.py +17 -0
  208. sagemaker/core/local/image.py +1243 -0
  209. sagemaker/core/local/local_session.py +739 -0
  210. sagemaker/core/local/utils.py +245 -0
  211. sagemaker/core/logs.py +181 -0
  212. sagemaker/core/metadata_properties.py +56 -0
  213. sagemaker/core/metric_definitions.py +91 -0
  214. sagemaker/core/mlflow/__init__.py +38 -0
  215. sagemaker/core/mlflow/forward_sagemaker_metrics.py +44 -0
  216. sagemaker/core/model_card/__init__.py +26 -0
  217. sagemaker/core/model_life_cycle.py +51 -0
  218. sagemaker/core/model_metrics.py +160 -0
  219. sagemaker/core/model_monitor/__init__.py +66 -0
  220. sagemaker/core/model_monitor/clarify_model_monitoring.py +1495 -0
  221. sagemaker/core/model_monitor/cron_expression_generator.py +82 -0
  222. sagemaker/core/model_monitor/data_capture_config.py +115 -0
  223. sagemaker/core/model_monitor/data_quality_monitoring_config.py +66 -0
  224. sagemaker/core/model_monitor/dataset_format.py +102 -0
  225. sagemaker/core/model_monitor/model_monitoring.py +4266 -0
  226. sagemaker/core/model_monitor/monitoring_alert.py +76 -0
  227. sagemaker/core/model_monitor/monitoring_files.py +506 -0
  228. sagemaker/core/model_monitor/utils.py +793 -0
  229. sagemaker/core/model_registry.py +480 -0
  230. sagemaker/core/model_uris.py +97 -0
  231. sagemaker/core/modules/__init__.py +19 -0
  232. sagemaker/core/modules/configs.py +226 -0
  233. sagemaker/core/modules/constants.py +37 -0
  234. sagemaker/core/modules/distributed.py +182 -0
  235. sagemaker/core/modules/local_core/__init__.py +0 -0
  236. sagemaker/core/modules/local_core/local_container.py +605 -0
  237. sagemaker/core/modules/templates.py +83 -0
  238. sagemaker/core/modules/train/__init__.py +14 -0
  239. sagemaker/core/modules/train/container_drivers/__init__.py +14 -0
  240. sagemaker/core/modules/train/container_drivers/common/__init__.py +14 -0
  241. sagemaker/core/modules/train/container_drivers/common/utils.py +213 -0
  242. sagemaker/core/modules/train/container_drivers/distributed_drivers/__init__.py +14 -0
  243. sagemaker/core/modules/train/container_drivers/distributed_drivers/basic_script_driver.py +81 -0
  244. sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_driver.py +123 -0
  245. sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_utils.py +302 -0
  246. sagemaker/core/modules/train/container_drivers/distributed_drivers/torchrun_driver.py +129 -0
  247. sagemaker/core/modules/train/container_drivers/scripts/__init__.py +14 -0
  248. sagemaker/core/modules/train/container_drivers/scripts/environment.py +305 -0
  249. sagemaker/core/modules/train/sm_recipes/__init__.py +0 -0
  250. sagemaker/core/modules/train/sm_recipes/utils.py +330 -0
  251. sagemaker/core/modules/types.py +19 -0
  252. sagemaker/core/modules/utils.py +194 -0
  253. sagemaker/core/network.py +185 -0
  254. sagemaker/core/parameter.py +173 -0
  255. sagemaker/core/payloads.py +185 -0
  256. sagemaker/core/processing.py +1597 -0
  257. sagemaker/core/remote_function/__init__.py +19 -0
  258. sagemaker/core/remote_function/checkpoint_location.py +47 -0
  259. sagemaker/core/remote_function/client.py +1285 -0
  260. sagemaker/core/remote_function/core/__init__.py +0 -0
  261. sagemaker/core/remote_function/core/_custom_dispatch_table.py +72 -0
  262. sagemaker/core/remote_function/core/pipeline_variables.py +353 -0
  263. sagemaker/core/remote_function/core/serialization.py +422 -0
  264. sagemaker/core/remote_function/core/stored_function.py +226 -0
  265. sagemaker/core/remote_function/custom_file_filter.py +128 -0
  266. sagemaker/core/remote_function/errors.py +104 -0
  267. sagemaker/core/remote_function/invoke_function.py +172 -0
  268. sagemaker/core/remote_function/job.py +2140 -0
  269. sagemaker/core/remote_function/logging_config.py +38 -0
  270. sagemaker/core/remote_function/runtime_environment/__init__.py +14 -0
  271. sagemaker/core/remote_function/runtime_environment/bootstrap_runtime_environment.py +605 -0
  272. sagemaker/core/remote_function/runtime_environment/mpi_utils_remote.py +252 -0
  273. sagemaker/core/remote_function/runtime_environment/runtime_environment_manager.py +554 -0
  274. sagemaker/core/remote_function/runtime_environment/spark_app.py +18 -0
  275. sagemaker/core/remote_function/spark_config.py +149 -0
  276. sagemaker/core/resource_requirements.py +168 -0
  277. {sagemaker_core/main → sagemaker/core}/resources.py +19098 -10895
  278. sagemaker/core/s3/__init__.py +41 -0
  279. sagemaker/core/s3/client.py +367 -0
  280. sagemaker/core/s3/utils.py +175 -0
  281. sagemaker/core/script_uris.py +93 -0
  282. sagemaker/core/serializers/__init__.py +11 -0
  283. sagemaker/core/serializers/base.py +510 -0
  284. sagemaker/core/serializers/implementations.py +159 -0
  285. sagemaker/core/serializers/utils.py +223 -0
  286. sagemaker/core/serverless_inference_config.py +63 -0
  287. sagemaker/core/session_settings.py +55 -0
  288. sagemaker/core/shapes/__init__.py +3 -0
  289. sagemaker/core/shapes/model_card_shapes.py +159 -0
  290. {sagemaker_core/main → sagemaker/core/shapes}/shapes.py +5810 -1806
  291. sagemaker/core/spark/__init__.py +16 -0
  292. sagemaker/core/spark/defaults.py +16 -0
  293. sagemaker/core/spark/processing.py +1380 -0
  294. sagemaker/core/telemetry/__init__.py +23 -0
  295. sagemaker/core/telemetry/constants.py +84 -0
  296. sagemaker/core/telemetry/telemetry_logging.py +284 -0
  297. sagemaker/core/tools/__init__.py +1 -0
  298. {sagemaker_core → sagemaker/core}/tools/codegen.py +4 -4
  299. {sagemaker_core → sagemaker/core}/tools/constants.py +23 -15
  300. {sagemaker_core → sagemaker/core}/tools/data_extractor.py +1 -1
  301. {sagemaker_core → sagemaker/core}/tools/method.py +1 -1
  302. sagemaker/core/tools/model_card/generate_model_card_from_schema.py +562 -0
  303. {sagemaker_core → sagemaker/core}/tools/resources_codegen.py +165 -98
  304. {sagemaker_core → sagemaker/core}/tools/resources_extractor.py +5 -13
  305. {sagemaker_core → sagemaker/core}/tools/shapes_codegen.py +16 -17
  306. {sagemaker_core → sagemaker/core}/tools/shapes_extractor.py +29 -67
  307. {sagemaker_core → sagemaker/core}/tools/templates.py +39 -17
  308. sagemaker/core/training/__init__.py +14 -0
  309. sagemaker/core/training/configs.py +333 -0
  310. sagemaker/core/training/constants.py +37 -0
  311. sagemaker/core/training/utils.py +77 -0
  312. sagemaker/core/training_compiler/__init__.py +16 -0
  313. sagemaker/core/training_compiler/config.py +197 -0
  314. sagemaker/core/training_compiler_config.py +197 -0
  315. sagemaker/core/transformer.py +793 -0
  316. sagemaker/core/user_agent.py +76 -0
  317. sagemaker/core/utilities/__init__.py +24 -0
  318. sagemaker/core/utilities/cache.py +169 -0
  319. sagemaker/core/utilities/search_expression.py +133 -0
  320. sagemaker/core/utils/__init__.py +48 -0
  321. sagemaker/core/utils/code_injection/__init__.py +0 -0
  322. {sagemaker_core/main → sagemaker/core/utils}/code_injection/codec.py +2 -2
  323. {sagemaker_core/main → sagemaker/core/utils}/code_injection/shape_dag.py +5979 -176
  324. {sagemaker_core/main → sagemaker/core/utils}/exceptions.py +8 -8
  325. sagemaker_core/main/default_configs_helper.py → sagemaker/core/utils/intelligent_defaults_helper.py +5 -6
  326. {sagemaker_core/main → sagemaker/core/utils}/logs.py +1 -2
  327. {sagemaker_core/main → sagemaker/core/utils}/utils.py +27 -22
  328. sagemaker/core/workflow/__init__.py +152 -0
  329. sagemaker/core/workflow/conditions.py +313 -0
  330. sagemaker/core/workflow/entities.py +58 -0
  331. sagemaker/core/workflow/execution_variables.py +89 -0
  332. sagemaker/core/workflow/functions.py +193 -0
  333. sagemaker/core/workflow/parameters.py +222 -0
  334. sagemaker/core/workflow/pipeline_context.py +394 -0
  335. sagemaker/core/workflow/pipeline_definition_config.py +31 -0
  336. sagemaker/core/workflow/properties.py +285 -0
  337. sagemaker/core/workflow/step_outputs.py +65 -0
  338. sagemaker/core/workflow/utilities.py +507 -0
  339. sagemaker/lineage/__init__.py +33 -0
  340. sagemaker/lineage/action.py +28 -0
  341. sagemaker/lineage/artifact.py +28 -0
  342. sagemaker/lineage/context.py +28 -0
  343. sagemaker/lineage/lineage_trial_component.py +28 -0
  344. {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.1.1.dist-info}/METADATA +28 -9
  345. sagemaker_core-2.1.1.dist-info/RECORD +355 -0
  346. sagemaker_core-2.1.1.dist-info/top_level.txt +1 -0
  347. sagemaker_core/_version.py +0 -3
  348. sagemaker_core/helper/session_helper.py +0 -769
  349. sagemaker_core/resources/__init__.py +0 -1
  350. sagemaker_core/shapes/__init__.py +0 -1
  351. sagemaker_core/tools/__init__.py +0 -1
  352. sagemaker_core-1.0.62.dist-info/RECORD +0 -35
  353. sagemaker_core-1.0.62.dist-info/top_level.txt +0 -1
  354. {sagemaker_core → sagemaker/core/helper}/__init__.py +0 -0
  355. {sagemaker_core/helper → sagemaker/core/huggingface/training_compiler}/__init__.py +0 -0
  356. {sagemaker_core/main → sagemaker/core/jumpstart/factory}/__init__.py +0 -0
  357. {sagemaker_core/main/code_injection → sagemaker/core/jumpstart/hub}/__init__.py +0 -0
  358. {sagemaker_core/main → sagemaker/core/utils}/code_injection/base.py +0 -0
  359. {sagemaker_core/main → sagemaker/core/utils}/code_injection/constants.py +0 -0
  360. {sagemaker_core/main → sagemaker/core/utils}/user_agent.py +0 -0
  361. {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.1.1.dist-info}/WHEEL +0 -0
  362. {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.1.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,257 @@
1
+ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+ """This module contains validators related to SageMaker JumpStart."""
14
+ from __future__ import absolute_import
15
+ from typing import Any, Dict, List, Optional
16
+ from sagemaker.core.helper.session_helper import Session
17
+
18
+ from sagemaker.core.jumpstart.enums import (
19
+ HyperparameterValidationMode,
20
+ JumpStartScriptScope,
21
+ VariableScope,
22
+ VariableTypes,
23
+ )
24
+ from sagemaker.core.jumpstart.exceptions import JumpStartHyperparametersError
25
+ from sagemaker.core.jumpstart.types import JumpStartHyperparameter
26
+ from sagemaker.core.jumpstart.utils import get_region_fallback, verify_model_region_and_return_specs
27
+
28
+
29
+ def _validate_hyperparameter(
30
+ hyperparameter_name: str,
31
+ hyperparameter_value: Any,
32
+ hyperparameter_specs: List[JumpStartHyperparameter],
33
+ ) -> None:
34
+ """Perform low-level hyperparameter validation on single parameter.
35
+
36
+ Args:
37
+ hyperparameter_name (str): The name of the hyperparameter to validate.
38
+ hyperparameter_value (Any): The value of the hyperparemter to validate.
39
+ hyperparameter_specs (List[JumpStartHyperparameter]): List of ``JumpStartHyperparameter`` to
40
+ use when validating the hyperparameter.
41
+
42
+ Raises:
43
+ JumpStartHyperparametersError: If the hyperparameter is not formatted correctly,
44
+ according to its specs in the model metadata.
45
+ """
46
+ hyperparameter_spec = [
47
+ spec for spec in hyperparameter_specs if spec.name == hyperparameter_name
48
+ ]
49
+ if len(hyperparameter_spec) == 0:
50
+ raise JumpStartHyperparametersError(
51
+ f"Unable to perform validation -- cannot find hyperparameter '{hyperparameter_name}' "
52
+ "in model specs."
53
+ )
54
+
55
+ if len(hyperparameter_spec) > 1:
56
+ raise JumpStartHyperparametersError(
57
+ "Unable to perform validation -- found multiple hyperparameter "
58
+ f"'{hyperparameter_name}' in model specs."
59
+ )
60
+
61
+ hyperparameter_spec = hyperparameter_spec[0]
62
+
63
+ if hyperparameter_spec.type == VariableTypes.BOOL.value:
64
+ if isinstance(hyperparameter_value, bool):
65
+ return
66
+ if not isinstance(hyperparameter_value, str):
67
+ raise JumpStartHyperparametersError(
68
+ f"Expecting boolean valued hyperparameter, but got '{str(hyperparameter_value)}'."
69
+ )
70
+ if str(hyperparameter_value).lower() not in ["true", "false"]:
71
+ raise JumpStartHyperparametersError(
72
+ f"Expecting boolean valued hyperparameter, but got '{str(hyperparameter_value)}'."
73
+ )
74
+ elif hyperparameter_spec.type == VariableTypes.TEXT.value:
75
+ if not isinstance(hyperparameter_value, str):
76
+ raise JumpStartHyperparametersError(
77
+ "Expecting text valued hyperparameter to have string type."
78
+ )
79
+
80
+ if hasattr(hyperparameter_spec, "options"):
81
+ if hyperparameter_value not in hyperparameter_spec.options:
82
+ raise JumpStartHyperparametersError(
83
+ f"Hyperparameter '{hyperparameter_name}' must have one of the following "
84
+ f"values: {', '.join(hyperparameter_spec.options)}."
85
+ )
86
+
87
+ if hasattr(hyperparameter_spec, "min"):
88
+ if len(hyperparameter_value) < hyperparameter_spec.min:
89
+ raise JumpStartHyperparametersError(
90
+ f"Hyperparameter '{hyperparameter_name}' must have length no less than "
91
+ f"{hyperparameter_spec.min}."
92
+ )
93
+
94
+ if hasattr(hyperparameter_spec, "exclusive_min"):
95
+ if len(hyperparameter_value) <= hyperparameter_spec.exclusive_min:
96
+ raise JumpStartHyperparametersError(
97
+ f"Hyperparameter '{hyperparameter_name}' must have length greater than "
98
+ f"{hyperparameter_spec.exclusive_min}."
99
+ )
100
+
101
+ if hasattr(hyperparameter_spec, "max"):
102
+ if len(hyperparameter_value) > hyperparameter_spec.max:
103
+ raise JumpStartHyperparametersError(
104
+ f"Hyperparameter '{hyperparameter_name}' must have length no greater than "
105
+ f"{hyperparameter_spec.max}."
106
+ )
107
+
108
+ if hasattr(hyperparameter_spec, "exclusive_max"):
109
+ if len(hyperparameter_value) >= hyperparameter_spec.exclusive_max:
110
+ raise JumpStartHyperparametersError(
111
+ f"Hyperparameter '{hyperparameter_name}' must have length less than "
112
+ f"{hyperparameter_spec.exclusive_max}."
113
+ )
114
+
115
+ # validate numeric types
116
+ elif hyperparameter_spec.type in [VariableTypes.INT.value, VariableTypes.FLOAT.value]:
117
+ try:
118
+ numeric_hyperparam_value = float(hyperparameter_value)
119
+ except ValueError:
120
+ raise JumpStartHyperparametersError(
121
+ f"Hyperparameter '{hyperparameter_name}' must be numeric type "
122
+ f"('{hyperparameter_value}')."
123
+ )
124
+
125
+ if hyperparameter_spec.type == VariableTypes.INT.value:
126
+ hyperparameter_value_str = str(hyperparameter_value)
127
+ start_index = 0
128
+ if hyperparameter_value_str[0] in ["+", "-"]:
129
+ start_index = 1
130
+ if not hyperparameter_value_str[start_index:].isdigit():
131
+ raise JumpStartHyperparametersError(
132
+ f"Hyperparameter '{hyperparameter_name}' must be integer type "
133
+ f"('{hyperparameter_value}')."
134
+ )
135
+
136
+ if hasattr(hyperparameter_spec, "min"):
137
+ if numeric_hyperparam_value < hyperparameter_spec.min:
138
+ raise JumpStartHyperparametersError(
139
+ f"Hyperparameter '{hyperparameter_name}' can be no less than "
140
+ f"{hyperparameter_spec.min}."
141
+ )
142
+
143
+ if hasattr(hyperparameter_spec, "max"):
144
+ if numeric_hyperparam_value > hyperparameter_spec.max:
145
+ raise JumpStartHyperparametersError(
146
+ f"Hyperparameter '{hyperparameter_name}' can be no greater than "
147
+ f"{hyperparameter_spec.max}."
148
+ )
149
+
150
+ if hasattr(hyperparameter_spec, "exclusive_min"):
151
+ if numeric_hyperparam_value <= hyperparameter_spec.exclusive_min:
152
+ raise JumpStartHyperparametersError(
153
+ f"Hyperparameter '{hyperparameter_name}' must be greater than "
154
+ f"{hyperparameter_spec.exclusive_min}."
155
+ )
156
+
157
+ if hasattr(hyperparameter_spec, "exclusive_max"):
158
+ if numeric_hyperparam_value >= hyperparameter_spec.exclusive_max:
159
+ raise JumpStartHyperparametersError(
160
+ f"Hyperparameter '{hyperparameter_name}' must be less than "
161
+ f"{hyperparameter_spec.exclusive_max}."
162
+ )
163
+
164
+
165
+ def validate_hyperparameters(
166
+ model_id: str,
167
+ model_version: str,
168
+ hyperparameters: Dict[str, Any],
169
+ validation_mode: HyperparameterValidationMode = HyperparameterValidationMode.VALIDATE_PROVIDED,
170
+ hub_arn: Optional[str] = None,
171
+ region: Optional[str] = None,
172
+ sagemaker_session: Optional[Session] = None,
173
+ tolerate_vulnerable_model: bool = False,
174
+ tolerate_deprecated_model: bool = False,
175
+ config_name: Optional[str] = None,
176
+ ) -> None:
177
+ """Validate hyperparameters for JumpStart models.
178
+
179
+ Args:
180
+ model_id (str): Model ID of the model for which to validate hyperparameters.
181
+ model_version (str): Version of the model for which to validate hyperparameters.
182
+ hyperparameters (dict): Hyperparameters to validate.
183
+ validation_mode (HyperparameterValidationMode): Method of validation to use with
184
+ hyperparameters. If set to ``VALIDATE_PROVIDED``, only hyperparameters provided
185
+ to this function will be validated, the missing hyperparameters will be ignored.
186
+ If set to``VALIDATE_ALGORITHM``, all algorithm hyperparameters will be validated.
187
+ If set to ``VALIDATE_ALL``, all hyperparameters for the model will be validated.
188
+ region (str): Region for which to validate hyperparameters. (Default: None).
189
+ sagemaker_session (Optional[Session]): Custom SageMaker Session to use.
190
+ (Default: sagemaker.jumpstart.constants.DEFAULT_JUMPSTART_SAGEMAKER_SESSION).
191
+ tolerate_vulnerable_model (bool): True if vulnerable versions of model
192
+ specifications should be tolerated (exception not raised). If False, raises an
193
+ exception if the script used by this version of the model has dependencies with known
194
+ security vulnerabilities. (Default: False).
195
+ tolerate_deprecated_model (bool): True if deprecated models should be tolerated
196
+ (exception not raised). False if these models should raise an exception.
197
+ (Default: False).
198
+ config_name (Optional[str]): Name of the JumpStart Model config to apply. (Default: None).
199
+
200
+ Raises:
201
+ JumpStartHyperparametersError: If the hyperparameters are not formatted correctly,
202
+ according to their metadata specs.
203
+
204
+ """
205
+
206
+ region = region or get_region_fallback(
207
+ sagemaker_session=sagemaker_session,
208
+ )
209
+ if validation_mode is None:
210
+ validation_mode = HyperparameterValidationMode.VALIDATE_PROVIDED
211
+
212
+ region = region or get_region_fallback(
213
+ sagemaker_session=sagemaker_session,
214
+ )
215
+
216
+ model_specs = verify_model_region_and_return_specs(
217
+ model_id=model_id,
218
+ version=model_version,
219
+ hub_arn=hub_arn,
220
+ region=region,
221
+ scope=JumpStartScriptScope.TRAINING,
222
+ sagemaker_session=sagemaker_session,
223
+ tolerate_deprecated_model=tolerate_deprecated_model,
224
+ tolerate_vulnerable_model=tolerate_vulnerable_model,
225
+ config_name=config_name,
226
+ )
227
+ hyperparameters_specs = model_specs.hyperparameters
228
+
229
+ if validation_mode == HyperparameterValidationMode.VALIDATE_PROVIDED:
230
+ for hyperparam_name, hyperparam_value in hyperparameters.items():
231
+ _validate_hyperparameter(hyperparam_name, hyperparam_value, hyperparameters_specs)
232
+
233
+ elif validation_mode == HyperparameterValidationMode.VALIDATE_ALGORITHM:
234
+ for hyperparam in hyperparameters_specs:
235
+ if hyperparam.scope == VariableScope.ALGORITHM:
236
+ if hyperparam.name not in hyperparameters:
237
+ raise JumpStartHyperparametersError(
238
+ f"Cannot find algorithm hyperparameter for '{hyperparam.name}'."
239
+ )
240
+ _validate_hyperparameter(
241
+ hyperparam.name, hyperparameters[hyperparam.name], hyperparameters_specs
242
+ )
243
+
244
+ elif validation_mode == HyperparameterValidationMode.VALIDATE_ALL:
245
+ for hyperparam in hyperparameters_specs:
246
+ if hyperparam.name not in hyperparameters:
247
+ raise JumpStartHyperparametersError(
248
+ f"Cannot find hyperparameter for '{hyperparam.name}'."
249
+ )
250
+ _validate_hyperparameter(
251
+ hyperparam.name, hyperparameters[hyperparam.name], hyperparameters_specs
252
+ )
253
+
254
+ else:
255
+ raise NotImplementedError(
256
+ f"Unable to handle validation for the mode '{validation_mode.value}'."
257
+ )
@@ -0,0 +1,312 @@
1
+ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+ """This module contains helper methods related to Lambda."""
14
+ from __future__ import print_function, absolute_import
15
+
16
+ from io import BytesIO
17
+ import zipfile
18
+ import time
19
+ from botocore.exceptions import ClientError
20
+
21
+ from sagemaker.core import s3
22
+ from sagemaker.core.helper.session_helper import Session
23
+
24
+
25
+ class Lambda:
26
+ """Contains lambda boto3 wrappers to Create, Update, Delete and Invoke Lambda functions."""
27
+
28
+ def __init__(
29
+ self,
30
+ function_arn: str = None,
31
+ function_name: str = None,
32
+ execution_role_arn: str = None,
33
+ zipped_code_dir: str = None,
34
+ s3_bucket: str = None,
35
+ script: str = None,
36
+ handler: str = None,
37
+ session: Session = None,
38
+ timeout: int = 120,
39
+ memory_size: int = 128,
40
+ runtime: str = "python3.8",
41
+ vpc_config: dict = None,
42
+ environment: dict = None,
43
+ layers: list = None,
44
+ ):
45
+ """Constructs a Lambda instance.
46
+
47
+ This instance represents a Lambda function and provides methods for updating,
48
+ deleting and invoking the function.
49
+
50
+ This class can be used either for creating a new Lambda function or using an existing one.
51
+ When using an existing Lambda function, only the function_arn argument is required.
52
+ When creating a new one the function_name, execution_role_arn and handler arguments
53
+ are required, as well as either script or zipped_code_dir.
54
+
55
+ Args:
56
+ function_arn (str): The arn of the Lambda function.
57
+ function_name (str): The name of the Lambda function.
58
+ Function name must be provided to create a Lambda function.
59
+ execution_role_arn (str): The role to be attached to Lambda function.
60
+ zipped_code_dir (str): The path of the zipped code package of the Lambda function.
61
+ s3_bucket (str): The bucket where zipped code is uploaded.
62
+ If not provided, default session bucket is used to upload zipped_code_dir.
63
+ script (str): The path of Lambda function script for direct zipped upload
64
+ handler (str): The Lambda handler. The format for handler should be
65
+ file_name.function_name. For ex: if the name of the Lambda script is
66
+ hello_world.py and Lambda function definition in that script is
67
+ lambda_handler(event, context), the handler should be hello_world.lambda_handler
68
+ session (sagemaker.session.Session): Session object which manages interactions
69
+ with Amazon SageMaker APIs and any other AWS services needed.
70
+ If not specified, new session is created.
71
+ timeout (int): Timeout of the Lambda function in seconds. Default is 120 seconds.
72
+ memory_size (int): Memory of the Lambda function in megabytes. Default is 128 MB.
73
+ runtime (str): Runtime of the Lambda function. Default is set to python3.8.
74
+ vpc_config (dict): VPC to deploy the Lambda function to. Default is None.
75
+ environment (dict): Environment Variables for the Lambda function. Default is None.
76
+ layers (list): List of Lambda layers for the Lambda function. Default is None.
77
+ """
78
+ self.function_arn = function_arn
79
+ self.function_name = function_name
80
+ self.zipped_code_dir = zipped_code_dir
81
+ self.s3_bucket = s3_bucket
82
+ self.script = script
83
+ self.handler = handler
84
+ self.execution_role_arn = execution_role_arn
85
+ self.session = session if session is not None else Session()
86
+ self.timeout = timeout
87
+ self.memory_size = memory_size
88
+ self.runtime = runtime
89
+ self.vpc_config = vpc_config or {}
90
+ self.environment = environment or {}
91
+ self.layers = layers or []
92
+
93
+ if function_arn is None and function_name is None:
94
+ raise ValueError("Either function_arn or function_name must be provided.")
95
+
96
+ if function_name is not None:
97
+ if execution_role_arn is None:
98
+ raise ValueError("execution_role_arn must be provided.")
99
+ if zipped_code_dir is None and script is None:
100
+ raise ValueError("Either zipped_code_dir or script must be provided.")
101
+ if zipped_code_dir and script:
102
+ raise ValueError("Provide either script or zipped_code_dir, not both.")
103
+ if handler is None:
104
+ raise ValueError("Lambda handler must be provided.")
105
+
106
+ if function_arn is not None:
107
+ if zipped_code_dir and script:
108
+ raise ValueError("Provide either script or zipped_code_dir, not both.")
109
+
110
+ def create(self):
111
+ """Method to create a lambda function.
112
+
113
+ Returns: boto3 response from Lambda's create_function method.
114
+ """
115
+ lambda_client = _get_lambda_client(self.session)
116
+
117
+ if self.function_name is None:
118
+ raise ValueError("FunctionName must be provided to create a Lambda function.")
119
+
120
+ if self.script is not None:
121
+ code = {"ZipFile": _zip_lambda_code(self.script)}
122
+ else:
123
+ bucket, key_prefix = s3.determine_bucket_and_prefix(
124
+ bucket=self.s3_bucket, key_prefix=None, sagemaker_session=self.session
125
+ )
126
+ key = _upload_to_s3(
127
+ s3_client=_get_s3_client(self.session),
128
+ function_name=self.function_name,
129
+ zipped_code_dir=self.zipped_code_dir,
130
+ s3_bucket=bucket,
131
+ s3_key_prefix=key_prefix,
132
+ )
133
+ code = {"S3Bucket": bucket, "S3Key": key}
134
+
135
+ try:
136
+ response = lambda_client.create_function(
137
+ FunctionName=self.function_name,
138
+ Runtime=self.runtime,
139
+ Handler=self.handler,
140
+ Role=self.execution_role_arn,
141
+ Code=code,
142
+ Timeout=self.timeout,
143
+ MemorySize=self.memory_size,
144
+ VpcConfig=self.vpc_config,
145
+ Environment=self.environment,
146
+ Layers=self.layers,
147
+ )
148
+ return response
149
+ except ClientError as e:
150
+ error = e.response["Error"]
151
+ raise ValueError(error)
152
+
153
+ def update(self):
154
+ """Method to update a lambda function.
155
+
156
+ Returns: boto3 response from Lambda's update_function method.
157
+ """
158
+ lambda_client = _get_lambda_client(self.session)
159
+ retry_attempts = 7
160
+ for i in range(retry_attempts):
161
+ try:
162
+ if self.script is not None:
163
+ response = lambda_client.update_function_code(
164
+ FunctionName=self.function_name or self.function_arn,
165
+ ZipFile=_zip_lambda_code(self.script),
166
+ )
167
+ else:
168
+ bucket, key_prefix = s3.determine_bucket_and_prefix(
169
+ bucket=self.s3_bucket, key_prefix=None, sagemaker_session=self.session
170
+ )
171
+
172
+ # get function name to be used in S3 upload path
173
+ if self.function_arn:
174
+ versioned_function_name = self.function_arn.split("funtion:")[-1]
175
+ if ":" in versioned_function_name:
176
+ function_name_for_s3 = versioned_function_name.split(":")[0]
177
+ else:
178
+ function_name_for_s3 = versioned_function_name
179
+ else:
180
+ function_name_for_s3 = self.function_name
181
+
182
+ response = lambda_client.update_function_code(
183
+ FunctionName=(self.function_name or self.function_arn),
184
+ S3Bucket=bucket,
185
+ S3Key=_upload_to_s3(
186
+ s3_client=_get_s3_client(self.session),
187
+ function_name=function_name_for_s3,
188
+ zipped_code_dir=self.zipped_code_dir,
189
+ s3_bucket=bucket,
190
+ s3_key_prefix=key_prefix,
191
+ ),
192
+ )
193
+ return response
194
+ except ClientError as e:
195
+ error = e.response["Error"]
196
+ code = error["Code"]
197
+ if code == "ResourceConflictException":
198
+ if i == retry_attempts - 1:
199
+ raise ValueError(error)
200
+ # max wait time = 2**0 + 2**1 + .. + 2**6 = 127 seconds
201
+ time.sleep(2**i)
202
+ else:
203
+ raise ValueError(error)
204
+
205
+ def upsert(self):
206
+ """Method to create a lambda function or update it if it already exists
207
+
208
+ Returns: boto3 response from Lambda's methods.
209
+ """
210
+ try:
211
+ return self.create()
212
+ except ValueError as error:
213
+ if "ResourceConflictException" in str(error):
214
+ return self.update()
215
+ raise
216
+
217
+ def invoke(self):
218
+ """Method to invoke a lambda function.
219
+
220
+ Returns: boto3 response from Lambda's invoke method.
221
+ """
222
+ lambda_client = _get_lambda_client(self.session)
223
+ try:
224
+ response = lambda_client.invoke(
225
+ FunctionName=self.function_name or self.function_arn,
226
+ InvocationType="RequestResponse",
227
+ )
228
+ return response
229
+ except ClientError as e:
230
+ error = e.response["Error"]
231
+ raise ValueError(error)
232
+
233
+ def delete(self):
234
+ """Method to delete a lambda function.
235
+
236
+ Returns: boto3 response from Lambda's delete_function method.
237
+ """
238
+ lambda_client = _get_lambda_client(self.session)
239
+ try:
240
+ response = lambda_client.delete_function(
241
+ FunctionName=self.function_name or self.function_arn
242
+ )
243
+ return response
244
+ except ClientError as e:
245
+ error = e.response["Error"]
246
+ raise ValueError(error)
247
+
248
+
249
+ def _get_s3_client(session):
250
+ """Method to get a boto3 s3 client.
251
+
252
+ Returns: a s3 client.
253
+ """
254
+ sagemaker_session = session or Session()
255
+ if sagemaker_session.s3_client is None:
256
+ s3_client = sagemaker_session.boto_session.client(
257
+ "s3", region_name=sagemaker_session.boto_region_name
258
+ )
259
+ else:
260
+ s3_client = sagemaker_session.s3_client
261
+ return s3_client
262
+
263
+
264
+ def _get_lambda_client(session):
265
+ """Method to get a boto3 lambda client.
266
+
267
+ Returns: a lambda client.
268
+ """
269
+ sagemaker_session = session or Session()
270
+ if sagemaker_session.lambda_client is None:
271
+ lambda_client = sagemaker_session.boto_session.client(
272
+ "lambda", region_name=sagemaker_session.boto_region_name
273
+ )
274
+ else:
275
+ lambda_client = sagemaker_session.lambda_client
276
+ return lambda_client
277
+
278
+
279
+ def _upload_to_s3(s3_client, function_name, zipped_code_dir, s3_bucket, s3_key_prefix=None):
280
+ """Upload the zipped code to S3 bucket provided in the Lambda instance.
281
+
282
+ Lambda instance must have a path to the zipped code folder and a S3 bucket to upload
283
+ the code. The key will lambda/function_name/code and the S3 URI where the code is
284
+ uploaded is in this format: s3://bucket_name/lambda/function_name/code.
285
+
286
+ Returns: the S3 key where the code is uploaded.
287
+ """
288
+
289
+ key = s3.s3_path_join(
290
+ s3_key_prefix,
291
+ "lambda",
292
+ function_name,
293
+ "code",
294
+ )
295
+ s3_client.upload_file(zipped_code_dir, s3_bucket, key)
296
+ return key
297
+
298
+
299
+ def _zip_lambda_code(script):
300
+ """This method zips the lambda function script.
301
+
302
+ Lambda function script is provided in the lambda instance and reads that zipped file.
303
+
304
+ Returns: A buffer of zipped lambda function script.
305
+ """
306
+ buffer = BytesIO()
307
+ code_dir = script.split("/")[-1]
308
+
309
+ with zipfile.ZipFile(buffer, "w") as z:
310
+ z.write(script, code_dir)
311
+ buffer.seek(0)
312
+ return buffer.read()
@@ -0,0 +1,42 @@
1
+ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+ """SageMaker Lineage tracking and artifact management."""
14
+ from __future__ import absolute_import
15
+
16
+ from sagemaker.core.lineage.action import Action # noqa: F401
17
+ from sagemaker.core.lineage.artifact import Artifact # noqa: F401
18
+ from sagemaker.core.lineage.association import Association # noqa: F401
19
+ from sagemaker.core.lineage.context import Context # noqa: F401
20
+ from sagemaker.core.lineage.lineage_trial_component import LineageTrialComponent # noqa: F401
21
+ from sagemaker.core.lineage.query import ( # noqa: F401
22
+ LineageEntityEnum,
23
+ LineageFilter,
24
+ LineageQuery,
25
+ LineageQueryDirectionEnum,
26
+ LineageSourceEnum,
27
+ )
28
+ from sagemaker.core.lineage.visualizer import LineageTableVisualizer # noqa: F401
29
+
30
+ __all__ = [
31
+ "Action",
32
+ "Artifact",
33
+ "Association",
34
+ "Context",
35
+ "LineageEntityEnum",
36
+ "LineageFilter",
37
+ "LineageQuery",
38
+ "LineageQueryDirectionEnum",
39
+ "LineageSourceEnum",
40
+ "LineageTableVisualizer",
41
+ "LineageTrialComponent",
42
+ ]