Skip to content

Commit 06f69b2

Browse files
author
Balaji Veeramani
committed
Update files
1 parent a59a2c1 commit 06f69b2

File tree

9 files changed

+62
-36
lines changed

9 files changed

+62
-36
lines changed

doc/frameworks/tensorflow/upgrade_from_legacy.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,6 @@ For example, if you want to use JSON serialization and deserialization:
248248
from sagemaker.deserializers import JSONDeserializer
249249
from sagemaker.serializers import JSONSerializer
250250
251-
predictor.serializer = JSONSerializer()
252-
predictor.deserializer = JSONDeserializer()
251+
predictor = model.deploy(..., serializer=JSONSerializer(), deserializer=JSONDeserializer())
253252
254253
predictor.predict(data)

doc/frameworks/xgboost/using_xgboost.rst

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,14 @@ inference against your model.
192192

193193
.. code::
194194
195+
serializer = StringSerializer()
196+
serializer.CONTENT_TYPE = "text/libsvm"
197+
195198
predictor = estimator.deploy(
196199
initial_instance_count=1,
197-
instance_type="ml.m5.xlarge"
200+
instance_type="ml.m5.xlarge",
201+
serializer=serializer
198202
)
199-
predictor.serializer = str
200-
predictor.content_type = "text/libsvm"
201203
202204
with open("abalone") as f:
203205
payload = f.read()

src/sagemaker/estimator.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@
2929
from sagemaker.debugger import DebuggerHookConfig
3030
from sagemaker.debugger import TensorBoardOutputConfig # noqa: F401 # pylint: disable=unused-import
3131
from sagemaker.debugger import get_rule_container_image_uri
32-
from sagemaker.deserializers import BytesDeserializer
3332
from sagemaker.s3 import S3Uploader, parse_s3_url
34-
from sagemaker.serializers import IdentitySerializer
3533

