Skip to content

Commit 9534b32

Browse files
authored
Merge branch 'zwei' into rc0-changes
2 parents 9e0df42 + a83bed5 commit 9534b32

34 files changed

+341
-382
lines changed

doc/frameworks/chainer/using_chainer.rst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ directories ('train' and 'test').
141141
train_instance_type='ml.p3.2xlarge',
142142
train_instance_count=1,
143143
framework_version='5.0.0',
144+
py_version='py3',
144145
hyperparameters = {'epochs': 20, 'batch-size': 64, 'learning-rate': 0.1})
145146
chainer_estimator.fit({'train': 's3://my-data-bucket/path/to/my/training/data',
146147
'test': 's3://my-data-bucket/path/to/my/test/data'})
@@ -222,7 +223,8 @@ operation.
222223
chainer_estimator = Chainer(entry_point='train_and_deploy.py',
223224
train_instance_type='ml.p3.2xlarge',
224225
train_instance_count=1,
225-
framework_version='5.0.0')
226+
framework_version='5.0.0',
227+
py_version='py3')
226228
chainer_estimator.fit('s3://my_bucket/my_training_data/')
227229
228230
# Deploy my estimator to a SageMaker Endpoint and get a Predictor

doc/frameworks/tensorflow/upgrade_from_legacy.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ the difference in code would be as follows:
104104
...
105105
source_dir="code",
106106
framework_version="1.10.0",
107+
py_version="py2",
107108
train_instance_type="ml.m4.xlarge",
108109
image_name="520713654638.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tensorflow:1.10.0-cpu-py2",
109110
hyperparameters={

doc/frameworks/tensorflow/using_tf.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ To run training job with Pipe input mode, pass in ``input_mode='Pipe'`` to your
319319
tf_estimator = TensorFlow(entry_point='tf-train-with-pipemodedataset.py', role='SageMakerRole',
320320
training_steps=10000, evaluation_steps=100,
321321
train_instance_count=1, train_instance_type='ml.p2.xlarge',
322-
framework_version='1.10.0', input_mode='Pipe')
322+
framework_version='1.10.0', py_version='py3', input_mode='Pipe')
323323
324324
tf_estimator.fit('s3://bucket/path/to/training/data')
325325
@@ -383,7 +383,8 @@ estimator object to create a SageMaker Endpoint:
383383
from sagemaker.tensorflow import TensorFlow
384384
385385
estimator = TensorFlow(entry_point='tf-train.py', ..., train_instance_count=1,
386-
train_instance_type='ml.c4.xlarge', framework_version='1.11')
386+
train_instance_type='ml.c4.xlarge', framework_version='1.11',
387+
py_version='py3')
387388
388389
estimator.fit(inputs)
389390

src/sagemaker/chainer/defaults.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,4 @@
1313
"""Placeholder docstring"""
1414
from __future__ import absolute_import
1515

16-
CHAINER_VERSION = "4.1.0"
17-
"""Default Chainer version for when the framework version is not specified.
18-
This is no longer updated so as to not break existing workflows.
19-
"""
20-
21-
LATEST_VERSION = "5.0.0"
22-
"""The latest version of Chainer included in the SageMaker pre-built Docker images."""
23-
2416
LATEST_PY2_VERSION = "5.0.0"

src/sagemaker/chainer/estimator.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
from sagemaker.fw_utils import (
2020
framework_name_from_image,
2121
framework_version_from_tag,
22-
empty_framework_version_warning,
2322
python_deprecation_warning,
23+
validate_version_or_image_args,
2424
)
2525
from sagemaker.chainer import defaults
2626
from sagemaker.chainer.model import ChainerModel
@@ -40,8 +40,6 @@ class Chainer(Framework):
4040
_process_slots_per_host = "sagemaker_process_slots_per_host"
4141
_additional_mpi_options = "sagemaker_additional_mpi_options"
4242

