Skip to content

Commit dc2f5b7

Browse files
author
Jonathan Makunga
committed
Testing with Notebook
1 parent faba3c8 commit dc2f5b7

File tree

5 files changed

+43
-69
lines changed

5 files changed

+43
-69
lines changed

src/sagemaker/jumpstart/model.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -443,10 +443,10 @@ def set_deployment_config(self, config_name: Optional[str]) -> None:
443443

444444
@property
445445
def deployment_config(self) -> Optional[Dict[str, Any]]:
446-
"""The deployment config to apply to the model.
446+
"""The deployment config that will be applied to the model.
447447
448448
Returns:
449-
Union[Dict[str, Any], None]: Deployment config to apply to this model.
449+
Union[Dict[str, Any], None]: Deployment config that will be applied to the model.
450450
"""
451451
return self._retrieve_selected_deployment_config(self.config_name)
452452

@@ -861,7 +861,7 @@ def register_deploy_wrapper(*args, **kwargs):
861861

862862
@lru_cache
863863
def _get_benchmarks_data(self, config_name: str) -> Dict[str, List[str]]:
864-
"""Constructs deployment configs benchmark data.
864+
"""Deployment configs benchmark metrics.
865865
866866
Args:
867867
config_name (str): The name of the selected deployment config.
@@ -878,9 +878,9 @@ def _retrieve_selected_deployment_config(self, config_name: str) -> Optional[Dic
878878
"""Retrieve the deployment config to apply to the model.
879879
880880
Args:
881-
config_name (str): The name of the selected deployment config.
881+
config_name (str): The name of the deployment config to retrieve.
882882
Returns:
883-
Union[Dict[str, Any], None]: The deployment config to apply to the model.
883+
Optional[Dict[str, Any]]: The retrieved deployment config.
884884
"""
885885
if config_name is None:
886886
return None

src/sagemaker/jumpstart/types.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2286,7 +2286,6 @@ class DeploymentConfigMetadata(BaseDeploymentConfigDataHolder):
22862286
"""Dataclass representing a Deployment Config Metadata"""
22872287

22882288
__slots__ = [
2289-
"version",
22902289
"deployment_config_name",
22912290
"deployment_args",
22922291
"acceleration_configs",
@@ -2301,7 +2300,6 @@ def __init__(
23012300
deploy_kwargs: JumpStartModelDeployKwargs,
23022301
):
23032302
"""Instantiates DeploymentConfigMetadata object."""
2304-
self.version = "1.0.0"
23052303
self.deployment_config_name = config_name
23062304
self.deployment_args = DeploymentArgs(init_kwargs, deploy_kwargs)
23072305
self.acceleration_configs = None

src/sagemaker/serve/builder/jumpstart_builder.py

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,9 @@ def set_deployment_config(self, config_name: Optional[str]) -> None:
439439
The name of the deployment config. Set to None to unset
440440
any existing config that is applied to the model.
441441
"""
442+
if not hasattr(self, "pysdk_model") or self.pysdk_model is None:
443+
raise Exception("Cannot set deployment config to an uninitialized model")
444+
442445
self.pysdk_model.set_deployment_config(config_name)
443446