3634
from sagemaker.fw_utils import (
3735
tar_and_upload_dir,

src/sagemaker/predictor.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ def __init__(
6262
self.sagemaker_session = sagemaker_session or Session()
6363
self.serializer = serializer
6464
self.deserializer = deserializer
65-
self.content_type = serializer.CONTENT_TYPE
66-
self.accept = deserializer.ACCEPT
6765
self._endpoint_config_name = self._get_endpoint_config_name()
6866
self._model_names = self._get_model_names()
6967

@@ -380,3 +378,13 @@ def _get_model_names(self):
380378
)
381379
production_variants = endpoint_config["ProductionVariants"]
382380
return [d["ModelName"] for d in production_variants]
381+
382+
@property
383+
def content_type(self):
384+
"""The MIME type of the data sent to the inference endpoint."""
385+
return self.serializer.CONTENT_TYPE
386+
387+
@property
388+
def accept(self):
389+
"""The content type(s) that are expected from the inference endpoint."""
390+
return self.deserializer.ACCEPT

tests/integ/test_byo_estimator.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,13 @@ def test_byo_estimator(sagemaker_session, region, cpu_instance_type, training_se
8888

8989
with timeout_and_delete_endpoint_by_name(job_name, sagemaker_session):
9090
model = estimator.create_model()
91-
predictor = model.deploy(1, cpu_instance_type, endpoint_name=job_name)
92-
predictor.serializer = _FactorizationMachineSerializer()
93-
predictor.deserializer = sagemaker.deserializers.JSONDeserializer()
94-
predictor.content_type = "application/json"
91+
predictor = model.deploy(
92+
1,
93+
cpu_instance_type,
94+
endpoint_name=job_name,
95+
serializer=_FactorizationMachineSerializer(),
96+
deserializer=sagemaker.deserializers.JSONDeserializer(),
97+
)
9598

9699
result = predictor.predict(training_set[0][:10])
97100

@@ -134,10 +137,13 @@ def test_async_byo_estimator(sagemaker_session, region, cpu_instance_type, train
134137
training_job_name=job_name, sagemaker_session=sagemaker_session
135138
)
136139
model = estimator.create_model()
137-
predictor = model.deploy(1, cpu_instance_type, endpoint_name=endpoint_name)
138-
predictor.serializer = _FactorizationMachineSerializer()
139-
predictor.deserializer = sagemaker.deserializers.JSONDeserializer()
140-
predictor.content_type = "application/json"
140+
predictor = model.deploy(
141+
1,
142+
cpu_instance_type,
143+
endpoint_name=endpoint_name,
144+
serializer=_FactorizationMachineSerializer(),
145+
deserializer=sagemaker.deserializers.JSONDeserializer(),
146+
)
141147

142148
result = predictor.predict(training_set[0][:10])
143149

tests/integ/test_neo_mxnet.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
from sagemaker.mxnet.estimator import MXNet
2121
from sagemaker.mxnet.model import MXNetModel
22+
from sagemaker.serializers import IdentitySerializer
2223
from sagemaker.utils import unique_name_from_base
2324
from tests.integ import DATA_DIR, TRAINING_DEFAULT_TIMEOUT_MINUTES
2425
from tests.integ.timeout import timeout, timeout_and_delete_endpoint_by_name
@@ -71,10 +72,14 @@ def test_attach_deploy(
7172
output_path=estimator.output_path,
7273
)
7374

75+
serializer = IdentitySerializer(content_type="application/vnd+python.numpy+binary")
7476
predictor = estimator.deploy(
75-
1, cpu_instance_type, use_compiled_model=True, endpoint_name=endpoint_name
77+
1,
78+
cpu_instance_type,
79+
serializer=serializer,
80+
use_compiled_model=True,
81+
endpoint_name=endpoint_name,
7682
)
77-
predictor.content_type = "application/vnd+python.numpy+binary"
7883
data = numpy.zeros(shape=(1, 1, 28, 28))
7984
predictor.predict(data)
8085

@@ -112,9 +117,11 @@ def test_deploy_model(
112117
job_name=unique_name_from_base("test-deploy-model-compilation-job"),
113118
output_path="/".join(model_data.split("/")[:-1]),
114119
)
115-
predictor = model.deploy(1, cpu_instance_type, endpoint_name=endpoint_name)
120+
serializer = IdentitySerializer(content_type="application/vnd+python.numpy+binary")
121+
predictor = model.deploy(
122+
1, cpu_instance_type, serializer=serializer, endpoint_name=endpoint_name
123+
)
116124

117-
predictor.content_type = "application/vnd+python.numpy+binary"
118125
data = numpy.zeros(shape=(1, 1, 28, 28))
119126
predictor.predict(data)
120127

@@ -153,8 +160,10 @@ def test_inferentia_deploy_model(
153160
job_name=unique_name_from_base("test-deploy-model-compilation-job"),
154161
output_path="/".join(model_data.split("/")[:-1]),
155162
)
156-
predictor = model.deploy(1, inf_instance_type, endpoint_name=endpoint_name)
163+
serializer = IdentitySerializer(content_type="application/vnd+python.numpy+binary")
164+
predictor = model.deploy(
165+
1, inf_instance_type, serializer=serializer, endpoint_name=endpoint_name
166+
)
157167

158-
predictor.content_type = "application/vnd+python.numpy+binary"
159168
data = numpy.zeros(shape=(1, 1, 28, 28))
160169
predictor.predict(data)

tests/integ/test_tuner.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -900,10 +900,13 @@ def test_tuning_byo_estimator(sagemaker_session, cpu_instance_type):
900900

901901
best_training_job = tuner.best_training_job()
902902
with timeout_and_delete_endpoint_by_name(best_training_job, sagemaker_session):
903-
predictor = tuner.deploy(1, cpu_instance_type, endpoint_name=best_training_job)
904-
predictor.serializer = _FactorizationMachineSerializer()
905-
predictor.deserializer = JSONDeserializer()
906-
predictor.content_type = "application/json"
903+
predictor = tuner.deploy(
904+
1,
905+
cpu_instance_type,
906+
endpoint_name=best_training_job,
907+
serializer=_FactorizationMachineSerializer(),
908+
deserializer=JSONDeserializer(),
909+
)
907910

908911
result = predictor.predict(datasets.one_p_mnist()[0][:10])
909912

tests/integ/test_tuner_multi_algo.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,17 @@ def _deploy_and_predict(sagemaker_session, tuner, data_set, cpu_instance_type):
189189
tuner.latest_tuning_job.name, best_training_job
190190
)
191191
)
192-
predictor = tuner.deploy(1, cpu_instance_type, endpoint_name=best_training_job)
193-
predictor.content_type = "application/json"
192+
predictor = tuner.deploy(
193+
1,
194+
cpu_instance_type,
195+
endpoint_name=best_training_job,
196+
serializer=PredictionDataSerializer(),
197+
deserializer=JSONDeserializer(),
198+
)
194199

195200
print("Making prediction using the deployed model")
196201
data = data_set[0][:10]
197-
result = _make_prediction(predictor, data)
202+
result = predictor.predict(data)
198203

199204
assert len(result["predictions"]) == len(data)
200205
for prediction in result["predictions"]:
@@ -214,12 +219,6 @@ def _create_training_inputs(sagemaker_session):
214219
return {"train": s3_train_data, "test": s3_train_data}
215220

216221

217-
def _make_prediction(predictor, data):
218-
predictor.serializer = PredictionDataSerializer()
219-
predictor.deserializer = JSONDeserializer()
220-
return predictor.predict(data)
221-
222-
223222
class PredictionDataSerializer(BaseSerializer):
224223

225224
CONTENT_TYPE = "application/json"

tests/unit/test_estimator.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2020,6 +2020,8 @@ def test_generic_to_deploy_kms(create_model, sagemaker_session):
20202020
model.deploy.assert_called_with(
20212021
instance_type=INSTANCE_TYPE,
20222022
initial_instance_count=INSTANCE_COUNT,
2023+
serializer=None,
2024+
deserializer=None,
20232025
accelerator_type=None,
20242026
endpoint_name=endpoint_name,
20252027
tags=None,

0 commit comments

Comments
 (0)