Skip to content

Commit 2a8d685

Browse files
committed
fix: minor jumpstart dev ex improvements
1 parent ef8dd31 commit 2a8d685

File tree

18 files changed

+793
-29
lines changed

18 files changed

+793
-29
lines changed

src/sagemaker/chainer/model.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,11 @@ def register(
261261
)
262262

263263
def prepare_container_def(
264-
self, instance_type=None, accelerator_type=None, serverless_inference_config=None
264+
self,
265+
instance_type=None,
266+
accelerator_type=None,
267+
serverless_inference_config=None,
268+
accept_eula=None,
265269
):
266270
"""Return a container definition with framework configuration set in model environment.
267271
@@ -274,6 +278,11 @@ def prepare_container_def(
274278
serverless_inference_config (sagemaker.serverless.ServerlessInferenceConfig):
275279
Specifies configuration related to serverless endpoint. Instance type is
276280
not provided in serverless inference. So this is used to find image URIs.
281+
accept_eula (bool): For models that require a Model Access Config, specify True or
282+
False to indicate whether model terms of use have been accepted.
283+
The `accept_eula` value must be explicitly defined as `True` in order to
284+
accept the end-user license agreement (EULA) that some
285+
models require. (Default: None).
277286
278287
Returns:
279288
dict[str, str]: A container definition object usable with the
@@ -303,7 +312,12 @@ def prepare_container_def(
303312
deploy_env[MODEL_SERVER_WORKERS_PARAM_NAME.upper()] = to_string(
304313
self.model_server_workers
305314
)
306-
return sagemaker.container_def(deploy_image, self.model_data, deploy_env)
315+
return sagemaker.container_def(
316+
deploy_image,
317+
self.model_data,
318+
deploy_env,
319+
accept_eula=accept_eula,
320+
)
307321

308322
def serving_image_uri(
309323
self, region_name, instance_type, accelerator_type=None, serverless_inference_config=None

src/sagemaker/djl_inference/model.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,7 @@ def prepare_container_def(
717717
instance_type=None,
718718
accelerator_type=None,
719719
serverless_inference_config=None,
720+
accept_eula=None,
720721
): # pylint: disable=unused-argument
721722
"""A container definition with framework configuration set in model environment variables.
722723