444447
def get_deployment_config(self) -> Optional[Dict[str, Any]]:
@@ -447,56 +450,58 @@ def get_deployment_config(self) -> Optional[Dict[str, Any]]:
447450
Returns:
448451
Union[Dict[str, Any], None]: Deployment config to apply to this model.
449452
"""
450-
return getattr(self, "pysdk_model", self._create_pre_trained_js_model()).deployment_config
453+
if not hasattr(self, "pysdk_model") or self.pysdk_model is None:
454+
self._build_for_jumpstart()
455+
456+
return self.pysdk_model.deployment_config
451457

452458
def display_benchmark_metrics(self):
453459
"""Display Markdown Benchmark Metrics for deployment configs."""
454-
getattr(
455-
self, "pysdk_model", self._create_pre_trained_js_model()
456-
).display_benchmark_metrics()
460+
if not hasattr(self, "pysdk_model") or self.pysdk_model is None:
461+
self._build_for_jumpstart()
462+
463+
self.pysdk_model.display_benchmark_metrics()
457464

458465
def list_deployment_configs(self) -> List[Dict[str, Any]]:
459466
"""List deployment configs for ``This`` model in the current region.
460467
461468
Returns:
462469
List[Dict[str, Any]]: A list of deployment configs.
463470
"""
464-
return getattr(
465-
self, "pysdk_model", self._create_pre_trained_js_model()
466-
).list_deployment_configs()
471+
if not hasattr(self, "pysdk_model") or self.pysdk_model is None:
472+
self._build_for_jumpstart()
473+
474+
return self.pysdk_model.list_deployment_configs()
467475

468476
def _build_for_jumpstart(self):
469477
"""Placeholder docstring"""
470478
# we do not pickle for jumpstart. set to none
471479
self.secret_key = None
472480
self.jumpstart = True
473481

474-
pysdk_model = getattr(self, "pysdk_model", self._create_pre_trained_js_model())
475-
476-
image_uri = pysdk_model.image_uri
482+
if not hasattr(self, "pysdk_model") or self.pysdk_model is None:
483+
self.pysdk_model = self._create_pre_trained_js_model()
477484

478-
logger.info("JumpStart ID %s is packaged with Image URI: %s", self.model, image_uri)
485+
logger.info(
486+
"JumpStart ID %s is packaged with Image URI: %s", self.model, self.pysdk_model.image_uri
487+
)
479488

480-
if self._is_gated_model(pysdk_model) and self.mode != Mode.SAGEMAKER_ENDPOINT:
489+
if self._is_gated_model() and self.mode != Mode.SAGEMAKER_ENDPOINT:
481490
raise ValueError(
482491
"JumpStart Gated Models are only supported in SAGEMAKER_ENDPOINT mode."
483492
)
484493

485-
if "djl-inference" in image_uri:
494+
if "djl-inference" in self.pysdk_model.image_uri:
486495
logger.info("Building for DJL JumpStart Model ID...")
487496
self.model_server = ModelServer.DJL_SERVING
488-
489-
self.pysdk_model = pysdk_model
490497
self.image_uri = self.pysdk_model.image_uri
491498

492499
self._build_for_djl_jumpstart()
493500

494501
self.pysdk_model.tune = self.tune_for_djl_jumpstart
495-
elif "tgi-inference" in image_uri:
502+
elif "tgi-inference" in self.pysdk_model.image_uri:
496503
logger.info("Building for TGI JumpStart Model ID...")
497504
self.model_server = ModelServer.TGI
498-
499-
self.pysdk_model = pysdk_model
500505
self.image_uri = self.pysdk_model.image_uri
501506

502507
self._build_for_tgi_jumpstart()
@@ -509,15 +514,13 @@ def _build_for_jumpstart(self):
509514

510515
return self.pysdk_model
511516

512-
def _is_gated_model(self, model) -> bool:
517+
def _is_gated_model(self) -> bool:
513518
"""Determine if ``this`` Model is Gated
514519
515-
Args:
516-
model (Model): Jumpstart Model
517520
Returns:
518521
bool: ``True`` if ``this`` Model is Gated
519522
"""
520-
s3_uri = model.model_data
523+
s3_uri = self.pysdk_model.model_data
521524
if isinstance(s3_uri, dict):
522525
s3_uri = s3_uri.get("S3DataSource").get("S3Uri")
523526

tests/unit/sagemaker/jumpstart/constants.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7911,7 +7911,6 @@
79117911

79127912
DEPLOYMENT_CONFIGS = [
79137913
{
7914-
"Version": "1.0.0",
79157914
"DeploymentConfigName": "neuron-inference",
79167915
"DeploymentArgs": {
79177916
"ImageUri": "763104351884.dkr.ecr.us-west-2.amazonaws.com/huggingface-pytorch-tgi-inference:2.1.1-tgi1.4"
@@ -7944,7 +7943,6 @@
79447943
"BenchmarkMetrics": [{"name": "Instance Rate", "value": "0.0083000000", "unit": "USD/Hrs"}],
79457944
},
79467945
{
7947-
"Version": "1.0.0",
79487946
"DeploymentConfigName": "neuron-inference-budget",
79497947
"DeploymentArgs": {
79507948
"ImageUri": "763104351884.dkr.ecr.us-west-2.amazonaws.com/huggingface-pytorch-tgi-inference:2.1.1-tgi1.4"
@@ -7977,7 +7975,6 @@
79777975
"BenchmarkMetrics": [{"name": "Instance Rate", "value": "0.0083000000", "unit": "USD/Hrs"}],
79787976
},
79797977
{
7980-
"Version": "1.0.0",
79817978
"DeploymentConfigName": "gpu-inference-budget",
79827979
"DeploymentArgs": {
79837980
"ImageUri": "763104351884.dkr.ecr.us-west-2.amazonaws.com/huggingface-pytorch-tgi-inference:2.1.1-tgi1.4"
@@ -8010,7 +8007,6 @@
80108007
"BenchmarkMetrics": [{"name": "Instance Rate", "value": "0.0083000000", "unit": "USD/Hrs"}],
80118008
},
80128009
{
8013-
"Version": "1.0.0",
80148010
"DeploymentConfigName": "gpu-inference",
80158011
"DeploymentArgs": {
80168012
"ImageUri": "763104351884.dkr.ecr.us-west-2.amazonaws.com/huggingface-pytorch-tgi-inference:2.1.1-tgi1.4"

tests/unit/sagemaker/serve/builder/test_js_builder.py

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ def test_get_deployment_config(
735735
@patch(
736736
"sagemaker.serve.builder.jumpstart_builder._get_nb_instance", return_value="ml.g5.24xlarge"
737737
)
738-
def test_set_deployment_config(
738+
def test_display_benchmark_metrics(
739739
self,
740740
mock_get_nb_instance,
741741
mock_get_ram_usage_mb,
@@ -750,43 +750,20 @@ def test_set_deployment_config(
750750
)
751751

752752
mock_pre_trained_model.return_value.image_uri = mock_tgi_image_uri
753-
754-
builder.build()
755-
builder.serve_settings.telemetry_opt_out = True
756-
757-
builder.set_deployment_config("config_name")
758-
759-
mock_pre_trained_model.return_value.set_deployment_config.assert_called_once_with(
760-
"config_name"
753+
mock_pre_trained_model.return_value.list_deployment_configs.side_effect = (
754+
lambda: DEPLOYMENT_CONFIGS
761755
)
762756

763-
@patch("sagemaker.serve.builder.jumpstart_builder._capture_telemetry", side_effect=None)
764-
@patch(
765-
"sagemaker.serve.builder.jumpstart_builder.JumpStart._is_jumpstart_model_id",
766-
return_value=True,
767-
)
768-
@patch("sagemaker.serve.builder.jumpstart_builder.JumpStart._create_pre_trained_js_model")
769-
@patch(
770-
"sagemaker.serve.builder.jumpstart_builder.prepare_tgi_js_resources",
771-
return_value=({"model_type": "t5", "n_head": 71}, True),
772-
)
773-
@patch("sagemaker.serve.builder.jumpstart_builder._get_ram_usage_mb", return_value=1024)
774-
@patch(
775-
"sagemaker.serve.builder.jumpstart_builder._get_nb_instance", return_value="ml.g5.24xlarge"
776-
)
777-
def test_display_benchmark_metrics(
778-
self,
779-
mock_get_nb_instance,
780-
mock_get_ram_usage_mb,
781-
mock_prepare_for_tgi,
782-
mock_pre_trained_model,
783-
mock_is_jumpstart_model,
784-
mock_telemetry,
785-
):
786-
builder = ModelBuilder(
787-
model="facebook/galactica-mock-model-id",
788-
schema_builder=mock_schema_builder,
789-
)
757+
builder.list_deployment_configs()
758+
790759
builder.display_benchmark_metrics()
791760

792761
mock_pre_trained_model.return_value.display_benchmark_metrics.assert_called_once()
762+
763+
def test_display_benchmark_metrics_ex(self):
764+
self.assertRaises(
765+
Exception,
766+
lambda: ModelBuilder(
767+
model="facebook/galactica-mock-model-id", schema_builder=mock_schema_builder
768+
).display_benchmark_metrics(),
769+
)

0 commit comments

Comments
 (0)