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,246 @@
1
+ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+ """Placeholder docstring"""
14
+ from __future__ import absolute_import
15
+
16
+ import os
17
+ import logging
18
+ import shutil
19
+ import subprocess
20
+ import json
21
+ import re
22
+ import errno
23
+
24
+ from sagemaker.core import s3
25
+ from six.moves.urllib.parse import urlparse
26
+
27
+
28
+ logger = logging.getLogger(__name__)
29
+
30
+ STUDIO_APP_TYPES = ["KernelGateway", "CodeEditor", "JupyterLab"]
31
+
32
+
33
+ def copy_directory_structure(destination_directory, relative_path):
34
+ """Creates intermediate directory structure for relative_path.
35
+
36
+ Create all the intermediate directories required for relative_path to
37
+ exist within destination_directory. This assumes that relative_path is a
38
+ directory located within root_dir.
39
+
40
+ Examples:
41
+ destination_directory: /tmp/destination relative_path: test/unit/
42
+ will create: /tmp/destination/test/unit
43
+
44
+ Args:
45
+ destination_directory (str): root of the destination directory where the
46
+ directory structure will be created.
47
+ relative_path (str): relative path that will be created within
48
+ destination_directory
49
+ """
50
+ full_path = os.path.join(destination_directory, relative_path)
51
+ os.makedirs(full_path, exist_ok=True)
52
+
53
+
54
+ def move_to_destination(source, destination, job_name, sagemaker_session, prefix=""):
55
+ """Move source to destination.
56
+
57
+ Can handle uploading to S3.
58
+
59
+ Args:
60
+ source (str): root directory to move
61
+ destination (str): file:// or s3:// URI that source will be moved to.
62
+ job_name (str): SageMaker job name.
63
+ sagemaker_session (sagemaker.Session): a sagemaker_session to interact
64
+ with S3 if needed
65
+ prefix (str, optional): the directory on S3 used to save files, default
66
+ to the root of ``destination``
67
+
68
+ Returns:
69
+ (str): destination URI
70
+ """
71
+ parsed_uri = urlparse(destination)
72
+ if parsed_uri.scheme == "file":
73
+ dir_path = os.path.abspath(parsed_uri.netloc + parsed_uri.path)
74
+ recursive_copy(source, dir_path)
75
+ final_uri = destination
76
+ elif parsed_uri.scheme == "s3":
77
+ bucket = parsed_uri.netloc
78
+ path = s3.s3_path_join(parsed_uri.path, job_name, prefix)
79
+ final_uri = s3.s3_path_join("s3://", bucket, path)
80
+ sagemaker_session.upload_data(source, bucket, path)
81
+ else:
82
+ raise ValueError("Invalid destination URI, must be s3:// or file://, got: %s" % destination)
83
+
84
+ try:
85
+ shutil.rmtree(source)
86
+ except OSError as exc:
87
+ # on Linux, when docker writes to any mounted volume, it uses the container's user. In most
88
+ # cases this is root. When the container exits and we try to delete them we can't because
89
+ # root owns those files. We expect this to happen, so we handle EACCESS. Any other error
90
+ # we will raise the exception up.
91
+ if exc.errno == errno.EACCES:
92
+ logger.warning("Failed to delete: %s Please remove it manually.", source)
93
+ else:
94
+ logger.error("Failed to delete: %s", source)
95
+ raise
96
+
97
+ return final_uri
98
+
99
+
100
+ def recursive_copy(source, destination):
101
+ """A wrapper around shutil.copy_tree.
102
+
103
+ This won't throw any exception when the source directory does not exist.
104
+
105
+ Args:
106
+ source (str): source path
107
+ destination (str): destination path
108
+ """
109
+ if os.path.isdir(source):
110
+ shutil.copytree(source, destination, dirs_exist_ok=True)
111
+
112
+
113
+ def kill_child_processes(pid):
114
+ """Kill child processes
115
+
116
+ Kills all nested child process ids for a specific pid
117
+
118
+ Args:
119
+ pid (int): process id
120
+ """
121
+ child_pids = get_child_process_ids(pid)
122
+ for child_pid in child_pids:
123
+ os.kill(child_pid, 15)
124
+
125
+
126
+ def get_child_process_ids(pid):
127
+ """Retrieve all child pids for a certain pid
128
+
129
+ Recursively scan each childs process tree and add it to the output
130
+
131
+ Args:
132
+ pid (int): process id
133
+
134
+ Returns:
135
+ (List[int]): Child process ids
136
+ """
137
+ if not str(pid).isdigit():
138
+ raise ValueError("Invalid PID")
139
+
140
+ cmd = ["pgrep", "-P", str(pid)]
141
+
142
+ process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
143
+ output, err = process.communicate()
144
+ if err:
145
+ return []
146
+ pids = [int(pid) for pid in output.decode("utf-8").split()]
147
+ if pids:
148
+ for child_pid in pids:
149
+ return pids + get_child_process_ids(child_pid)
150
+ else:
151
+ return []
152
+
153
+
154
+ def get_docker_host():
155
+ """Discover remote docker host address (if applicable) or use "localhost"
156
+
157
+ Use "docker context inspect" to read current docker host endpoint url,
158
+ url must start with "tcp://"
159
+
160
+ Args:
161
+
162
+ Returns:
163
+ docker_host (str): Docker host DNS or IP address
164
+ """
165
+ cmd = "docker context inspect".split()
166
+ process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
167
+ output, err = process.communicate()
168
+ if err:
169
+ return "localhost"
170
+ docker_context_string = output.decode("utf-8")
171
+ docker_context_host_url = json.loads(docker_context_string)[0]["Endpoints"]["docker"]["Host"]
172
+ parsed_url = urlparse(docker_context_host_url)
173
+ if parsed_url.hostname and parsed_url.scheme == "tcp":
174
+ return parsed_url.hostname
175
+ return "localhost"
176
+
177
+
178
+ def get_using_dot_notation(dictionary, keys):
179
+ """Extract `keys` from dictionary where keys is a string in dot notation.
180
+
181
+ Args:
182
+ dictionary (Dict)
183
+ keys (str)
184
+
185
+ Returns:
186
+ Nested object within dictionary as defined by "keys"
187
+
188
+ Raises:
189
+ ValueError if the provided key does not exist in input dictionary
190
+ """
191
+ try:
192
+ if keys is None:
193
+ return dictionary
194
+ split_keys = keys.split(".", 1)
195
+ key = split_keys[0]
196
+ rest = None
197
+ if len(split_keys) > 1:
198
+ rest = split_keys[1]
199
+ bracket_accessors = re.findall(r"\[(.+?)]", key)
200
+ if bracket_accessors:
201
+ pre_bracket_key = key.split("[", 1)[0]
202
+ inner_dict = dictionary[pre_bracket_key]
203
+ else:
204
+ inner_dict = dictionary[key]
205
+ for bracket_accessor in bracket_accessors:
206
+ if (
207
+ bracket_accessor.startswith("'")
208
+ and bracket_accessor.endswith("'")
209
+ or bracket_accessor.startswith('"')
210
+ and bracket_accessor.endswith('"')
211
+ ):
212
+ # key accessor
213
+ inner_key = bracket_accessor[1:-1]
214
+ else:
215
+ # list accessor
216
+ inner_key = int(bracket_accessor)
217
+ inner_dict = inner_dict[inner_key]
218
+ return get_using_dot_notation(inner_dict, rest)
219
+ except (KeyError, IndexError, TypeError):
220
+ raise ValueError(f"{keys} does not exist in input dictionary.")
221
+
222
+
223
+ def check_for_studio():
224
+ """Helper function to determine if the run environment is studio.
225
+
226
+ Returns (bool): Returns True if valid Studio request.
227
+
228
+ Raises:
229
+ NotImplementedError:
230
+ if run environment = Studio and AppType not in STUDIO_APP_TYPES
231
+ """
232
+ is_studio = False
233
+ if os.path.exists("/opt/ml/metadata/resource-metadata.json"):
234
+ with open("/opt/ml/metadata/resource-metadata.json", "r") as handle:
235
+ metadata = json.load(handle)
236
+ app_type = metadata.get("AppType")
237
+ if app_type:
238
+ # check if the execution is triggered from Studio KernelGateway App
239
+ if app_type in STUDIO_APP_TYPES:
240
+ is_studio = True
241
+ else:
242
+ raise NotImplementedError(
243
+ f"AppType {app_type} in Studio does not support Local Mode."
244
+ )
245
+ # if no apptype, case of classic notebooks
246
+ return is_studio
sagemaker/core/logs.py ADDED
@@ -0,0 +1,181 @@
1
+ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+ """Placeholder docstring"""
14
+ from __future__ import absolute_import
15
+
16
+ import collections
17
+ import functools
18
+ import os
19
+ import sys
20
+
21
+ ##############################################################################
22
+ #
23
+ # Support for reading logs
24
+ #
25
+ ##############################################################################
26
+
27
+
28
+ class ColorWrap(object):
29
+ """A callable that will print text in a different color depending on the instance.
30
+
31
+ Up to 6 if standard output is a terminal or a Jupyter notebook cell.
32
+ """
33
+
34
+ # For what color each number represents, see
35
+ # https://misc.flogisoft.com/bash/tip_colors_and_formatting#colors
36
+ _stream_colors = [34, 35, 32, 36, 33]
37
+
38
+ def __init__(self, force=False):
39
+ """Initialize the class.
40
+
41
+ Args:
42
+ force (bool): If True, render colorizes output no matter where the
43
+ output is (default: False).
44
+ """
45
+ self.colorize = force or sys.stdout.isatty() or os.environ.get("JPY_PARENT_PID", None)
46
+
47
+ def __call__(self, index, s):
48
+ """Print the output, colorized or not, depending on the environment.
49
+
50
+ Args:
51
+ index (int): The instance number.
52
+ s (str): The string to print.
53
+ """
54
+ if self.colorize:
55
+ self._color_wrap(index, s)
56
+ else:
57
+ print(s)
58
+
59
+ def _color_wrap(self, index, s):
60
+ """Placeholder docstring"""
61
+ print("\x1b[{}m{}\x1b[0m".format(self._stream_colors[index % len(self._stream_colors)], s))
62
+
63
+
64
+ def argmin(arr, f):
65
+ """Return the index, i, in arr that minimizes f(arr[i])
66
+
67
+ Args:
68
+ arr:
69
+ f:
70
+ """
71
+ m = None
72
+ i = None
73
+ for idx, item in enumerate(arr):
74
+ if item is not None:
75
+ if m is None or f(item) < m:
76
+ m = f(item)
77
+ i = idx
78
+ return i
79
+
80
+
81
+ def some(arr):
82
+ """Return True iff there is an element, a, of arr such that a is not None.
83
+
84
+ Args:
85
+ arr:
86
+ """
87
+ return functools.reduce(lambda x, y: x or (y is not None), arr, False)
88
+
89
+
90
+ # Position is a tuple that includes the last read timestamp and the number of items that were read
91
+ # at that time. This is used to figure out which event to start with on the next read.
92
+ Position = collections.namedtuple("Position", ["timestamp", "skip"])
93
+
94
+
95
+ def multi_stream_iter(client, log_group, streams, positions=None):
96
+ """Iterate over the available events coming from a set of log streams.
97
+
98
+ Log streams are in a single log group interleaving the events from each stream
99
+ so they're yielded in timestamp order.
100
+
101
+ Args:
102
+ client (boto3 client): The boto client for logs.
103
+ log_group (str): The name of the log group.
104
+ streams (list of str): A list of the log stream names. The position of the stream in
105
+ this list is the stream number.
106
+ positions: (list of Positions): A list of pairs of (timestamp, skip) which represents
107
+ the last record read from each stream.
108
+
109
+ Yields:
110
+ A tuple of (stream number, cloudwatch log event).
111
+ """
112
+ positions = positions or {s: Position(timestamp=0, skip=0) for s in streams}
113
+ event_iters = [
114
+ log_stream(client, log_group, s, positions[s].timestamp, positions[s].skip) for s in streams
115
+ ]
116
+ events = []
117
+ for s in event_iters:
118
+ if not s:
119
+ events.append(None)
120
+ continue
121
+ try:
122
+ events.append(next(s))
123
+ except StopIteration:
124
+ events.append(None)
125
+
126
+ while some(events):
127
+ i = argmin(events, lambda x: x["timestamp"] if x else 9999999999)
128
+ yield (i, events[i])
129
+ try:
130
+ events[i] = next(event_iters[i])
131
+ except StopIteration:
132
+ events[i] = None
133
+
134
+
135
+ def log_stream(client, log_group, stream_name, start_time=0, skip=0):
136
+ """A generator for log items in a single stream.
137
+
138
+ This will yield all the items that are available at the current moment.
139
+
140
+ Args:
141
+ client (boto3.CloudWatchLogs.Client): The Boto client for CloudWatch logs.
142
+ log_group (str): The name of the log group.
143
+ stream_name (str): The name of the specific stream.
144
+ start_time (int): The time stamp value to start reading the logs from (default: 0).
145
+ skip (int): The number of log entries to skip at the start (default: 0). This is for
146
+ when there are multiple entries at the same timestamp.
147
+
148
+ Yields:
149
+ dict: A CloudWatch log event with the following key-value pairs:
150
+ 'timestamp' (int): The time of the event.
151
+ 'message' (str): The log event data.
152
+ 'ingestionTime' (int): The time the event was ingested.
153
+ """
154
+
155
+ next_token = None
156
+
157
+ event_count = 1
158
+ while event_count > 0:
159
+ if next_token is not None:
160
+ token_arg = {"nextToken": next_token}
161
+ else:
162
+ token_arg = {}
163
+
164
+ response = client.get_log_events(
165
+ logGroupName=log_group,
166
+ logStreamName=stream_name,
167
+ startTime=start_time,
168
+ startFromHead=True,
169
+ **token_arg,
170
+ )
171
+ next_token = response["nextForwardToken"]
172
+ events = response["events"]
173
+ event_count = len(events)
174
+ if event_count > skip:
175
+ events = events[skip:]
176
+ skip = 0
177
+ else:
178
+ skip = skip - event_count
179
+ events = []
180
+ for ev in events:
181
+ yield ev
@@ -0,0 +1,56 @@
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 file contains code related to metadata properties."""
14
+ from __future__ import absolute_import
15
+
16
+ from typing import Optional, Union
17
+
18
+ from sagemaker.core.helper.pipeline_variable import PipelineVariable
19
+
20
+
21
+ class MetadataProperties(object):
22
+ """Accepts metadata properties parameters for conversion to request dict."""
23
+
24
+ def __init__(
25
+ self,
26
+ commit_id: Optional[Union[str, PipelineVariable]] = None,
27
+ repository: Optional[Union[str, PipelineVariable]] = None,
28
+ generated_by: Optional[Union[str, PipelineVariable]] = None,
29
+ project_id: Optional[Union[str, PipelineVariable]] = None,
30
+ ):
31
+ """Initialize a ``MetadataProperties`` instance and turn parameters into dict.
32
+
33
+ # TODO: flesh out docstrings
34
+ Args:
35
+ commit_id (str or PipelineVariable):
36
+ repository (str or PipelineVariable):
37
+ generated_by (str or PipelineVariable):
38
+ project_id (str or PipelineVariable):
39
+ """
40
+ self.commit_id = commit_id
41
+ self.repository = repository
42
+ self.generated_by = generated_by
43
+ self.project_id = project_id
44
+
45
+ def _to_request_dict(self):
46
+ """Generates a request dictionary using the parameters provided to the class."""
47
+ metadata_properties_request = dict()
48
+ if self.commit_id:
49
+ metadata_properties_request["CommitId"] = self.commit_id
50
+ if self.repository:
51
+ metadata_properties_request["Repository"] = self.repository
52
+ if self.generated_by:
53
+ metadata_properties_request["GeneratedBy"] = self.generated_by
54
+ if self.project_id:
55
+ metadata_properties_request["ProjectId"] = self.project_id
56
+ return metadata_properties_request
@@ -0,0 +1,91 @@
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
+ """Accessors to retrieve metric definition for training jobs."""
14
+
15
+ from __future__ import absolute_import
16
+
17
+ import logging
18
+ from typing import Dict, Optional, List
19
+
20
+ from sagemaker.core.jumpstart import utils as jumpstart_utils
21
+ from sagemaker.core.jumpstart import artifacts
22
+ from sagemaker.core.jumpstart.constants import DEFAULT_JUMPSTART_SAGEMAKER_SESSION
23
+ from sagemaker.core.jumpstart.enums import JumpStartModelType
24
+ from sagemaker.core.helper.session_helper import Session
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+
29
+ def retrieve_default(
30
+ region: Optional[str] = None,
31
+ model_id: Optional[str] = None,
32
+ model_version: Optional[str] = None,
33
+ hub_arn: Optional[str] = None,
34
+ instance_type: Optional[str] = None,
35
+ tolerate_vulnerable_model: bool = False,
36
+ tolerate_deprecated_model: bool = False,
37
+ sagemaker_session: Session = DEFAULT_JUMPSTART_SAGEMAKER_SESSION,
38
+ config_name: Optional[str] = None,
39
+ model_type: JumpStartModelType = JumpStartModelType.OPEN_WEIGHTS,
40
+ ) -> Optional[List[Dict[str, str]]]:
41
+ """Retrieves the default training metric definitions for the model matching the given arguments.
42
+
43
+ Args:
44
+ region (str): The AWS Region for which to retrieve the default default training metric
45
+ definitions. Defaults to ``None``.
46
+ model_id (str): The model ID of the model for which to
47
+ retrieve the default training metric definitions. (Default: None).
48
+ model_version (str): The version of the model for which to retrieve the
49
+ default training metric definitions. (Default: None).
50
+ hub_arn (str): The arn of the SageMaker Hub for which to retrieve
51
+ model details from. (default: None).
52
+ instance_type (str): An instance type to optionally supply in order to get
53
+ metric definitions specific for the instance type.
54
+ tolerate_vulnerable_model (bool): True if vulnerable versions of model
55
+ specifications should be tolerated (exception not raised). If False, raises an
56
+ exception if the script used by this version of the model has dependencies with known
57
+ security vulnerabilities. (Default: False).
58
+ tolerate_deprecated_model (bool): True if deprecated models should be tolerated
59
+ (exception not raised). False if these models should raise an exception.
60
+ (Default: False).
61
+ sagemaker_session (sagemaker.session.Session): A SageMaker Session
62
+ object, used for SageMaker interactions. If not
63
+ specified, one is created using the default AWS configuration
64
+ chain. (Default: sagemaker.jumpstart.constants.DEFAULT_JUMPSTART_SAGEMAKER_SESSION).
65
+ config_name (Optional[str]): Name of the JumpStart Model config to apply. (Default: None).
66
+ model_type (JumpStartModelType): The type of the model, can be open weights model
67
+ or proprietary model. (Default: JumpStartModelType.OPEN_WEIGHTS).
68
+ Returns:
69
+ list: The default metric definitions to use for the model or None.
70
+
71
+ Raises:
72
+ ValueError: If the combination of arguments specified is not supported.
73
+ """
74
+ if not jumpstart_utils.is_jumpstart_model_input(model_id, model_version):
75
+ raise ValueError(
76
+ "Must specify JumpStart `model_id` and `model_version` "
77
+ "when retrieving default training metric definitions."
78
+ )
79
+
80
+ return artifacts._retrieve_default_training_metric_definitions(
81
+ model_id=model_id,
82
+ model_version=model_version,
83
+ hub_arn=hub_arn,
84
+ instance_type=instance_type,
85
+ region=region,
86
+ tolerate_vulnerable_model=tolerate_vulnerable_model,
87
+ tolerate_deprecated_model=tolerate_deprecated_model,
88
+ sagemaker_session=sagemaker_session,
89
+ config_name=config_name,
90
+ model_type=model_type,
91
+ )
@@ -0,0 +1,38 @@
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
+ """MLflow integration module - stub.
14
+
15
+ This module provides stubs for MLflow integration functionality.
16
+ MLflow integration is an optional feature that requires the mlflow package.
17
+
18
+ NOTE: This is a stub module. Full MLflow integration will be implemented
19
+ in a future release.
20
+ """
21
+ from __future__ import absolute_import
22
+
23
+ __all__ = ["forward_sagemaker_metrics"]
24
+
25
+
26
+ def forward_sagemaker_metrics(*args, **kwargs):
27
+ """Stub for MLflow metrics forwarding.
28
+
29
+ This function is not yet implemented. MLflow integration is an optional
30
+ feature that will be added in a future release.
31
+
32
+ Raises:
33
+ NotImplementedError: Always raised as this is a stub.
34
+ """
35
+ raise NotImplementedError(
36
+ "MLflow integration is not yet implemented. "
37
+ "This feature will be added in a future release."
38
+ )
@@ -0,0 +1,44 @@
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
+ """MLflow metrics forwarding module - stub.
14
+
15
+ This module provides stubs for forwarding SageMaker metrics to MLflow.
16
+ MLflow integration is an optional feature that requires the mlflow package.
17
+
18
+ NOTE: This is a stub module. Full MLflow integration will be implemented
19
+ in a future release.
20
+ """
21
+ from __future__ import absolute_import
22
+
23
+ __all__ = ["log_sagemaker_job_to_mlflow"]
24
+
25
+
26
+ def log_sagemaker_job_to_mlflow(job_name, *args, **kwargs):
27
+ """Stub for logging SageMaker job metrics to MLflow.
28
+
29
+ This function is not yet implemented. MLflow integration is an optional
30
+ feature that will be added in a future release.
31
+
32
+ Args:
33
+ job_name (str): Name of the SageMaker training job
34
+ *args: Additional positional arguments (ignored)
35
+ **kwargs: Additional keyword arguments (ignored)
36
+
37
+ Raises:
38
+ NotImplementedError: Always raised as this is a stub.
39
+ """
40
+ raise NotImplementedError(
41
+ "MLflow integration is not yet implemented. "
42
+ "This feature will be added in a future release. "
43
+ f"Cannot log job '{job_name}' to MLflow."
44
+ )
@@ -0,0 +1,26 @@
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
+ """Model Card utilities for SageMaker Python SDK."""
14
+ from __future__ import absolute_import
15
+
16
+ # Re-export ModelCard from resources
17
+ from sagemaker.core.resources import ModelCard, ModelCardExportJob # noqa: F401
18
+
19
+ # Re-export from shapes
20
+ from sagemaker.core.shapes.model_card_shapes import ( # noqa: F401
21
+ ModelCardContent,
22
+ TrainingDetails,
23
+ )
24
+
25
+ # Alias for backward compatibility
26
+ ModelPackageModelCard = ModelCardContent