src/sagemaker/huggingface/model.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,7 @@ def prepare_container_def(
457457
accelerator_type=None,
458458
serverless_inference_config=None,
459459
inference_tool=None,
460+
accept_eula=None,
460461
):
461462
"""A container definition with framework configuration set in model environment variables.
462463
@@ -471,6 +472,11 @@ def prepare_container_def(
471472
not provided in serverless inference. So this is used to find image URIs.
472473
inference_tool (str): the tool that will be used to aid in the inference.
473474
Valid values: "neuron, neuronx, None" (default: None).
475+
accept_eula (bool): For models that require a Model Access Config, specify True or
476+
False to indicate whether model terms of use have been accepted.
477+
The `accept_eula` value must be explicitly defined as `True` in order to
478+
accept the end-user license agreement (EULA) that some
479+
models require. (Default: None).
474480
475481
Returns:
476482
dict[str, str]: A container definition object usable with the
@@ -502,7 +508,10 @@ def prepare_container_def(
502508
self.model_server_workers
503509
)
504510
return sagemaker.container_def(
505-
deploy_image, self.repacked_model_data or self.model_data, deploy_env
511+
deploy_image,
512+
self.repacked_model_data or self.model_data,
513+
deploy_env,
514+
accept_eula=accept_eula,
506515
)
507516

508517
def serving_image_uri(

src/sagemaker/jumpstart/exceptions.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,9 @@ def __init__(
118118
self.message = (
119119
f"Version '{version}' of JumpStart model '{model_id}' " # type: ignore
120120
"has at least 1 vulnerable dependency in the training script. "
121-
"Please try targeting a higher version of the model or using a "
122-
"different model. List of vulnerabilities: "
121+
"Please try targeting a higher version of the model, upgrading "
122+
"SageMaker Python SDK version or using a different model. "
123+
"List of vulnerabilities: "
123124
f"{', '.join(vulnerabilities)}" # type: ignore
124125
)
125126
else:
@@ -154,8 +155,8 @@ def __init__(
154155
raise RuntimeError("Must specify `model_id` and `version` arguments.")
155156
self.message = (
156157
f"Version '{version}' of JumpStart model '{model_id}' is deprecated. "
157-
"Please try targeting a higher version of the model or using a "
158-
"different model."
158+
"Please try targeting a higher version of the model, upgrading "
159+
"SageMaker Python SDK version or using a different model."
159160
)
160161

161162
super().__init__(self.message)

src/sagemaker/jumpstart/utils.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ def get_jumpstart_gated_content_bucket(
109109
accessors.JumpStartModelsAccessor.set_jumpstart_gated_content_bucket(gated_bucket_to_return)
110110

111111
if gated_bucket_to_return != old_gated_content_bucket:
112-
accessors.JumpStartModelsAccessor.reset_cache()
112+
if old_gated_content_bucket is not None:
113+
accessors.JumpStartModelsAccessor.reset_cache()
113114
for info_log in info_logs:
114115
constants.JUMPSTART_LOGGER.info(info_log)
115116

@@ -153,7 +154,8 @@ def get_jumpstart_content_bucket(
153154
accessors.JumpStartModelsAccessor.set_jumpstart_content_bucket(bucket_to_return)
154155

155156
if bucket_to_return != old_content_bucket:
156-
accessors.JumpStartModelsAccessor.reset_cache()
157+
if old_content_bucket is not None:
158+
accessors.JumpStartModelsAccessor.reset_cache()
157159
for info_log in info_logs:
158160
constants.JUMPSTART_LOGGER.info(info_log)
159161
return bucket_to_return

src/sagemaker/model.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ def create(
547547
accelerator_type: Optional[str] = None,
548548
serverless_inference_config: Optional[ServerlessInferenceConfig] = None,
549549
tags: Optional[List[Dict[str, Union[str, PipelineVariable]]]] = None,
550+
accept_eula: Optional[bool] = None,
550551
):
551552
"""Create a SageMaker Model Entity
552553
@@ -570,6 +571,11 @@ def create(
570571
For more information about tags, see
571572
`boto3 documentation <https://boto3.amazonaws.com/v1/documentation/\
572573
api/latest/reference/services/sagemaker.html#SageMaker.Client.add_tags>`_
574+
accept_eula (bool): For models that require a Model Access Config, specify True or
575+
False to indicate whether model terms of use have been accepted.
576+
The `accept_eula` value must be explicitly defined as `True` in order to
577+
accept the end-user license agreement (EULA) that some
578+
models require. (Default: None).
573579
574580
Returns:
575581
None or pipeline step arguments in case the Model instance is built with
@@ -581,6 +587,7 @@ def create(
581587
accelerator_type=accelerator_type,
582588
tags=tags,
583589
serverless_inference_config=serverless_inference_config,
590+
accept_eula=accept_eula,
584591
)
585592

586593
def _init_sagemaker_session_if_does_not_exist(self, instance_type=None):
@@ -601,6 +608,7 @@ def prepare_container_def(
601608
instance_type=None,
602609
accelerator_type=None,
603610
serverless_inference_config=None,
611+
accept_eula=None,
604612
): # pylint: disable=unused-argument
605613
"""Return a dict created by ``sagemaker.container_def()``.
606614
@@ -618,6 +626,11 @@ def prepare_container_def(
618626
serverless_inference_config (sagemaker.serverless.ServerlessInferenceConfig):
619627
Specifies configuration related to serverless endpoint. Instance type is
620628
not provided in serverless inference. So this is used to find image URIs.
629+
accept_eula (bool): For models that require a Model Access Config, specify True or
630+
False to indicate whether model terms of use have been accepted.
631+
The `accept_eula` value must be explicitly defined as `True` in order to
632+
accept the end-user license agreement (EULA) that some
633+
models require. (Default: None).
621634
622635
Returns:
623636
dict: A container definition object usable with the CreateModel API.
@@ -635,7 +648,7 @@ def prepare_container_def(
635648
self.repacked_model_data or self.model_data,
636649
deploy_env,
637650
image_config=self.image_config,
638-
accept_eula=getattr(self, "accept_eula", None),
651+
accept_eula=accept_eula or getattr(self, "accept_eula", None),
639652
)
640653

641654
def is_repack(self) -> bool:
@@ -777,6 +790,7 @@ def _create_sagemaker_model(
777790
accelerator_type=None,
778791
tags=None,
779792
serverless_inference_config=None,
793+
accept_eula=None,
780794
):
781795
"""Create a SageMaker Model Entity
782796
@@ -796,6 +810,11 @@ def _create_sagemaker_model(
796810
serverless_inference_config (sagemaker.serverless.ServerlessInferenceConfig):
797811
Specifies configuration related to serverless endpoint. Instance type is
798812
not provided in serverless inference. So this is used to find image URIs.
813+
accept_eula (bool): For models that require a Model Access Config, specify True or
814+
False to indicate whether model terms of use have been accepted.
815+
The `accept_eula` value must be explicitly defined as `True` in order to
816+
accept the end-user license agreement (EULA) that some
817+
models require. (Default: None).
799818
"""
800819

801820
if self.model_package_arn is not None or self.algorithm_arn is not None:
@@ -827,6 +846,7 @@ def _create_sagemaker_model(
827846
instance_type,
828847
accelerator_type=accelerator_type,
829848
serverless_inference_config=serverless_inference_config,
849+
accept_eula=accept_eula,
830850
)
831851

832852
if not isinstance(self.sagemaker_session, PipelineSession):
@@ -1434,7 +1454,12 @@ def deploy(
14341454
"serverless_inference_config needs to be a ServerlessInferenceConfig object"
14351455
)
14361456

1437-
if instance_type and instance_type.startswith("ml.inf") and not self._is_compiled_model:
1457+
if (
1458+
getattr(self, "model_id", None) in {"", None}
1459+
and instance_type
1460+
and instance_type.startswith("ml.inf")
1461+
and not self._is_compiled_model
1462+
):
14381463
LOGGER.warning(
14391464
"Your model is not compiled. Please compile your model before using Inferentia."
14401465
)

src/sagemaker/multidatamodel.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,11 @@ def __init__(
121121
)
122122

123123
def prepare_container_def(
124-
self, instance_type=None, accelerator_type=None, serverless_inference_config=None
124+
self,
125+
instance_type=None,
126+
accelerator_type=None,
127+
serverless_inference_config=None,
128+
accept_eula=None,
125129
):
126130
"""Return a container definition set.
127131
@@ -149,6 +153,7 @@ def prepare_container_def(
149153
env=environment,
150154
model_data_url=self.model_data_prefix,
151155
container_mode=self.container_mode,
156+
accept_eula=accept_eula,
152157
)
153158

154159
def deploy(

src/sagemaker/mxnet/model.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,11 @@ def register(
263263
)
264264

265265
def prepare_container_def(
266-
self, instance_type=None, accelerator_type=None, serverless_inference_config=None
266+
self,
267+
instance_type=None,
268+
accelerator_type=None,
269+
serverless_inference_config=None,
270+
accept_eula=None,
267271
):
268272
"""Return a container definition with framework configuration.
269273
@@ -278,6 +282,11 @@ def prepare_container_def(
278282
serverless_inference_config (sagemaker.serverless.ServerlessInferenceConfig):
279283
Specifies configuration related to serverless endpoint. Instance type is
280284
not provided in serverless inference. So this is used to find image URIs.
285+
accept_eula (bool): For models that require a Model Access Config, specify True or
286+
False to indicate whether model terms of use have been accepted.
287+
The `accept_eula` value must be explicitly defined as `True` in order to
288+
accept the end-user license agreement (EULA) that some
289+
models require. (Default: None).
281290
282291
Returns:
283292
dict[str, str]: A container definition object usable with the
@@ -308,7 +317,10 @@ def prepare_container_def(
308317
self.model_server_workers
309318
)
310319
return sagemaker.container_def(
311-
deploy_image, self.repacked_model_data or self.model_data, deploy_env
320+
deploy_image,
321+
self.repacked_model_data or self.model_data,
322+
deploy_env,
323+
accept_eula=accept_eula,
312324
)
313325

314326
def serving_image_uri(

src/sagemaker/pytorch/model.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,11 @@ def register(
265265
)
266266

267267
def prepare_container_def(
268-
self, instance_type=None, accelerator_type=None, serverless_inference_config=None
268+
self,
269+
instance_type=None,
270+
accelerator_type=None,
271+
serverless_inference_config=None,
272+
accept_eula=None,
269273
):
270274
"""A container definition with framework configuration set in model environment variables.
271275
@@ -278,6 +282,11 @@ def prepare_container_def(
278282
serverless_inference_config (sagemaker.serverless.ServerlessInferenceConfig):
279283
Specifies configuration related to serverless endpoint. Instance type is
280284
not provided in serverless inference. So this is used to find image URIs.
285+
accept_eula (bool): For models that require a Model Access Config, specify True or
286+
False to indicate whether model terms of use have been accepted.
287+
The `accept_eula` value must be explicitly defined as `True` in order to
288+
accept the end-user license agreement (EULA) that some
289+
models require. (Default: None).
281290
282291
Returns:
283292
dict[str, str]: A container definition object usable with the
@@ -308,7 +317,10 @@ def prepare_container_def(
308317
self.model_server_workers
309318
)
310319
return sagemaker.container_def(
311-
deploy_image, self.repacked_model_data or self.model_data, deploy_env
320+
deploy_image,
321+
self.repacked_model_data or self.model_data,
322+
deploy_env,
323+
accept_eula=accept_eula,
312324
)
313325

314326
def serving_image_uri(

src/sagemaker/sklearn/model.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,11 @@ def register(
258258
)
259259

260260
def prepare_container_def(
261-
self, instance_type=None, accelerator_type=None, serverless_inference_config=None
261+
self,
262+
instance_type=None,
263+
accelerator_type=None,
264+
serverless_inference_config=None,
265+
accept_eula=None,
262266
):
263267
"""Container definition with framework configuration set in model environment variables.
264268
@@ -272,6 +276,11 @@ def prepare_container_def(
272276
serverless_inference_config (sagemaker.serverless.ServerlessInferenceConfig):
273277
Specifies configuration related to serverless endpoint. Instance type is
274278
not provided in serverless inference. So this is used to find image URIs.
279+
accept_eula (bool): For models that require a Model Access Config, specify True or
280+
False to indicate whether model terms of use have been accepted.
281+
The `accept_eula` value must be explicitly defined as `True` in order to
282+
accept the end-user license agreement (EULA) that some
283+
models require. (Default: None).
275284
276285
Returns:
277286
dict[str, str]: A container definition object usable with the
@@ -298,7 +307,12 @@ def prepare_container_def(
298307
model_data_uri = (
299308
self.repacked_model_data if self.enable_network_isolation() else self.model_data
300309
)
301-
return sagemaker.container_def(deploy_image, model_data_uri, deploy_env)
310+
return sagemaker.container_def(
311+
deploy_image,
312+
model_data_uri,
313+
deploy_env,
314+
accept_eula=accept_eula,
315+
)
302316

303317
def serving_image_uri(self, region_name, instance_type, serverless_inference_config=None):
304318
"""Create a URI for the serving image.

src/sagemaker/tensorflow/model.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,11 @@ def _eia_supported(self):
377377
)
378378

379379
def prepare_container_def(
380-
self, instance_type=None, accelerator_type=None, serverless_inference_config=None
380+
self,
381+
instance_type=None,
382+
accelerator_type=None,
383+
serverless_inference_config=None,
384+
accept_eula=None,
381385
):
382386
"""Prepare the container definition.
383387
@@ -387,6 +391,11 @@ def prepare_container_def(
387391
serverless_inference_config (sagemaker.serverless.ServerlessInferenceConfig):
388392
Specifies configuration related to serverless endpoint. Instance type is
389393
not provided in serverless inference. So this is used to find image URIs.
394+
accept_eula (bool): For models that require a Model Access Config, specify True or
395+
False to indicate whether model terms of use have been accepted.
396+
The `accept_eula` value must be explicitly defined as `True` in order to
397+
accept the end-user license agreement (EULA) that some
398+
models require. (Default: None).
390399
391400
Returns:
392401
A container definition for deploying a ``Model`` to an ``Endpoint``.
@@ -444,7 +453,12 @@ def prepare_container_def(
444453
else:
445454
model_data = self.model_data
446455

447-
return sagemaker.container_def(image_uri, model_data, env)
456+
return sagemaker.container_def(
457+
image_uri,
458+
model_data,
459+
env,
460+
accept_eula=accept_eula,
461+
)
448462

449463
def _get_container_env(self):
450464
"""Placeholder docstring."""

0 commit comments

Comments
 (0)