Skip to content

Commit 312d14f

Browse files
authored
fix: allow predictor to be returned from AutoML.deploy() (#1220)
1 parent 7d492cd commit 312d14f

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

src/sagemaker/automl/automl.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ def deploy(
201201
vpc_config=None,
202202
enable_network_isolation=False,
203203
model_kms_key=None,
204+
predictor_cls=None,
204205
):
205206
"""Deploy a candidate to a SageMaker Inference Pipeline and return a Predictor
206207
@@ -237,10 +238,15 @@ def deploy(
237238
training cluster for distributed training. Default: False
238239
model_kms_key (str): KMS key ARN used to encrypt the repacked
239240
model archive file if the model is repacked
241+
predictor_cls (callable[string, sagemaker.session.Session]): A
242+
function to call to create a predictor (default: None). If
243+
specified, ``deploy()`` returns the result of invoking this
244+
function on the created endpoint name.
240245
241246
Returns:
242-
callable[string, sagemaker.session.Session]: Invocation of
243-
``self.predictor_cls`` on the created endpoint name.
247+
callable[string, sagemaker.session.Session] or ``None``:
248+
If ``predictor_cls`` is specified, the invocation of ``self.predictor_cls`` on
249+
the created endpoint name. Otherwise, ``None``.
244250
"""
245251
if candidate is None:
246252
candidate_dict = self.best_candidate()
@@ -264,6 +270,7 @@ def deploy(
264270
vpc_config=vpc_config,
265271
enable_network_isolation=enable_network_isolation,
266272
model_kms_key=model_kms_key,
273+
predictor_cls=predictor_cls,
267274
)
268275

269276
def _check_problem_type_and_job_objective(self, problem_type, job_objective):
@@ -299,6 +306,7 @@ def _deploy_inference_pipeline(
299306
vpc_config=None,
300307
enable_network_isolation=False,
301308
model_kms_key=None,
309+
predictor_cls=None,
302310
):
303311
"""Deploy a SageMaker Inference Pipeline.
304312
@@ -329,6 +337,10 @@ def _deploy_inference_pipeline(
329337
contains "SecurityGroupIds", "Subnets"
330338
model_kms_key (str): KMS key ARN used to encrypt the repacked
331339
model archive file if the model is repacked
340+
predictor_cls (callable[string, sagemaker.session.Session]): A
341+
function to call to create a predictor (default: None). If
342+
specified, ``deploy()`` returns the result of invoking this
343+
function on the created endpoint name.
332344
"""
333345
# construct Model objects
334346
models = []
@@ -352,6 +364,7 @@ def _deploy_inference_pipeline(
352364
pipeline = PipelineModel(
353365
models=models,
354366
role=self.role,
367+
predictor_cls=predictor_cls,
355368
name=name,
356369
vpc_config=vpc_config,
357370
sagemaker_session=sagemaker_session or self.sagemaker_session,

tests/unit/sagemaker/automl/test_auto_ml.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import pytest
1616
from mock import Mock, patch
1717
from sagemaker import AutoML, AutoMLJob, AutoMLInput, CandidateEstimator
18+
from sagemaker.predictor import RealTimePredictor
1819

1920
MODEL_DATA = "s3://bucket/model.tar.gz"
2021
MODEL_IMAGE = "mi"
@@ -472,6 +473,46 @@ def test_deploy(sagemaker_session, candidate_mock):
472473
vpc_config=None,
473474
enable_network_isolation=False,
474475
model_kms_key=None,
476+
predictor_cls=None,
477+
)
478+
479+
480+
def test_deploy_optional_args(sagemaker_session, candidate_mock):
481+
auto_ml = AutoML(
482+
role=ROLE, target_attribute_name=TARGET_ATTRIBUTE_NAME, sagemaker_session=sagemaker_session
483+
)
484+
auto_ml.best_candidate = Mock(name="best_candidate", return_value=CANDIDATE_DICT)
485+
auto_ml._deploy_inference_pipeline = Mock("_deploy_inference_pipeline", return_value=None)
486+
487+
auto_ml.deploy(
488+
initial_instance_count=INSTANCE_COUNT,
489+
instance_type=INSTANCE_TYPE,
490+
sagemaker_session=sagemaker_session,
491+
name=JOB_NAME,
492+
endpoint_name=JOB_NAME,
493+
tags=TAGS,
494+
wait=False,
495+
update_endpoint=True,
496+
vpc_config=VPC_CONFIG,
497+
enable_network_isolation=True,
498+
model_kms_key=OUTPUT_KMS_KEY,
499+
predictor_cls=RealTimePredictor,
500+
)
501+
auto_ml._deploy_inference_pipeline.assert_called_once()
502+
auto_ml._deploy_inference_pipeline.assert_called_with(
503+
candidate_mock.containers,
504+
initial_instance_count=INSTANCE_COUNT,
505+
instance_type=INSTANCE_TYPE,
506+
name=JOB_NAME,
507+
sagemaker_session=sagemaker_session,
508+
endpoint_name=JOB_NAME,
509+
tags=TAGS,
510+
wait=False,
511+
update_endpoint=True,
512+
vpc_config=VPC_CONFIG,
513+
enable_network_isolation=True,
514+
model_kms_key=OUTPUT_KMS_KEY,
515+
predictor_cls=RealTimePredictor,
475516
)
476517

477518

0 commit comments

Comments
 (0)