Use Version 2.x of the SageMaker Python SDK¶
Installation¶
To install the latest version:
pip install --upgrade sagemaker
If you are executing this pip install command in a notebook, make sure to restart your kernel.
Breaking Changes¶
This section is for major changes that may require updates to your SageMaker Python SDK code. For the full list of changes, see the CHANGELOG.
Removals¶
Python 2 Support¶
This library is no longer compatible with Python 2. Python 2 has been EOL since January 1, 2020. Please upgrade to Python 3 if you haven’t already.
Remove Legacy TensorFlow¶
TensorFlow versions 1.4-1.10 and some variations of versions 1.11-1.12 (see What Constitutes “Legacy TensorFlow Support”) are no longer natively supported by the SageMaker Python SDK.
To use those versions of TensorFlow, you must specify the Docker image URI explicitly, and configure settings via hyperparameters or environment variables rather than using SDK parameters. For more information, see Upgrade from Legacy TensorFlow Support.
SageMaker Python SDK CLI¶
The SageMaker Python SDK CLI has been removed. (This is different from the AWS CLI.)
delete_endpoint() for Estimators and HyperparameterTuner¶
The delete_endpoint() method for estimators and HyperparameterTuner is now a no-op.
Please use sagemaker.predictor.Predictor.delete_endpoint() instead.
update_endpoint in deploy()¶
The update_endpoint argument in deploy() methods for estimators and models is now a no-op.
Please use sagemaker.predictor.Predictor.update_endpoint() instead.
serializer and deserializer in create_model()¶
The serializer and deserializer arguments in
sagemaker.estimator.Estimator.create_model() are now no-ops.
Please specify serializers and deserializers in deploy() methods instead.
content_type and accept in the Predictor Constructor¶
The content_type and accept parameters are now no-ops in the
following classes and methods:
sagemaker.predictor.Predictorsagemaker.estimator.Estimator.create_modelsagemaker.algorithms.AlgorithmEstimator.create_modelsagemaker.tensorflow.model.TensorFlowPredictor
Please specify content types in a serializer or deserializer class instead.
Changes in Default Behavior¶
Require framework_version and py_version for Frameworks¶
Framework estimator and model classes now require framework_version and py_version instead of supplying defaults,
unless an image URI is explicitly supplied.
For example:
from sagemaker.tensorflow import TensorFlow
TensorFlow(
entry_point="script.py",
framework_version="2.2.0", # now required
py_version="py37", # now required
role="my-role",
instance_type="ml.m5.xlarge",
instance_count=1,
)
from sagemaker.mxnet import MXNetModel
MXNetModel(
model_data="s3://bucket/model.tar.gz",
role="my-role",
entry_point="inference.py",
framework_version="1.6.0", # now required
py_version="py3", # now required
)
Log Display Behavior with attach()¶
Logs are no longer printed when using attach() with an estimator.
To view logs after attaching a training job to an estimator, use sagemaker.estimator.EstimatorBase.logs().
HyperparameterTuner.fit() and Transformer.transform()¶
sagemaker.tuner.HyperparameterTuner.fit() and sagemaker.transformer.Transformer.transform() now wait
until the completion of the Hyperparameter Tuning Job or Batch Transform Job, respectively.
To make the function non-blocking, use wait=False.
XGBoost Predictor¶
The default serializer of sagemaker.xgboost.model.XGBoostPredictor has been changed from NumpySerializer to LibSVMSerializer.
Parameter Order Changes¶
sagemaker.model.Model Parameter Order¶
The parameter order for sagemaker.model.Model changed: instead of model_data being first, image_uri (formerly image) is first.
As a result, model_data has been made into an optional parameter.
If you are using the sagemaker.model.Model class, your code should be changed as follows:
# v1.x
Model("s3://bucket/path/model.tar.gz", "my-image:latest")
# v2.0 and later
Model("my-image:latest", model_data="s3://bucket/path/model.tar.gz")
Airflow Parameter Order¶
For sagemaker.workflow.airflow.model_config() and sagemaker.workflow.airflow.model_config_from_estimator(),
instance_type is no longer the first positional argument and is now an optional keyword argument.
Dependency Changes¶
SciPy¶
SciPy is no longer a required dependency of the SageMaker Python SDK.
If you use sagemaker.amazon.common.write_spmatrix_to_sparse_tensor() and
don’t already install SciPy in your environment, you can use our scipy installation target:
pip install sagemaker[scipy]
TensorFlow¶
The tensorflow installation target has been removed, as it is no longer needed for any SageMaker Python SDK functionality.
If you want to install TensorFlow, see the TensorFlow documentation.
Non-Breaking Changes¶
Deprecations¶
Pre-instantiated Serializer and Deserializer Objects¶
The csv_serializer, json_serializer, npy_serializer, csv_deserializer,
json_deserializer, and numpy_deserializer objects have been deprecated.
Please instantiate the objects instead.
v1.x |
v2.0 and later |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
sagemaker.content_types¶
The sagemaker.content_types module is deprecated in v2.0 and later of the
SageMaker Python SDK.
Instead of importing constants from sagemaker.content_types, explicitly
write MIME types as a string.
v1.x |
v2.0 and later |
|---|---|
|
|
|
|
|
|
|
|
Image URI Functions (e.g. get_image_uri)¶
The following functions have been deprecated in favor of sagemaker.image_uris.retrieve():
sagemaker.amazon_estimator.get_image_uri()sagemaker.fw_utils.create_image_uri()sagemaker.fw_registry.registry()sagemaker.utils.get_ecr_image_uri_prefix()
For more information about usage, see sagemaker.image_uris.retrieve().
enable_cloudwatch_metrics for Estimators and Models¶
The parameter enable_cloudwatch_metrics has been deprecated.
CloudWatch metrics are already emitted for all Training Jobs, etc.
sagemaker.fw_utils.parse_s3_url¶
The sagemaker.fw_utils.parse_s3_url function has been deprecated.
Please use sagemaker.s3.parse_s3_url() instead.
sagemaker.session.ModelContainer¶
The class sagemaker.session.ModelContainer has been deprecated, as it is not needed for creating inference pipelines.
sagemaker.workflow.condition_step.JsonGet¶
The class sagemaker.workflow.condition_step.JsonGet has been deprecated.
Please use sagemaker.workflow.functions.JsonGet instead.
Parameter and Class Name Changes¶
Estimators¶
Renamed Estimator Parameters¶
The following estimator parameters have been renamed:
v1.x |
v2.0 and later |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Serializer and Deserializer Classes¶
The follow serializer/deserializer classes have been renamed and/or moved:
v1.x |
v2.0 and later |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sagemaker.serializers.LibSVMSerializer has been added in v2.0.
distributions¶
For TensorFlow and MXNet estimators, distributions has been renamed to distribution.
Specify Custom Training Images¶
The image_name parameter has been renamed to image_uri for specifying a custom Docker image URI to use with training.
Models¶
Specify Custom Serving Image¶
The image parameter has been renamed to image_uri for specifying a custom Docker image URI to use with inference.
TensorFlow Serving Model¶
sagemaker.tensorflow.serving.Model has been renamed to sagemaker.tensorflow.model.TensorFlowModel.
(For the previous implementation of that class, see Remove Legacy TensorFlow).
Predictors¶
Generic Predictor Class Name¶
sagemaker.predictor.RealTimePredictor has been renamed to sagemaker.predictor.Predictor.
Endpoint Argument Name¶
For sagemaker.predictor.Predictor, sagemaker.sparkml.model.SparkMLPredictor,
and predictors for Amazon algorithm (e.g. Factorization Machines, Linear Learner, etc.),
the endpoint attribute has been renamed to endpoint_name.
TensorFlow Serving Predictor¶
sagemaker.tensorflow.serving.Predictor has been renamed to sagemaker.tensorflow.model.TensorFlowPredictor.
(For the previous implementation of that class, see Remove Legacy TensorFlow).
Inputs¶
s3_input¶
sagemaker.session.s3_input has been renamed to sagemaker.inputs.TrainingInput.
ShuffleConfig¶
sagemaker.session.ShuffleConfig has been renamed to sagemaker.inputs.ShuffleConfig.
Airflow¶
For sagemaker.workflow.airflow.model_config(), sagemaker.workflow.airflow.model_config_from_estimator(), and
sagemaker.workflow.airflow.transform_config_from_estimator(), the image argument has been renamed to image_uri.
Automatically Upgrade Your Code¶
To help make your transition as seamless as possible, v2 of the SageMaker Python SDK comes with a command-line tool to automate updating your code. It automates as much as possible, but there are still syntactical and stylistic changes that cannot be performed by the script.
Warning
While the tool is intended to be easy to use, we recommend using it as part of a process that includes testing before and after you run the tool.
Usage¶
Currently, the tool supports only converting one file at a time:
$ sagemaker-upgrade-v2 --in-file input.py --out-file output.py
$ sagemaker-upgrade-v2 --in-file input.ipynb --out-file output.ipynb
You can apply it to a set of files using a loop:
$ for file in $(find input-dir); do sagemaker-upgrade-v2 --in-file $file --out-file output-dir/$file; done
Limitations¶
Jupyter Notebook Cells with Shell Commands¶
If your Jupyter notebook has a code cell with lines that start with either %% or !, the tool ignores that cell.
The other cells in the notebook are still updated.
Aliased Imports¶
The tool checks for a limited number of patterns when looking for constructors. For example, if you are using a TensorFlow estimator, only the following invocation styles are handled:
TensorFlow()
sagemaker.tensorflow.TensorFlow()
sagemaker.tensorflow.estimator.TensorFlow()
If you have aliased an import, e.g. from sagemaker.tensorflow import TensorFlow as TF, the tool does not take care of updating its parameters.
TensorFlow Serving¶
If you are using the sagemaker.tensorflow.serving.Model class, the tool does not take care of adding a framework version or changing it to sagemaker.tensorflow.TensorFlowModel.
sagemaker.model.Model¶
If you are using the sagemaker.model.Model class, the tool does not take care of switching the order between model_data and image_uri (formerly image).
update_endpoint and delete_endpoint¶
The tool does not take care of removing the update_endpoint argument from a deploy call.
If you are using that argument, please modify your code to use sagemaker.predictor.Predictor.update_endpoint() instead.
The tool also does not handle delete_endpoint calls on estimators or HyperparameterTuner.
If you are using that method, please modify your code to use sagemaker.predictor.Predictor.delete_endpoint() instead.