Skip to content

Commit 272fdbf

Browse files
Fix ModelBuilder so that it doesn't assume every ModelPackage was from JumpStart (#5719)
1 parent 7ad16d9 commit 272fdbf

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

sagemaker-serve/src/sagemaker/serve/model_builder.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2331,7 +2331,9 @@ def _build_single_modelbuilder(
23312331
)
23322332
model_package = self._fetch_model_package()
23332333
# Fetch recipe config first to set image_uri, instance_type, env_vars, and s3_upload_path
2334-
self._fetch_and_cache_recipe_config()
2334+
base_model = model_package.inference_specification.containers[0].base_model
2335+
if base_model is not None:
2336+
self._fetch_and_cache_recipe_config()
23352337

23362338
# Nova models use a completely different deployment architecture
23372339
if self._is_nova_model():

sagemaker-serve/tests/unit/test_model_builder.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,47 @@ def test_build_single_modelbuilder_with_model_customization(self, mock_is_1p, mo
462462
mock_model_class.create.assert_called_once()
463463
self.assertEqual(result, mock_created_model)
464464

465+
@patch('sagemaker.serve.model_builder.Model')
466+
@patch('sagemaker.serve.model_builder.is_1p_image_uri')
467+
def test_build_single_modelbuilder_with_model_customization_no_jumpstart(self, mock_is_1p, mock_model_class):
468+
"""Test _build_single_modelbuilder skips _fetch_and_cache_recipe_config when base_model is None."""
469+
mock_is_1p.return_value = True
470+
471+
# Setup mock model package with base_model = None (custom model package, not JumpStart)
472+
mock_model_package = Mock()
473+
mock_container = Mock()
474+
mock_container.base_model = None
475+
mock_container.model_data_source.s3_data_source.s3_uri = "s3://bucket/model"
476+
mock_model_package.inference_specification.containers = [mock_container]
477+
478+
# Setup training job with model_package_config
479+
self.mock_training_job.model_package_config = Mock()
480+
self.mock_training_job.model_package_config.source_model_package_arn = (
481+
"arn:aws:sagemaker:us-east-1:123456789012:model-package/source"
482+
)
483+
484+
mock_created_model = Mock()
485+
mock_model_class.create.return_value = mock_created_model
486+
487+
builder = ModelBuilder(
488+
model=self.mock_training_job,
489+
role_arn="arn:aws:iam::123456789012:role/SageMakerRole",
490+
sagemaker_session=self.mock_session,
491+
image_uri="test-image:latest",
492+
instance_type="ml.g5.2xlarge"
493+
)
494+
495+
with patch.object(builder, '_fetch_model_package', return_value=mock_model_package):
496+
with patch.object(builder, '_fetch_and_cache_recipe_config') as mock_recipe:
497+
with patch.object(builder, '_get_serve_setting', return_value=Mock()):
498+
with patch.object(builder, '_is_nova_model', return_value=False):
499+
with patch.object(builder, '_fetch_peft', return_value=None):
500+
result = builder._build_single_modelbuilder()
501+
502+
mock_recipe.assert_not_called()
503+
mock_model_class.create.assert_called_once()
504+
self.assertEqual(result, mock_created_model)
505+
465506
def test_deploy_model_customization_new_endpoint(self):
466507
"""Test _deploy_model_customization for new endpoint creation."""
467508
from sagemaker.core.shapes import InferenceComponentComputeResourceRequirements

0 commit comments

Comments
 (0)