43-
LATEST_VERSION = defaults.LATEST_VERSION
44-
4543
def __init__(
4644
self,
4745
entry_point,
@@ -51,8 +49,8 @@ def __init__(
5149
additional_mpi_options=None,
5250
source_dir=None,
5351
hyperparameters=None,
54-
py_version="py3",
5552
framework_version=None,
53+
py_version=None,
5654
image_name=None,
5755
**kwargs
5856
):
@@ -103,11 +101,12 @@ def __init__(
103101
and values, but ``str()`` will be called to convert them before
104102
training.
105103
py_version (str): Python version you want to use for executing your
106-
model training code (default: 'py2'). One of 'py2' or 'py3'.
104+
model training code. Defaults to ``None``. Required unless ``image_name``
105+
is provided.
107106
framework_version (str): Chainer version you want to use for
108-
executing your model training code. List of supported versions
107+
executing your model training code. Defaults to ``None``. Required unless
108+
``image_name`` is provided. List of supported versions:
109109
https://github.com/aws/sagemaker-python-sdk#chainer-sagemaker-estimators.
110-
If not specified, this will default to 4.1.
111110
image_name (str): If specified, the estimator will use this image
112111
for training and hosting, instead of selecting the appropriate
113112
SageMaker official image based on framework_version and
@@ -117,6 +116,9 @@ def __init__(
117116
* ``123412341234.dkr.ecr.us-west-2.amazonaws.com/my-custom-image:1.0``
118117
* ``custom-image:latest``
119118
119+
If ``framework_version`` or ``py_version`` are ``None``, then
120+
``image_name`` is required. If also ``None``, then a ``ValueError``
121+
will be raised.
120122
**kwargs: Additional kwargs passed to the
121123
:class:`~sagemaker.estimator.Framework` constructor.
122124
@@ -126,22 +128,18 @@ def __init__(
126128
:class:`~sagemaker.estimator.Framework` and
127129
:class:`~sagemaker.estimator.EstimatorBase`.
128130
"""
129-
if framework_version is None:
131+
validate_version_or_image_args(framework_version, py_version, image_name)
132+
if py_version == "py2":
130133
logger.warning(
131-
empty_framework_version_warning(defaults.CHAINER_VERSION, self.LATEST_VERSION)
134+
python_deprecation_warning(self.__framework_name__, defaults.LATEST_PY2_VERSION)
132135
)
133-
self.framework_version = framework_version or defaults.CHAINER_VERSION
136+
self.framework_version = framework_version
137+
self.py_version = py_version
134138

135139
super(Chainer, self).__init__(
136140
entry_point, source_dir, hyperparameters, image_name=image_name, **kwargs
137141
)
138142

139-
if py_version == "py2":
140-
logger.warning(
141-
python_deprecation_warning(self.__framework_name__, defaults.LATEST_PY2_VERSION)
142-
)
143-
144-
self.py_version = py_version
145143
self.use_mpi = use_mpi
146144
self.num_processes = num_processes
147145
self.process_slots_per_host = process_slots_per_host
@@ -262,15 +260,19 @@ class constructor
262260
image_name = init_params.pop("image")
263261
framework, py_version, tag, _ = framework_name_from_image(image_name)
264262

263+
if tag is None:
264+
framework_version = None
265+
else:
266+
framework_version = framework_version_from_tag(tag)
267+
init_params["framework_version"] = framework_version
268+
init_params["py_version"] = py_version
269+
265270
if not framework:
266271
# If we were unable to parse the framework name from the image it is not one of our
267272
# officially supported images, in this case just add the image to the init params.
268273
init_params["image_name"] = image_name
269274
return init_params
270275

271-
init_params["py_version"] = py_version
272-
init_params["framework_version"] = framework_version_from_tag(tag)
273-
274276
training_job_name = init_params["base_job_name"]
275277

276278
if framework != cls.__framework_name__:

src/sagemaker/chainer/model.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
create_image_uri,
2323
model_code_key_prefix,
2424
python_deprecation_warning,
25-
empty_framework_version_warning,
25+
validate_version_or_image_args,
2626
)
2727
from sagemaker.model import FrameworkModel, MODEL_SERVER_WORKERS_PARAM_NAME
2828
from sagemaker.chainer import defaults
@@ -67,8 +67,8 @@ def __init__(
6767
role,
6868
entry_point,
6969
image=None,
70-
py_version="py3",
7170
framework_version=None,
71+
py_version=None,
7272
predictor_cls=ChainerPredictor,
7373
model_server_workers=None,
7474
**kwargs
@@ -88,11 +88,15 @@ def __init__(
8888
hosting. If ``source_dir`` is specified, then ``entry_point``
8989
must point to a file located at the root of ``source_dir``.
9090
image (str): A Docker image URI (default: None). If not specified, a
91-
default image for Chainer will be used.
92-
py_version (str): Python version you want to use for executing your
93-
model training code (default: 'py2').
91+
default image for Chainer will be used. If ``framework_version``
92+
or ``py_version`` are ``None``, then ``image`` is required. If
93+
also ``None``, then a ``ValueError`` will be raised.
9494
framework_version (str): Chainer version you want to use for
95-
executing your model training code.
95+
executing your model training code. Defaults to ``None``. Required
96+
unless ``image`` is provided.
97+
py_version (str): Python version you want to use for executing your
98+
model training code. Defaults to ``None``. Required unless
99+
``image`` is provided.
96100
predictor_cls (callable[str, sagemaker.session.Session]): A function
97101
to call to create a predictor with an endpoint name and
98102
SageMaker ``Session``. If specified, ``deploy()`` returns the
@@ -109,21 +113,18 @@ def __init__(
109113
:class:`~sagemaker.model.FrameworkModel` and
110114
:class:`~sagemaker.model.Model`.
111115
"""
112-
super(ChainerModel, self).__init__(
113-
model_data, image, role, entry_point, predictor_cls=predictor_cls, **kwargs
114-
)
116+
validate_version_or_image_args(framework_version, py_version, image)
115117
if py_version == "py2":
116118
logger.warning(
117119
python_deprecation_warning(self.__framework_name__, defaults.LATEST_PY2_VERSION)
118120
)
121+
self.framework_version = framework_version
122+
self.py_version = py_version
119123

120-
if framework_version is None:
121-
logger.warning(
122-
empty_framework_version_warning(defaults.CHAINER_VERSION, defaults.LATEST_VERSION)
123-
)
124+
super(ChainerModel, self).__init__(
125+
model_data, image, role, entry_point, predictor_cls=predictor_cls, **kwargs
126+
)
124127

125-
self.py_version = py_version
126-
self.framework_version = framework_version or defaults.CHAINER_VERSION
127128
self.model_server_workers = model_server_workers
128129

129130
def prepare_container_def(self, instance_type, accelerator_type=None):

src/sagemaker/cli/mxnet.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
from __future__ import absolute_import
1515

1616
from sagemaker.cli.common import HostCommand, TrainCommand
17-
from sagemaker.mxnet import defaults
17+
18+
MXNET_VERSION = "1.2"
1819

1920

2021
def train(args):
@@ -42,7 +43,7 @@ def create_estimator(self):
4243

4344
return MXNet(
4445
entry_point=self.script,
45-
framework_version=defaults.MXNET_VERSION,
46+
framework_version=MXNET_VERSION,
4647
py_version=self.python,
4748
role=self.role_name,
4849
base_job_name=self.job_name,
@@ -66,7 +67,7 @@ def create_model(self, model_url):
6667
model_data=model_url,
6768
role=self.role_name,
6869
entry_point=self.script,
69-
framework_version=defaults.MXNET_VERSION,
70+
framework_version=MXNET_VERSION,
7071
py_version=self.python,
7172
name=self.endpoint_name,
7273
env=self.environment,

src/sagemaker/mxnet/defaults.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,4 @@
1313
"""Placeholder docstring"""
1414
from __future__ import absolute_import
1515

16-
MXNET_VERSION = "1.2"
17-
"""Default MXNet version for when the framework version is not specified.
18-
This is no longer updated so as to not break existing workflows.
19-
"""
20-
21-
LATEST_VERSION = "1.6.0"
22-
"""The latest version of MXNet included in the SageMaker pre-built Docker images."""
23-
2416
LATEST_PY2_VERSION = "1.6.0"

src/sagemaker/mxnet/estimator.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ class MXNet(Framework):
3838
__framework_name__ = "mxnet"
3939
_LOWEST_SCRIPT_MODE_VERSION = ["1", "3"]
4040

41-
LATEST_VERSION = defaults.LATEST_VERSION
42-
4341
def __init__(
4442
self,
4543
entry_point,
@@ -115,7 +113,7 @@ def __init__(
115113
:class:`~sagemaker.estimator.EstimatorBase`.
116114
"""
117115
validate_version_or_image_args(framework_version, py_version, image_name)
118-
if py_version and py_version == "py2":
116+
if py_version == "py2":
119117
logger.warning(
120118
python_deprecation_warning(self.__framework_name__, defaults.LATEST_PY2_VERSION)
121119
)

src/sagemaker/mxnet/model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ def __init__(
115115
:class:`~sagemaker.model.Model`.
116116
"""
117117
validate_version_or_image_args(framework_version, py_version, image)
118-
if py_version and py_version == "py2":
118+
if py_version == "py2":
119119
logger.warning(
120120
python_deprecation_warning(self.__framework_name__, defaults.LATEST_PY2_VERSION)
121121
)

src/sagemaker/pytorch/defaults.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,4 @@
1313
"""Placeholder docstring"""
1414
from __future__ import absolute_import
1515

16-
PYTORCH_VERSION = "0.4"
17-
"""Default PyTorch version for when the framework version is not specified.
18-
The default version is no longer updated so as to not break existing workflows.
19-
"""
20-
21-
LATEST_VERSION = "1.5.0"
22-
"""The latest version of PyTorch included in the SageMaker pre-built Docker images."""
23-
24-
PYTHON_VERSION = "py3"
25-
2616
LATEST_PY2_VERSION = "1.3.1"

src/sagemaker/pytorch/estimator.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ class PyTorch(Framework):
3535

3636
__framework_name__ = "pytorch"
3737

38-
LATEST_VERSION = defaults.LATEST_VERSION
39-
4038
def __init__(
4139
self,
4240
entry_point,

src/sagemaker/pytorch/model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def __init__(
114114
:class:`~sagemaker.model.Model`.
115115
"""
116116
validate_version_or_image_args(framework_version, py_version, image)
117-
if py_version and py_version == "py2":
117+
if py_version == "py2":
118118
logger.warning(
119119
python_deprecation_warning(self.__framework_name__, defaults.LATEST_PY2_VERSION)
120120
)

src/sagemaker/sklearn/defaults.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,3 @@
1414
from __future__ import absolute_import
1515

1616
SKLEARN_NAME = "scikit-learn"
17-
18-
SKLEARN_VERSION = "0.20.0"
19-
20-
LATEST_PY2_VERSION = "0.20.0"

src/sagemaker/tensorflow/defaults.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,4 @@
1313
"""Placeholder docstring"""
1414
from __future__ import absolute_import
1515

16-
TF_VERSION = "1.11"
17-
"""Default TF version for when the framework version is not specified.
18-
This is no longer updated so as to not break existing workflows.
19-
"""
20-
21-
LATEST_VERSION = "2.2.0"
22-
"""The latest version of TensorFlow included in the SageMaker pre-built Docker images."""
23-
24-
LATEST_SERVING_VERSION = "2.1.0"
25-
"""The latest version of TensorFlow Serving included in the SageMaker pre-built Docker images."""
26-
2716
LATEST_PY2_VERSION = "2.1.0"

0 commit comments

Comments
 (0)