From c1d8106e35aa84d450ba3af1d4ba4c15d3101d4b Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Mon, 8 Oct 2018 14:58:39 -0700 Subject: [PATCH 01/18] Add single-machine training using SageMaker Containers (#34) --- docker/1.2.1/final/Dockerfile.cpu | 5 +- docker/1.2.1/final/Dockerfile.gpu | 5 +- setup.py | 7 +- src/mxnet_container/__init__.py | 15 - src/mxnet_container/serve/__init__.py | 13 - src/mxnet_container/serve/environment.py | 43 --- src/mxnet_container/serve/transformer.py | 419 ---------------------- src/mxnet_container/train.py | 210 ----------- src/sagemaker_mxnet_container/__init__.py | 12 + src/sagemaker_mxnet_container/training.py | 26 ++ test/functional/test_mnist_distributed.py | 32 +- test/integ/conftest.py | 23 +- test/integ/test_default_model_fn.py | 14 +- test/integ/test_gluon_hosting.py | 15 +- test/integ/test_hosting.py | 15 +- test/integ/test_linear_regression.py | 57 --- test/integ/test_mnist_training.py | 35 ++ test/integ/test_py_version.py | 71 ---- test/resources/mnist/mnist_script_mode.py | 126 +++++++ test/unit/test_module_transformer.py | 263 -------------- test/unit/test_train.py | 226 ------------ test/unit/test_training.py | 39 ++ test/unit/test_transformer.py | 180 ---------- 23 files changed, 304 insertions(+), 1547 deletions(-) delete mode 100644 src/mxnet_container/__init__.py delete mode 100644 src/mxnet_container/serve/__init__.py delete mode 100644 src/mxnet_container/serve/environment.py delete mode 100644 src/mxnet_container/serve/transformer.py delete mode 100644 src/mxnet_container/train.py create mode 100644 src/sagemaker_mxnet_container/__init__.py create mode 100644 src/sagemaker_mxnet_container/training.py delete mode 100644 test/integ/test_linear_regression.py create mode 100644 test/integ/test_mnist_training.py delete mode 100644 test/integ/test_py_version.py create mode 100644 test/resources/mnist/mnist_script_mode.py delete mode 100644 test/unit/test_module_transformer.py delete mode 100644 test/unit/test_train.py create mode 100644 test/unit/test_training.py delete mode 100644 test/unit/test_transformer.py diff --git a/docker/1.2.1/final/Dockerfile.cpu b/docker/1.2.1/final/Dockerfile.cpu index f1e7d9e1..bc5d7c70 100644 --- a/docker/1.2.1/final/Dockerfile.cpu +++ b/docker/1.2.1/final/Dockerfile.cpu @@ -1,7 +1,7 @@ FROM ubuntu:16.04 ARG framework_installable ARG py_version -ARG framework_support_installable=sagemaker_mxnet_container-1.0.0.tar.gz +ARG framework_support_installable=sagemaker_mxnet_container-2.0.0.tar.gz # Validate that arguments are specified RUN test $framework_installable || exit 1 && \ @@ -45,5 +45,4 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python", "/usr/local/bin/entry.py"] +ENV SAGEMAKER_TRAINING_MODULE sagemaker_mxnet_container.training:main diff --git a/docker/1.2.1/final/Dockerfile.gpu b/docker/1.2.1/final/Dockerfile.gpu index 52bc94dd..552b509e 100644 --- a/docker/1.2.1/final/Dockerfile.gpu +++ b/docker/1.2.1/final/Dockerfile.gpu @@ -1,7 +1,7 @@ FROM nvidia/cuda:9.0-cudnn7-devel ARG framework_installable ARG py_version -ARG framework_support_installable=sagemaker_mxnet_container-1.0.0.tar.gz +ARG framework_support_installable=sagemaker_mxnet_container-2.0.0.tar.gz # Validate that arguments are specified RUN test $framework_installable || exit 1 && \ @@ -45,5 +45,4 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python", "/usr/local/bin/entry.py"] +ENV SAGEMAKER_TRAINING_MODULE sagemaker_mxnet_container.training:main diff --git a/setup.py b/setup.py index ca399a81..f5da294c 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ def read(fname): setup( name='sagemaker_mxnet_container', - version='1.0.0', + version='2.0.0', description='Open source library for creating MXNet containers to run on Amazon SageMaker.', packages=find_packages(where='src', exclude=('test',)), @@ -36,8 +36,9 @@ def read(fname): # We don't declare our dependency on mxnet here because we build with # different packages for different variants (e.g. mxnet-mkl and mxnet-cu90). - install_requires=['sagemaker-container-support >= 1.0.0, <2'], + install_requires=['sagemaker-containers==2.1'], extras_require={ - 'test': ['tox', 'flake8', 'pytest', 'pytest-cov', 'pytest-xdist', 'mock', 'sagemaker'] + 'test': ['tox', 'flake8', 'pytest', 'pytest-cov', 'pytest-xdist', 'mock', 'sagemaker', + 'requests', 'docker-compose'] }, ) diff --git a/src/mxnet_container/__init__.py b/src/mxnet_container/__init__.py deleted file mode 100644 index bf8cce97..00000000 --- a/src/mxnet_container/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -from mxnet_container.train import train -from mxnet_container.serve.transformer import load_dependencies, transformer diff --git a/src/mxnet_container/serve/__init__.py b/src/mxnet_container/serve/__init__.py deleted file mode 100644 index ecbe7b56..00000000 --- a/src/mxnet_container/serve/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - diff --git a/src/mxnet_container/serve/environment.py b/src/mxnet_container/serve/environment.py deleted file mode 100644 index e0791a20..00000000 --- a/src/mxnet_container/serve/environment.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -import container_support as cs -import os - - -class MXNetHostingEnvironment(cs.HostingEnvironment): - DEFAULT_MODEL_FIRST_DIMENSION_SIZE_PARAM = "SAGEMAKER_DEFAULT_MODEL_FIRST_DIMENSION_SIZE" - - def __init__(self, base_dir=cs.ContainerEnvironment.BASE_DIRECTORY): - super(MXNetHostingEnvironment, self).__init__(base_dir) - self.preferred_batch_size = int(os.environ.get( - MXNetHostingEnvironment.DEFAULT_MODEL_FIRST_DIMENSION_SIZE_PARAM, '1')) - - self.update_mxnet_envvars() - - @staticmethod - def update_mxnet_envvars(): - if not os.environ.get('MXNET_CPU_WORKER_NTHREADS'): - os.environ['MXNET_CPU_WORKER_NTHREADS'] = '1' - - if not os.environ.get('MXNET_CPU_PRIORITY_NTHREADS'): - os.environ['MXNET_CPU_PRIORITY_NTHREADS'] = '1' - - if not os.environ.get('MXNET_KVSTORE_REDUCTION_NTHREADS'): - os.environ['MXNET_KVSTORE_REDUCTION_NTHREADS'] = '1' - - if not os.environ.get('MXNET_ENGINE_TYPE'): - os.environ['MXNET_ENGINE_TYPE'] = 'NaiveEngine' - - if not os.environ.get('OMP_NUM_THREADS'): - os.environ['OMP_NUM_THREADS'] = '1' diff --git a/src/mxnet_container/serve/transformer.py b/src/mxnet_container/serve/transformer.py deleted file mode 100644 index 5f10d0da..00000000 --- a/src/mxnet_container/serve/transformer.py +++ /dev/null @@ -1,419 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -import csv -import json -import os -from types import ModuleType - -import mxnet as mx -from container_support.serving import UnsupportedContentTypeError, \ - UnsupportedAcceptTypeError, \ - UnsupportedInputShapeError, \ - JSON_CONTENT_TYPE, \ - CSV_CONTENT_TYPE -from six import StringIO - -from mxnet_container.serve.environment import MXNetHostingEnvironment -from mxnet_container.train import DEFAULT_MODEL_FILENAMES, DEFAULT_MODEL_NAME - - -def transformer(user_module): - return MXNetTransformer.from_module(user_module) - - -def load_dependencies(): - pass - - -class MXNetTransformer(object): - """A ``Transformer`` encapsulates the function(s) responsible for parsing - incoming request data, passing it through a model, and converting the - result into something that can be returned as the body of and HTTP response. - """ - - def __init__(self, model, transform_fn): - """Initialize a Transformer. - - :param model: a fully initialized model - :param transform_fn: a transformer function - """ - self.model = model - self.transform_fn = transform_fn - - def transform(self, input_data, content_type, accept): - """Transforms input data into a prediction result. - The input data is expected to have the given ``input_content_type``. - The output returned should have the given ``output_content_type``. - - :param input_data: input data - :param content_type: content type from Content-Type headers - :param accept: content type from Accept header - :return: the transformed result - """ - return self.transform_fn(self.model, input_data, content_type, accept) - - @classmethod - def select_transformer_class(cls, model): - if isinstance(model, mx.module.BaseModule): - return ModuleTransformer - - if isinstance(model, mx.gluon.block.Block): - return GluonBlockTransformer - - raise ValueError('Unsupported model type: {}'.format(model.__class__.__name__)) - - @classmethod - def from_module(cls, m): - """Initialize a Transformer using functions supplied by the given module. - - The module may provide a ``model_fn`` that returns a fully initialized model of - some kind. Generally this will be a Gluon ``Block`` or a Module API ``Module``, but - it can be anything, as long as it is compatible with the ``transform_fn``. - - If the ``model_fn`` is not present, a default implementation will be used instead. The - default implementation is compatible with the ``Module``s saved by the ``default_save`` - method in MXNetTrainingEnvironment. - - The ``model_fn`` (user-supplied or default) will be called once during - each inference worker's startup process. - - The module may supply a ``transform_fn``. If it is present, it will be used to handle - each inference request. If it is not present, then a ``transform_fn`` will be composed - by chaining an ``input_fn``, ``predict_fn`` and ``output_fn``. If any of these are - implemented in the given module, they will be used. Otherwise default implementations will - be used instead. - - :param m: a python module - :return: a configured Transformer object - """ - - if not isinstance(m, ModuleType): - raise ValueError("not a module!") - - env = MXNetHostingEnvironment() - - # load model - if hasattr(m, 'model_fn'): - model = m.model_fn(env.model_dir) - else: - model = ModuleTransformer._default_model_fn(env.model_dir, env.preferred_batch_size) - - # if user has supplied a transform_fn, we can use base MXNetTransformer directly - if hasattr(m, 'transform_fn'): - return MXNetTransformer(model, m.transform_fn) - - # otherwise we need to create a Module- or Gluon-specific subclass - transformer_class = cls.select_transformer_class(model) - return transformer_class.from_module(m, model) - - -class GluonBlockTransformer(MXNetTransformer): - def __init__(self, block, transform_fn): - super(GluonBlockTransformer, self).__init__(block, transform_fn) - - @classmethod - def from_module(cls, module, block): - input_fn = GluonBlockTransformer._get_function(module, 'input_fn') - predict_fn = GluonBlockTransformer._get_function(module, 'predict_fn') - output_fn = GluonBlockTransformer._get_function(module, 'output_fn') - - def transform_fn(block, data, content_type, accept): - i = input_fn(data, content_type) - p = predict_fn(block, i) - o, ct = output_fn(p, accept) - return o, ct - - return cls(block, transform_fn) - - @classmethod - def _get_function(cls, module, name): - if hasattr(module, name): - return getattr(module, name) - else: - return getattr(cls, '_default_' + name) - - @staticmethod - def _default_input_fn(input, content_type): - """A default input handler for Gluon ``Block``s. - :param input: the request payload - :param content_type: the request content_type (must equal JSON_CONTENT_TYPE) - :return: NDArray to pass to ``predict_fn`` - """ - if JSON_CONTENT_TYPE == content_type: - return mx.nd.array(json.loads(input)) - - raise UnsupportedContentTypeError(content_type) - - @staticmethod - def _default_predict_fn(block, ndarray): - """A default prediction function for Gluon ``Block``s. - :param block: a Gluon ``Block`` - :param ndarray: an NDArray (axis 1 = batch index) - :return: an NDArray - """ - return block(ndarray) - - @staticmethod - def _default_output_fn(ndarray, accept): - """A default output handler for Gluon ``Block``s. - - :param ndarray: an NDArray - :param accept: content type from accept header (must equal JSON_CONTENT_TYPE) - :return: a json string - :raises: UnsupportedAcceptTypeError if accept != JSON_CONTENT_TYPE - """ - if JSON_CONTENT_TYPE == accept: - return json.dumps(ndarray.asnumpy().tolist()), JSON_CONTENT_TYPE - - raise UnsupportedAcceptTypeError(accept) - - -class ModuleTransformer(MXNetTransformer): - def __init__(self, module, transform_fn): - super(ModuleTransformer, self).__init__(module, transform_fn) - - @classmethod - def from_module(cls, m, model): - """Initialize a Transformer using functions supplied by the given module. - - If the module contains a ``transform_fn``, it will be used to handle incoming request - data, execute the model prediction, and generation of response content. - - If the module does not contain a ``transform_fn``, then one will be assembled by: - - chaining a ``process_request_fn`` and ``output_fn`` if ``process_request_fn`` is defined - - otherwise: chaining an ``input_fn``, ``predict_fn``, and ``output_fn`` - Default handlers will be used for any of these that are not present in the supplied module. - - :param m: a python module - :return: a configured Transformer object - """ - # TODO remove process_request_fn? - if hasattr(m, 'process_request_fn'): - process_fn = m.process_request_fn - else: - input_fn = cls._default_input_fn if not hasattr(m, 'input_fn') else m.input_fn - predict_fn = cls._default_predict_fn if not hasattr(m, 'predict_fn') else m.predict_fn - process_fn = cls._process_request_fn(input_fn, predict_fn) - - if hasattr(m, 'output_fn'): - output_fn = m.output_fn - else: - output_fn = cls._default_output_fn - - transform_fn = cls._build_transform_fn(process_fn, output_fn) - - return cls(model, transform_fn) - - @staticmethod - def _process_request_fn(input_handler, prediction_handler): - """Construct processing function from handlers. - - :param input_handler: handles input and transforms for predict call - :param prediction_handler: consumes data from input handler and calls predict - :return: processing function - """ - - def process(model, data, content_type): - """Processing function for MXNet models. - - :param model: loaded MXNet model - :param data: data from the request - :param content_type: specified in the request - :return: a list of NDArray - """ - return prediction_handler(model, input_handler(model, data, content_type)) - - return process - - @staticmethod - def _default_input_fn(model, data, content_type): - """A default input handler for MXNet models to support default input. - - :param model: loaded MXNet model - :param data: data from the request - :param content_type: specified in the request - :return: NDArrayIter to feed to predict call - """ - - if content_type == JSON_CONTENT_TYPE: - return ModuleTransformer._process_json_input(model, data) - - if content_type == CSV_CONTENT_TYPE: - return ModuleTransformer._process_csv_input(model, data) - - raise UnsupportedContentTypeError(content_type) - - @staticmethod - def _process_json_input(model, data): - """A default inout handler for json input. - - 'data' is deserialized from json into NDArray. This array is used to create - iterator that is used to call 'predict' on the model. - - :param data: json data from the request - :return: NDArrayIter to feed to predict call - """ - - parsed = json.loads(data) - return ModuleTransformer._prepare_input_for_default_predict(model, mx.nd.array(parsed)) - - @staticmethod - def _process_csv_input(model, data): - """A default prediction function for MXNet models that takes csv as input. - - :param model: loaded MXNet model - :param data: data from the request - :return: NDArrayIter to feed to predict call - """ - - # we can only support case when there is a single data input - if len(model.data_shapes) != 1: - raise UnsupportedInputShapeError(len(model.data_shapes)) - - # model is already loaded with data shape bound, - # ignore the first parameter that is batch_size - model_data_shape = model.data_shapes[0] - (shape_name, input_data_shape) = model_data_shape - no_batch_data_shape = input_data_shape[1:] - - # let's read the csv into ndarray doing reshaping as - # specified by the model since csv is arriving flattened - csv_buff = StringIO(data) - csv_to_parse = csv.reader(csv_buff, delimiter=',') - full_array = [] - for row in csv_to_parse: - casted_list = [float(i) for i in row] - shaped_row = mx.nd.array(casted_list).reshape(no_batch_data_shape) - full_array.append(shaped_row.asnumpy().tolist()) - return ModuleTransformer._prepare_input_for_default_predict(model, mx.nd.array(full_array)) - - @staticmethod - def _prepare_input_for_default_predict(model, ndarray): - # We require model to only have one input - [data_shape] = model.data_shapes - - # Batch size is first dimension of model input - model_batch_size = data_shape[1][0] - pad_rows = max(0, model_batch_size - ndarray.shape[0]) - - # If ndarray has fewer rows than model_batch_size, then pad it with zeros. - if pad_rows: - num_pad_values = pad_rows - for dimension in ndarray.shape[1:]: - num_pad_values *= dimension - padding_shape = tuple([pad_rows] + list(ndarray.shape[1:])) - padding = mx.ndarray.zeros(shape=padding_shape) - ndarray = mx.ndarray.concat(ndarray, padding, dim=0) - - model_input = mx.io.NDArrayIter(ndarray, batch_size=model_batch_size, - last_batch_handle='pad') - - if pad_rows: - # Update the getpad method on the model_input data iterator to return the amount of - # padding. MXNet will ignore the last getpad() rows during Module predict. - def _getpad(): - return pad_rows - - model_input.getpad = _getpad - - return model_input - - @staticmethod - def _build_transform_fn(process_request_fn, output_fn): - """ Create a transformer function. - :param process_request_fn: input processing function - :param output_fn: an output handler function - :return: - """ - - def f(model, data, input_content_type, requested_output_content_type): - prediction_result = process_request_fn(model, data, input_content_type) - o, ct = output_fn(prediction_result, requested_output_content_type) - return o, ct - - return f - - @staticmethod - def _default_predict_fn(module, data): - """A default prediction function for MXNet models. - :param module: an MXNet Module - :param data: NDArrayIter - :return: a list of NDArray or list of lists of NDArray - """ - - return module.predict(data) - - @staticmethod - def _default_output_fn(data, content_type): - """A default output handler for MXNet models. - - :param data: output of ``mxnet.Module.predict(...)`` - :param content_type: requested content type by the request to be returned - :return: a json string - """ - - if content_type == JSON_CONTENT_TYPE: - result_to_send = [arr.asnumpy().tolist() for arr in data] - return json.dumps(result_to_send), JSON_CONTENT_TYPE - - if content_type == CSV_CONTENT_TYPE: - result_to_send = [arr.asnumpy().flatten() for arr in data] - str_io = StringIO() - csv_writer = csv.writer(str_io, delimiter=',') - for row in result_to_send: - csv_writer.writerow(row) - return str_io.getvalue(), CSV_CONTENT_TYPE - - raise UnsupportedAcceptTypeError(content_type) - - @staticmethod - def _default_model_fn(model_dir, preferred_batch_size): - for f in DEFAULT_MODEL_FILENAMES.values(): - path = os.path.join(model_dir, f) - if not os.path.exists(path): - raise ValueError('missing %s file' % f) - - shapes_file = os.path.join(model_dir, DEFAULT_MODEL_FILENAMES['shapes']) - data_names, data_shapes = ModuleTransformer._read_data_shapes(shapes_file, - preferred_batch_size) - - sym, args, aux = mx.model.load_checkpoint('%s/%s' % (model_dir, DEFAULT_MODEL_NAME), 0) - - # TODO mxnet ctx - better default, allow user control - mod = mx.mod.Module(symbol=sym, context=mx.cpu(), data_names=data_names, label_names=None) - mod.bind(for_training=False, data_shapes=data_shapes) - mod.set_params(args, aux, allow_missing=True) - - return mod - - @staticmethod - def _read_data_shapes(path, preferred_batch_size=1): - with open(path, 'r') as f: - signature = json.load(f) - - data_names = [] - data_shapes = [] - - for s in signature: - name = s['name'] - data_names.append(name) - - shape = s['shape'] - - if preferred_batch_size: - shape[0] = preferred_batch_size - - data_shapes.append((name, shape)) - - return data_names, data_shapes diff --git a/src/mxnet_container/train.py b/src/mxnet_container/train.py deleted file mode 100644 index 8d774329..00000000 --- a/src/mxnet_container/train.py +++ /dev/null @@ -1,210 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -import container_support as cs -import inspect -import json -import logging -import os -import socket -import subprocess - -logger = logging.getLogger(__name__) - -DEFAULT_MODEL_NAME = "model" - -DEFAULT_MODEL_FILENAMES = { - 'symbol': 'model-symbol.json', - 'params': 'model-0000.params', - 'shapes': 'model-shapes.json', -} - -UPCOMING_SCRIPT_MODE_WARNING = ( - '\033[1;33m' # print warning in yellow - 'This required structure for training scripts will be ' - 'deprecated with the next major release of MXNet images. ' - 'The train() function will no longer be required; ' - 'instead the training script must be able to be run as a standalone script. ' - 'For more information, see https://github.com/aws/sagemaker-python-sdk/tree/master/src/sagemaker/mxnet#updating-your-mxnet-training-script.' # noqa: E501 - '\033[1;0m' -) - - -class MXNetTrainingEnvironment(cs.TrainingEnvironment): - """ Configuration for single machine and distributed mxnet training. - """ - - def __init__(self, base_dir): - super(MXNetTrainingEnvironment, self).__init__(base_dir) - - self._ps_verbose = int(self.hyperparameters.get('_ps_verbose', 0)) - self._ps_port = int(self.hyperparameters.get('_ps_port', 8000)) - self._scheduler_host = sorted(self.hosts)[0] - self._scheduler_ip = host_lookup(self._scheduler_host) - # Block until all host lookups succeed. Relies on retrying host_lookup. - for host in self.hosts: - host_lookup(host) - - @property - def distributed(self): - """ Returns True if this configuration defines a distributed learning task.""" - return len(self.hosts) > 1 - - @property - def current_host_scheduler(self): - """ Returns True if this machine should be the mxnet parameter server scheduler.""" - return self._scheduler_host == self.current_host - - def env_vars_for_role(self, role): - """ Returns environment variables for a python process to run as an - mxnet parameter server process with the specified role. - - Args: - role (str): One of "worker", "server", or "scheduler" - """ - if role not in ["worker", "scheduler", "server"]: - raise ValueError("Unexpected role {}".format(role)) - return { - 'DMLC_NUM_WORKER': str(len(self.hosts)), - 'DMLC_NUM_SERVER': str(len(self.hosts)), - 'DMLC_ROLE': role, - 'DMLC_PS_ROOT_URI': str(self._scheduler_ip), - 'DMLC_PS_ROOT_PORT': str(self._ps_port), - 'PS_VERBOSE': str(self._ps_verbose) - } - - @property - def kwargs_for_training(self): - """ Returns a dictionary of key-word arguments for input to the user supplied - module train function. """ - return { - 'hyperparameters': dict(self.hyperparameters), - 'input_data_config': dict(self.channels), - 'channel_input_dirs': dict(self.channel_dirs), - 'output_data_dir': self.output_data_dir, - 'model_dir': self.model_dir, - 'num_gpus': self.available_gpus, - 'num_cpus': self.available_cpus, - 'hosts': list(self.hosts), - 'current_host': self.current_host - } - - def default_save(self, mod): - """ Saves the specified mxnet module to ``self.model_dir``. - - This generates three files in ``self.model_dir``: - - - model-symbol.json - The serialized module symbolic graph. Formed by - invoking ```module.symbol.save``` - - model-0000.params - The serialized module parameters. Formed by - invoking ```module.save_params``` - - model-shapes.json - The serialized module input data shapes. A json list - of json data-shape objects. Each data-shape object - contains a string name and a list of integer dimensions. - Args: - mod : (mxnet.mod.Module) The module to save.""" - if not self.distributed or self.current_host_scheduler: - mod.symbol.save(os.path.join(self.model_dir, DEFAULT_MODEL_FILENAMES['symbol'])) - mod.save_params(os.path.join(self.model_dir, DEFAULT_MODEL_FILENAMES['params'])) - signature = self._build_data_shape_signature(mod) - with open(os.path.join(self.model_dir, DEFAULT_MODEL_FILENAMES['shapes']), 'w') as f: - json.dump(signature, f) - - @classmethod - def _build_data_shape_signature(cls, mod): - """ Returns a list of data shape description dicts. Each element in the - returned list is a dict with a 'name' key, mapping to a string name - and a 'shape' key, mapping to a list of ints. - """ - return [{"name": data_desc.name, "shape": [dim for dim in data_desc.shape]} - for data_desc in mod.data_shapes] - - -@cs.retry(stop_max_delay=1000 * 60 * 15, - wait_exponential_multiplier=100, - wait_exponential_max=30000) -def host_lookup(host): - """ Retrying host lookup on host """ - return socket.gethostbyname(host) - - -def _run_mxnet_process(role, mxnet_env): - """ Runs an mxnet process for the specified role with the specified - environment. - - Args: - role (str): The mxnet process role. - mxnet_env (MXNetEnvironment): The mxnet environment used to provide - environment variables for the launched process. - Returns: - (int) The launched process id """ - - role_env = os.environ.copy() - role_env.update(mxnet_env.env_vars_for_role(role)) - return subprocess.Popen("python -c 'import mxnet'", shell=True, env=role_env).pid - - -def train(base_dir=MXNetTrainingEnvironment.BASE_DIRECTORY): - """ Runs mxnet training on a user supplied module in either a local or distributed - SageMaker environment. - - The user supplied module and its dependencies are downloaded from S3, and the module - imported using a ``MXNetTrainingEnvironment`` instance. - - Training is invoked by calling a "train" function in the user supplied module. - - if the environment contains multiple hosts, then a distributed learning - task is started. This function will, in addition to running the user supplied script - as an mxnet parameter server worker process, launch an additional mxnet server - process. If the host this process is executing on is designated as the scheduler, then - this funciton will launch an mxnet scheduler parameter server process. - - Args: - base_dir (str): The SageMaker container environment base directory. - """ - logger.warning(UPCOMING_SCRIPT_MODE_WARNING) - - mxnet_env = MXNetTrainingEnvironment(base_dir) - logger.info("MXNetTrainingEnvironment: {}".format(repr(mxnet_env.__dict__))) - - if mxnet_env.user_script_archive.lower().startswith('s3://'): - mxnet_env.download_user_module() - - logger.info("Starting distributed training task") - if mxnet_env.current_host_scheduler: - _run_mxnet_process("scheduler", mxnet_env) - _run_mxnet_process("server", mxnet_env) - os.environ.update(mxnet_env.env_vars_for_role("worker")) - - user_module = mxnet_env.import_user_module() - train_args = inspect.getargspec(user_module.train) - - # avoid forcing our callers to specify **kwargs in their function - # signature. If they have **kwargs we still pass all the args, but otherwise - # we will just pass what they ask for. - if train_args.keywords is None: - kwargs_to_pass = {} - for arg in train_args.args: - if arg != "self" and arg in mxnet_env.kwargs_for_training: - kwargs_to_pass[arg] = mxnet_env.kwargs_for_training[arg] - else: - kwargs_to_pass = mxnet_env.kwargs_for_training - - model = user_module.train(**kwargs_to_pass) - if model: - if hasattr(user_module, 'save'): - user_module.save(model, mxnet_env.model_dir) - else: - mxnet_env.default_save(model) - - mxnet_env.write_success_file() diff --git a/src/sagemaker_mxnet_container/__init__.py b/src/sagemaker_mxnet_container/__init__.py new file mode 100644 index 00000000..0f80bcae --- /dev/null +++ b/src/sagemaker_mxnet_container/__init__.py @@ -0,0 +1,12 @@ +# Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. diff --git a/src/sagemaker_mxnet_container/training.py b/src/sagemaker_mxnet_container/training.py new file mode 100644 index 00000000..b9d22410 --- /dev/null +++ b/src/sagemaker_mxnet_container/training.py @@ -0,0 +1,26 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the 'license' file accompanying this file. This file is +# distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import logging + +import sagemaker_containers.beta.framework as framework + +logger = logging.getLogger(__name__) + + +def train(env): + framework.modules.run_module(env.module_dir, env.to_cmd_args(), + env.to_env_vars(), env.module_name) + + +def main(): + train(framework.training_env()) diff --git a/test/functional/test_mnist_distributed.py b/test/functional/test_mnist_distributed.py index 0bebbf7a..ce833c6e 100644 --- a/test/functional/test_mnist_distributed.py +++ b/test/functional/test_mnist_distributed.py @@ -1,22 +1,24 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. -from sagemaker import Session +import os + +import numpy as np +import pytest from sagemaker.mxnet.estimator import MXNet from sagemaker.utils import sagemaker_timestamp + from timeout import timeout, timeout_and_delete_endpoint -import numpy as np -import os class MXNetTestEstimator(MXNet): @@ -33,16 +35,16 @@ def create_model(self, model_server_workers=None): return model +@pytest.mark.skip def test_mxnet_distributed(sagemaker_session, ecr_image, instance_type): with timeout(minutes=15): script_path = 'test/resources/mnist/mnist.py' data_path = 'test/resources/mnist' mx = MXNetTestEstimator(entry_point=script_path, role='SageMakerRole', - train_instance_count=2, train_instance_type=instance_type, - sagemaker_session=sagemaker_session, - docker_image_uri=ecr_image) - + train_instance_count=2, train_instance_type=instance_type, + sagemaker_session=sagemaker_session, + docker_image_uri=ecr_image) prefix = 'mxnet_mnist/{}'.format(sagemaker_timestamp()) train_input = mx.sagemaker_session.upload_data(path=os.path.join(data_path, 'train'), @@ -50,9 +52,9 @@ def test_mxnet_distributed(sagemaker_session, ecr_image, instance_type): test_input = mx.sagemaker_session.upload_data(path=os.path.join(data_path, 'test'), key_prefix=prefix + '/test') mx.fit({'train': train_input, 'test': test_input}) - + with timeout_and_delete_endpoint(estimator=mx, minutes=30): predictor = mx.deploy(initial_instance_count=1, instance_type=instance_type) - data=np.zeros(shape=(1, 1, 28, 28)) + data = np.zeros(shape=(1, 1, 28, 28)) predictor.predict(data) diff --git a/test/integ/conftest.py b/test/integ/conftest.py index 6a62d673..5e4b4615 100644 --- a/test/integ/conftest.py +++ b/test/integ/conftest.py @@ -1,15 +1,16 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. +from __future__ import absolute_import import logging import os @@ -20,7 +21,7 @@ import shutil import tempfile -from sagemaker import Session +from sagemaker import LocalSession, Session logger = logging.getLogger(__name__) logging.getLogger('boto').setLevel(logging.INFO) @@ -37,10 +38,11 @@ def pytest_addoption(parser): parser.addoption('--region', default='us-west-2') parser.addoption('--framework-version', required=True) parser.addoption('--py-version', required=True, choices=['2', '3']) - parser.addoption('--processor', required=True, choices=['gpu','cpu']) + parser.addoption('--processor', required=True, choices=['gpu', 'cpu']) # If not specified, will default to {framework-version}-{processor}-py{py-version} parser.addoption('--tag', default=None) + @pytest.fixture(scope='session') def docker_base_name(request): return request.config.getoption('--docker-base-name') @@ -83,6 +85,11 @@ def sagemaker_session(region): return Session(boto_session=boto3.Session(region_name=region)) +@pytest.fixture(scope='session') +def sagemaker_local_session(region): + return LocalSession(boto_session=boto3.Session(region_name=region)) + + @pytest.fixture def opt_ml(): tmp = tempfile.mkdtemp() diff --git a/test/integ/test_default_model_fn.py b/test/integ/test_default_model_fn.py index a0c0c00b..416946f5 100644 --- a/test/integ/test_default_model_fn.py +++ b/test/integ/test_default_model_fn.py @@ -1,15 +1,16 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. +import pytest import docker_utils import utils @@ -17,6 +18,7 @@ # The image should serve a MXNet model saved in the # default format, even without a user-provided script. +@pytest.mark.skip def test_default_model_fn(docker_image, opt_ml, processor): resource_path = 'test/resources/default_handlers' for path in ['code', 'model']: diff --git a/test/integ/test_gluon_hosting.py b/test/integ/test_gluon_hosting.py index aeb423ce..c1f773ee 100644 --- a/test/integ/test_gluon_hosting.py +++ b/test/integ/test_gluon_hosting.py @@ -1,23 +1,26 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. import json +import pytest + import docker_utils import utils # The image should support serving Gluon-created models. +@pytest.mark.skip def test_gluon_hosting(docker_image, opt_ml, processor): resource_path = 'test/resources/gluon_hosting' for path in ['code', 'model']: diff --git a/test/integ/test_hosting.py b/test/integ/test_hosting.py index ae2e02db..79f9c527 100644 --- a/test/integ/test_hosting.py +++ b/test/integ/test_hosting.py @@ -1,24 +1,27 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. import json +import pytest + import docker_utils import utils # The image should use the model_fn and transform_fn defined # in the user-provided script when serving. +@pytest.mark.skip def test_hosting(docker_image, opt_ml, processor): resource_path = 'test/resources/dummy_hosting' utils.copy_resource(resource_path, opt_ml, 'code') diff --git a/test/integ/test_linear_regression.py b/test/integ/test_linear_regression.py deleted file mode 100644 index b1c04d81..00000000 --- a/test/integ/test_linear_regression.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -from __future__ import print_function - -import os - -import docker_utils -import numpy as np -import utils -from sagemaker import fw_utils -from sagemaker.utils import sagemaker_timestamp - - -def test_linear_regression(docker_image, sagemaker_session, opt_ml, processor): - resource_path = 'test/resources/linear_regression' - - # create training data - train_data = np.random.uniform(0, 1, [1000, 2]) - train_label = np.array([train_data[i][0] + 2 * train_data[i][1] for i in range(1000)]) - - # eval data... repeat so there's enough to cover multicpu/gpu contexts - eval_data = np.array([[7, 2], [6, 10], [12, 2]]).repeat(32, 0) - eval_label = np.array([11, 26, 16]).repeat(32, 0) - - # save training data - for path in ['training', 'evaluation']: - os.makedirs(os.path.join(opt_ml, 'input', 'data', path)) - np.savetxt(os.path.join(opt_ml, 'input/data/training/train_data.txt'), train_data) - np.savetxt(os.path.join(opt_ml, 'input/data/training/train_label.txt'), train_label) - np.savetxt(os.path.join(opt_ml, 'input/data/evaluation/eval_data.txt'), eval_data) - np.savetxt(os.path.join(opt_ml, 'input/data/evaluation/eval_label.txt'), eval_label) - - s3_source_archive = fw_utils.tar_and_upload_dir(session=sagemaker_session.boto_session, - bucket=sagemaker_session.default_bucket(), - s3_key_prefix=sagemaker_timestamp(), - script='linear_regression.py', - directory=resource_path) - - utils.create_config_files('linear_regression.py', s3_source_archive.s3_prefix, opt_ml) - os.makedirs(os.path.join(opt_ml, 'model')) - - docker_utils.train(docker_image, opt_ml, processor) - - for f in ['output/success', 'model/model-symbol.json', 'model/model-0000.params', - 'model/model-shapes.json']: - assert os.path.exists(os.path.join(opt_ml, f)), 'expected file not found: {}'.format(f) diff --git a/test/integ/test_mnist_training.py b/test/integ/test_mnist_training.py new file mode 100644 index 00000000..0cc440e6 --- /dev/null +++ b/test/integ/test_mnist_training.py @@ -0,0 +1,35 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). +# You may not use this file except in compliance with the License. +# A copy of the License is located at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# permissions and limitations under the License. +from __future__ import absolute_import + +import os + +from sagemaker.mxnet import MXNet + + +def test_mnist_script_mode(docker_image, sagemaker_local_session): + resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'mnist') + script_path = os.path.join(resource_path, 'mnist_script_mode.py') + + mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=1, + train_instance_type='local', sagemaker_session=sagemaker_local_session, + image_name=docker_image) + + train = 'file://{}'.format(os.path.join(resource_path, 'train')) + test = 'file://{}'.format(os.path.join(resource_path, 'test')) + mx.fit({'train': train, 'test': test}) + + output_path = os.path.dirname(mx.create_model().model_data) + for f in ['output/success', 'model/model-symbol.json', 'model/model-0000.params', + 'model/model-shapes.json']: + assert os.path.exists(os.path.join(output_path, f)), 'expected file not found: {}'.format(f) diff --git a/test/integ/test_py_version.py b/test/integ/test_py_version.py deleted file mode 100644 index baaaad14..00000000 --- a/test/integ/test_py_version.py +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -from __future__ import print_function - -import json -import os - -import docker_utils -import utils -from sagemaker import fw_utils -from sagemaker.utils import sagemaker_timestamp - - -# The image should run the user-provided code using the right python version when training. -def test_train_py_version(docker_image, sagemaker_session, py_version, opt_ml, processor): - resource_path = 'test/resources/py_version/code' - - s3_source_archive = fw_utils.tar_and_upload_dir(session=sagemaker_session.boto_session, - bucket=sagemaker_session.default_bucket(), - s3_key_prefix=sagemaker_timestamp(), - script='usermodule.py', - directory=resource_path) - - hp = _py_version_dict(py_version) - - utils.create_config_files('usermodule.py', s3_source_archive.s3_prefix, opt_ml, - additional_hp=hp) - os.makedirs(os.path.join(opt_ml, 'model')) - docker_utils.train(docker_image, opt_ml, processor) - - # The usermodule.py train_fn will assert on the expected - # python versions passed in through hyperparameters, - # and training will fail if they are incorrect. - - success_file = os.path.join(opt_ml, 'output', 'success') - assert os.path.exists(success_file), 'expected file not found: {}'.format(success_file) - - -# The image should run the user-provided code using the right python version when hosting. -def test_hosting_py_version(docker_image, py_version, opt_ml, processor): - resource_path = 'test/resources/py_version' - utils.copy_resource(resource_path, opt_ml, 'code') - - input = json.dumps(_py_version_dict(py_version)) - - with docker_utils.HostingContainer(image=docker_image, processor=processor, - opt_ml=opt_ml, script_name='usermodule.py') as c: - c.ping() - # We send the json of the expect py versions in the request. - # The usermodule.py transform_fn will assert on the python versions, - # and this request will fail and throw an exception if they are incorrect. - c.invoke_endpoint(input) - - -def _py_version_dict(py_version): - maj_to_minor = {2: 7, # Need Python 2.7 for Python 2 - 3: 4} # Need Python 3.4 or above for Python 3 - - return {'py_major_version': str(py_version), - 'py_minimum_minor_version': str(maj_to_minor[py_version])} diff --git a/test/resources/mnist/mnist_script_mode.py b/test/resources/mnist/mnist_script_mode.py new file mode 100644 index 00000000..161f6e3f --- /dev/null +++ b/test/resources/mnist/mnist_script_mode.py @@ -0,0 +1,126 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). +# You may not use this file except in compliance with the License. +# A copy of the License is located at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# permissions and limitations under the License. +import argparse +import ast +import gzip +import json +import logging +import os +import struct + +import mxnet as mx +import numpy as np + + +def load_data(path): + with gzip.open(find_file(path, "labels.gz")) as flbl: + struct.unpack(">II", flbl.read(8)) + labels = np.fromstring(flbl.read(), dtype=np.int8) + with gzip.open(find_file(path, "images.gz")) as fimg: + _, _, rows, cols = struct.unpack(">IIII", fimg.read(16)) + images = np.fromstring(fimg.read(), dtype=np.uint8).reshape(len(labels), rows, cols) + images = images.reshape(images.shape[0], 1, 28, 28).astype(np.float32) / 255 + return labels, images + + +def find_file(root_path, file_name): + for root, dirs, files in os.walk(root_path): + if file_name in files: + return os.path.join(root, file_name) + + +def build_graph(): + data = mx.sym.var('data') + data = mx.sym.flatten(data=data) + fc1 = mx.sym.FullyConnected(data=data, num_hidden=128) + act1 = mx.sym.Activation(data=fc1, act_type="relu") + fc2 = mx.sym.FullyConnected(data=act1, num_hidden=64) + act2 = mx.sym.Activation(data=fc2, act_type="relu") + fc3 = mx.sym.FullyConnected(data=act2, num_hidden=10) + return mx.sym.SoftmaxOutput(data=fc3, name='softmax') + + +def get_train_context(num_gpus): + if num_gpus: + return [mx.gpu(i) for i in range(num_gpus)] + else: + return mx.cpu() + + +def train(batch_size, epochs, learning_rate, num_gpus, training_channel, testing_channel, + hosts, current_host): + (train_labels, train_images) = load_data(training_channel) + (test_labels, test_images) = load_data(testing_channel) + + # Data parallel training - shard the data so each host + # only trains on a subset of the total data. + shard_size = len(train_images) // len(hosts) + for i, host in enumerate(hosts): + if host == current_host: + start = shard_size * i + end = start + shard_size + break + + train_iter = mx.io.NDArrayIter(train_images[start:end], train_labels[start:end], batch_size, + shuffle=True) + val_iter = mx.io.NDArrayIter(test_images, test_labels, batch_size) + + logging.getLogger().setLevel(logging.DEBUG) + + kvstore = 'local' if len(hosts) == 1 else 'dist_sync' + + mlp_model = mx.mod.Module(symbol=build_graph(), + context=get_train_context(num_gpus)) + mlp_model.fit(train_iter, + eval_data=val_iter, + kvstore=kvstore, + optimizer='sgd', + optimizer_params={'learning_rate': learning_rate}, + eval_metric='acc', + batch_end_callback=mx.callback.Speedometer(batch_size, 100), + num_epoch=epochs) + + return mlp_model + + +def save(model_dir, model): + model.symbol.save(os.path.join(model_dir, 'model-symbol.json')) + model.save_params(os.path.join(model_dir, 'model-0000.params')) + + signature = [{'name': data_desc.name, 'shape': [dim for dim in data_desc.shape]} + for data_desc in model.data_shapes] + with open(os.path.join(model_dir, 'model-shapes.json'), 'w') as f: + json.dump(signature, f) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + + parser.add_argument('--batch-size', type=int, default=100) + parser.add_argument('--epochs', type=int, default=10) + parser.add_argument('--learning-rate', type=float, default=0.1) + + parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR']) + parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN']) + parser.add_argument('--test', type=str, default=os.environ['SM_CHANNEL_TEST']) + + parser.add_argument('--hosts', type=str, default=os.environ['SM_HOSTS']) + parser.add_argument('--current-host', type=str, default=os.environ['SM_CURRENT_HOST']) + + num_gpus = int(os.environ['SM_NUM_GPUS']) + + args = parser.parse_args() + + model = train(args.batch_size, args.epochs, args.learning_rate, num_gpus, args.train, args.test, + ast.literal_eval(args.hosts), args.current_host) + save(args.model_dir, model) diff --git a/test/unit/test_module_transformer.py b/test/unit/test_module_transformer.py deleted file mode 100644 index 3756f029..00000000 --- a/test/unit/test_module_transformer.py +++ /dev/null @@ -1,263 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -import json -import logging -import os -import tempfile -from types import ModuleType - -import pytest -from container_support.serving import UnsupportedContentTypeError, \ - UnsupportedAcceptTypeError, \ - UnsupportedInputShapeError, \ - JSON_CONTENT_TYPE, \ - CSV_CONTENT_TYPE -from mock import Mock -from mock import patch, MagicMock - -JSON_DATA = json.dumps({'k1': 'v1', 'k2': [1, 2, 3]}) -CSV_INPUT = "1,2,3\r\n" - - -@pytest.fixture() -def mxc(): - os.environ['SAGEMAKER_CONTAINER_LOG_LEVEL'] = str(logging.INFO) - os.environ['SAGEMAKER_REGION'] = 'us-west-2' - - mxnet_mock = MagicMock() - modules = { - 'mxnet': mxnet_mock, - } - ndarray = Mock('ndarray') - ndarray.asnumpy = Mock(name='asnumpy') - ndarray.asnumpy().tolist = Mock(name='tolist', return_value=[1, 2, 3]) - ndarray.asnumpy().flatten = Mock(name='flatten', return_value=[1, 2, 3]) - ndarray.reshape = Mock(return_value=ndarray) - ndarray.shape = [1, 1, 1] - mxnet_mock.nd.array = Mock(name='array', return_value=ndarray) - - patcher = patch.dict('sys.modules', modules) - patcher.start() - import mxnet_container - yield mxnet_container - patcher.stop() - - -@pytest.fixture() -def user_module(): - m = ModuleType('mod') - m.model_fn = _model_fn - yield m - - -@pytest.fixture() -def transformer(mxc, user_module): - import mxnet_container - from mxnet_container.serve.transformer import ModuleTransformer - transform_class = 'mxnet_container.serve.transformer.MXNetTransformer.select_transformer_class' - with patch(transform_class) as select: - select.return_value = ModuleTransformer - yield mxnet_container.serve.transformer.transformer(user_module) - - -@pytest.fixture -def module_module(mxc): - mock = Mock('BaseModule') - m = ModuleType('mod') - m.model_fn = lambda x: mock - m.input_fn = lambda a, b, c: 'input({})'.format(str(b)) - m.predict_fn = lambda a, b: 'predict({})'.format(str(b)) - m.output_fn = lambda a, b: ('output({})'.format(str(a)), b) - - # extras for test - m._module = mock - return m - - -class TestModuleTransformer(object): - @patch('mxnet_container.serve.transformer.MXNetTransformer.select_transformer_class') - def test_from_module(self, select, mxc, module_module): - from mxnet_container.serve.transformer import MXNetTransformer, ModuleTransformer - select.return_value = ModuleTransformer - - t = MXNetTransformer.from_module(module_module) - assert isinstance(t, ModuleTransformer) - assert t.model == module_module._module - assert t.transform('x', JSON_CONTENT_TYPE, JSON_CONTENT_TYPE) == \ - ('output(predict(input(x)))', JSON_CONTENT_TYPE) - - def test_transformer_from_module_transform_fn(self, mxc, user_module): - import mxnet_container - user_module.transform_fn = _transform_fn - t = mxnet_container.serve.transformer.transformer(user_module) - assert t.transform("data", JSON_CONTENT_TYPE, JSON_CONTENT_TYPE) == \ - ("transform_fn data", JSON_CONTENT_TYPE) - - def test_transformer_from_module_separate_fn(self, mxc, user_module): - user_module.process_request_fn = _process_request_fn - user_module.output_fn = _output_fn - t = next(transformer(mxc, user_module)) - assert t.transform("data", JSON_CONTENT_TYPE, JSON_CONTENT_TYPE) == \ - ("output_fn predict_fn input_fn data", JSON_CONTENT_TYPE) - - @patch('mxnet_container.serve.transformer.MXNetTransformer.select_transformer_class') - @patch('mxnet_container.serve.transformer.ModuleTransformer._default_model_fn') - def test_transformer_from_module_default_fns(self, model_fn, select, mxc): - import mxnet_container - model_fn.return_value = DummyModel() - select.return_value = mxnet_container.serve.transformer.ModuleTransformer - - m = ModuleType('mod') # an empty module - t = mxnet_container.serve.transformer.transformer(m) - assert hasattr(t, 'model') - assert hasattr(t, 'transform_fn') - - def test_transformer_default_handler_json(self, mxc, transformer): - with patch('json.dumps') as patched: - patched.return_value = JSON_DATA - response, response_content_type = transformer.transform(JSON_DATA, JSON_CONTENT_TYPE, - JSON_CONTENT_TYPE) - - assert JSON_DATA == response - assert JSON_CONTENT_TYPE == response_content_type - - @patch('mxnet_container.serve.transformer.MXNetTransformer.select_transformer_class') - def test_transformer_default_handler_csv(self, select, mxc): - import mxnet_container - - m = ModuleType('mod') - m.model_fn = _model_fn_csv - select.return_value = mxnet_container.serve.transformer.ModuleTransformer - - csv_transformer = mxnet_container.serve.transformer.transformer(m) - - response, response_content_type = csv_transformer.transform(CSV_INPUT, CSV_CONTENT_TYPE, - CSV_CONTENT_TYPE) - - assert CSV_INPUT == response - assert CSV_CONTENT_TYPE == response_content_type - - @patch('mxnet_container.serve.transformer.MXNetTransformer.select_transformer_class') - def test_transformer_default_handler_csv_empty(self, select, mxc): - import mxnet_container - select.return_value = mxnet_container.serve.transformer.ModuleTransformer - - m = ModuleType('mod') - m.model_fn = _model_fn_csv - - csv_transformer = mxnet_container.serve.transformer.transformer(m) - - response, response_content_type = csv_transformer.transform("", CSV_CONTENT_TYPE, - CSV_CONTENT_TYPE) - - assert CSV_INPUT == response - assert CSV_CONTENT_TYPE == response_content_type - - @patch('mxnet_container.serve.transformer.MXNetTransformer.select_transformer_class') - def test_transformer_default_handler_csv_wrong_shape(self, select, mxc): - import mxnet_container - select.return_value = mxnet_container.serve.transformer.ModuleTransformer - - m = ModuleType('mod') - m.model_fn = _model_fn_csv_wrong_shape - - csv_transformer = mxnet_container.serve.transformer.transformer(m) - - with pytest.raises(UnsupportedInputShapeError): - csv_transformer.transform(CSV_INPUT, CSV_CONTENT_TYPE, CSV_CONTENT_TYPE) - - def test_transformer_default_handler_unsupported_content_type(self, transformer): - with pytest.raises(UnsupportedContentTypeError): - transformer.transform(JSON_DATA, "application/bad", JSON_CONTENT_TYPE) - - def test_transformer_default_handler_unsupported_accept_type(self, transformer): - with pytest.raises(UnsupportedAcceptTypeError): - transformer.transform(JSON_DATA, JSON_CONTENT_TYPE, "application/bad") - - def test_transformer_read_data_shapes(self, mxc, user_module): - from mxnet_container.serve.transformer import ModuleTransformer - data_shapes = [ - {"name": "data1", "shape": [10, 2, 3, 4]}, - {"name": "data2", "shape": [13, 4, 5, 6]} - ] - - fname = tempfile.mkstemp()[1] - try: - with open(fname, 'w') as f: - json.dump(data_shapes, f) - - names, shapes = ModuleTransformer._read_data_shapes(f.name) - assert 2 == len(shapes) - assert ('data1', [1, 2, 3, 4]) in shapes - assert ('data2', [1, 4, 5, 6]) in shapes - - finally: - os.remove(fname) - - -class DummyModel(object): - def predict(self, data): - nd_array = Mock(name='ndarray') - nd_array.asnumpy = Mock(name='asnumpy') - nd_array.asnumpy().tolist = Mock(name='tolist', return_value=[1, 2, 3]) - nd_array.asnumpy().flatten = Mock(name='flatten', return_value=[1, 2, 3]) - nd_array.shape = [1, 1, 1] - return [nd_array] - - @property - def data_shapes(self): - return [["DataDesc1", (1, 1, 3)]] - - -class DummyModelForCsv(object): - def __init__(self, wrong_shape=False): - self.make_wrong_shape = wrong_shape - - def predict(self, data): - nd_array = Mock(name='ndarray') - nd_array.asnumpy = Mock(name='asnumpy') - nd_array.asnumpy().tolist = Mock(name='tolist', return_value=[1, 2, 3]) - nd_array.asnumpy().flatten = Mock(name='flatten', return_value=[1, 2, 3]) - nd_array.shape = [1, 1, 1] - return [nd_array] - - @property - def data_shapes(self): - if self.make_wrong_shape: - return [] - return [["DataDesc1", (1, 1, 3)]] - - -def _model_fn(model_dir): - return DummyModel() - - -def _model_fn_csv(model_dir): - return DummyModelForCsv() - - -def _model_fn_csv_wrong_shape(model_dir): - return DummyModelForCsv(wrong_shape=True) - - -def _process_request_fn(model, data, content_type): - return "predict_fn input_fn " + data - - -def _output_fn(data, content_type): - return "output_fn " + data, JSON_CONTENT_TYPE - - -def _transform_fn(model, data, input_content_type, output_content_type): - return "transform_fn " + str(data), JSON_CONTENT_TYPE diff --git a/test/unit/test_train.py b/test/unit/test_train.py deleted file mode 100644 index 56398982..00000000 --- a/test/unit/test_train.py +++ /dev/null @@ -1,226 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -import json -import os -import shutil -import tempfile -from inspect import getargspec - -import pytest -from container_support import ContainerEnvironment -from mock import patch, MagicMock, create_autospec - -INPUT_DATA_CONFIG = { - "train": {"ContentType": "trainingContentType"}, - "evaluation": {"ContentType": "evalContentType"}, - "Validation": {} -} - -HYPERPARAMETERS = { - ContainerEnvironment.USER_SCRIPT_NAME_PARAM: 'myscript.py', - ContainerEnvironment.USER_SCRIPT_ARCHIVE_PARAM: 's3://mybucket/code.tar.gz', - "sagemaker_s3_uri_training": "blah/blah", - "sagemaker_s3_uri_validation": "xxx/yyy", - 'sagemaker_region': "us-west-2" -} - - -class NoKWArgsModule: - def train(self, hyperparameters): - pass - - -class KWArgsModule: - def train(self, **kwargs): - pass - - -getargspec_orig = getargspec - - -def train_no_kwargs_mock(): - return create_autospec(NoKWArgsModule) - - -def train_kwargs_mock(): - return create_autospec(KWArgsModule) - - -@pytest.fixture() -def mxc(): - mxnet_mock = MagicMock() - modules = { - 'mxnet': mxnet_mock - } - - patcher = patch.dict('sys.modules', modules) - patcher.start() - import mxnet_container - yield mxnet_container - patcher.stop() - - -@pytest.fixture() -def training(): - d = optml() - yield d - shutil.rmtree(d) - - -def optml(): - tmp = tempfile.mkdtemp() - for d in ['input/data/training', 'input/config', 'model', 'output/data']: - os.makedirs(os.path.join(tmp, d)) - - with open(os.path.join(tmp, 'input/data/training/data.csv'), 'w') as f: - f.write('dummy data file') - - _write_resource_config(tmp, 'a', ['a', 'b']) - _write_config_file(tmp, 'inputdataconfig.json', INPUT_DATA_CONFIG) - _write_config_file(tmp, 'hyperparameters.json', _serialize_hyperparameters(HYPERPARAMETERS)) - - return tmp - - -def test_mxnet_env_is_distributed(mxc, training): - from mxnet_container.train import MXNetTrainingEnvironment - - with patch('socket.gethostbyname') as patched: - mxnet_env = MXNetTrainingEnvironment(training) - assert mxnet_env.distributed - - -def test_mxnet_env_is_not_distributed(mxc, training): - from mxnet_container.train import MXNetTrainingEnvironment - - _write_resource_config(training, 'a', ['a']) - - with patch('socket.gethostbyname') as patched: - mxnet_env = MXNetTrainingEnvironment(training) - assert not mxnet_env.distributed - - -def test_mnxet_env_env_vars(mxc, training): - from mxnet_container.train import MXNetTrainingEnvironment - - with patch('socket.gethostbyname') as patched: - patched.return_value = '0.0.0.0' - mxnet_env = MXNetTrainingEnvironment(training) - assert mxnet_env.env_vars_for_role('worker') == { - 'DMLC_NUM_WORKER': "2", - 'DMLC_NUM_SERVER': "2", - 'DMLC_ROLE': 'worker', - 'DMLC_PS_ROOT_URI': '0.0.0.0', - 'DMLC_PS_ROOT_PORT': "8000", - 'PS_VERBOSE': "0" - } - - -def test_mxnet_env_is_current_host_scheduler(mxc, training): - from mxnet_container.train import MXNetTrainingEnvironment - - with patch('socket.gethostbyname') as patched: - mxnet_env = MXNetTrainingEnvironment(training) - assert mxnet_env.current_host_scheduler - - -def test_mxnet_env_not_is_current_host_scheduler(mxc, training): - from mxnet_container.train import MXNetTrainingEnvironment - - _write_resource_config(training, 'b', ['a', 'b']) - - with patch('socket.gethostbyname') as patched: - mxnet_env = MXNetTrainingEnvironment(training) - assert not mxnet_env.current_host_scheduler - - -def test_train_with_no_kwargs_in_user_module(mxc): - from mxnet_container import train - with patch('container_support.download_s3_resource') as patched_download_s3_resource, \ - patch('container_support.untar_directory') as patched_untar_directory, \ - patch('socket.gethostbyname') as patched_gethostbyname, \ - patch('inspect.getargspec') as patched_getargspec, \ - patch('importlib.import_module', - new_callable=train_no_kwargs_mock) as patched_import_module: - patched_getargspec.return_value = getargspec_orig(NoKWArgsModule.train) - - train(optml()) - assert patched_import_module.return_value.train.called - - -def test_train_failing_script(mxc): - from mxnet_container import train - - def raise_error(*args, **kwargs): - raise ValueError("I failed") - - with patch('container_support.download_s3_resource') as patched_download_s3_resource, \ - patch('container_support.untar_directory') as patched_untar_directory, \ - patch('socket.gethostbyname') as patched_gethostbyname, \ - patch('inspect.getargspec') as patched_getargspec, \ - patch('importlib.import_module', - new_callable=train_kwargs_mock) as patched_import_module: - patched_getargspec.return_value = getargspec_orig(KWArgsModule.train) - patched_import_module.return_value.train.side_effect = raise_error - - with pytest.raises(ValueError): - train(optml()) - assert patched_import_module.return_value.train.called - - -def test_train(mxc): - from mxnet_container import train - - with patch('container_support.download_s3_resource') as patched_download_s3_resource, \ - patch('container_support.untar_directory') as patched_untar_directory, \ - patch('subprocess.Popen') as patched_Popen, \ - patch('socket.gethostbyname'), \ - patch('inspect.getargspec') as patched_getargspec, \ - patch('importlib.import_module', - new_callable=train_kwargs_mock) as patched_import_module: - patched_getargspec.return_value = getargspec_orig(KWArgsModule.train) - - train(optml()) - assert patched_Popen.call_count == 3 - assert patched_import_module.return_value.train.called - - -def test_train_save_shape(mxc, training): - with patch('socket.gethostbyname') as patched_gethostbyname: - from mxnet_container.train import MXNetTrainingEnvironment - env = MXNetTrainingEnvironment(training) - mock_module = MagicMock() - data_desc = MagicMock() - data_desc.name = "elizabeth" - data_desc.shape = [100, 200, 300, 400] - mock_module.data_shapes = [data_desc] - env.default_save(mock_module) - with open(os.path.join(env.model_dir, 'model-shapes.json')) as f: - read_data_shape = json.load(f) - expected_data_shape = [{'shape': [100, 200, 300, 400], 'name': 'elizabeth'}] - assert expected_data_shape == read_data_shape - - -def _write_config_file(path, filename, data): - path = os.path.join(path, "input/config/%s" % filename) - with open(path, 'w') as f: - json.dump(data, f) - - -def _write_resource_config(path, current_host, hosts): - _write_config_file(path, 'resourceconfig.json', {'current_host': current_host, 'hosts': hosts}) - - -def _serialize_hyperparameters(hp): - return {str(k): json.dumps(v) for (k, v) in hp.items()} diff --git a/test/unit/test_training.py b/test/unit/test_training.py new file mode 100644 index 00000000..97727f5f --- /dev/null +++ b/test/unit/test_training.py @@ -0,0 +1,39 @@ +# Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +import pytest +from mock import MagicMock, patch + +from sagemaker_mxnet_container import training + +MODULE_DIR = 's3://my/bucket' +MODULE_NAME = 'script_name' + + +@pytest.fixture +def single_machine_training_env(): + env = MagicMock() + + env.module_dir = MODULE_DIR + env.module_name = MODULE_NAME + env.hyperparameters = {} + + return env + + +@patch('sagemaker_containers.beta.framework.modules.run_module') +def test_single_machine(run_module, single_machine_training_env): + training.train(single_machine_training_env) + run_module.assert_called_with(MODULE_DIR, single_machine_training_env.to_cmd_args(), + single_machine_training_env.to_env_vars(), MODULE_NAME) diff --git a/test/unit/test_transformer.py b/test/unit/test_transformer.py deleted file mode 100644 index fc8a04e2..00000000 --- a/test/unit/test_transformer.py +++ /dev/null @@ -1,180 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -import logging -import os -from types import ModuleType - -import pytest -from container_support.serving import UnsupportedContentTypeError, \ - UnsupportedAcceptTypeError, \ - JSON_CONTENT_TYPE -from mock import Mock -from mock import patch, MagicMock - - -@pytest.fixture() -def mxc(): - os.environ['SAGEMAKER_CONTAINER_LOG_LEVEL'] = str(logging.INFO) - os.environ['SAGEMAKER_REGION'] = 'us-west-2' - - mxnet_mock = MagicMock() - modules = { - 'mxnet': mxnet_mock, - } - ndarray = Mock('ndarray') - ndarray.asnumpy = Mock(name='asnumpy') - ndarray.asnumpy().tolist = Mock(name='tolist', return_value=[1, 2, 3]) - ndarray.asnumpy().flatten = Mock(name='flatten', return_value=[1, 2, 3]) - ndarray.reshape = Mock(return_value=ndarray) - ndarray.shape = [1, 1, 1] - mxnet_mock.nd.array = Mock(name='array', return_value=ndarray) - - patcher = patch.dict('sys.modules', modules) - patcher.start() - import mxnet_container - yield mxnet_container - patcher.stop() - - -generic_model = object() - - -def generic_model_fn(model_dir): - return generic_model - - -def generic_transform_fn(model, input_data, content_type, accept): - return input_data, accept - - -@pytest.fixture -def generic_module(): - m = ModuleType('mod') - m.model_fn = generic_model_fn - m.transform_fn = generic_transform_fn - return m - - -class TestMXNetTransformer(object): - def test_from_module_complete(self, mxc): - from mxnet_container.serve.transformer import MXNetTransformer - t = MXNetTransformer.from_module(generic_module()) - assert isinstance(t, MXNetTransformer) - assert t.model == generic_model - assert t.transform_fn == generic_transform_fn - assert t.transform('x', 'content-type', 'accept') == ('x', 'accept') - - @patch('mxnet_container.serve.transformer.ModuleTransformer._default_model_fn') - def test_from_module_with_default_model_fn(self, model_fn, mxc, generic_module): - from mxnet_container.serve.transformer import MXNetTransformer - model_fn.return_value = generic_model - del generic_module.model_fn - - t = MXNetTransformer.from_module(generic_module) - # expect MXNetTransformer with transform_fn from module, model from default_model_fn - assert isinstance(t, MXNetTransformer) - assert t.model == generic_model - assert t.transform_fn == generic_transform_fn - - -@pytest.fixture -def gluon_module(mxc): - mock = Mock('Block') - m = ModuleType('mod') - m.model_fn = lambda x: mock - m.input_fn = lambda a, b: 'input({})'.format(str(a)) - m.predict_fn = lambda a, b: 'predict({})'.format(str(b)) - m.output_fn = lambda a, b: ('output({})'.format(str(a)), b) - - # extra attribute for test - m._block = mock - return m - - -class TestGluonBlockTransformer(object): - @patch('mxnet_container.serve.transformer.MXNetTransformer.select_transformer_class') - def test_from_module(self, select, mxc, gluon_module): - from mxnet_container.serve.transformer import MXNetTransformer, GluonBlockTransformer - select.return_value = GluonBlockTransformer - - t = MXNetTransformer.from_module(gluon_module) - assert isinstance(t, GluonBlockTransformer) - assert t.model == gluon_module._block - assert t.transform('x', JSON_CONTENT_TYPE, JSON_CONTENT_TYPE) == \ - ('output(predict(input(x)))', JSON_CONTENT_TYPE) - - @patch('mxnet_container.serve.transformer.MXNetTransformer.select_transformer_class') - @patch('mxnet_container.serve.transformer.GluonBlockTransformer._default_output_fn') - @patch('mxnet_container.serve.transformer.GluonBlockTransformer._default_predict_fn') - @patch('mxnet_container.serve.transformer.GluonBlockTransformer._default_input_fn') - def test_from_module_with_defaults(self, input_fn, predict_fn, output_fn, - select, mxc, gluon_module): - from mxnet_container.serve.transformer import MXNetTransformer, GluonBlockTransformer - select.return_value = GluonBlockTransformer - - # remove the handlers so we can test default handlers - del gluon_module.input_fn - del gluon_module.predict_fn - del gluon_module.output_fn - - input_fn.return_value = 'default_input' - predict_fn.return_value = 'default_predict' - output_fn.return_value = 'default_output', 'accept' - - t = MXNetTransformer.from_module(gluon_module) - assert isinstance(t, GluonBlockTransformer) - assert t.model == gluon_module._block - assert t.transform('x', JSON_CONTENT_TYPE, JSON_CONTENT_TYPE) == \ - ('default_output', 'accept') - - input_fn.assert_called_with('x', JSON_CONTENT_TYPE) - predict_fn.assert_called_with(gluon_module._block, 'default_input') - output_fn.assert_called_with('default_predict', JSON_CONTENT_TYPE) - - def test_default_input_fn(self, mxc): - import mxnet - from mxnet_container.serve.transformer import GluonBlockTransformer - _ = GluonBlockTransformer._default_input_fn('[[1,2,3,4]]', JSON_CONTENT_TYPE) - mxnet.nd.array.assert_called_with([[1, 2, 3, 4]]) - - def test_default_input_fn_unsupported_content_type(self, mxc): - from mxnet_container.serve.transformer import GluonBlockTransformer - - with pytest.raises(UnsupportedContentTypeError): - GluonBlockTransformer._default_input_fn('whatever', 'wrong content type') - - def test_default_predict_fn(self, mxc): - from mxnet_container.serve.transformer import GluonBlockTransformer - - # block, ndarray could be any compatible callable/arg pair - block = list - ndarray = [1, 2, 3] - - result = GluonBlockTransformer._default_predict_fn(block, ndarray) - - assert [1, 2, 3] == result - - def test_default_output_fn(self, mxc): - import mxnet - from mxnet_container.serve.transformer import GluonBlockTransformer - mock_ndarray = mxnet.nd.array() - output, accept = GluonBlockTransformer._default_output_fn(mock_ndarray, JSON_CONTENT_TYPE) - assert accept == JSON_CONTENT_TYPE - assert output == '[1, 2, 3]' - - def test_default_output_fn_unsupported_content_type(self, mxc): - from mxnet_container.serve.transformer import GluonBlockTransformer - - with pytest.raises(UnsupportedAcceptTypeError): - GluonBlockTransformer._default_output_fn('whatever', 'wrong content type') From 2fe49d03800057ba224c25e9bb6e6dcb27d35db7 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Tue, 9 Oct 2018 15:44:38 -0700 Subject: [PATCH 02/18] Add tox.ini and configure coverage/flake8 (#35) analogous change to aws/sagemaker-tensorflow-container#80 --- .coveragerc_py27 | 20 +++++++ .coveragerc_py35 | 20 +++++++ .flake8 | 3 + .gitignore | 2 + setup.py | 24 +++++++- src/sagemaker_mxnet_container/training.py | 2 + test/{integ => }/conftest.py | 24 ++++++-- test/functional/conftest.py | 73 ----------------------- test/functional/test_mnist_distributed.py | 1 + test/functional/timeout.py | 15 ++--- test/integ/docker_utils.py | 15 +++-- test/integ/test_default_model_fn.py | 2 + test/integ/test_gluon_hosting.py | 1 + test/integ/test_hosting.py | 1 + test/integ/utils.py | 13 ++-- test/resources/mnist/mnist.py | 12 ++-- test/unit/test_training.py | 11 +++- tox.ini | 66 ++++++++++++++++++++ 18 files changed, 196 insertions(+), 109 deletions(-) create mode 100644 .coveragerc_py27 create mode 100644 .coveragerc_py35 create mode 100644 .flake8 rename test/{integ => }/conftest.py (83%) delete mode 100644 test/functional/conftest.py create mode 100644 tox.ini diff --git a/.coveragerc_py27 b/.coveragerc_py27 new file mode 100644 index 00000000..dfbfd3ef --- /dev/null +++ b/.coveragerc_py27 @@ -0,0 +1,20 @@ +[run] +branch = True +timid = True + +[report] +exclude_lines = + pragma: no cover + pragma: py2 no cover + if six.PY3 + elif six.PY3 + +partial_branches = + pragma: no cover + pragma: py2 no cover + if six.PY3 + elif six.PY3 + +show_missing = True + +fail_under = 90 diff --git a/.coveragerc_py35 b/.coveragerc_py35 new file mode 100644 index 00000000..96bb72bf --- /dev/null +++ b/.coveragerc_py35 @@ -0,0 +1,20 @@ +[run] +branch = True +timid = True + +[report] +exclude_lines = + pragma: no cover + pragma: py3 no cover + if six.PY2 + elif six.PY2 + +partial_branches = + pragma: no cover + pragma: py3 no cover + if six.PY3 + elif six.PY3 + +show_missing = True + +fail_under = 90 diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..0d5ffc2f --- /dev/null +++ b/.flake8 @@ -0,0 +1,3 @@ +[flake8] +application_import_names = docker_utils, utils, sagemaker_mxnet_container, test, timeout +import-order-style = google diff --git a/.gitignore b/.gitignore index bb42ad22..56e09887 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ dist .pytest_cache **/*.pyc **/*.py~ +.tox/* +.coverage diff --git a/setup.py b/setup.py index f5da294c..83738714 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,29 @@ -import os +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# +# Licensed under the Apache License, Version 2.0 (the "License"). +# You may not use this file except in compliance with the License. +# A copy of the License is located at +# +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# permissions and limitations under the License. +from __future__ import absolute_import + from glob import glob +import os from os.path import basename from os.path import splitext -from setuptools import setup, find_packages +from setuptools import find_packages, setup def read(fname): diff --git a/src/sagemaker_mxnet_container/training.py b/src/sagemaker_mxnet_container/training.py index b9d22410..276f2f77 100644 --- a/src/sagemaker_mxnet_container/training.py +++ b/src/sagemaker_mxnet_container/training.py @@ -10,6 +10,8 @@ # distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. +from __future__ import absolute_import + import logging import sagemaker_containers.beta.framework as framework diff --git a/test/integ/conftest.py b/test/conftest.py similarity index 83% rename from test/integ/conftest.py rename to test/conftest.py index 5e4b4615..343da4b5 100644 --- a/test/integ/conftest.py +++ b/test/conftest.py @@ -15,12 +15,11 @@ import logging import os import platform - -import boto3 -import pytest import shutil import tempfile +import boto3 +import pytest from sagemaker import LocalSession, Session logger = logging.getLogger(__name__) @@ -36,9 +35,11 @@ def pytest_addoption(parser): parser.addoption('--docker-base-name', default='preprod-mxnet') parser.addoption('--region', default='us-west-2') - parser.addoption('--framework-version', required=True) - parser.addoption('--py-version', required=True, choices=['2', '3']) - parser.addoption('--processor', required=True, choices=['gpu', 'cpu']) + parser.addoption('--framework-version', default='1.2.1') + parser.addoption('--py-version', default='3', choices=['2', '3']) + parser.addoption('--processor', default='cpu', choices=['gpu', 'cpu']) + parser.addoption('--account-id', default=None) + parser.addoption('--instance-type', default=None) # If not specified, will default to {framework-version}-{processor}-py{py-version} parser.addoption('--tag', default=None) @@ -68,6 +69,11 @@ def processor(request): return request.config.getoption('--processor') +@pytest.fixture(scope='session') +def account_id(request): + return request.config.getoption('--account-id') + + @pytest.fixture(scope='session') def tag(request, framework_version, processor, py_version): provided_tag = request.config.getoption('--tag') @@ -75,6 +81,12 @@ def tag(request, framework_version, processor, py_version): return provided_tag if provided_tag is not None else default_tag +@pytest.fixture(scope='session') +def instance_type(request, processor): + return request.config.getoption('--instance-type') or \ + 'ml.c4.xlarge' if processor == 'cpu' else 'ml.p2.xlarge' + + @pytest.fixture(scope='session') def docker_image(docker_base_name, tag): return '{}:{}'.format(docker_base_name, tag) diff --git a/test/functional/conftest.py b/test/functional/conftest.py deleted file mode 100644 index bdfc7757..00000000 --- a/test/functional/conftest.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. - -import logging - -import boto3 -import pytest -from sagemaker import Session - -logger = logging.getLogger(__name__) -logging.getLogger('boto').setLevel(logging.INFO) -logging.getLogger('botocore').setLevel(logging.INFO) -logging.getLogger('factory.py').setLevel(logging.INFO) -logging.getLogger('auth.py').setLevel(logging.INFO) -logging.getLogger('connectionpool.py').setLevel(logging.INFO) - - -def pytest_addoption(parser): - parser.addoption('--aws-id', required=True) - parser.addoption('--docker-base-name', default='preprod-mxnet') - parser.addoption('--instance-type', required=True) - parser.addoption('--region', default='us-west-2') - parser.addoption('--tag', required=True) - - -@pytest.fixture(scope='session') -def aws_id(request): - return request.config.getoption('--aws-id') - - -@pytest.fixture(scope='session') -def docker_base_name(request): - return request.config.getoption('--docker-base-name') - - -@pytest.fixture(scope='session') -def instance_type(request): - return request.config.getoption('--instance-type') - - -@pytest.fixture(scope='session') -def region(request): - return request.config.getoption('--region') - - -@pytest.fixture(scope='session') -def tag(request): - return request.config.getoption('--tag') - - -@pytest.fixture(scope='session') -def docker_registry(aws_id, region): - return '{}.dkr.ecr.{}.amazonaws.com'.format(aws_id, region) - - -@pytest.fixture(scope='module') -def ecr_image(docker_registry, docker_base_name, tag): - return '{}/{}:{}'.format(docker_registry, docker_base_name, tag) - - -@pytest.fixture(scope='session') -def sagemaker_session(region): - return Session(boto_session=boto3.Session(region_name=region)) diff --git a/test/functional/test_mnist_distributed.py b/test/functional/test_mnist_distributed.py index ce833c6e..2ebcecd4 100644 --- a/test/functional/test_mnist_distributed.py +++ b/test/functional/test_mnist_distributed.py @@ -10,6 +10,7 @@ # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. +from __future__ import absolute_import import os diff --git a/test/functional/timeout.py b/test/functional/timeout.py index a85070db..b6302ede 100644 --- a/test/functional/timeout.py +++ b/test/functional/timeout.py @@ -1,19 +1,20 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. +from __future__ import absolute_import +from contextlib import contextmanager import logging import signal -from contextlib import contextmanager from botocore.exceptions import ClientError diff --git a/test/integ/docker_utils.py b/test/integ/docker_utils.py index ef10bc15..bec33460 100644 --- a/test/integ/docker_utils.py +++ b/test/integ/docker_utils.py @@ -1,16 +1,15 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. - from __future__ import absolute_import import logging @@ -18,8 +17,8 @@ import subprocess import sys import tempfile -import uuid from time import sleep +import uuid logger = logging.getLogger(__name__) diff --git a/test/integ/test_default_model_fn.py b/test/integ/test_default_model_fn.py index 416946f5..500e984b 100644 --- a/test/integ/test_default_model_fn.py +++ b/test/integ/test_default_model_fn.py @@ -10,6 +10,8 @@ # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. +from __future__ import absolute_import + import pytest import docker_utils diff --git a/test/integ/test_gluon_hosting.py b/test/integ/test_gluon_hosting.py index c1f773ee..bc39ffe4 100644 --- a/test/integ/test_gluon_hosting.py +++ b/test/integ/test_gluon_hosting.py @@ -10,6 +10,7 @@ # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. +from __future__ import absolute_import import json diff --git a/test/integ/test_hosting.py b/test/integ/test_hosting.py index 79f9c527..9d24ff08 100644 --- a/test/integ/test_hosting.py +++ b/test/integ/test_hosting.py @@ -10,6 +10,7 @@ # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. +from __future__ import absolute_import import json diff --git a/test/integ/utils.py b/test/integ/utils.py index 4089f3d7..0711afda 100644 --- a/test/integ/utils.py +++ b/test/integ/utils.py @@ -1,15 +1,16 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. +from __future__ import absolute_import import json import logging diff --git a/test/resources/mnist/mnist.py b/test/resources/mnist/mnist.py index 9902cb5a..9219df1b 100644 --- a/test/resources/mnist/mnist.py +++ b/test/resources/mnist/mnist.py @@ -1,14 +1,14 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. import gzip diff --git a/test/unit/test_training.py b/test/unit/test_training.py index 97727f5f..5e80f983 100644 --- a/test/unit/test_training.py +++ b/test/unit/test_training.py @@ -12,8 +12,8 @@ # language governing permissions and limitations under the License. from __future__ import absolute_import -import pytest from mock import MagicMock, patch +import pytest from sagemaker_mxnet_container import training @@ -37,3 +37,12 @@ def test_single_machine(run_module, single_machine_training_env): training.train(single_machine_training_env) run_module.assert_called_with(MODULE_DIR, single_machine_training_env.to_cmd_args(), single_machine_training_env.to_env_vars(), MODULE_NAME) + + +@patch('sagemaker_mxnet_container.training.train') +@patch('sagemaker_containers.beta.framework.training_env') +def test_main(env, train, single_machine_training_env): + env.return_value = single_machine_training_env + + training.main() + train.assert_called_with(single_machine_training_env) diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000..7fbe84b8 --- /dev/null +++ b/tox.ini @@ -0,0 +1,66 @@ +# Tox (http://tox.testrun.org/) is a tool for running tests +# in multiple virtualenvs. This configuration file will run the +# test suite on all supported python versions. To use it, "pip install tox" +# and then run "tox" from this directory. +[tox] +envlist = py27,py35,flake8 +skip_missing_interpreters = False + +[travis] +python = + 3.5: py35, flake8 + +[flake8] +max-line-length = 100 +exclude = + build/ + .git + __pycache__ + examples/ + .tox + tests/data/ + test/resources + venv/ +max-complexity = 10 +ignore = + FI10, + FI12, + FI13, + FI14, + FI15, + FI16, + FI17, + FI50, + FI51, + FI52, + FI53, + FI54, + FI55, + FI56, + FI57, + E722 + +require-code = True + +[testenv] +# TEAMCITY_VERSION environment variable exists during build on Teamcity. teamcity-messages uses it in order to enable +# reporting to TeamCity. +passenv = + TEAMCITY_VERSION + AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY + AWS_SESSION_TOKEN +# {posargs} can be passed in by additional arguments specified when invoking tox. +# Can be used to specify which tests to run, e.g.: tox -- -s +commands = + coverage run --rcfile .coveragerc_{envname} --source sagemaker_mxnet_container -m pytest {posargs} + {env:IGNORE_COVERAGE:} coverage report --fail-under=90 --include *sagemaker_mxnet_container* +deps = .[test] + +[testenv:flake8] +basepython = python +deps = + flake8 + flake8-future-import + flake8-import-order +commands = flake8 From 5a1c8f8ede37b367cedc5657a33c81d82a837e1e Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Mon, 15 Oct 2018 15:37:26 -0700 Subject: [PATCH 03/18] Add support for distributed training (#36) --- setup.py | 2 +- src/sagemaker_mxnet_container/distributed.py | 78 +++++++++++++ src/sagemaker_mxnet_container/training.py | 1 + test/integ/test_mnist_training.py | 29 +++-- test/resources/mnist/mnist_script_mode.py | 21 ++-- test/unit/test_distributed.py | 111 +++++++++++++++++++ 6 files changed, 224 insertions(+), 18 deletions(-) create mode 100644 src/sagemaker_mxnet_container/distributed.py create mode 100644 test/unit/test_distributed.py diff --git a/setup.py b/setup.py index 83738714..a619cc19 100644 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ def read(fname): # We don't declare our dependency on mxnet here because we build with # different packages for different variants (e.g. mxnet-mkl and mxnet-cu90). - install_requires=['sagemaker-containers==2.1'], + install_requires=['sagemaker-containers==2.1', 'retrying==1.3.3'], extras_require={ 'test': ['tox', 'flake8', 'pytest', 'pytest-cov', 'pytest-xdist', 'mock', 'sagemaker', 'requests', 'docker-compose'] diff --git a/src/sagemaker_mxnet_container/distributed.py b/src/sagemaker_mxnet_container/distributed.py new file mode 100644 index 00000000..df4a4cfb --- /dev/null +++ b/src/sagemaker_mxnet_container/distributed.py @@ -0,0 +1,78 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the 'license' file accompanying this file. This file is +# distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +from contextlib import contextmanager +import logging +import os +import socket +import subprocess + +from retrying import retry + +logger = logging.getLogger(__name__) + + +class DefaultParameterServer(): + ROLES = ['worker', 'scheduler', 'server'] + + def __init__(self, hosts, ps_port='8000', ps_verbose='0'): + self.ps_verbose = ps_verbose + self.ps_port = ps_port + self.hosts = hosts + self.scheduler = self._scheduler_host() + + def _scheduler_host(self): + return sorted(self.hosts)[0] + + @contextmanager + def setup(self, current_host): + if len(self.hosts) == 1: + logger.info('Only one host, so skipping setting up a parameter server') + else: + self._verify_hosts(self.hosts) + + logger.info('Starting distributed training task') + if self.scheduler == current_host: + self._run_mxnet_process('scheduler') + self._run_mxnet_process('server') + os.environ.update(self._env_vars_for_role('worker')) + + yield + + @retry(stop_max_delay=1000 * 60 * 15, wait_exponential_multiplier=100, + wait_exponential_max=30000) + def _host_lookup(self, host): + return socket.gethostbyname(host) + + def _env_vars_for_role(self, role): + if role in self.ROLES: + return { + 'DMLC_NUM_WORKER': str(len(self.hosts)), + 'DMLC_NUM_SERVER': str(len(self.hosts)), + 'DMLC_ROLE': role, + 'DMLC_PS_ROOT_URI': self._host_lookup(self.scheduler), + 'DMLC_PS_ROOT_PORT': self.ps_port, + 'PS_VERBOSE': self.ps_verbose, + } + + raise ValueError('Unexpected role: {}'.format(role)) + + def _run_mxnet_process(self, role): + role_env = os.environ.copy() + role_env.update(self._env_vars_for_role(role)) + return subprocess.Popen("python -c 'import mxnet'", shell=True, env=role_env).pid + + def _verify_hosts(self, hosts): + for host in hosts: + self._host_lookup(host) diff --git a/src/sagemaker_mxnet_container/training.py b/src/sagemaker_mxnet_container/training.py index 276f2f77..6bc3ec31 100644 --- a/src/sagemaker_mxnet_container/training.py +++ b/src/sagemaker_mxnet_container/training.py @@ -20,6 +20,7 @@ def train(env): + logger.info('MXNet training environment: {}'.format(env.to_env_vars())) framework.modules.run_module(env.module_dir, env.to_cmd_args(), env.to_env_vars(), env.module_name) diff --git a/test/integ/test_mnist_training.py b/test/integ/test_mnist_training.py index 0cc440e6..3e531551 100644 --- a/test/integ/test_mnist_training.py +++ b/test/integ/test_mnist_training.py @@ -16,20 +16,33 @@ from sagemaker.mxnet import MXNet +RESOURCE_PATH = os.path.join(os.path.dirname(__file__), '..', 'resources', 'mnist') +SCRIPT_PATH = os.path.join(RESOURCE_PATH, 'mnist_script_mode.py') -def test_mnist_script_mode(docker_image, sagemaker_local_session): - resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'mnist') - script_path = os.path.join(resource_path, 'mnist_script_mode.py') +TRAIN_INPUT = 'file://{}'.format(os.path.join(RESOURCE_PATH, 'train')) +TEST_INPUT = 'file://{}'.format(os.path.join(RESOURCE_PATH, 'test')) - mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=1, + +def test_mnist_training(docker_image, sagemaker_local_session): + mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=1, + train_instance_type='local', sagemaker_session=sagemaker_local_session, + image_name=docker_image) + + _train_and_assert_success(mx) + + +def test_distributed_mnist_training(docker_image, sagemaker_local_session): + mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=2, train_instance_type='local', sagemaker_session=sagemaker_local_session, image_name=docker_image) - train = 'file://{}'.format(os.path.join(resource_path, 'train')) - test = 'file://{}'.format(os.path.join(resource_path, 'test')) - mx.fit({'train': train, 'test': test}) + _train_and_assert_success(mx) + + +def _train_and_assert_success(estimator): + estimator.fit({'train': TRAIN_INPUT, 'test': TEST_INPUT}) - output_path = os.path.dirname(mx.create_model().model_data) + output_path = os.path.dirname(estimator.create_model().model_data) for f in ['output/success', 'model/model-symbol.json', 'model/model-0000.params', 'model/model-shapes.json']: assert os.path.exists(os.path.join(output_path, f)), 'expected file not found: {}'.format(f) diff --git a/test/resources/mnist/mnist_script_mode.py b/test/resources/mnist/mnist_script_mode.py index 161f6e3f..ea095644 100644 --- a/test/resources/mnist/mnist_script_mode.py +++ b/test/resources/mnist/mnist_script_mode.py @@ -11,7 +11,6 @@ # express or implied. See the License for the specific language governing # permissions and limitations under the License. import argparse -import ast import gzip import json import logging @@ -21,6 +20,8 @@ import mxnet as mx import numpy as np +from sagemaker_mxnet_container.distributed import DefaultParameterServer + def load_data(path): with gzip.open(find_file(path, "labels.gz")) as flbl: @@ -58,7 +59,7 @@ def get_train_context(num_gpus): def train(batch_size, epochs, learning_rate, num_gpus, training_channel, testing_channel, - hosts, current_host): + hosts, current_host, scheduler_host, model_dir): (train_labels, train_images) = load_data(training_channel) (test_labels, test_images) = load_data(testing_channel) @@ -90,7 +91,8 @@ def train(batch_size, epochs, learning_rate, num_gpus, training_channel, testing batch_end_callback=mx.callback.Speedometer(batch_size, 100), num_epoch=epochs) - return mlp_model + if len(hosts) == 1 or scheduler_host == current_host: + save(model_dir, mlp_model) def save(model_dir, model): @@ -114,13 +116,14 @@ def save(model_dir, model): parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN']) parser.add_argument('--test', type=str, default=os.environ['SM_CHANNEL_TEST']) - parser.add_argument('--hosts', type=str, default=os.environ['SM_HOSTS']) parser.add_argument('--current-host', type=str, default=os.environ['SM_CURRENT_HOST']) - - num_gpus = int(os.environ['SM_NUM_GPUS']) + parser.add_argument('--hosts', type=list, default=json.loads(os.environ['SM_HOSTS'])) args = parser.parse_args() - model = train(args.batch_size, args.epochs, args.learning_rate, num_gpus, args.train, args.test, - ast.literal_eval(args.hosts), args.current_host) - save(args.model_dir, model) + num_gpus = int(os.environ['SM_NUM_GPUS']) + + distributed_server = DefaultParameterServer(args.hosts) + with distributed_server.setup(args.current_host): + train(args.batch_size, args.epochs, args.learning_rate, num_gpus, args.train, args.test, + args.hosts, args.current_host, distributed_server.scheduler, args.model_dir) diff --git a/test/unit/test_distributed.py b/test/unit/test_distributed.py new file mode 100644 index 00000000..e7d06e6e --- /dev/null +++ b/test/unit/test_distributed.py @@ -0,0 +1,111 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the 'license' file accompanying this file. This file is +# distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +from mock import call, patch + +from sagemaker_mxnet_container.distributed import DefaultParameterServer + +SCHEDULER = 'host-1' +SINGLE_HOST_LIST = [SCHEDULER] +MULTIPLE_HOSTS_LIST = ['host-2', SCHEDULER, 'host-3'] + +IP_ADDRESS = '0.0.0.0000' +DEFAULT_PORT = '8000' +DEFAULT_VERBOSITY = '0' +BASE_ENV_VARS = { + 'DMLC_NUM_WORKER': str(len(MULTIPLE_HOSTS_LIST)), + 'DMLC_NUM_SERVER': str(len(MULTIPLE_HOSTS_LIST)), + 'DMLC_PS_ROOT_URI': IP_ADDRESS, + 'DMLC_PS_ROOT_PORT': DEFAULT_PORT, + 'PS_VERBOSE': DEFAULT_VERBOSITY, +} + +MXNET_COMMAND = "python -c 'import mxnet'" + + +def test_init_for_single_host_with_defaults(): + server = DefaultParameterServer(SINGLE_HOST_LIST) + + assert server.hosts == SINGLE_HOST_LIST + assert server.scheduler == SCHEDULER + assert server.ps_port == DEFAULT_PORT + assert server.ps_verbose == DEFAULT_VERBOSITY + + +def test_init_for_multiple_hosts_and_ps_options(): + port = '8080' + verbosity = '1' + server = DefaultParameterServer(MULTIPLE_HOSTS_LIST, ps_port=port, ps_verbose=verbosity) + + assert server.hosts == MULTIPLE_HOSTS_LIST + assert server.scheduler == SCHEDULER + assert server.ps_port == port + assert server.ps_verbose == verbosity + + +def test_scheduler_host(): + server = DefaultParameterServer(MULTIPLE_HOSTS_LIST) + assert server._scheduler_host() == SCHEDULER + + +@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._run_mxnet_process') +def test_setup_for_single_host(run_process): + server = DefaultParameterServer(SINGLE_HOST_LIST) + server.setup(SCHEDULER) + + run_process.assert_not_called() + + +@patch('os.environ', {}) +@patch('subprocess.Popen') +@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._host_lookup') +@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._verify_hosts') +def test_setup_for_distributed_scheduler(verify_hosts, host_lookup, popen): + host_lookup.return_value = IP_ADDRESS + + server = DefaultParameterServer(MULTIPLE_HOSTS_LIST) + with server.setup(SCHEDULER): + pass + + verify_hosts.assert_called_with(MULTIPLE_HOSTS_LIST) + + scheduler_env = BASE_ENV_VARS.copy() + scheduler_env.update({'DMLC_ROLE': 'scheduler'}) + + server_env = BASE_ENV_VARS.copy() + server_env.update({'DMLC_ROLE': 'server'}) + + calls = [call(MXNET_COMMAND, shell=True, env=scheduler_env), + call(MXNET_COMMAND, shell=True, env=server_env)] + + popen.assert_has_calls(calls) + + +@patch('os.environ', {}) +@patch('subprocess.Popen') +@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._host_lookup') +@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._verify_hosts') +def test_setup_for_distributed_worker(verify_hosts, host_lookup, popen): + host_lookup.return_value = IP_ADDRESS + + server = DefaultParameterServer(MULTIPLE_HOSTS_LIST) + with server.setup('host-2'): + pass + + verify_hosts.assert_called_with(MULTIPLE_HOSTS_LIST) + + server_env = BASE_ENV_VARS.copy() + server_env.update({'DMLC_ROLE': 'server'}) + + popen.assert_called_once_with(MXNET_COMMAND, shell=True, env=server_env) From cb2ee62ed0b8ae45b20eb74c54ee97289bf207e1 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Wed, 17 Oct 2018 09:15:39 -0700 Subject: [PATCH 04/18] Switch to using MXNet 1.3 for migration and add Keras integ test (#37) This change also introduced changes to the 1.3 Dockerfiles to try to reduce the image size. In addition, the version of requests has been frozen due to a recent change with the Python SDK. --- docker/1.2.1/final/Dockerfile.cpu | 5 +- docker/1.2.1/final/Dockerfile.gpu | 5 +- docker/1.3.0/final/Dockerfile.cpu | 48 ++++++++++++ docker/1.3.0/final/Dockerfile.gpu | 49 ++++++++++++ setup.py | 2 +- test/integ/test_keras_training.py | 34 +++++++++ test/resources/keras/data/mnist.npz | Bin 0 -> 2492 bytes test/resources/keras/keras_mnist.py | 111 ++++++++++++++++++++++++++++ 8 files changed, 249 insertions(+), 5 deletions(-) create mode 100644 docker/1.3.0/final/Dockerfile.cpu create mode 100644 docker/1.3.0/final/Dockerfile.gpu create mode 100644 test/integ/test_keras_training.py create mode 100644 test/resources/keras/data/mnist.npz create mode 100644 test/resources/keras/keras_mnist.py diff --git a/docker/1.2.1/final/Dockerfile.cpu b/docker/1.2.1/final/Dockerfile.cpu index bc5d7c70..f1e7d9e1 100644 --- a/docker/1.2.1/final/Dockerfile.cpu +++ b/docker/1.2.1/final/Dockerfile.cpu @@ -1,7 +1,7 @@ FROM ubuntu:16.04 ARG framework_installable ARG py_version -ARG framework_support_installable=sagemaker_mxnet_container-2.0.0.tar.gz +ARG framework_support_installable=sagemaker_mxnet_container-1.0.0.tar.gz # Validate that arguments are specified RUN test $framework_installable || exit 1 && \ @@ -45,4 +45,5 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" -ENV SAGEMAKER_TRAINING_MODULE sagemaker_mxnet_container.training:main +# Entrypoint script comes from sagemaker_container_support +ENTRYPOINT ["/usr/bin/python", "/usr/local/bin/entry.py"] diff --git a/docker/1.2.1/final/Dockerfile.gpu b/docker/1.2.1/final/Dockerfile.gpu index 552b509e..52bc94dd 100644 --- a/docker/1.2.1/final/Dockerfile.gpu +++ b/docker/1.2.1/final/Dockerfile.gpu @@ -1,7 +1,7 @@ FROM nvidia/cuda:9.0-cudnn7-devel ARG framework_installable ARG py_version -ARG framework_support_installable=sagemaker_mxnet_container-2.0.0.tar.gz +ARG framework_support_installable=sagemaker_mxnet_container-1.0.0.tar.gz # Validate that arguments are specified RUN test $framework_installable || exit 1 && \ @@ -45,4 +45,5 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" -ENV SAGEMAKER_TRAINING_MODULE sagemaker_mxnet_container.training:main +# Entrypoint script comes from sagemaker_container_support +ENTRYPOINT ["/usr/bin/python", "/usr/local/bin/entry.py"] diff --git a/docker/1.3.0/final/Dockerfile.cpu b/docker/1.3.0/final/Dockerfile.cpu new file mode 100644 index 00000000..9dab0d3b --- /dev/null +++ b/docker/1.3.0/final/Dockerfile.cpu @@ -0,0 +1,48 @@ +FROM ubuntu:16.04 +ARG framework_installable +ARG py_version +ARG framework_support_installable=sagemaker_mxnet_container-2.0.0.tar.gz + +# Validate that arguments are specified +RUN test $framework_installable || exit 1 && \ + test $py_version || exit 1 + +WORKDIR /tmp + +RUN apt-get update && \ + apt-get -y install libopencv-dev libopenblas-dev python python3 wget curl nginx + +# Symlink /usr/bin/python to the python version we're building for. +RUN rm /usr/bin/python && ln -s "/usr/bin/python$py_version" /usr/bin/python + +# Install pip +RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ + /usr/bin/python get-pip.py && \ + rm get-pip.py + +# Will install from pypi once packages are released there. For now, copy from local file system. +COPY $framework_installable . +COPY $framework_support_installable . + +RUN framework_installable_local=$(basename $framework_installable) && \ + framework_support_installable_local=$(basename $framework_support_installable) && \ + \ + pip install $framework_installable_local && \ + pip install $framework_support_installable_local && \ + \ + rm $framework_installable_local && \ + rm $framework_support_installable_local + +RUN pip install onnx==1.2.1 \ + keras-mxnet==2.2.2 + +# This is here to make our installed version of OpenCV work. +# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 +# TODO: Should we be installing OpenCV in our image like this? Is there another way we can fix this? +RUN ln -s /dev/null /dev/raw1394 + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" + +ENV SAGEMAKER_TRAINING_MODULE sagemaker_mxnet_container.training:main diff --git a/docker/1.3.0/final/Dockerfile.gpu b/docker/1.3.0/final/Dockerfile.gpu new file mode 100644 index 00000000..1278aaa5 --- /dev/null +++ b/docker/1.3.0/final/Dockerfile.gpu @@ -0,0 +1,49 @@ +FROM nvidia/cuda:9.0-cudnn7-runtime +ARG framework_installable +ARG py_version +ARG framework_support_installable=sagemaker_mxnet_container-2.0.0.tar.gz + +# Validate that arguments are specified +RUN test $framework_installable || exit 1 && \ + test $py_version || exit 1 + +WORKDIR /tmp + +RUN apt-get update && \ + apt-get -y install libopencv-dev libatlas-base-dev libcurl4-openssl-dev \ + python python3 unzip git wget curl nginx + +# Symlink /usr/bin/python to the python version we're building for. +RUN rm /usr/bin/python && ln -s "/usr/bin/python$py_version" /usr/bin/python + +# install pip +RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ + /usr/bin/python get-pip.py && \ + rm get-pip.py + +# Will install from pypi once packages are released there. For now, copy from local file system. +COPY $framework_installable . +COPY $framework_support_installable . + +RUN framework_installable_local=$(basename $framework_installable) && \ + framework_support_installable_local=$(basename $framework_support_installable) && \ + \ + pip install $framework_installable_local && \ + pip install $framework_support_installable_local && \ + \ + rm $framework_installable_local && \ + rm $framework_support_installable_local + +RUN pip install onnx==1.2.1 \ + keras-mxnet==2.2.2 + +# This is here to make our installed version of OpenCV work. +# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 +# TODO: Should we be installing OpenCV in our image like this? Is there another way we can fix this? +RUN ln -s /dev/null /dev/raw1394 + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" + +ENV SAGEMAKER_TRAINING_MODULE sagemaker_mxnet_container.training:main diff --git a/setup.py b/setup.py index a619cc19..e458245e 100644 --- a/setup.py +++ b/setup.py @@ -59,6 +59,6 @@ def read(fname): install_requires=['sagemaker-containers==2.1', 'retrying==1.3.3'], extras_require={ 'test': ['tox', 'flake8', 'pytest', 'pytest-cov', 'pytest-xdist', 'mock', 'sagemaker', - 'requests', 'docker-compose'] + 'requests==2.18.4', 'docker-compose'] }, ) diff --git a/test/integ/test_keras_training.py b/test/integ/test_keras_training.py new file mode 100644 index 00000000..ddf8638a --- /dev/null +++ b/test/integ/test_keras_training.py @@ -0,0 +1,34 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). +# You may not use this file except in compliance with the License. +# A copy of the License is located at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# permissions and limitations under the License. +from __future__ import absolute_import + +import os + +from sagemaker.mxnet import MXNet + + +def test_keras_training(docker_image, sagemaker_local_session): + resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'keras') + script_path = os.path.join(resource_path, 'keras_mnist.py') + + mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=1, + train_instance_type='local', sagemaker_session=sagemaker_local_session, + image_name=docker_image) + + train = 'file://{}'.format(os.path.join(resource_path, 'data')) + mx.fit({'train': train}) + + output_path = os.path.dirname(mx.create_model().model_data) + for f in ['output/success', 'model/model-symbol.json', 'model/model-0000.params', + 'model/model-shapes.json']: + assert os.path.exists(os.path.join(output_path, f)), 'expected file not found: {}'.format(f) diff --git a/test/resources/keras/data/mnist.npz b/test/resources/keras/data/mnist.npz new file mode 100644 index 0000000000000000000000000000000000000000..b2c8e721a1d9bb0d34bdc596fa4f6a999add58f8 GIT binary patch literal 2492 zcmWIWW@Zs#0D;Opf8V6C)5jZuY!K!KiN%)`C1&R7eMa-3&>SmBUjsQb4Kmz4MK50*IOgzx@ahC_<^^uOE6 zIONp+{qw~kCI8@GF(VGS)_?y{A_qyC?I+xFmH+`JPj-0tQqR0t*-_6@|mLgkcsE5~}N1FSYFd z_j=@nAg2;HYt>&6c(~^8r^60Na)$4~;y~heY*3JeI+7HF&~32Xv2EW!A`3&<0dund z{yodhpgjvyj)9MH*54>B;t-+kzx$YQNpkP|>xN5?LHXmu1v$9#S>T7if6FCt=+)iz z_wO`m9FhXDfBx>qA;-Y*^Y2dwtde?7+yDMOkIg6QQ=S4t?iZG_Nuua3C`?cKVVEfH zbQL6XED*y$q1E7cI2^!>qfs literal 0 HcmV?d00001 diff --git a/test/resources/keras/keras_mnist.py b/test/resources/keras/keras_mnist.py new file mode 100644 index 00000000..940dddb1 --- /dev/null +++ b/test/resources/keras/keras_mnist.py @@ -0,0 +1,111 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). +# You may not use this file except in compliance with the License. +# A copy of the License is located at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# permissions and limitations under the License. +'''Adapted from the Keras-MXNet example found at +https://github.com/awslabs/keras-apache-mxnet/blob/master/examples/mnist_cnn.py +''' +from __future__ import absolute_import, print_function + +import argparse +import json +import os + +import keras +from keras.models import Sequential +from keras.layers import Dense, Dropout, Flatten +from keras.layers import Conv2D, MaxPooling2D +from keras import backend as K +import numpy as np + + +def main(batch_size, epochs, num_classes, training_channel, model_dir): + # input image dimensions + img_rows, img_cols = 28, 28 + + # the data, split between train and test sets + dataset = np.load(os.path.join(training_channel, 'mnist.npz')) + x_train = dataset['x_train'] + y_train = dataset['y_train'] + x_test = dataset['x_test'] + y_test = dataset['y_test'] + + if K.image_data_format() == 'channels_first': + x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols) + x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols) + input_shape = (1, img_rows, img_cols) + else: + x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1) + x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1) + input_shape = (img_rows, img_cols, 1) + + x_train = x_train.astype('float32') + x_test = x_test.astype('float32') + x_train /= 255 + x_test /= 255 + print('x_train shape:', x_train.shape) + print(x_train.shape[0], 'train samples') + print(x_test.shape[0], 'test samples') + + # convert class vectors to binary class matrices + y_train = keras.utils.to_categorical(y_train, num_classes) + y_test = keras.utils.to_categorical(y_test, num_classes) + + model = Sequential() + model.add(Conv2D(32, kernel_size=(3, 3), + activation='relu', + input_shape=input_shape)) + model.add(Conv2D(64, (3, 3), activation='relu')) + model.add(MaxPooling2D(pool_size=(2, 2))) + model.add(Dropout(0.25)) + model.add(Flatten()) + model.add(Dense(128, activation='relu')) + model.add(Dropout(0.5)) + model.add(Dense(num_classes, activation='softmax')) + + model.compile(loss=keras.losses.categorical_crossentropy, + optimizer=keras.optimizers.Adadelta(), + metrics=['accuracy']) + + model.fit(x_train, y_train, + batch_size=batch_size, + epochs=epochs, + verbose=1, + validation_data=(x_test, y_test)) + score = model.evaluate(x_test, y_test, verbose=0) + + print('Test loss:', score[0]) + print('Test accuracy:', score[1]) + + print('Saving model in MXNet format') + model_prefix = os.path.join(model_dir, 'model') + data_name, data_shapes = keras.models.save_mxnet_model(model=model, prefix=model_prefix, + epoch=0) + + signature = [{'name': data_name, 'shape': [dim for dim in data_desc.shape]} + for data_desc in data_shapes] + with open(os.path.join(model_dir, 'model-shapes.json'), 'w') as f: + json.dump(signature, f) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + + parser.add_argument('--batch-size', type=int, default=128) + parser.add_argument('--epochs', type=int, default=1) + parser.add_argument('--num_classes', type=float, default=12) + + parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR']) + parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN']) + + args = parser.parse_args() + + main(args.batch_size, args.epochs, args.num_classes, args.train, args.model_dir) From d3afdc9df450f18edb3d2f6ea33b59ea2fdd192a Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Mon, 22 Oct 2018 12:44:37 -0700 Subject: [PATCH 05/18] Migrate serving support (#39) --- .flake8 | 2 +- .gitignore | 1 + docker/1.3.0/final/Dockerfile.cpu | 1 + docker/1.3.0/final/Dockerfile.gpu | 1 + setup.py | 4 +- src/sagemaker_mxnet_container/serving.py | 292 +++++++++++++++++++++ test/integ/local_mode.py | 37 +++ test/integ/test_gluon_hosting.py | 28 +- test/integ/test_mnist_training.py | 11 + test/resources/gluon_hosting/code/gluon.py | 41 +-- test/unit/test_serving.py | 227 ++++++++++++++++ 11 files changed, 597 insertions(+), 48 deletions(-) create mode 100644 src/sagemaker_mxnet_container/serving.py create mode 100644 test/integ/local_mode.py create mode 100644 test/unit/test_serving.py diff --git a/.flake8 b/.flake8 index 0d5ffc2f..142af135 100644 --- a/.flake8 +++ b/.flake8 @@ -1,3 +1,3 @@ [flake8] -application_import_names = docker_utils, utils, sagemaker_mxnet_container, test, timeout +application_import_names = docker_utils, local_mode, utils, sagemaker_mxnet_container, test, timeout import-order-style = google diff --git a/.gitignore b/.gitignore index 56e09887..f48bd6f7 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ dist **/*.py~ .tox/* .coverage +test/resources/local_mode_lock diff --git a/docker/1.3.0/final/Dockerfile.cpu b/docker/1.3.0/final/Dockerfile.cpu index 9dab0d3b..3c71e84e 100644 --- a/docker/1.3.0/final/Dockerfile.cpu +++ b/docker/1.3.0/final/Dockerfile.cpu @@ -46,3 +46,4 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" ENV SAGEMAKER_TRAINING_MODULE sagemaker_mxnet_container.training:main +ENV SAGEMAKER_SERVING_MODULE sagemaker_mxnet_container.serving:main diff --git a/docker/1.3.0/final/Dockerfile.gpu b/docker/1.3.0/final/Dockerfile.gpu index 1278aaa5..42650e1a 100644 --- a/docker/1.3.0/final/Dockerfile.gpu +++ b/docker/1.3.0/final/Dockerfile.gpu @@ -47,3 +47,4 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" ENV SAGEMAKER_TRAINING_MODULE sagemaker_mxnet_container.training:main +ENV SAGEMAKER_SERVING_MODULE sagemaker_mxnet_container.serving:main diff --git a/setup.py b/setup.py index e458245e..63ce3020 100644 --- a/setup.py +++ b/setup.py @@ -56,9 +56,9 @@ def read(fname): # We don't declare our dependency on mxnet here because we build with # different packages for different variants (e.g. mxnet-mkl and mxnet-cu90). - install_requires=['sagemaker-containers==2.1', 'retrying==1.3.3'], + install_requires=['sagemaker-containers>=2.2.4', 'retrying==1.3.3'], extras_require={ 'test': ['tox', 'flake8', 'pytest', 'pytest-cov', 'pytest-xdist', 'mock', 'sagemaker', - 'requests==2.18.4', 'docker-compose'] + 'requests==2.18.4', 'docker-compose', 'mxnet==1.3.0.post0'] }, ) diff --git a/src/sagemaker_mxnet_container/serving.py b/src/sagemaker_mxnet_container/serving.py new file mode 100644 index 00000000..94fefdfd --- /dev/null +++ b/src/sagemaker_mxnet_container/serving.py @@ -0,0 +1,292 @@ +# Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +import json +import logging +import os + +import mxnet as mx +from sagemaker_containers.beta.framework import encoders, env, modules, transformer, worker + +logger = logging.getLogger(__name__) + +PREFERRED_BATCH_SIZE_PARAM = 'SAGEMAKER_DEFAULT_MODEL_FIRST_DIMENSION_SIZE' +DEFAULT_ENV_VARS = { + 'MXNET_CPU_WORKER_NTHREADS': 1, + 'MXNET_CPU_PRIORITY_NTHREADS': 1, + 'MXNET_KVSTORE_REDUCTION_NTHREADS': 1, + 'MXNET_ENGINE_TYPE': 'NativeEngine', + 'OMP_NUM_THREADS': 1, +} + +DEFAULT_MODEL_NAME = 'model' +DEFAULT_MODEL_FILENAMES = { + 'symbol': 'model-symbol.json', + 'params': 'model-0000.params', + 'shapes': 'model-shapes.json', +} + + +def default_model_fn(model_dir, preferred_batch_size=1): + """Function responsible for loading the model. This implementation is designed to work with + the default save function provided for MXNet training. + + Args: + model_dir (str): The directory where model files are stored + preferred_batch_size (int): The preferred batch size of the model's data shape (default: 1) + + Returns: + mxnet.mod.Module: the loaded model. + """ + for f in DEFAULT_MODEL_FILENAMES.values(): + path = os.path.join(model_dir, f) + if not os.path.exists(path): + raise ValueError('Failed to load model with default model_fn: missing file {}.' + 'Expected files: {}'.format(f, [file_name for _, file_name + in DEFAULT_MODEL_FILENAMES.items()])) + + shapes_file = os.path.join(model_dir, DEFAULT_MODEL_FILENAMES['shapes']) + preferred_batch_size = preferred_batch_size or os.environ.get(PREFERRED_BATCH_SIZE_PARAM) + data_names, data_shapes = _read_data_shapes(shapes_file, preferred_batch_size) + + sym, args, aux = mx.model.load_checkpoint(os.path.join(model_dir, DEFAULT_MODEL_NAME), 0) + + # TODO mxnet ctx - better default, allow user control + mod = mx.mod.Module(symbol=sym, context=mx.cpu(), data_names=data_names, label_names=None) + mod.bind(for_training=False, data_shapes=data_shapes) + mod.set_params(args, aux, allow_missing=True) + + return mod + + +def _read_data_shapes(path, preferred_batch_size=1): + with open(path, 'r') as f: + signature = json.load(f) + + data_names = [] + data_shapes = [] + + for s in signature: + name = s['name'] + data_names.append(name) + + shape = s['shape'] + + if preferred_batch_size: + shape[0] = preferred_batch_size + + data_shapes.append((name, shape)) + + return data_names, data_shapes + + +class MXNetTransformer(transformer.Transformer): + """Base class for creating Transformers with default methods for use with MXNet models. + """ + + def __init__(self, model=None, model_fn=None, input_fn=None, predict_fn=None, output_fn=None, + error_class=None): + """Initialize an ``MXNetTransformer``. For each function, if one is not specified, + a default implementation is used. + + Args: + model (obj): a loaded model object that is ready for to be used for prediction + model_fn (fn): a function that loads a model + input_fn (fn): a function that takes request data and deserializes it for prediction + predict_fn (fn): a function that performs prediction with a model + output_fn (fn): a function that serializes a prediction into a response + error_class (Exception): the error class used to wrap functions that are not + the default ones defined in SageMaker Containers. + """ + input_fn = input_fn or self.default_input_fn + predict_fn = predict_fn or self.default_predict_fn + output_fn = output_fn or self.default_output_fn + + super(MXNetTransformer, self).__init__(model_fn=model_fn, input_fn=input_fn, + predict_fn=predict_fn, output_fn=output_fn, + error_class=error_class) + self._model = model + + def initialize(self): + """Execute any initialization necessary to start making predictions with the Transformer. + This method will load a model if it hasn't been loaded already. + """ + if self._model is None: + super(MXNetTransformer, self).initialize() + + def default_input_fn(self, input_data, content_type): + """Take request data and deserialize it into an object for prediction. + When an InvokeEndpoint operation is made against an Endpoint running SageMaker model server, + the model server receives two pieces of information: + + - The request's content type, for example "application/json" + - The request data + + The ``input_fn`` is responsible for preprocessing request data before prediction. + + Args: + input_data (obj): the request data + content_type (str): the request's content type + + Returns: + mxnet.nd.array: an MXNet NDArray + """ + np_array = encoders.decode(input_data, content_type) + return mx.nd.array(np_array) + + def default_predict_fn(self, data, model): + """Use the model to create a prediction for the data. + + Args: + data (obj): input data for prediction + model (obj): the loaded model + + Returns: + obj: the prediction result + """ + transformer.default_predict_fn(data, model) + + def default_output_fn(self, prediction, accept): + """Serialize the prediction into a response. + + Args: + prediction (mxnet.nd.array): an MXNet NDArray that is the result of a prediction + accept (str): the accept content type expected by the client + + Returns: + sagemaker_containers.beta.framework.worker.Response: a Flask response object + """ + return worker.Response(encoders.encode(prediction.asnumpy().tolist(), accept), accept) + + +class ModuleTransformer(MXNetTransformer): + def default_input_fn(self, input_data, content_type): + """Take request data and deserialize it into an object for prediction. + When an InvokeEndpoint operation is made against an Endpoint running SageMaker model server, + the model server receives two pieces of information: + + - The request's content type, for example "application/json" + - The request data + + The ``input_fn`` is responsible for preprocessing request data before prediction. + + Args: + input_data (obj): the request data + content_type (str): the request's content type + + Returns: + mxnet.io.NDArrayIter: data ready for prediction. + """ + np_array = encoders.decode(input_data, content_type) + ndarray = mx.nd.array(np_array) + + # We require model to only have one input + [data_shape] = self._model.data_shapes + + # Batch size is first dimension of model input + model_batch_size = data_shape[1][0] + pad_rows = max(0, model_batch_size - ndarray.shape[0]) + + # If ndarray has fewer rows than model_batch_size, then pad it with zeros. + if pad_rows: + num_pad_values = pad_rows + for dimension in ndarray.shape[1:]: + num_pad_values *= dimension + padding_shape = tuple([pad_rows] + list(ndarray.shape[1:])) + padding = mx.ndarray.zeros(shape=padding_shape) + ndarray = mx.ndarray.concat(ndarray, padding, dim=0) + + model_input = mx.io.NDArrayIter(ndarray, batch_size=model_batch_size, + last_batch_handle='pad') + + if pad_rows: + # Update the getpad method on the model_input data iterator to return the amount of + # padding. MXNet will ignore the last getpad() rows during Module predict. + def _getpad(): + return pad_rows + + model_input.getpad = _getpad + + return model_input + + def default_predict_fn(self, data, module): + """Use the model to create a prediction for the data. + + Args: + data (mxnet.io.NDArrayIter): input data for prediction + model (mxnet.module.BaseModule): an MXNet Module + + Returns: + list: the prediction result. This will be either a list of ``NDArray`` or + a list of lists of ``NDArray`` + """ + return module.predict(data) + + +class GluonBlockTransformer(MXNetTransformer): + def default_predict_fn(self, data, block): + """Use the model to create a prediction for the data. + + Args: + data (mxnet.nd.array): input data for prediction (deserialized by ``input_fn``) + block (mxnet.gluon.block.Block): a Gluon neural network + + Returns: + mxnet.nd.array: the prediction result + """ + return block(data) + + +def _update_mxnet_env_vars(): + for k, v in DEFAULT_ENV_VARS: + if k not in os.environ: + os.environ[k] = v + + +def _user_module_transformer(user_module, model_dir): + if hasattr(user_module, 'transform_fn'): + # TODO: need to implement user-supplied transform_fn support in SageMaker Containers + raise ValueError('User-supplied transform_fn is not supported at this time') + + model_fn = getattr(user_module, 'model_fn', default_model_fn) + + model = model_fn(model_dir) + if isinstance(model, mx.module.BaseModule): + transformer_cls = ModuleTransformer + elif isinstance(model, mx.gluon.block.Block): + transformer_cls = GluonBlockTransformer + else: + raise ValueError('Unsupported model type: {}'.format(model.__class__.__name__)) + + input_fn = getattr(user_module, 'input_fn', None) + predict_fn = getattr(user_module, 'predict_fn', None) + output_fn = getattr(user_module, 'output_fn', None) + + return transformer_cls(model=model, model_fn=model_fn, input_fn=input_fn, + predict_fn=predict_fn, output_fn=output_fn) + + +app = None + + +def main(environ, start_response): + global app + if app is None: + serving_env = env.ServingEnv() + user_module = modules.import_module(serving_env.module_dir, serving_env.module_name) + + transformer = _user_module_transformer(user_module, serving_env.model_dir) + app = worker.Worker(transform_fn=transformer.transform, module_name=serving_env.module_name) + + return app(environ, start_response) diff --git a/test/integ/local_mode.py b/test/integ/local_mode.py new file mode 100644 index 00000000..823742cb --- /dev/null +++ b/test/integ/local_mode.py @@ -0,0 +1,37 @@ +# Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +from contextlib import contextmanager +import fcntl +import os +import time + +RESOURCE_PATH = os.path.join(os.path.dirname(__file__), '..', 'resources') +LOCK_PATH = os.path.join(RESOURCE_PATH, 'local_mode_lock') + + +@contextmanager +def lock(): + # Since Local Mode uses the same port for serving, we need a lock in order + # to allow concurrent test execution. + local_mode_lock_fd = open(LOCK_PATH, 'w') + local_mode_lock = local_mode_lock_fd.fileno() + + fcntl.lockf(local_mode_lock, fcntl.LOCK_EX) + + try: + yield + finally: + time.sleep(5) + fcntl.lockf(local_mode_lock, fcntl.LOCK_UN) diff --git a/test/integ/test_gluon_hosting.py b/test/integ/test_gluon_hosting.py index bc39ffe4..4c9a5876 100644 --- a/test/integ/test_gluon_hosting.py +++ b/test/integ/test_gluon_hosting.py @@ -13,25 +13,27 @@ from __future__ import absolute_import import json +import os -import pytest +from sagemaker.mxnet.model import MXNetModel -import docker_utils -import utils +import local_mode # The image should support serving Gluon-created models. -@pytest.mark.skip -def test_gluon_hosting(docker_image, opt_ml, processor): - resource_path = 'test/resources/gluon_hosting' - for path in ['code', 'model']: - utils.copy_resource(resource_path, opt_ml, path) +def test_gluon_hosting(docker_image, sagemaker_local_session): + resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'gluon_hosting') + m = MXNetModel(os.path.join('file://', resource_path, 'model'), 'SageMakerRole', + os.path.join(resource_path, 'code', 'gluon.py'), image=docker_image, + sagemaker_session=sagemaker_local_session) with open('test/resources/mnist_images/04.json', 'r') as f: input = json.load(f) - with docker_utils.HostingContainer(image=docker_image, processor=processor, - opt_ml=opt_ml, script_name='gluon.py') as c: - c.ping() - output = c.invoke_endpoint(input) - assert '[4.0]' == output + with local_mode.lock(): + try: + predictor = m.deploy(1, 'local') + output = predictor.predict(input) + assert [4.0] == output + finally: + sagemaker_local_session.delete_endpoint(m.endpoint_name) diff --git a/test/integ/test_mnist_training.py b/test/integ/test_mnist_training.py index 3e531551..a1fede65 100644 --- a/test/integ/test_mnist_training.py +++ b/test/integ/test_mnist_training.py @@ -14,8 +14,11 @@ import os +import numpy from sagemaker.mxnet import MXNet +import local_mode + RESOURCE_PATH = os.path.join(os.path.dirname(__file__), '..', 'resources', 'mnist') SCRIPT_PATH = os.path.join(RESOURCE_PATH, 'mnist_script_mode.py') @@ -30,6 +33,14 @@ def test_mnist_training(docker_image, sagemaker_local_session): _train_and_assert_success(mx) + with local_mode.lock(): + try: + predictor = mx.deploy(1, 'local') + data = numpy.zeros(shape=(1, 1, 28, 28)) + predictor.predict(data) + finally: + mx.delete_endpoint() + def test_distributed_mnist_training(docker_image, sagemaker_local_session): mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=2, diff --git a/test/resources/gluon_hosting/code/gluon.py b/test/resources/gluon_hosting/code/gluon.py index 8b712fa4..ce9f3164 100644 --- a/test/resources/gluon_hosting/code/gluon.py +++ b/test/resources/gluon_hosting/code/gluon.py @@ -1,30 +1,22 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. +from __future__ import absolute_import, print_function -from __future__ import print_function - -import json import mxnet as mx from mxnet import gluon def model_fn(model_dir): - """ - Load the gluon model. Called once when hosting service starts. - - :param: model_dir The directory where model files are stored. - :return: a model (in this case a Gluon network) - """ symbol = mx.sym.load('%s/model.json' % model_dir) outputs = mx.symbol.softmax(data=symbol, name='softmax_label') inputs = mx.sym.var('data') @@ -34,21 +26,6 @@ def model_fn(model_dir): return net -def transform_fn(net, data, input_content_type, output_content_type): - """ - Transform a request using the Gluon model. Called once per request. - - :param net: The Gluon model. - :param data: The request payload. - :param input_content_type: The request content type. - :param output_content_type: The (desired) response content type. - :return: response payload and content type. - """ - # we can use content types to vary input/output handling, but - # here we just assume json for both - parsed = json.loads(data) - nda = mx.nd.array(parsed) +def predict_fn(nda, net): output = net(nda) - prediction = mx.nd.argmax(output, axis=1) - response_body = json.dumps(prediction.asnumpy().tolist()) - return response_body, output_content_type + return mx.nd.argmax(output, axis=1) diff --git a/test/unit/test_serving.py b/test/unit/test_serving.py new file mode 100644 index 00000000..5daf1823 --- /dev/null +++ b/test/unit/test_serving.py @@ -0,0 +1,227 @@ +# Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +import json +import os + +from mock import call, Mock, mock_open, patch +import mxnet as mx +import pytest +from sagemaker_containers.beta.framework import transformer, worker + +from sagemaker_mxnet_container.serving import (_user_module_transformer, default_model_fn, + GluonBlockTransformer, ModuleTransformer, + MXNetTransformer) + +MODEL_DIR = 'foo/model' + + +@patch('mxnet.cpu') +@patch('mxnet.mod.Module') +@patch('mxnet.model.load_checkpoint') +@patch('os.path.exists', return_value=True) +def test_default_model_fn(path_exists, mx_load_checkpoint, mx_module, mx_cpu): + sym = Mock() + args = Mock() + aux = Mock() + mx_load_checkpoint.return_value = [sym, args, aux] + + mx_context = Mock() + mx_cpu.return_value = mx_context + + data_name = 'foo' + data_shape = [1] + signature = json.dumps([{'name': data_name, 'shape': data_shape}]) + + with patch('six.moves.builtins.open', mock_open(read_data=signature)): + default_model_fn(MODEL_DIR) + + mx_load_checkpoint.assert_called_with(os.path.join(MODEL_DIR, 'model'), 0) + + init_call = call(symbol=sym, context=mx_context, data_names=[data_name], label_names=None) + assert init_call in mx_module.mock_calls + + model = mx_module.return_value + model.bind.assert_called_with(for_training=False, data_shapes=[(data_name, data_shape)]) + model.set_params.assert_called_with(args, aux, allow_missing=True) + + +@patch('sagemaker_containers.beta.framework.functions.error_wrapper', lambda x, y: x) +def test_mxnet_transformer_init(): + t = MXNetTransformer() + + assert t._model is None + assert t._model_fn == transformer.default_model_fn + assert t._input_fn == t.default_input_fn + assert t._predict_fn == t.default_predict_fn + assert t._output_fn == t.default_output_fn + + +@patch('sagemaker_containers.beta.framework.functions.error_wrapper', lambda x, y: x) +def test_mxnet_transformer_init_with_args(): + model = Mock() + model_fn = Mock() + input_fn = Mock() + predict_fn = Mock() + output_fn = Mock() + error_class = Mock() + + t = MXNetTransformer(model=model, model_fn=model_fn, input_fn=input_fn, predict_fn=predict_fn, + output_fn=output_fn, error_class=error_class) + + assert t._model == model + assert t._model_fn == model_fn + assert t._input_fn == input_fn + assert t._predict_fn == predict_fn + assert t._output_fn == output_fn + assert t._error_class == error_class + + +@patch('sagemaker_containers.beta.framework.transformer.Transformer.initialize') +def test_mxnet_transformer_initialize_without_model(transformer_initialize): + t = MXNetTransformer() + t.initialize() + + transformer_initialize.assert_called_once() + + +@patch('sagemaker_containers.beta.framework.transformer.Transformer.initialize') +def test_mxnet_transformer_initialize_with_model(transformer_initialize): + t = MXNetTransformer(model=Mock()) + t.initialize() + + transformer_initialize.assert_not_called() + + +@patch('sagemaker_containers.beta.framework.encoders.decode', return_value=[0]) +def test_mxnet_transformer_default_input_fn(decode): + input_data = Mock() + content_type = 'json' + + t = MXNetTransformer() + deserialized_data = t.default_input_fn(input_data, content_type) + + decode.assert_called_with(input_data, content_type) + assert deserialized_data == mx.nd.array([0]) + + +@patch('sagemaker_containers.beta.framework.encoders.encode') +def test_mxnet_transformer_default_output_fn(encode): + prediction = mx.ndarray.zeros(1) + accept = 'json' + + t = MXNetTransformer() + response = t.default_output_fn(prediction, accept) + + flattened_prediction = prediction.asnumpy().tolist() + encode.assert_called_with(flattened_prediction, accept) + + assert isinstance(response, worker.Response) + + +@patch('mxnet.io.NDArrayIter') +@patch('sagemaker_containers.beta.framework.encoders.decode', return_value=[0]) +def test_module_transformer_default_input_fn(decode, mx_ndarray_iter): + model = Mock(data_shapes=[(1, (1,))]) + t = ModuleTransformer(model=model) + + input_data = Mock() + content_type = 'json' + t.default_input_fn(input_data, content_type) + + decode.assert_called_with(input_data, content_type) + init_call = call(mx.nd.array([0]), batch_size=1, last_batch_handle='pad') + assert init_call in mx_ndarray_iter.mock_calls + + +def test_module_transformer_default_predict_fn(): + t = ModuleTransformer() + module = Mock() + data = Mock() + + t.default_predict_fn(data, module) + module.predict.assert_called_with(data) + + +def test_gluon_transformer_default_predict_fn(): + data = [0] + block = Mock() + + t = GluonBlockTransformer() + t.default_predict_fn(data, block) + + block.assert_called_with(data) + + +def test_user_module_transformer_with_transform_fn(): + class UserModule: + def __init__(self): + self.transform_fn = Mock() + + user_module = UserModule() + + with pytest.raises(ValueError) as e: + _user_module_transformer(user_module, MODEL_DIR) + + assert 'transform_fn is not supported' in str(e) + + +@patch('sagemaker_containers.beta.framework.functions.error_wrapper', lambda x, y: x) +@patch('sagemaker_mxnet_container.serving.default_model_fn') +def test_user_module_transformer_module_transformer_no_user_methods(model_fn): + module = mx.module.BaseModule() + model_fn.return_value = module + + user_module = None + t = _user_module_transformer(user_module, MODEL_DIR) + + assert isinstance(t, ModuleTransformer) + assert t._model == module + assert t._model_fn == model_fn + assert t._input_fn == t.default_input_fn + assert t._predict_fn == t.default_predict_fn + assert t._output_fn == t.default_output_fn + + +@patch('sagemaker_containers.beta.framework.functions.error_wrapper', lambda x, y: x) +def test_user_module_transformer_gluon_transformer_with_user_methods(): + gluon_block = mx.gluon.block.Block() + + class UserModule: + def __init__(self): + self.input_fn = Mock() + self.predict_fn = Mock() + self.output_fn = Mock() + + def model_fn(self, model_dir): + return gluon_block + + user_module = UserModule() + t = _user_module_transformer(user_module, MODEL_DIR) + + assert isinstance(t, GluonBlockTransformer) + assert t._model == gluon_block + assert t._model_fn == user_module.model_fn + assert t._input_fn == user_module.input_fn + assert t._predict_fn == user_module.predict_fn + assert t._output_fn == user_module.output_fn + + +@patch('sagemaker_mxnet_container.serving.default_model_fn', return_value=Mock()) +def test_user_module_transformer_unsupported_model_type(model_fn): + user_module = None + with pytest.raises(ValueError) as e: + _user_module_transformer(user_module, MODEL_DIR) + + assert 'Unsupported model type' in str(e) From d13fed013d6a003fa338b439652b07494d1ea787 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Wed, 24 Oct 2018 10:45:58 -0700 Subject: [PATCH 06/18] Fix serving, update integ tests, and allow user-supplied transform_fn (#40) --- setup.py | 2 +- src/sagemaker_mxnet_container/serving.py | 30 ++++++++++++------- test/integ/test_default_model_fn.py | 29 ++++++++++-------- test/integ/test_hosting.py | 27 +++++++++-------- .../default_handlers/code/empty_module.py | 12 ++++---- test/unit/test_serving.py | 10 +++---- 6 files changed, 62 insertions(+), 48 deletions(-) diff --git a/setup.py b/setup.py index 63ce3020..891589f3 100644 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ def read(fname): # We don't declare our dependency on mxnet here because we build with # different packages for different variants (e.g. mxnet-mkl and mxnet-cu90). - install_requires=['sagemaker-containers>=2.2.4', 'retrying==1.3.3'], + install_requires=['sagemaker-containers>=2.2.5', 'retrying==1.3.3'], extras_require={ 'test': ['tox', 'flake8', 'pytest', 'pytest-cov', 'pytest-xdist', 'mock', 'sagemaker', 'requests==2.18.4', 'docker-compose', 'mxnet==1.3.0.post0'] diff --git a/src/sagemaker_mxnet_container/serving.py b/src/sagemaker_mxnet_container/serving.py index 94fefdfd..6403d117 100644 --- a/src/sagemaker_mxnet_container/serving.py +++ b/src/sagemaker_mxnet_container/serving.py @@ -23,11 +23,11 @@ PREFERRED_BATCH_SIZE_PARAM = 'SAGEMAKER_DEFAULT_MODEL_FIRST_DIMENSION_SIZE' DEFAULT_ENV_VARS = { - 'MXNET_CPU_WORKER_NTHREADS': 1, - 'MXNET_CPU_PRIORITY_NTHREADS': 1, - 'MXNET_KVSTORE_REDUCTION_NTHREADS': 1, + 'MXNET_CPU_WORKER_NTHREADS': '1', + 'MXNET_CPU_PRIORITY_NTHREADS': '1', + 'MXNET_KVSTORE_REDUCTION_NTHREADS': '1', 'MXNET_ENGINE_TYPE': 'NativeEngine', - 'OMP_NUM_THREADS': 1, + 'OMP_NUM_THREADS': '1', } DEFAULT_MODEL_NAME = 'model' @@ -249,18 +249,23 @@ def default_predict_fn(self, data, block): def _update_mxnet_env_vars(): - for k, v in DEFAULT_ENV_VARS: + for k, v in DEFAULT_ENV_VARS.items(): if k not in os.environ: os.environ[k] = v -def _user_module_transformer(user_module, model_dir): - if hasattr(user_module, 'transform_fn'): - # TODO: need to implement user-supplied transform_fn support in SageMaker Containers - raise ValueError('User-supplied transform_fn is not supported at this time') +def _transformer_with_transform_fn(model_fn, transform_fn): + user_transformer = transformer.Transformer(model_fn=model_fn, transform_fn=transform_fn) + user_transformer.initialize() + return user_transformer + +def _user_module_transformer(user_module, model_dir): model_fn = getattr(user_module, 'model_fn', default_model_fn) + if hasattr(user_module, 'transform_fn'): + return _transformer_with_transform_fn(model_fn, getattr(user_module, 'transform_fn')) + model = model_fn(model_dir) if isinstance(model, mx.module.BaseModule): transformer_cls = ModuleTransformer @@ -284,9 +289,12 @@ def main(environ, start_response): global app if app is None: serving_env = env.ServingEnv() + _update_mxnet_env_vars() + user_module = modules.import_module(serving_env.module_dir, serving_env.module_name) + user_transformer = _user_module_transformer(user_module, serving_env.model_dir) - transformer = _user_module_transformer(user_module, serving_env.model_dir) - app = worker.Worker(transform_fn=transformer.transform, module_name=serving_env.module_name) + app = worker.Worker(transform_fn=user_transformer.transform, + module_name=serving_env.module_name) return app(environ, start_response) diff --git a/test/integ/test_default_model_fn.py b/test/integ/test_default_model_fn.py index 500e984b..d6d92ac2 100644 --- a/test/integ/test_default_model_fn.py +++ b/test/integ/test_default_model_fn.py @@ -12,24 +12,27 @@ # permissions and limitations under the License. from __future__ import absolute_import -import pytest +import os -import docker_utils -import utils +from sagemaker.mxnet.model import MXNetModel + +import local_mode # The image should serve a MXNet model saved in the # default format, even without a user-provided script. -@pytest.mark.skip -def test_default_model_fn(docker_image, opt_ml, processor): - resource_path = 'test/resources/default_handlers' - for path in ['code', 'model']: - utils.copy_resource(resource_path, opt_ml, path) +def test_default_model_fn(docker_image, sagemaker_local_session): + resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'default_handlers') + m = MXNetModel(os.path.join('file://', resource_path, 'model'), 'SageMakerRole', + os.path.join(resource_path, 'code', 'empty_module.py'), image=docker_image, + sagemaker_session=sagemaker_local_session) input = [[1, 2]] - with docker_utils.HostingContainer(image=docker_image, processor=processor, - opt_ml=opt_ml, script_name='empty_module.py') as c: - c.ping() - output = c.invoke_endpoint(input) - assert '[[4.9999918937683105]]' == output + with local_mode.lock(): + try: + predictor = m.deploy(1, 'local') + output = predictor.predict(input) + assert [[4.9999918937683105]] == output + finally: + sagemaker_local_session.delete_endpoint(m.endpoint_name) diff --git a/test/integ/test_hosting.py b/test/integ/test_hosting.py index 9d24ff08..83475f33 100644 --- a/test/integ/test_hosting.py +++ b/test/integ/test_hosting.py @@ -13,24 +13,27 @@ from __future__ import absolute_import import json +import os -import pytest +from sagemaker.mxnet.model import MXNetModel -import docker_utils -import utils +import local_mode # The image should use the model_fn and transform_fn defined # in the user-provided script when serving. -@pytest.mark.skip -def test_hosting(docker_image, opt_ml, processor): - resource_path = 'test/resources/dummy_hosting' - utils.copy_resource(resource_path, opt_ml, 'code') +def test_hosting(docker_image, sagemaker_local_session): + resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'dummy_hosting') + m = MXNetModel(os.path.join('file://', resource_path, 'code'), 'SageMakerRole', + os.path.join(resource_path, 'code', 'dummy_hosting_module.py'), + image=docker_image, sagemaker_session=sagemaker_local_session) input = json.dumps({'some': 'json'}) - with docker_utils.HostingContainer(image=docker_image, processor=processor, - opt_ml=opt_ml, script_name='dummy_hosting_module.py') as c: - c.ping() - output = c.invoke_endpoint(input) - assert input == output + with local_mode.lock(): + try: + predictor = m.deploy(1, 'local') + output = predictor.predict(input) + assert input == output + finally: + sagemaker_local_session.delete_endpoint(m.endpoint_name) diff --git a/test/resources/default_handlers/code/empty_module.py b/test/resources/default_handlers/code/empty_module.py index 6d3c76a8..408840ee 100644 --- a/test/resources/default_handlers/code/empty_module.py +++ b/test/resources/default_handlers/code/empty_module.py @@ -1,14 +1,14 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. # nothing here... we are testing default model loading and handlers diff --git a/test/unit/test_serving.py b/test/unit/test_serving.py index 5daf1823..b58e444b 100644 --- a/test/unit/test_serving.py +++ b/test/unit/test_serving.py @@ -164,17 +164,17 @@ def test_gluon_transformer_default_predict_fn(): block.assert_called_with(data) -def test_user_module_transformer_with_transform_fn(): +@patch('sagemaker_containers.beta.framework.functions.error_wrapper', lambda x, y: x) +@patch('sagemaker_mxnet_container.serving.default_model_fn') +def test_user_module_transformer_with_transform_fn(model_fn): class UserModule: def __init__(self): self.transform_fn = Mock() user_module = UserModule() - with pytest.raises(ValueError) as e: - _user_module_transformer(user_module, MODEL_DIR) - - assert 'transform_fn is not supported' in str(e) + t = _user_module_transformer(user_module, MODEL_DIR) + assert t._transform_fn == user_module.transform_fn @patch('sagemaker_containers.beta.framework.functions.error_wrapper', lambda x, y: x) From 8dd270d591ba7107fffffb8305ee07a040c92ecb Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Wed, 24 Oct 2018 13:41:30 -0700 Subject: [PATCH 07/18] Clean up integration (local and SageMaker) tests (#41) --- .flake8 | 2 +- test/__init__.py | 13 + test/conftest.py | 10 + test/integ/docker_utils.py | 204 ---- test/integ/utils.py | 75 -- test/integration/__init__.py | 24 + .../local}/local_mode.py | 3 +- .../local}/test_default_model_fn.py | 13 +- .../local}/test_gluon_hosting.py | 13 +- .../local}/test_hosting.py | 11 +- .../local}/test_keras_training.py | 15 +- .../local/test_linear_regression.py | 43 + .../local}/test_mnist_training.py | 18 +- .../sagemaker}/test_mnist_distributed.py | 32 +- .../sagemaker}/timeout.py | 0 .../data/evaluation/eval_data.txt | 96 ++ .../data/evaluation/eval_label.txt | 96 ++ .../data/training/train_data.txt | 1000 +++++++++++++++++ .../data/training/train_label.txt | 1000 +++++++++++++++++ .../linear_regression/linear_regression.py | 13 +- test/resources/mnist/mnist.py | 64 +- test/resources/mnist/mnist_script_mode.py | 129 --- 22 files changed, 2390 insertions(+), 484 deletions(-) create mode 100644 test/__init__.py delete mode 100644 test/integ/docker_utils.py delete mode 100644 test/integ/utils.py create mode 100644 test/integration/__init__.py rename test/{integ => integration/local}/local_mode.py (93%) rename test/{integ => integration/local}/test_default_model_fn.py (67%) rename test/{integ => integration/local}/test_gluon_hosting.py (68%) rename test/{integ => integration/local}/test_hosting.py (72%) rename test/{integ => integration/local}/test_keras_training.py (66%) create mode 100644 test/integration/local/test_linear_regression.py rename test/{integ => integration/local}/test_mnist_training.py (72%) rename test/{functional => integration/sagemaker}/test_mnist_distributed.py (62%) rename test/{functional => integration/sagemaker}/timeout.py (100%) create mode 100644 test/resources/linear_regression/data/evaluation/eval_data.txt create mode 100644 test/resources/linear_regression/data/evaluation/eval_label.txt create mode 100644 test/resources/linear_regression/data/training/train_data.txt create mode 100644 test/resources/linear_regression/data/training/train_label.txt delete mode 100644 test/resources/mnist/mnist_script_mode.py diff --git a/.flake8 b/.flake8 index 142af135..6e525c3f 100644 --- a/.flake8 +++ b/.flake8 @@ -1,3 +1,3 @@ [flake8] -application_import_names = docker_utils, local_mode, utils, sagemaker_mxnet_container, test, timeout +application_import_names = local_mode, sagemaker_mxnet_container, test, timeout import-order-style = google diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 00000000..74f14335 --- /dev/null +++ b/test/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import diff --git a/test/conftest.py b/test/conftest.py index 343da4b5..7193c0ca 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -92,6 +92,11 @@ def docker_image(docker_base_name, tag): return '{}:{}'.format(docker_base_name, tag) +@pytest.fixture(scope='session') +def ecr_image(account_id, docker_base_name, tag, region): + return '{}.dkr.ecr.{}.amazonaws.com/{}:{}'.format(account_id, region, docker_base_name, tag) + + @pytest.fixture(scope='session') def sagemaker_session(region): return Session(boto_session=boto3.Session(region_name=region)) @@ -102,6 +107,11 @@ def sagemaker_local_session(region): return LocalSession(boto_session=boto3.Session(region_name=region)) +@pytest.fixture(scope='session') +def local_instance_type(processor): + return 'local' if processor == 'cpu' else 'local_gpu' + + @pytest.fixture def opt_ml(): tmp = tempfile.mkdtemp() diff --git a/test/integ/docker_utils.py b/test/integ/docker_utils.py deleted file mode 100644 index bec33460..00000000 --- a/test/integ/docker_utils.py +++ /dev/null @@ -1,204 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. -from __future__ import absolute_import - -import logging -import os -import subprocess -import sys -import tempfile -from time import sleep -import uuid - -logger = logging.getLogger(__name__) - -CYAN_COLOR = '\033[36m' -END_COLOR = '\033[0m' - - -def registry(aws_id, region): - return '{}.dkr.ecr.{}.amazonaws.com'.format(aws_id, region) - - -def train(image_name, resource_folder, processor): - docker_cmd = 'docker' if processor == 'cpu' else 'nvidia-docker' - - cmd = [docker_cmd, - 'run', - '--rm', - '-h', 'algo-1', - '-v', '{}:/opt/ml'.format(resource_folder), - '-e', 'AWS_ACCESS_KEY_ID', - '-e', 'AWS_SECRET_ACCESS_KEY', - '-e', 'AWS_SESSION_TOKEN', - image_name, 'train'] - check_call(cmd) - - -def check_call(cmd, *popenargs, **kwargs): - if isinstance(cmd, str): - cmd = cmd.split(" ") - _print_cmd(cmd) - subprocess.check_call(cmd, *popenargs, **kwargs) - - -def _print_cmd(cmd): - print('executing docker command: {}{}{}'.format(CYAN_COLOR, ' '.join(cmd), END_COLOR)) - sys.stdout.flush() - - -class Container(object): - def __init__(self, image, processor, startup_delay=1): - self.temp_dir = tempfile.gettempdir() - self.image = image - self.name = str(uuid.uuid4()) - self.startup_delay = startup_delay - self.docker_cmd = 'docker' if processor == 'cpu' else 'nvidia-docker' - - def __enter__(self): - print('in container.enter for container ' + self.image + ',' + self.name) - self.remove_container() - - cmd = [self.docker_cmd, - 'run', - '-d', - '-t', - '-e', 'AWS_ACCESS_KEY_ID', - '-e', 'AWS_SECRET_ACCESS_KEY', - '-e', 'AWS_SESSION_TOKEN', - '--entrypoint', 'bash', - '--name', self.name, - self.image] - - check_call(cmd) - - # waiting for the server to spin up - sleep(self.startup_delay) - - self.execute_command(['pip', 'install', 'requests']) - self.execute_command(['pip', 'install', 'pytest']) - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.remove_container() - - def remove_container(self): - cmd = [self.docker_cmd, - 'rm', - '-f', - self.name] - - try: - check_call(cmd) - except: - pass - - def copy(self, src, dst): - cmd = [self.docker_cmd, - 'cp', - src, - '{}:{}'.format(self.name, dst)] - - check_call(cmd) - - def execute_command(self, cmd): - - docker_cmd = [self.docker_cmd, 'exec', '-t', self.name] - docker_cmd.extend(cmd) - - _print_cmd(docker_cmd) - - lines = [] - process = subprocess.Popen(docker_cmd, stdout=subprocess.PIPE) - print( - '{}============================= container output ============================='.format( - CYAN_COLOR)) - for line in iter(process.stdout.readline, b''): - sys.stdout.write(line.decode('utf-8')) - sys.stdout.flush() - lines.append(line.decode('utf-8')) - msg = '\n{}========================= end of container output ==========================' - print(msg.format(CYAN_COLOR)) - - process.wait() - - warnings = 0 - for line in lines: - if line.startswith('WARNING'): - warnings += 1 - print(line) - else: - break - output = '\n'.join(lines[warnings:]) - - if process.returncode != 0: - print("docker exec error. output:\n{}".format(output)) - raise ValueError("non-zero exit code: {}".format(process.returncode)) - - return output - - def execute_pytest(self, tests_path): - container_test_path = '/root/{}'.format(os.path.basename(tests_path)) - self.copy(tests_path, container_test_path) - return self.execute_command(['pytest', '-vv', '-s', '--color=yes', container_test_path]) - - -class HostingContainer(Container): - def __init__(self, image, opt_ml, script_name, processor, region='us-west-2', - requirements_file=None, startup_delay=5): - super(HostingContainer, self).__init__(image=image, - processor=processor, - startup_delay=startup_delay) - self.opt_ml = opt_ml - self.script_name = script_name - self.region = region - self.requirements_file = requirements_file - - def __enter__(self): - cmd = [self.docker_cmd, - 'run', - '-d', - '-h', 'algo-1', - '-v', '{}:/opt/ml'.format(self.opt_ml), - '-e', 'AWS_ACCESS_KEY_ID', - '-e', 'AWS_SECRET_ACCESS_KEY', - '-e', 'AWS_SESSION_TOKEN', - '-e', 'SAGEMAKER_CONTAINER_LOG_LEVEL=20', - '-e', 'SAGEMAKER_REGION={}'.format(self.region), - '-e', 'SAGEMAKER_PROGRAM={}'.format(self.script_name), - '-e', 'SAGEMAKER_REQUIREMENTS={}'.format(self.requirements_file), - '--name', self.name, - self.image, 'serve'] - - check_call(cmd) - - # waiting for the server to spin up - sleep(self.startup_delay) - - self.execute_command(['pip', 'install', 'requests']) - self.execute_command(['pip', 'install', 'pytest']) - - return self - - def invoke_endpoint(self, input, content_type='application/json', accept='application/json'): - return self.execute_command([ - 'curl', - '-f', - '-H', 'Content-Type: {}'.format(content_type), - '-H', 'Accept: {}'.format(accept), - '-d', str(input), - 'http://127.0.0.1:8080/invocations' - ]) - - def ping(self): - self.execute_command(['curl', '-f', '-v', 'http://localhost:8080/ping']) diff --git a/test/integ/utils.py b/test/integ/utils.py deleted file mode 100644 index 0711afda..00000000 --- a/test/integ/utils.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. -from __future__ import absolute_import - -import json -import logging -import os -import shutil - - -def serialize_hyperparameters(hp): - return {str(k): json.dumps(v) for (k, v) in hp.items()} - - -def save_as_json(data, filename): - with open(filename, "wt") as f: - json.dump(data, f) - - -def file_exists(resource_folder, file_name): - return os.path.exists(os.path.join(resource_folder, file_name)) - - -def create_config_files(program, s3_source_archive, path, additional_hp={}): - rc = { - "current_host": "algo-1", - "hosts": ["algo-1"] - } - - hp = {'sagemaker_region': 'us-west-2', - 'sagemaker_program': program, - 'sagemaker_submit_directory': s3_source_archive, - 'sagemaker_container_log_level': logging.INFO} - - hp.update(additional_hp) - - ic = { - "training": {"ContentType": "trainingContentType"}, - "evaluation": {"ContentType": "evalContentType"}, - "Validation": {} - } - - write_conf_files(rc, hp, ic, path) - - -def write_conf_files(rc, hp, ic, path): - os.makedirs('{}/input/config'.format(path)) - - rc_file = os.path.join(path, 'input/config/resourceconfig.json') - hp_file = os.path.join(path, 'input/config/hyperparameters.json') - ic_file = os.path.join(path, 'input/config/inputdataconfig.json') - - hp = serialize_hyperparameters(hp) - - save_as_json(rc, rc_file) - save_as_json(hp, hp_file) - save_as_json(ic, ic_file) - - -def copy_resource(resource_path, opt_ml_path, relative_src_path, relative_dst_path=None): - if not relative_dst_path: - relative_dst_path = relative_src_path - - shutil.copytree(os.path.join(resource_path, relative_src_path), - os.path.join(opt_ml_path, relative_dst_path)) diff --git a/test/integration/__init__.py b/test/integration/__init__.py new file mode 100644 index 00000000..c4f253e2 --- /dev/null +++ b/test/integration/__init__.py @@ -0,0 +1,24 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +import os + +RESOURCE_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'resources')) + +MODEL_SUCCESS_FILES = [ + os.path.join('output', 'success'), + os.path.join('model', 'model-symbol.json'), + os.path.join('model', 'model-shapes.json'), + os.path.join('model', 'model-0000.params'), +] diff --git a/test/integ/local_mode.py b/test/integration/local/local_mode.py similarity index 93% rename from test/integ/local_mode.py rename to test/integration/local/local_mode.py index 823742cb..81021500 100644 --- a/test/integ/local_mode.py +++ b/test/integration/local/local_mode.py @@ -17,7 +17,8 @@ import os import time -RESOURCE_PATH = os.path.join(os.path.dirname(__file__), '..', 'resources') +from test.integration import RESOURCE_PATH + LOCK_PATH = os.path.join(RESOURCE_PATH, 'local_mode_lock') diff --git a/test/integ/test_default_model_fn.py b/test/integration/local/test_default_model_fn.py similarity index 67% rename from test/integ/test_default_model_fn.py rename to test/integration/local/test_default_model_fn.py index d6d92ac2..552b6cf1 100644 --- a/test/integ/test_default_model_fn.py +++ b/test/integration/local/test_default_model_fn.py @@ -17,21 +17,22 @@ from sagemaker.mxnet.model import MXNetModel import local_mode +from test.integration import RESOURCE_PATH # The image should serve a MXNet model saved in the # default format, even without a user-provided script. -def test_default_model_fn(docker_image, sagemaker_local_session): - resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'default_handlers') - m = MXNetModel(os.path.join('file://', resource_path, 'model'), 'SageMakerRole', - os.path.join(resource_path, 'code', 'empty_module.py'), image=docker_image, - sagemaker_session=sagemaker_local_session) +def test_default_model_fn(docker_image, sagemaker_local_session, local_instance_type): + default_handler_path = os.path.join(RESOURCE_PATH, 'default_handlers') + m = MXNetModel(os.path.join('file://', default_handler_path, 'model'), 'SageMakerRole', + os.path.join(default_handler_path, 'code', 'empty_module.py'), + image=docker_image, sagemaker_session=sagemaker_local_session) input = [[1, 2]] with local_mode.lock(): try: - predictor = m.deploy(1, 'local') + predictor = m.deploy(1, local_instance_type) output = predictor.predict(input) assert [[4.9999918937683105]] == output finally: diff --git a/test/integ/test_gluon_hosting.py b/test/integration/local/test_gluon_hosting.py similarity index 68% rename from test/integ/test_gluon_hosting.py rename to test/integration/local/test_gluon_hosting.py index 4c9a5876..e74325c4 100644 --- a/test/integ/test_gluon_hosting.py +++ b/test/integration/local/test_gluon_hosting.py @@ -18,21 +18,22 @@ from sagemaker.mxnet.model import MXNetModel import local_mode +from test.integration import RESOURCE_PATH # The image should support serving Gluon-created models. -def test_gluon_hosting(docker_image, sagemaker_local_session): - resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'gluon_hosting') - m = MXNetModel(os.path.join('file://', resource_path, 'model'), 'SageMakerRole', - os.path.join(resource_path, 'code', 'gluon.py'), image=docker_image, +def test_gluon_hosting(docker_image, sagemaker_local_session, local_instance_type): + gluon_path = os.path.join(RESOURCE_PATH, 'gluon_hosting') + m = MXNetModel(os.path.join('file://', gluon_path, 'model'), 'SageMakerRole', + os.path.join(gluon_path, 'code', 'gluon.py'), image=docker_image, sagemaker_session=sagemaker_local_session) - with open('test/resources/mnist_images/04.json', 'r') as f: + with open(os.path.join(RESOURCE_PATH, 'mnist_images', '04.json'), 'r') as f: input = json.load(f) with local_mode.lock(): try: - predictor = m.deploy(1, 'local') + predictor = m.deploy(1, local_instance_type) output = predictor.predict(input) assert [4.0] == output finally: diff --git a/test/integ/test_hosting.py b/test/integration/local/test_hosting.py similarity index 72% rename from test/integ/test_hosting.py rename to test/integration/local/test_hosting.py index 83475f33..e00bd004 100644 --- a/test/integ/test_hosting.py +++ b/test/integration/local/test_hosting.py @@ -18,21 +18,22 @@ from sagemaker.mxnet.model import MXNetModel import local_mode +from test.integration import RESOURCE_PATH # The image should use the model_fn and transform_fn defined # in the user-provided script when serving. -def test_hosting(docker_image, sagemaker_local_session): - resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'dummy_hosting') - m = MXNetModel(os.path.join('file://', resource_path, 'code'), 'SageMakerRole', - os.path.join(resource_path, 'code', 'dummy_hosting_module.py'), +def test_hosting(docker_image, sagemaker_local_session, local_instance_type): + hosting_resource_path = os.path.join(RESOURCE_PATH, 'dummy_hosting') + m = MXNetModel(os.path.join('file://', hosting_resource_path, 'code'), 'SageMakerRole', + os.path.join(hosting_resource_path, 'code', 'dummy_hosting_module.py'), image=docker_image, sagemaker_session=sagemaker_local_session) input = json.dumps({'some': 'json'}) with local_mode.lock(): try: - predictor = m.deploy(1, 'local') + predictor = m.deploy(1, local_instance_type) output = predictor.predict(input) assert input == output finally: diff --git a/test/integ/test_keras_training.py b/test/integration/local/test_keras_training.py similarity index 66% rename from test/integ/test_keras_training.py rename to test/integration/local/test_keras_training.py index ddf8638a..9ea7e9f9 100644 --- a/test/integ/test_keras_training.py +++ b/test/integration/local/test_keras_training.py @@ -16,19 +16,20 @@ from sagemaker.mxnet import MXNet +from test.integration import MODEL_SUCCESS_FILES, RESOURCE_PATH -def test_keras_training(docker_image, sagemaker_local_session): - resource_path = os.path.join(os.path.dirname(__file__), '..', 'resources', 'keras') - script_path = os.path.join(resource_path, 'keras_mnist.py') + +def test_keras_training(docker_image, sagemaker_local_session, local_instance_type): + keras_path = os.path.join(RESOURCE_PATH, 'keras') + script_path = os.path.join(keras_path, 'keras_mnist.py') mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=1, - train_instance_type='local', sagemaker_session=sagemaker_local_session, + train_instance_type=local_instance_type, sagemaker_session=sagemaker_local_session, image_name=docker_image) - train = 'file://{}'.format(os.path.join(resource_path, 'data')) + train = 'file://{}'.format(os.path.join(keras_path, 'data')) mx.fit({'train': train}) output_path = os.path.dirname(mx.create_model().model_data) - for f in ['output/success', 'model/model-symbol.json', 'model/model-0000.params', - 'model/model-shapes.json']: + for f in MODEL_SUCCESS_FILES: assert os.path.exists(os.path.join(output_path, f)), 'expected file not found: {}'.format(f) diff --git a/test/integration/local/test_linear_regression.py b/test/integration/local/test_linear_regression.py new file mode 100644 index 00000000..0f745708 --- /dev/null +++ b/test/integration/local/test_linear_regression.py @@ -0,0 +1,43 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). +# You may not use this file except in compliance with the License. +# A copy of the License is located at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# permissions and limitations under the License. +from __future__ import absolute_import + +import os + +import pytest +from sagemaker.fw_utils import tar_and_upload_dir +from sagemaker.mxnet import MXNet +from sagemaker.utils import sagemaker_timestamp + +from test.integration import MODEL_SUCCESS_FILES, RESOURCE_PATH + + +@pytest.mark.skip(reason='waiting for default save before converting script') +def test_linear_regression(docker_image, sagemaker_local_session, local_instance_type): + data_path = os.path.join(RESOURCE_PATH, 'linear_regression') + + s3_source_archive = tar_and_upload_dir(session=sagemaker_local_session.boto_session, + bucket=sagemaker_local_session.default_bucket(), + s3_key_prefix=sagemaker_timestamp(), + script='linear_regression.py', + directory=data_path) + + mx = MXNet(entry_point=os.path.join(data_path, 'linear_regression.py'), role='SageMakerRole', + train_instance_count=1, train_instance_type=local_instance_type, + sagemaker_session=sagemaker_local_session, image_name=docker_image) + + mx.fit(s3_source_archive.s3_prefix) + + output_path = os.path.dirname(mx.create_model().model_data) + for f in MODEL_SUCCESS_FILES: + assert os.path.exists(os.path.join(output_path, f)), 'expected file not found: {}'.format(f) diff --git a/test/integ/test_mnist_training.py b/test/integration/local/test_mnist_training.py similarity index 72% rename from test/integ/test_mnist_training.py rename to test/integration/local/test_mnist_training.py index a1fede65..7cfa9787 100644 --- a/test/integ/test_mnist_training.py +++ b/test/integration/local/test_mnist_training.py @@ -18,24 +18,25 @@ from sagemaker.mxnet import MXNet import local_mode +from test.integration import MODEL_SUCCESS_FILES, RESOURCE_PATH -RESOURCE_PATH = os.path.join(os.path.dirname(__file__), '..', 'resources', 'mnist') -SCRIPT_PATH = os.path.join(RESOURCE_PATH, 'mnist_script_mode.py') +MNIST_PATH = os.path.join(RESOURCE_PATH, 'mnist') +SCRIPT_PATH = os.path.join(MNIST_PATH, 'mnist.py') -TRAIN_INPUT = 'file://{}'.format(os.path.join(RESOURCE_PATH, 'train')) -TEST_INPUT = 'file://{}'.format(os.path.join(RESOURCE_PATH, 'test')) +TRAIN_INPUT = 'file://{}'.format(os.path.join(MNIST_PATH, 'train')) +TEST_INPUT = 'file://{}'.format(os.path.join(MNIST_PATH, 'test')) -def test_mnist_training(docker_image, sagemaker_local_session): +def test_mnist_training_and_serving(docker_image, sagemaker_local_session, local_instance_type): mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=1, - train_instance_type='local', sagemaker_session=sagemaker_local_session, + train_instance_type=local_instance_type, sagemaker_session=sagemaker_local_session, image_name=docker_image) _train_and_assert_success(mx) with local_mode.lock(): try: - predictor = mx.deploy(1, 'local') + predictor = mx.deploy(1, local_instance_type) data = numpy.zeros(shape=(1, 1, 28, 28)) predictor.predict(data) finally: @@ -54,6 +55,5 @@ def _train_and_assert_success(estimator): estimator.fit({'train': TRAIN_INPUT, 'test': TEST_INPUT}) output_path = os.path.dirname(estimator.create_model().model_data) - for f in ['output/success', 'model/model-symbol.json', 'model/model-0000.params', - 'model/model-shapes.json']: + for f in MODEL_SUCCESS_FILES: assert os.path.exists(os.path.join(output_path, f)), 'expected file not found: {}'.format(f) diff --git a/test/functional/test_mnist_distributed.py b/test/integration/sagemaker/test_mnist_distributed.py similarity index 62% rename from test/functional/test_mnist_distributed.py rename to test/integration/sagemaker/test_mnist_distributed.py index 2ebcecd4..f1ea3564 100644 --- a/test/functional/test_mnist_distributed.py +++ b/test/integration/sagemaker/test_mnist_distributed.py @@ -15,43 +15,29 @@ import os import numpy as np -import pytest from sagemaker.mxnet.estimator import MXNet from sagemaker.utils import sagemaker_timestamp +from test.integration import RESOURCE_PATH from timeout import timeout, timeout_and_delete_endpoint -class MXNetTestEstimator(MXNet): - def __init__(self, docker_image_uri, **kwargs): - super(MXNetTestEstimator, self).__init__(**kwargs) - self.docker_image_uri = docker_image_uri - - def train_image(self): - return self.docker_image_uri +def test_mxnet_distributed(sagemaker_session, ecr_image, instance_type): + data_path = os.path.join(RESOURCE_PATH, 'mnist') + script_path = os.path.join(data_path, 'mnist.py') - def create_model(self, model_server_workers=None): - model = super(MXNetTestEstimator, self).create_model() - model.image = self.docker_image_uri - return model + mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=2, + train_instance_type=instance_type, sagemaker_session=sagemaker_session, + image_name=ecr_image) + prefix = 'mxnet_mnist/{}'.format(sagemaker_timestamp()) -@pytest.mark.skip -def test_mxnet_distributed(sagemaker_session, ecr_image, instance_type): with timeout(minutes=15): - script_path = 'test/resources/mnist/mnist.py' - data_path = 'test/resources/mnist' - - mx = MXNetTestEstimator(entry_point=script_path, role='SageMakerRole', - train_instance_count=2, train_instance_type=instance_type, - sagemaker_session=sagemaker_session, - docker_image_uri=ecr_image) - - prefix = 'mxnet_mnist/{}'.format(sagemaker_timestamp()) train_input = mx.sagemaker_session.upload_data(path=os.path.join(data_path, 'train'), key_prefix=prefix + '/train') test_input = mx.sagemaker_session.upload_data(path=os.path.join(data_path, 'test'), key_prefix=prefix + '/test') + mx.fit({'train': train_input, 'test': test_input}) with timeout_and_delete_endpoint(estimator=mx, minutes=30): diff --git a/test/functional/timeout.py b/test/integration/sagemaker/timeout.py similarity index 100% rename from test/functional/timeout.py rename to test/integration/sagemaker/timeout.py diff --git a/test/resources/linear_regression/data/evaluation/eval_data.txt b/test/resources/linear_regression/data/evaluation/eval_data.txt new file mode 100644 index 00000000..e855e241 --- /dev/null +++ b/test/resources/linear_regression/data/evaluation/eval_data.txt @@ -0,0 +1,96 @@ +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +7.000000000000000000e+00 2.000000000000000000e+00 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +6.000000000000000000e+00 1.000000000000000000e+01 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 +1.200000000000000000e+01 2.000000000000000000e+00 diff --git a/test/resources/linear_regression/data/evaluation/eval_label.txt b/test/resources/linear_regression/data/evaluation/eval_label.txt new file mode 100644 index 00000000..12b7a051 --- /dev/null +++ b/test/resources/linear_regression/data/evaluation/eval_label.txt @@ -0,0 +1,96 @@ +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +1.100000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +2.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 +1.600000000000000000e+01 diff --git a/test/resources/linear_regression/data/training/train_data.txt b/test/resources/linear_regression/data/training/train_data.txt new file mode 100644 index 00000000..35dd03ea --- /dev/null +++ b/test/resources/linear_regression/data/training/train_data.txt @@ -0,0 +1,1000 @@ +8.383024078487886221e-01 1.677887367104703431e-01 +2.975134639944655435e-01 1.264650109599662064e-01 +2.496195570479450287e-01 8.591748407401146315e-01 +5.673422450810294837e-01 1.458089452536538433e-01 +5.832260661394322865e-01 7.166366823828255184e-01 +7.543975788532053528e-02 1.898609137606303010e-01 +1.161756569665539640e-01 6.103897427104261197e-01 +4.978558310832063016e-01 1.829751424763988998e-01 +9.532638876851960985e-01 6.610771972214268821e-02 +7.496557534864022321e-01 5.487246287652003396e-02 +8.341828997173914573e-01 1.104816762540004049e-01 +1.150912121068765614e-01 6.672354652467545888e-01 +1.897460773214154628e-02 7.846245703978612651e-01 +5.627194090337650501e-02 2.867594716432917412e-01 +8.174390194179276259e-01 4.563914419118150212e-01 +3.989178634746715080e-01 7.489820057015632582e-01 +8.160698834365822663e-01 7.183502899993565727e-01 +2.851832171545162220e-01 3.544062835716355053e-01 +9.847964820974128841e-01 8.375890996472251659e-01 +4.413986596987403699e-01 3.729481122744591204e-01 +8.333100770906549659e-01 1.214244265728061656e-01 +6.025881457603260438e-01 6.748859514084808442e-01 +2.774288229203732969e-01 8.951575035262029356e-01 +8.310747944405715293e-01 8.469795180363602904e-01 +9.606102242705764072e-01 2.261863096909838555e-01 +7.790341219499494763e-01 4.395847416268153784e-01 +8.185249724673727689e-01 8.154528733429207144e-01 +4.864674198509159053e-01 7.865969225155068356e-01 +9.774765709125590174e-01 7.100258815433094783e-01 +1.192802133214388993e-01 7.796972644067801106e-02 +3.979421707796121366e-01 9.537079477427545804e-03 +8.634802482941709156e-01 4.315626026512549007e-01 +6.507671830791106338e-02 5.803393321028155194e-01 +2.286115070914566116e-01 2.391841060812761599e-01 +7.139118803132278313e-01 2.963082837258553814e-01 +7.862211048496275945e-01 7.877350805847213033e-01 +8.549908979550473465e-01 4.502536931102080198e-01 +7.971059036210261795e-01 8.492300165291947200e-01 +5.933492067336298970e-01 6.032366908277607687e-01 +6.109971904460352876e-01 9.048489283694125529e-01 +3.336285170250096188e-01 2.593987030589036680e-01 +6.032417677737254014e-01 8.269827270469150005e-01 +1.917233916232584656e-01 9.429978485784278330e-01 +1.676145331676655026e-01 7.186871020147722611e-02 +2.987801297375362042e-01 8.894890374498145569e-01 +8.842081313558880495e-02 5.016939990677020678e-01 +4.714445148098037608e-01 6.944196004065336103e-01 +6.825831962559553157e-01 9.330737112884830431e-01 +1.596080233876779886e-01 4.490293053489992081e-01 +2.293319442968004829e-01 3.938302460609182098e-01 +1.724255200247095665e-01 9.656252673464847947e-01 +3.571546311400020102e-02 8.290361047550742768e-01 +3.564068639443062070e-01 1.311785446577451442e-01 +5.160575318976567960e-01 1.816201313117915550e-01 +3.061326303757062606e-01 3.331317916462018802e-01 +4.839776607157061372e-01 1.597060032073258640e-01 +3.233320531875456538e-01 1.544771924451002754e-01 +3.014176450696248732e-01 3.498450418777804272e-01 +5.750417202374324965e-01 2.815025161948752075e-01 +8.282908238934235667e-01 5.346921822244938838e-01 +8.652779589008368077e-01 6.387646270379421232e-01 +3.608082302376293127e-01 3.124137611494598454e-01 +3.607061761532146527e-01 4.455322911182015844e-01 +3.826876255704469987e-02 3.377869020284606227e-01 +3.800436644493996319e-01 1.023426972440211191e-02 +8.168350371976894619e-01 4.387607563547659684e-01 +3.768102037124578807e-01 9.110710754796123023e-01 +8.220030254942101156e-01 4.581763411287436139e-01 +1.694595915439977007e-01 1.684670908686005664e-01 +6.268263732250551890e-01 3.467261007113505711e-01 +8.040352074373506852e-01 6.839697290179880262e-01 +5.297253159877972628e-01 7.801082886281295314e-01 +9.204472650679746959e-01 6.809176859771448598e-03 +6.274320145445084762e-01 9.412849540108589874e-01 +2.208717638484863910e-01 2.672388586827953993e-01 +2.273923772978706515e-01 9.601296870780158255e-01 +6.668816224681960447e-01 1.081783540866855242e-01 +3.524471036896552611e-01 3.518815540013774390e-01 +5.964383677725925148e-01 8.800393950010902966e-01 +1.828686310894113154e-01 8.194458442357740457e-01 +6.867874625068572936e-01 7.272342428532760916e-01 +4.696262454662605279e-01 7.910382575586286658e-01 +1.240133014893253227e-01 8.107120105361649287e-01 +2.184692953172299168e-01 4.396747030365865117e-01 +1.909150812786594154e-01 4.044686681756488600e-01 +9.149829347144164959e-01 4.232369506474595866e-01 +7.810148179270500757e-01 7.735706391299421725e-01 +2.784715045117651666e-01 9.169654356102895365e-01 +5.935966409269489708e-01 4.749747742867101996e-01 +7.625103644874287045e-02 4.629955087520672974e-01 +4.412492795213716068e-01 7.345116388622754400e-01 +1.124375872313340130e-01 7.469995494365728739e-01 +7.302050139999879397e-01 2.826951807225084323e-01 +9.164444762399615030e-02 4.855003868554905733e-01 +9.300725486390291064e-01 5.037961688595056220e-01 +7.152702613072786653e-01 3.506846843769784172e-02 +1.693038628685927804e-01 9.908347930346177446e-01 +6.716395514934471178e-01 6.671559524759217430e-01 +7.055318334308481321e-01 8.117988463192934434e-01 +5.552755972738980805e-01 5.213329221332383412e-01 +3.065995892509220111e-01 6.976625638007041275e-01 +5.883525953831193478e-01 9.807732363996419789e-01 +4.673344799061497357e-01 7.896972864321324392e-01 +7.004011853610250249e-01 3.213698348667398674e-01 +5.920091084742643561e-01 3.054471318357341314e-01 +1.239839610132075221e-01 8.365899701547263589e-02 +1.457939770636089705e-01 7.213691276948183129e-01 +4.454130259495948652e-01 9.510865606958091023e-01 +7.846062937926735481e-01 5.644167618037644329e-01 +5.929528371943701970e-01 1.396595307293948540e-01 +9.380514689339938261e-01 8.717622571464408443e-01 +8.806271043046921543e-01 9.492755159187297176e-01 +9.184434708497772881e-01 9.141298838211823208e-01 +4.608944926443627743e-01 4.397045689174887695e-01 +2.338490711339061834e-01 6.353480332043058842e-01 +3.659690331032360300e-01 5.452304071170951394e-01 +3.677826051771501126e-01 9.061714568924033042e-01 +6.260565816992923471e-01 6.129126230225873107e-01 +3.844835631335716819e-01 8.656862201497333986e-01 +2.029361256598716245e-01 5.859680666404064597e-01 +4.084770043552404806e-01 1.537312073923035038e-01 +1.274365690811052332e-02 6.035470996215089867e-01 +7.749047074695316617e-01 6.117242373171003500e-01 +7.406181215626550518e-01 8.837384171435757052e-01 +9.125778267790626286e-01 7.791205971331660596e-01 +2.083268323224333196e-01 6.342260606520001565e-01 +7.637902100602371736e-01 9.268285068617030387e-01 +9.669409947888499834e-01 2.724413156444204231e-01 +8.669094829859033124e-01 4.521841115683111756e-02 +7.517756726253931321e-01 5.840131057956556848e-01 +8.682565025043532669e-01 5.843736672974518820e-01 +7.766415460621236555e-01 5.121018760063240638e-01 +4.750343219630869251e-01 1.057627699957567335e-01 +1.919163524300298018e-01 8.726928211535622815e-02 +8.841871727741301701e-02 2.244008153170994335e-01 +5.946262124724579490e-01 5.206392815264951901e-01 +2.047774026317988882e-01 7.868516444616732164e-01 +3.552550365931861354e-02 7.098442598521116365e-01 +1.591235920252519476e-01 8.277011471878045201e-01 +9.985348457206892903e-01 8.084832796127849885e-02 +9.850606605232240520e-01 7.781544786578342698e-02 +9.015701052498616974e-01 9.805835854201766510e-01 +5.371699437281217682e-01 5.469001913409059501e-01 +2.846456456390242806e-01 9.959521962514357174e-01 +4.031580133435924695e-01 6.303222613148458109e-01 +4.287075503852456615e-01 4.496844539941227126e-01 +4.639008224384898460e-01 6.851133963464660637e-01 +6.792573666782096842e-01 2.095271567687492231e-01 +8.136217385026819349e-01 1.697270402150350410e-01 +2.557927744094984357e-01 5.665059824807582300e-01 +1.281541089371324160e-01 8.549223496314084514e-02 +2.638698544702112736e-01 1.222485755292984644e-01 +3.047582875020528048e-01 6.275069175070332461e-01 +5.647620217370177276e-01 7.904567975298585347e-01 +4.036462600481217633e-01 7.806385381619854735e-01 +5.939400223387876210e-01 3.103020736244491706e-01 +7.197387431953912174e-01 4.809271587859470509e-01 +9.766983041485984840e-01 3.685620204928425903e-01 +6.604153321826389256e-02 1.526300811945057179e-01 +8.124566717800533189e-01 4.251228731910109415e-01 +7.209512005426614856e-01 5.137763417687180034e-01 +7.292611164144505720e-01 2.693120741546124464e-01 +1.329570016995029746e-01 4.008052825224850402e-02 +9.589113498649407541e-01 3.609583739244716094e-01 +2.769818801221202165e-02 5.697518290238317018e-01 +1.068270709019163434e-01 4.153460509448425597e-03 +1.871425861099094146e-01 7.896987946425083615e-01 +8.633058092519574345e-02 8.743037428545405998e-01 +4.724161645817301913e-01 8.731409446206293001e-01 +9.115857343860696016e-01 2.782428200986323263e-01 +6.325777061237630727e-01 3.363035209446058049e-01 +4.601150433498071290e-01 6.434064965434341810e-01 +9.588229648594517318e-01 9.275169099301002751e-01 +3.678638474423008287e-01 9.445353179519598852e-01 +1.103085667345976573e-01 8.206803046436577098e-01 +1.652374359311311602e-01 6.611442835019621933e-01 +9.705314026417570794e-01 3.580572247682171083e-01 +8.907559119146977178e-01 7.178262292373349673e-02 +6.493020361372067173e-01 9.029645961084464822e-03 +3.255857998968599842e-01 5.790046317664084841e-01 +1.595940802551198967e-01 9.287002027571378271e-01 +6.687281063376360191e-02 4.784874040266523521e-01 +2.101727105521983274e-01 5.390278141626621000e-01 +7.185277561946411540e-01 3.065072057270324946e-01 +7.529913611915978189e-01 4.621527785605770156e-01 +8.189974948343687888e-01 1.813330609888427203e-01 +8.518971644481416750e-01 7.068007272814534891e-01 +1.843020058649663673e-01 1.580029847797694842e-01 +6.231113591133967677e-01 9.711918574105556923e-01 +2.365353159412968420e-01 1.981442190777924495e-01 +1.503215362808757449e-01 1.718080464922876471e-01 +4.259226148073714802e-01 1.150065162707918365e-01 +8.561407760264651001e-01 1.280444278463812591e-01 +9.706412130992536635e-01 7.789112789907962631e-01 +2.631319180515721001e-01 9.111269429411616994e-01 +7.906060154263128137e-01 7.157317853826180576e-01 +1.816949484719589947e-01 1.982784638966361701e-01 +6.856286424429820503e-01 5.962126088148623770e-01 +1.519024795299419583e-01 7.932596323498776192e-01 +3.087794499460388975e-01 6.437959676475982773e-01 +4.083290756906061691e-01 5.111462208658594797e-01 +6.349306821086332375e-01 3.674893369853412528e-01 +6.040465714073095516e-02 3.730148375098043534e-01 +5.816092512410933058e-01 5.877069279099511601e-02 +8.657758234536604425e-01 3.932066426795367553e-01 +9.731014665173752798e-01 8.201859403191955611e-01 +3.312575732352163183e-01 9.904049458051351618e-01 +3.529610398836890983e-02 6.040642370786475368e-02 +9.400166327348009609e-01 7.666889772421199289e-01 +9.650481298595759982e-01 9.909496607908230281e-01 +6.376082761387081854e-01 7.715989066775119642e-02 +7.917263851389778617e-01 7.603850953605617580e-01 +8.653994475512121198e-01 3.103028659121853661e-01 +7.886294032337868298e-01 9.676218191546855918e-01 +6.544486419528149357e-01 9.103767910363743665e-01 +3.594094959582955218e-01 5.086077976477177964e-01 +8.075087244553775800e-01 8.921249486859645916e-01 +1.738462671576084251e-01 4.876520558562669194e-01 +6.100956714825823690e-01 1.227994862819939970e-01 +7.431119248842745773e-01 3.283844308330718942e-01 +6.049508960714664596e-01 1.061238485780235941e-02 +6.670344101478763443e-01 3.709316200128898178e-01 +8.032014188616156680e-01 3.620482501876087778e-01 +8.461810100443541982e-01 3.366049898437263321e-01 +8.243376277360814353e-01 5.626099916746604146e-01 +2.777456458651673676e-01 5.352153434576349955e-01 +2.144972128094989605e-01 6.462905748725051858e-01 +1.411054648258945887e-01 3.874013487592282701e-01 +1.455679330739455546e-01 7.866004666417265589e-01 +9.646378321458504157e-02 1.276574830233686564e-01 +9.537557360550436014e-01 9.218327072747647399e-01 +6.761169230998558266e-01 6.553251339168126854e-01 +9.438443018871440771e-01 3.136369379742454111e-02 +7.806376882304875142e-01 1.036613415943627992e-01 +6.755450199591354066e-01 8.830939075518353665e-01 +3.703200403786915951e-01 7.378558239125937446e-01 +4.083981502320577217e-02 5.317646501195525399e-01 +4.588240943760051316e-01 1.334080084370786734e-01 +3.976369325491413420e-02 3.080165119178776001e-01 +9.128749918100648175e-01 2.518579840637702461e-02 +8.910145971192089398e-01 2.800267901402442305e-01 +7.817915814544191822e-01 9.085400931363494248e-01 +4.786402605264623578e-01 7.838388744797001317e-01 +9.983789310731807642e-01 3.986135384421525263e-01 +3.054915353443502513e-01 3.759900218180347586e-01 +5.862288822424402968e-01 8.899453307850887507e-01 +6.765340553132245249e-01 3.312945153751368776e-01 +5.215770176717444695e-01 6.636277266050472079e-02 +3.762914768931964193e-01 5.353243736321113833e-01 +8.544889234164023684e-01 4.448957017112782353e-01 +8.029159032349508784e-02 3.069587128468759252e-01 +6.258645534197797566e-01 2.491265826156449092e-01 +7.422393609585329344e-01 4.593356660587325502e-01 +3.163739726904254423e-01 9.607950890652511289e-01 +3.029668438840564804e-01 9.487809125717810987e-01 +9.150429934149041378e-01 9.901244682643428607e-02 +6.641958436835612156e-01 5.693547716538129855e-01 +4.801492487993587188e-01 9.837307809886627341e-01 +5.829688097508683997e-01 4.388802447164756870e-01 +5.130316576660298722e-01 4.216077670428421964e-01 +2.010624734166412964e-01 1.489273420293244499e-01 +3.799110985123050899e-01 5.007459418709111487e-01 +5.574251988579199679e-01 5.407979817969279512e-01 +5.775213219019252886e-01 1.118383387883373770e-01 +3.307113136482112692e-01 7.787229757858391554e-01 +8.575086525727236841e-01 5.792566609388496435e-01 +2.093723714815615145e-01 7.097089697122516139e-01 +3.495779539458884200e-01 6.768775943572785669e-01 +1.112705738470751715e-01 7.583304337439176201e-01 +9.113687908399233928e-01 9.093006414144270133e-01 +6.275516389226335479e-01 3.686000584564471660e-01 +5.523575098546420481e-01 8.012823982125339972e-01 +7.785719898025718066e-01 7.821961622405214642e-01 +2.314221362538955162e-01 2.502065122934530317e-01 +9.969400903071042874e-01 9.070560639303645312e-01 +6.184620637843044610e-01 3.640655729818116360e-01 +5.533826833374978493e-01 9.781846421125112157e-01 +7.056656540474212091e-01 7.684872224990613176e-02 +7.094972538524537686e-01 2.958657351994834483e-01 +8.922266534709257790e-01 2.396104929036385611e-01 +9.088901795656982863e-01 4.592736874772258560e-01 +7.906062059344364235e-01 7.423972752090797211e-01 +1.572559381748483975e-02 5.442046586863313884e-03 +8.029383384763015830e-01 9.064380071402458050e-01 +4.474780280080000727e-01 2.051584974906528469e-01 +3.673755618999777761e-01 9.880209097345016289e-01 +4.250615504716066528e-01 9.594554828287480408e-01 +6.983651986342834794e-01 5.477076630169783744e-01 +9.610521792159071319e-01 7.942742909471527391e-01 +6.451155114680274805e-01 4.615565424813307116e-01 +3.247598738250020434e-01 8.691276554143118060e-01 +3.858907938192537301e-01 4.368324097406192097e-01 +6.768853743332736705e-02 7.120422155957784049e-02 +2.519664777694199387e-01 3.292418259014442405e-01 +3.920689511744778200e-01 6.307389569217785041e-01 +9.116129520311636592e-01 2.977841258284951165e-01 +6.064251184432498665e-01 9.336707696004856727e-01 +1.410163269998576663e-01 6.053285551030473943e-02 +6.371210597738642401e-01 3.557806181379385979e-02 +7.714756916845022516e-01 9.470162729043541949e-01 +8.554096007262812495e-01 9.930686607055322357e-01 +7.172758345498162491e-01 6.265858098513791274e-01 +8.414140473657533148e-01 4.966874202890800838e-01 +3.306656428652440249e-01 2.472794634517974099e-01 +6.511463329353402996e-01 6.516209056415722678e-01 +8.820225643933244930e-01 8.019755852650246597e-01 +7.779340791044830894e-01 5.046969613447482850e-01 +5.542777219484996687e-01 3.617756419363350462e-01 +4.847585756805794510e-01 1.952114773834285888e-01 +3.257134988998301450e-01 9.983727139976084075e-04 +5.133966839063784926e-01 9.811159825641211363e-01 +4.739891551273156534e-02 1.093404791395267139e-01 +7.925342221010112098e-01 8.909326503781184181e-01 +6.980721060596640770e-01 9.065275786665114577e-01 +6.861438119226962451e-01 9.169856535499099071e-01 +7.231947551005425412e-01 3.064293695020999797e-01 +5.415256600401792131e-01 8.602108827468467611e-01 +2.258945378495835765e-01 6.573072855590507135e-01 +3.986527099224081994e-01 5.285795244542125237e-01 +3.025482935135203055e-01 9.919005395913123024e-01 +4.338153910258238932e-01 4.358024575011643087e-01 +2.475174792259851042e-01 5.541684938604243271e-01 +4.025447365008089085e-01 3.739459273320903110e-01 +8.321271090494570810e-01 9.099078839299188370e-01 +5.146785153919719580e-01 3.797232557702716615e-01 +1.044422553781739760e-01 2.868734835397968030e-02 +2.330791089083606993e-01 1.238008772222493059e-01 +8.749137721371718079e-01 3.380391813680962976e-01 +4.227708387638877685e-01 6.469578655288212854e-01 +5.149468595291012418e-01 3.885421701514381043e-01 +2.046123698273422109e-01 5.729580570622277991e-01 +8.872730952537809523e-01 8.028148065411891965e-01 +6.799096989470755359e-01 9.521607074599734988e-01 +9.035598222764366083e-01 1.974544262734838629e-01 +9.871727975854077686e-01 1.494009905894433388e-01 +8.985718030276261814e-01 1.547013863854193039e-01 +3.596368262945428551e-01 4.187935153656615617e-01 +4.427880136542013956e-01 5.941570165267008319e-01 +4.968555709885420502e-01 4.448332783750671426e-01 +4.266589995258218693e-02 8.187415125368459057e-01 +1.529841786770963497e-01 8.023377971040025480e-01 +2.835860619678104433e-01 3.292602702079205912e-03 +5.521107226064472240e-01 4.498031862636304723e-01 +8.250388850302322608e-01 7.037417032578121567e-01 +6.731741655782760292e-01 7.162084806034378914e-01 +2.949377647847289952e-01 3.113450588166752908e-01 +9.036248699388248484e-01 3.609980282055822443e-01 +2.310580782604680916e-01 7.583371333093635869e-02 +8.684089708278489583e-01 2.316528671907031045e-01 +4.284359159912076720e-01 1.155217610395248284e-01 +8.918850210557537350e-01 9.292577227737051082e-01 +4.181795520561645274e-01 2.078362469070892393e-01 +8.155545111386341972e-02 6.054325191692860875e-01 +7.986509800341756726e-02 3.364875371445056329e-01 +3.740819990885517754e-01 6.614432408548044373e-01 +2.090305626274024942e-01 7.915071994125496557e-01 +7.205251981321542099e-01 8.238090322040405589e-01 +3.995986937307246523e-01 3.615694072664621395e-02 +8.032968235336979124e-01 3.699843208614299606e-01 +8.528756709147838899e-01 8.444379197121522074e-01 +9.137486199663812370e-01 6.745037659274336628e-01 +1.969977227256869412e-01 4.499942670997181260e-03 +1.565419907470932959e-01 1.987313269769153123e-01 +8.557953186463665984e-01 6.256300984176158542e-01 +5.352179415260442941e-01 4.977126528848289100e-01 +1.575528912997643527e-01 1.482871082529678697e-01 +3.998489784248510093e-01 9.679595516746858364e-01 +2.735152496837670588e-01 9.981633311935217412e-01 +5.085433224155877507e-02 5.960495377300722986e-02 +9.644220853710960828e-02 3.768905107056532700e-01 +2.263517137286907843e-01 4.594442166656355075e-01 +4.368493403307759371e-01 2.927338106150034758e-02 +7.716110444356890641e-01 5.988577286684080292e-01 +5.658915975088050221e-01 1.951150983790292948e-01 +1.119465796372507427e-01 1.083981660927685331e-01 +2.660377744095732133e-01 5.082524806378612148e-01 +3.360855153180662969e-01 2.354405899889167042e-01 +1.106621321590484097e-01 7.172729208623528363e-01 +6.914291509931883573e-01 9.952141184613827463e-01 +1.940206147451362106e-02 7.913193129581146401e-01 +1.947742547753916753e-01 1.079716224505279376e-01 +4.423010412464462027e-01 7.569704630565607939e-01 +9.820230073315712183e-01 9.980107503654567225e-02 +5.131140055202482175e-01 9.181783553883702265e-01 +1.102726695894991060e-01 6.960421932285588698e-01 +5.117917311727535612e-01 7.825073411482024177e-01 +4.547210701706549951e-01 4.194896587204901550e-01 +1.040742477261946686e-01 2.936268896063535250e-01 +1.339617371809707080e-01 7.375545881290336281e-01 +8.456265460760997721e-01 7.975834484820485404e-01 +1.249534142168581274e-01 2.941426687222089553e-01 +1.221504860511302137e-02 2.301704645655116011e-01 +7.036082943956578628e-01 6.675637335145860884e-01 +8.140813482154464209e-01 9.042133057914429894e-01 +5.031009675413422588e-02 8.911673993004404215e-01 +8.699340103121477874e-02 3.928902084374309434e-01 +9.355638875780134533e-01 9.742595318612956579e-02 +3.085094848789464717e-01 8.185794189840217561e-01 +6.925739728098793124e-01 5.997167102166891528e-01 +9.231250629430460819e-01 3.125797295621405292e-01 +8.408389814747191382e-01 8.159498493843351241e-01 +4.157537391147637651e-01 6.311759701258471411e-01 +3.580290531545354815e-01 5.293758720824448538e-01 +1.841598964801085536e-01 7.021177245457383975e-01 +7.635348849014744754e-02 2.380585886428914222e-01 +4.387826081365773234e-01 5.827285780118126590e-01 +9.456176352381311379e-01 7.733824091774560427e-01 +2.653191723174960215e-01 1.097204150468367168e-01 +4.426151333624752660e-01 6.522563600736013267e-01 +3.678735156451374833e-01 5.097290661839307679e-01 +9.618776700428398607e-01 7.610691466310840481e-01 +6.063372640732855867e-01 1.735247167552067538e-02 +8.448417309023040778e-01 7.258132822641665260e-01 +8.408132605171986240e-01 9.267591412696354336e-01 +4.620358379210881550e-01 1.509328769027159511e-01 +1.866974173205060428e-02 4.715917225936879786e-01 +7.905913943637078445e-01 7.500327640741093482e-01 +9.746584957004947869e-01 5.599891130763412495e-01 +9.354557650720832784e-01 5.529444068433244652e-01 +8.562210744517403382e-01 5.439230917414853428e-01 +9.890053808503045385e-01 7.562612278181509717e-01 +1.852713861303961762e-01 3.521977305619883314e-01 +4.613999606915777374e-01 9.941629351053085095e-01 +7.805736413025843312e-03 6.723821088145814917e-01 +1.067205820079188960e-01 2.479713043864242294e-01 +3.438753275276172916e-01 1.166057072887581869e-01 +4.988632291039905020e-01 1.196617386547983442e-01 +5.793395002748347178e-02 4.835071938230007804e-01 +4.771667054310673173e-01 1.538108082280676969e-01 +4.788870898000183729e-01 4.925107275522856431e-01 +6.825217672938170832e-01 1.507721315641344928e-01 +1.361340387186270595e-01 1.612456563213356953e-01 +5.439000427226557965e-01 3.504410962385700046e-01 +8.438894260647635814e-01 3.014415013827586032e-01 +4.735260180752270953e-01 1.957143995173128426e-01 +9.176613094129515424e-01 3.083205904365670103e-01 +1.930233855476229943e-01 9.457989500312418141e-01 +5.664341421196406046e-01 2.900231323129399685e-01 +1.978474493894737396e-01 4.074017026881328052e-01 +4.077400027980844222e-01 4.121838750982187438e-01 +3.395572841853528034e-01 7.636238794804683927e-02 +7.401181577988665827e-01 1.032612456261183809e-02 +7.379096487642236024e-01 3.614455574496189261e-02 +8.328150249637792379e-01 7.188593847261725012e-01 +7.227805999768921463e-02 8.538271090307636424e-02 +9.691501375311373234e-02 7.063275214016347947e-01 +8.933306350411753805e-01 7.775603047642398735e-01 +5.985121099644223897e-01 6.237277942857158974e-01 +4.956196254914534416e-01 2.992500865040209623e-01 +5.209105554580506503e-02 9.111617735973254195e-02 +3.829011363771986920e-01 8.884055998444249092e-01 +3.878071740178880011e-01 2.058684126468334208e-01 +7.390561355335544258e-01 3.169897942950061775e-02 +5.864948510060807862e-03 9.968974827681926776e-01 +9.040896497400939813e-01 2.283696201233843537e-01 +7.357577015507330565e-01 7.486648259255979099e-01 +3.264799505801634361e-01 3.113162884114172302e-01 +7.810714164649570357e-01 3.323908679670606325e-01 +7.679176339539339757e-02 3.748737110347453161e-01 +3.565165865465014239e-02 3.246034005351716711e-01 +1.093496190211734609e-01 7.597085319050164154e-01 +9.093456749524542193e-02 5.410418219259970352e-01 +2.427967970848180501e-01 6.564241187942023714e-01 +9.138229049476330745e-01 4.908421189605568502e-01 +1.291069230265344814e-01 7.251989675602796837e-01 +1.409541622977511510e-01 6.454081673611818948e-01 +2.884556794144453873e-01 9.233658815738509107e-01 +6.736188190265453013e-01 3.000741596404912226e-01 +4.563584561427888042e-01 7.974320194520057026e-01 +9.904164770621127767e-01 2.081475934431399333e-01 +7.026252992665003028e-01 2.195972215970745101e-01 +1.781834691511624547e-01 6.849485960807493168e-01 +3.567995794796274822e-01 8.349362693471118479e-02 +6.201617201556451908e-01 2.834602991292343166e-01 +8.596021118137735506e-01 6.157241713583965215e-01 +9.244697173911231580e-02 4.634685704660772565e-01 +9.424422324482255586e-01 5.754115887945733254e-01 +5.225044284502698977e-01 9.367894785287403936e-01 +8.574540812722769578e-01 4.146728604452698530e-02 +5.954524222187198568e-01 3.635496743132089481e-01 +4.066516735146737949e-01 4.262444022916811459e-02 +6.536921901009495883e-01 2.584566440277392685e-01 +4.757137841272600642e-01 6.503839357884960704e-01 +6.728020312063508479e-01 5.130133378295996804e-01 +7.264472821179496220e-01 5.624692557519872516e-01 +1.595937090410205483e-01 2.775564581827192345e-01 +6.381247994293870462e-02 2.468976353274412450e-01 +5.259745968299561758e-01 6.848567523685504810e-01 +9.601238219624145254e-01 6.402441829373576310e-01 +3.315107435458013452e-01 5.080895726293063186e-01 +2.848964747805079467e-01 6.051472003714331027e-02 +9.530843437441492982e-01 5.203492828025872985e-01 +2.323446010216982938e-01 3.328127679770490621e-01 +2.281959622431951606e-01 7.884583019913606883e-01 +3.864585852135926647e-02 5.674592339101215410e-01 +2.234721414668535688e-01 9.932490478910508402e-01 +7.826277029460694257e-01 7.088174831246227825e-01 +8.670694941972373337e-01 2.736416820378763104e-01 +1.217059723212294831e-01 6.497205479173525644e-01 +1.381521314958327196e-01 2.591855843152879313e-02 +9.854879359251045301e-02 8.975566102692902337e-01 +4.503024504493163827e-01 4.413300799456845169e-01 +8.876436613531758502e-01 6.798049580871364794e-01 +3.802225086274289012e-01 5.385627802569674660e-01 +5.918066777338415463e-04 4.088473878415384011e-01 +9.762447492477377420e-01 3.492490683492609493e-01 +2.317144613979703616e-01 8.568992556287140516e-01 +2.219766318943260375e-01 9.193324082826727084e-01 +3.303373343830153797e-01 9.616981500961963025e-01 +2.098522626610911379e-01 1.831008568626395494e-01 +1.286500753586045098e-01 3.645463749934729769e-01 +8.954369901118905961e-01 5.476737612801951816e-02 +8.614121408140957836e-01 5.961927235008219750e-01 +6.874870120376100902e-01 1.904487059006509941e-01 +5.713990629455255599e-01 1.254387492770148160e-02 +1.341243689714005649e-01 4.417310689094990916e-01 +5.485754342961137731e-01 1.382769082045059994e-01 +1.482692416728816909e-01 8.613497709871698049e-02 +8.783772167373280482e-01 4.487131089245243176e-01 +5.253435074114043424e-02 2.908691039884850893e-01 +4.351461288838956998e-01 8.576403080489769515e-02 +2.245891639734476364e-02 1.642216118959480831e-01 +7.193145046025805067e-01 9.087167134314375616e-01 +3.280772654937409438e-01 1.230552091322263397e-01 +3.437767172102235147e-01 8.515439377120637143e-01 +7.022672554086155650e-01 6.766914466511018134e-01 +3.883264006417851411e-01 2.237723726128778567e-01 +7.084290220966880103e-01 1.048521967117377329e-01 +9.210686299294170709e-01 5.702584783461603912e-01 +7.476381262799322025e-01 6.836300637619746601e-01 +6.028305540761168535e-01 9.110875948933063739e-01 +6.450752233527956570e-01 4.716567123292317865e-01 +2.128167859001461881e-01 8.073270680968812618e-01 +7.367606973152996952e-01 2.659597722649783558e-01 +5.638750405803171217e-01 4.529097210902803816e-01 +3.153400069860686772e-01 1.213027192454227965e-01 +4.383829359617239518e-01 9.970557819893532958e-02 +6.894354786430673121e-01 6.627522299795105543e-01 +3.735786823466145101e-01 6.662914972081191989e-01 +9.012340577928240615e-01 9.124747397004417948e-02 +4.171180031711874125e-02 8.046123418166754027e-01 +9.106345828391736452e-01 6.942447696194820050e-02 +3.187554560663546921e-01 7.049680839516307973e-01 +8.644028755561017352e-01 5.750808744770172787e-01 +9.175778777076349924e-01 6.652203687935333010e-01 +9.361104951046901324e-01 7.837470780191203579e-01 +7.713580864926913305e-01 5.048360170863220864e-01 +2.234269416182480539e-01 3.877918924141723345e-01 +7.495425259218346792e-01 3.513002166977918783e-03 +1.523820701451646942e-01 3.054697243597449541e-01 +1.227009922747063220e-01 3.063235261717880409e-01 +9.380491684173838385e-01 3.245521704109459726e-01 +9.874675500761005420e-01 7.659994635427876952e-01 +5.689781825085866718e-01 3.581257241530183544e-01 +5.064606194126873850e-01 6.887797761812964881e-01 +5.140342007692975113e-01 8.117578847187219004e-01 +8.141755468068677670e-01 7.246822339838220328e-01 +5.236463040872161301e-01 4.112909637619865943e-01 +8.551398989454037647e-01 8.437702618326180515e-01 +1.355641852033336869e-01 6.581783570625826529e-01 +4.101152602215402121e-01 3.345949593409534017e-01 +1.977642419303093924e-03 3.791785756323633461e-01 +4.262064572608939006e-01 1.443244231455963478e-01 +9.649505473489465857e-01 9.318261193841106405e-01 +1.187535242850421557e-01 6.535117811758486273e-01 +6.088350550834270569e-01 2.037189166341989432e-01 +8.801694795634512625e-01 7.403965482731129644e-01 +4.129598559430694982e-01 3.974636917839036165e-01 +1.048679713590531248e-01 8.192532495058443276e-01 +2.103627351008530155e-02 7.403835043175972519e-01 +5.633546357737514443e-01 8.377430096964610939e-01 +4.075170219418589035e-01 9.948231005176640940e-01 +1.818561936302240944e-01 7.338217981423564851e-01 +5.494714354181297056e-01 7.545660426739950744e-01 +1.208350216572945390e-01 6.003468245485784616e-01 +4.156888846351469713e-02 1.593720599374193192e-02 +4.685528073102881441e-01 1.828895196232701581e-01 +1.795636630958974411e-02 5.322800128455369428e-01 +5.308718608193101485e-01 1.017595403781013097e-01 +7.559668411663326149e-01 1.814265724604927632e-01 +8.295680445882546161e-01 9.351583705836271632e-01 +8.248173915931933387e-02 6.339619789880839296e-01 +6.056624270163069035e-02 4.509365602947875695e-01 +5.210182455383979283e-01 4.107197927484074196e-02 +4.375091097547595398e-01 5.964029779263316788e-01 +5.083068539382360473e-01 3.177553246043725022e-01 +2.524448938812202670e-01 2.651012298128986311e-01 +7.516135043276879202e-01 5.362427644728184895e-01 +9.664424944533788198e-01 1.216378847222130410e-01 +4.823520824385874040e-02 7.508776783894376416e-01 +7.695584242932145269e-01 3.566328754932351908e-01 +2.979596989004885677e-01 9.719635086844701233e-01 +6.527941447869687330e-01 2.428626517249086181e-01 +2.078741871135608710e-01 5.609834053575017965e-01 +9.210743681754396395e-02 6.754130475947299761e-01 +3.900667563599302667e-01 6.895898386506000843e-01 +1.863769919791595786e-01 8.036973607023739641e-01 +6.044568260864299214e-01 7.152722797582423686e-01 +5.281262399742195912e-01 7.177431359562378432e-01 +6.176592386470886042e-01 7.745337132362445365e-01 +2.912639982223417245e-01 2.281518181365307374e-01 +9.879684393695083999e-01 5.045610125949442359e-01 +6.515707444210294685e-01 2.649034315405518480e-02 +2.229044364813378420e-01 5.872962676112370994e-01 +9.076973516241017004e-01 4.003614359331484351e-01 +3.869816510997891035e-01 7.226902763751598124e-01 +2.924575625510107413e-01 2.261917768518628691e-02 +8.073775022621298980e-01 4.792023494099860725e-01 +2.852467678963364062e-01 7.236350203203090192e-01 +8.618823889927100801e-01 7.693694304743381451e-02 +1.774867927662450162e-01 9.484330371147726702e-01 +2.788065807017234832e-01 9.001755988385525820e-01 +6.489824607368465115e-01 5.278933087254380485e-01 +7.792718032258008076e-01 3.514420586683525416e-01 +8.927707920444960532e-02 8.725324421910816142e-01 +3.041142844210357188e-01 3.901649208250186351e-01 +1.160110211898776056e-01 8.125790118589920619e-01 +9.955215729939642655e-01 7.622197123565443988e-01 +7.587880529977198973e-01 4.057398369667259974e-01 +5.920462130540221635e-01 8.869973082249138496e-01 +4.751251400017607596e-01 1.276294785019704836e-01 +6.285949532548033014e-01 1.822297066679565702e-01 +3.218145878816695005e-01 4.995750014614246393e-01 +5.258931460244908873e-01 7.967565045603254292e-01 +5.441262048900243897e-01 5.399994423608776017e-01 +1.049801435526787063e-01 7.993129642989154071e-01 +8.248744372008091075e-01 7.998336471068726583e-01 +8.259243585556951261e-01 7.685882786939971512e-01 +5.557531040109136011e-01 6.515400574844844028e-01 +7.829614700624405454e-01 4.804193069304583119e-01 +8.897709265554543112e-02 8.438516841064150897e-01 +3.837375697513344397e-01 2.449650586965446131e-01 +7.085085170096523388e-01 4.564498263864957828e-02 +4.831699508173840085e-01 5.776989984771069286e-01 +6.282684089236583169e-01 6.459452093774490367e-01 +1.757629591209973752e-01 5.527782453769336524e-02 +6.796004371192584381e-01 2.266259460264508085e-01 +9.597802500860100894e-01 3.481416725340237273e-01 +7.037630854329687269e-01 9.242750200341917077e-01 +5.010837694192707970e-01 9.040882173687329049e-01 +2.933263967548637163e-01 2.138624895897545120e-02 +1.531419142295791236e-01 8.990893391665865098e-01 +2.880603188252883751e-02 6.453758487009941813e-02 +2.812732115927741861e-01 1.735009200222847880e-02 +4.837128151627079209e-02 5.982976303315697963e-01 +6.661769366905064826e-01 2.454743864204814718e-01 +9.581356502727376157e-01 5.944246469480429784e-01 +2.545108641980791120e-01 2.828186415238487239e-02 +4.776677869609158300e-02 5.153250398083841777e-02 +4.012122120774097578e-01 5.684372064953436832e-01 +4.444460135979297899e-01 9.472474525055233352e-01 +8.816138021915194134e-01 7.125032019083059609e-01 +5.914078979684496140e-01 5.651939539827961489e-01 +4.356198270658702132e-01 3.723850440160991759e-03 +3.623523609664758283e-02 3.544586168729285669e-01 +2.684828031046444519e-01 4.812385312768369117e-01 +7.101108678317759049e-01 7.717603178265882713e-01 +1.414178901200575655e-01 7.736935128054334143e-02 +7.373346068665437292e-01 3.385455254460815189e-01 +6.626870667655482272e-02 9.102973897688595439e-01 +2.516816292677741540e-01 7.901286824991042845e-01 +8.049632503826346097e-01 6.396512288771249999e-02 +8.754419863255999967e-01 3.538722430122054341e-02 +5.272611300256335731e-01 5.926642921320142143e-01 +5.822792192373116293e-02 4.430019580490932585e-01 +7.285726082707725260e-01 3.043769026795516419e-01 +8.572291486676064665e-01 3.348907162730342391e-01 +6.453875474891593855e-01 7.262912056828685348e-02 +7.088852012862842944e-01 7.481009239536384747e-02 +7.781171566854169219e-01 2.163589710620887896e-01 +8.873270129840704623e-02 5.971324008880048995e-01 +3.197106666530737940e-01 4.939157107891551934e-01 +1.554098125780527528e-01 5.887348471051101484e-03 +5.570926362958826816e-01 9.500914828218951502e-01 +5.090841116638744612e-02 3.114287715111283550e-01 +7.633917954483568913e-01 6.294851836447792337e-01 +2.688417903027584543e-02 6.448095328258510728e-01 +8.912655817351665677e-01 2.120567861541335919e-01 +3.974371388525699267e-01 9.644716287439840663e-01 +5.823049039779960578e-01 6.493975426657253580e-01 +8.678007314838097619e-01 6.052940046550494557e-01 +3.590282899309689135e-01 6.583261623203532364e-01 +8.642205683627406376e-01 6.173148440027111938e-01 +5.868537352236697924e-01 8.345389542714531927e-02 +2.641224586281778475e-01 5.851841673029556379e-02 +7.864519469784118089e-01 7.307077237336123687e-01 +7.903340313316409294e-03 8.938162095984893973e-01 +9.049730474197619223e-01 9.137966368862314726e-01 +6.154283056243046168e-01 1.986480653053938061e-01 +4.330208003295985542e-01 6.933992708173439823e-01 +9.175604616837926830e-01 9.476402874815395005e-01 +2.321518913003384199e-01 2.644195418059079872e-01 +5.577865215570303459e-01 5.621060448126775633e-01 +3.825472355323962237e-01 8.573061354370772325e-01 +2.117208067332099208e-01 7.558356270051139747e-01 +3.538540572514348170e-02 1.897269717201677253e-01 +5.119489865927520089e-01 8.464759565036672484e-03 +8.764159498513089952e-01 5.141191667863689307e-01 +7.534205138168876825e-01 5.879031560588231509e-01 +5.048356042481927375e-02 1.492291178011176944e-01 +3.330868259777490792e-01 7.583389454896984905e-01 +1.778887192449216670e-01 8.434728336780827895e-03 +3.410692868867399863e-01 3.853122731054468009e-01 +1.140515617791125758e-01 2.077992063966812575e-01 +2.883659551304600388e-01 4.258251226071103623e-01 +2.285578939978002433e-01 9.873211816270192065e-01 +8.761664863960298977e-01 8.121987996428687850e-01 +2.128292476806452616e-01 7.899499637622502402e-01 +1.245731316176624803e-01 1.783970285362517227e-01 +7.243147685690876081e-02 5.455740099877369742e-01 +4.660054411505430982e-01 6.390960722477979639e-01 +3.707579587392769715e-01 6.782273168122123774e-01 +7.856993728959337231e-01 4.544278932980941876e-01 +6.345933555704985629e-02 2.598855853329318233e-02 +1.332583267347483558e-01 9.358734870280179807e-01 +1.941169199354861874e-01 9.750203540278805647e-01 +2.655960651022588603e-01 4.727441694070015910e-01 +5.145138297179999709e-01 8.773305525549915940e-01 +4.967313515883727826e-01 5.134922754777506704e-01 +6.563620328781015756e-01 6.154721571793843049e-01 +2.137875580739523329e-01 9.784723083154184264e-01 +6.443863277904252618e-01 1.712955151830615197e-01 +8.187888796074483944e-01 5.430509914193981658e-01 +4.457050966899438471e-01 7.634855878468963519e-01 +8.393913572278954849e-02 1.055360192248533391e-01 +3.723579180551873646e-01 2.932122403186994131e-01 +9.038032762688730237e-01 3.555734467956012113e-01 +8.310038626955711383e-01 2.014581554768498650e-01 +2.879827343752314750e-01 1.347608350091109575e-01 +5.861459913445251635e-01 8.579185134890391362e-01 +8.937921512469971796e-01 1.917913905135948394e-02 +1.712115141563219645e-01 3.775686184837985238e-01 +3.609522349696062671e-01 4.016075373921546010e-01 +9.859000263795933972e-01 8.384653830161430399e-01 +1.579482868523491845e-01 7.230597817327677479e-01 +8.249424005113004110e-01 3.402621510212822109e-02 +7.788473047170800800e-01 8.843142594620712060e-03 +5.980353240565023931e-01 6.698945866730424692e-01 +4.649141291952869626e-01 3.331306745508549882e-01 +4.607568396251037202e-01 1.375452015259245320e-01 +3.940638362408231954e-01 6.578983401948277354e-01 +2.979030604451201603e-01 5.619459559238717539e-01 +9.096836294131154244e-01 1.163021801246277853e-02 +7.122482131097271907e-01 6.184617701600746420e-01 +9.351357478200653661e-01 8.711284134729423423e-01 +2.888807188501854029e-01 7.127929033685657112e-01 +1.073668832238354742e-01 6.272327059726612308e-01 +6.363240542506543029e-02 2.273810554894636349e-01 +9.109460488484705243e-01 6.034207359717773667e-01 +8.106366507744677818e-01 7.501577065736853012e-02 +9.067133139915272144e-01 1.781257310932599092e-01 +1.268500777715941830e-01 8.605972836578483776e-01 +4.433733276634036491e-01 2.074337847702457660e-01 +5.313630654852069535e-01 1.245160995356370259e-01 +4.064132924002339387e-02 2.757316761389969617e-01 +1.490490063975113966e-02 9.688502155586038445e-01 +9.415410515775940459e-01 5.469853079734202650e-01 +9.035050980999652648e-01 6.008756563417972929e-01 +2.428658053093464275e-01 2.811736339788150074e-01 +5.298575128146194579e-01 9.855281502486992196e-01 +4.288901159274234320e-01 3.573337828383784665e-01 +3.574717700835194911e-02 7.751829329336363816e-01 +9.103388224418299535e-01 5.126620837391837604e-02 +2.624568787657962643e-01 7.243498650264889038e-01 +8.555009893047700320e-01 4.116404937282136522e-01 +1.332530267811786739e-01 1.577372821782696555e-01 +3.092811646396320668e-02 4.527659131632109091e-01 +4.255568006390483271e-01 1.884521515103796396e-01 +9.184021118951570806e-01 1.685117089194491102e-01 +6.490960748899591293e-01 7.617708628429187279e-01 +8.132764529421080413e-01 1.231407394268501099e-01 +9.025704551206739090e-01 9.098733516938393162e-01 +9.954653559742755453e-01 3.406395643213395719e-01 +2.281902694349513538e-01 2.797788064032538102e-01 +4.319869960186834001e-01 6.685879624885855410e-01 +5.019243836168962858e-01 7.303962180649213876e-01 +1.309260741066866629e-01 7.018534052095382059e-01 +3.554069808688353760e-02 7.180439068550409365e-01 +9.151277169558854618e-01 7.090937278169288094e-01 +6.995489084505391864e-01 5.291440149606218002e-01 +3.393335572494574626e-01 9.993804792068130549e-01 +7.572329817682987851e-02 5.948952828867681841e-02 +2.097381367764484805e-01 1.367217079407101465e-02 +3.235728851817581964e-01 8.762297599744730547e-01 +6.431331162107156718e-01 5.367601851651536693e-01 +3.607585709205554103e-01 3.190806597254842725e-01 +4.251716264106255583e-01 8.562348034465712132e-01 +4.066581120912381442e-01 9.827586624331338117e-01 +9.043309118105447020e-01 7.632484952230000896e-01 +7.614696436021350934e-02 9.236188202668300651e-01 +5.932462175263797377e-02 4.911408406100881141e-01 +9.668933246010449345e-01 5.832294521057445058e-01 +6.662347183964689723e-02 3.975425345290490853e-01 +7.116409244823973523e-02 2.957766173393681086e-01 +9.631792152288688458e-01 6.397910284244049395e-01 +1.128629149613796789e-01 3.787830777227455537e-01 +5.451194667653219694e-01 1.112246008380932683e-01 +2.533045516384183626e-01 1.916772169684801685e-01 +1.116897468172373120e-02 6.397273873250586274e-02 +6.874816494608968487e-01 3.161627233689374705e-01 +3.291706459339697188e-01 3.514023081501465029e-01 +4.210611552446644756e-01 9.947631582004567985e-01 +8.964820479454381763e-01 5.312044695658465487e-01 +5.520807683579117553e-01 4.189032213809968930e-01 +5.504279646662376679e-01 8.640699125690795013e-01 +8.763626111920964634e-01 9.046130199065686162e-01 +1.139916820036463996e-01 9.087825724062976729e-01 +4.738680263462405895e-01 4.150775351682552960e-01 +9.512238895897489055e-01 6.964667377640976209e-02 +1.414590656787420020e-01 4.226333820871741587e-01 +1.282369778598845267e-01 7.715179538600827058e-01 +1.847309217354827782e-01 6.072762727055831533e-01 +7.998669280259028680e-01 7.436234331528007724e-01 +2.105227746358684371e-03 6.507322665403569850e-01 +8.023894395308018845e-01 6.939731168798601857e-01 +1.204948444013995701e-01 5.440075536111917964e-01 +6.202383621305045391e-01 7.012468189838982902e-02 +3.570258065373245193e-01 7.876936477849316720e-01 +8.157453079386777217e-01 8.232607988401881016e-01 +8.728229514565279956e-01 9.154248578038189921e-01 +2.322469376984092060e-01 1.134364532828557870e-03 +5.067839668015045040e-01 1.910183594724866873e-01 +1.245808710454127111e-01 9.819856416721098880e-01 +6.715344006944702349e-01 9.256659931247881445e-01 +7.926605245083367945e-01 9.672937152638602099e-01 +6.779824947790246137e-01 5.577508221221844087e-01 +1.937709372231182225e-01 3.515153565507245226e-02 +4.995223823477987768e-01 7.109049836233916064e-01 +7.463178161945269729e-01 5.743324117364775327e-01 +1.239379063948186088e-01 6.318684084676029489e-01 +1.875181145049569231e-01 8.197301972019480631e-01 +8.402578644598499569e-01 4.242018408962140441e-01 +2.678243529246217003e-01 6.230576841518946640e-01 +6.684547025660826369e-01 5.167279532946317255e-01 +5.357028898889649726e-01 5.976630823316623209e-01 +4.780859402444781470e-02 1.773563671779311290e-01 +6.449142857972468557e-01 8.303055746658202230e-01 +5.273839954317396383e-01 4.207125957999925392e-01 +1.762342332323126870e-01 4.393944051039871956e-01 +5.745506120050608567e-01 8.879382618314549669e-01 +4.712578561336036032e-01 1.881524570991451872e-01 +9.207864301979026278e-01 4.721265776693372995e-02 +5.593344057462952268e-01 1.697116004454535254e-02 +1.285041269667059893e-01 8.120506443759866189e-01 +1.373952958931543566e-01 9.128417874912870822e-01 +4.797927927505397649e-01 1.530851599816389630e-01 +8.988386452130850968e-01 4.336288161559882504e-01 +1.175939542535520133e-01 9.528203753474627780e-01 +6.853143805242034592e-02 9.899559204027282844e-01 +4.712369213667376711e-01 7.821498430902841248e-01 +7.660074850408304936e-02 4.397621066959265246e-01 +7.440848903115272472e-01 2.065276446615971206e-02 +9.690579279184877715e-01 9.038124159455668272e-01 +8.677520316851424775e-01 7.968841884723243396e-03 +7.150059719654046075e-01 1.902271594463174065e-01 +5.655878451055392775e-01 7.753998150871609374e-01 +3.771476847159315193e-01 5.314088967309682499e-02 +4.668356548341547896e-01 1.420268260268842120e-01 +7.733674248214993385e-01 9.191599567942703164e-01 +3.124880761435674392e-01 2.375488008927364447e-01 +8.856597436412122493e-01 3.864916902872622684e-01 +8.123284169990085957e-02 4.566267102606430539e-01 +7.695937128860208531e-01 1.536313709702308294e-03 +2.698634808995478140e-01 9.452697658139228576e-01 +8.680414416537420852e-01 5.957853601477216543e-01 +3.819804142131647540e-01 8.114547746686524565e-01 +1.639913461418038843e-01 6.069831370954037464e-02 +2.354814886069188651e-01 4.520356633556380510e-01 +4.477917297380786810e-01 5.222451552930984509e-01 +1.257116182264614856e-01 9.949725420833556155e-01 +3.832602759318003427e-01 7.113804967962201742e-01 +7.586015615124593880e-01 7.711228139572948725e-01 +3.173704442792059099e-01 4.460294653779597329e-01 +2.460033341796068473e-01 4.287079288236438357e-01 +1.148843304879398897e-02 4.950792280788270938e-01 +8.334981513439918555e-01 4.456172873974024728e-01 +7.482377364162514644e-01 6.628131569537574208e-01 +2.913923158975885164e-01 4.641078348173609536e-01 +2.498121371813314395e-01 9.509253979922854816e-01 +2.746487564911307411e-01 9.406035318420645774e-01 +2.820021904771764509e-01 8.776718603642663652e-01 +5.923569347935606633e-01 3.045901353139992551e-01 +9.832021019709979992e-02 1.133697466283044575e-01 +7.575807868368231723e-01 8.913146297652617678e-01 +1.200499803584796910e-01 1.625810412290606966e-01 +5.736411592810998217e-01 5.525297789065853893e-01 +5.973171245609736335e-01 3.796416167469480740e-01 +7.398704979355252842e-02 3.383623300418003854e-01 +1.189435600287831463e-01 5.426707019358838480e-01 +3.239727104423606452e-01 6.377551772898540916e-01 +6.514953263949951889e-02 6.437429913342302967e-01 +5.865338433254904116e-01 6.870900701704205638e-01 +6.764268671041336889e-01 7.829111812252187441e-01 +4.774031903028691515e-01 6.922412134057697175e-01 +5.553412318949063620e-01 4.094470218695424046e-01 +6.702597792296548507e-01 6.892860677710554995e-02 +2.608398070621155140e-01 7.359820956981057982e-01 +5.297362527411881850e-01 5.870368754892547614e-01 +4.495556863824029525e-01 2.055714641337329507e-01 +3.160105494353637745e-02 7.992069592538864065e-02 +8.715559155454377649e-01 2.190342555410986769e-01 +5.394581354897152181e-01 3.114766196383733643e-01 +2.646824402710644675e-01 2.644708182858351853e-01 +4.790240214000296426e-01 4.105537986554945729e-01 +2.339760287682213225e-02 2.111852087135975831e-01 +7.947030429688425324e-01 2.569986565779707188e-01 +7.311945670131854147e-01 5.285372826908655286e-01 +8.807686396342387924e-01 5.264275228182759836e-01 +7.115187496909101128e-01 9.584686142522280683e-03 +5.694667937026812732e-01 4.304140549976702701e-01 +1.114794538095644771e-01 9.012950227395988279e-02 +5.809108515980748733e-01 2.427899796970887092e-01 +7.480543830079553480e-01 2.669943659965072769e-01 +4.145656890299360686e-01 2.822511551775029881e-01 +7.357428154676989296e-01 3.761743886678923232e-01 +1.982175298962123300e-01 2.145578560427198189e-01 +8.030523291624790394e-01 6.733740429003510775e-01 +7.985431569558109066e-01 4.600792113841289943e-02 +3.626366184837356288e-01 6.675843961525843584e-01 +8.126970411895033664e-01 7.117348397517724301e-01 +8.543728600807161122e-01 8.763862220891506238e-01 +3.439831765635570360e-02 9.150777320789010849e-01 +9.309174853070691924e-01 9.078253988863690394e-01 +2.828498891789231751e-01 1.784800947868523391e-01 +7.400077699488807337e-01 2.858741810871601174e-02 +1.402374107513389978e-01 5.314238718751859158e-01 +6.926128819307058038e-01 4.246893979741607206e-01 +4.525197692624272072e-02 7.329835507263371408e-01 +8.631691826519332089e-01 6.734207211663955084e-01 +9.563620424281455978e-01 7.575804057530998170e-01 +1.590887085139082169e-01 3.736062867396472420e-03 +9.547665660630203499e-01 8.931008985953772239e-01 +8.692577998882099477e-01 5.616860296656878138e-02 +8.014509840718068157e-01 6.383966892081838207e-01 +5.139217873633956657e-01 4.388016676713035746e-01 +9.226322890909642860e-01 2.431893405078497938e-01 +9.383095756068016158e-02 8.649499041071950778e-01 +7.231752783516243177e-02 6.701048257886371706e-01 +7.440755967174422780e-01 2.229287066963419051e-01 +5.583000625748638646e-01 6.842632793187735096e-01 +7.291534933448510225e-01 6.448798050761928025e-01 +2.859697100748088694e-01 2.224053690704860253e-01 +6.983349285163419351e-01 2.650309054416272181e-01 +7.393835784473681283e-01 5.683017334047056890e-01 +3.281125648760345737e-01 8.528350494373129198e-01 +8.310856271089960279e-01 2.270109016976548100e-01 +2.613100192448142289e-01 8.067880232487177894e-01 +1.906703724254994459e-01 7.652906799978680397e-01 +5.021349848726747167e-01 2.467178437568799954e-01 +8.034236100027259964e-01 4.000588611526736393e-01 +8.280299802446300372e-02 7.593265680566931852e-01 +2.094310401346415329e-01 4.420948848064607528e-01 +7.605774736529228308e-01 1.983077295901262138e-01 +7.148071044953775433e-01 4.305571565443000459e-02 +2.539481688592389874e-01 9.950927771966910917e-02 +9.255422129163556333e-01 2.563625309341487357e-01 +5.552258590897310997e-01 5.247022466724801104e-01 +6.401721279147509769e-02 3.202030640431303699e-01 +9.425454907546026995e-02 2.259191401585394221e-01 +3.098009052525027007e-01 4.549292042872352670e-01 +6.332345557549374782e-01 9.977095323472180421e-01 +1.284826418370591528e-01 7.624886069340857109e-01 +8.607351624891471653e-01 3.622120301741800219e-01 +7.503446125384759524e-01 7.132646555367825325e-01 +9.682764691162804027e-03 1.231167267860211467e-01 +9.763878931189516885e-01 9.053692802601964740e-01 +7.884054615109020725e-01 2.946753766241453354e-01 +4.791241966535260133e-01 4.113693196348048309e-01 +7.700173289367712171e-01 6.297055736461186770e-01 +3.001887616662290981e-01 4.175023994163478136e-01 +6.801337579162639591e-01 4.004592520854307613e-01 +5.146554122787571073e-01 9.279315011947080194e-01 +8.100881518267603054e-01 2.754934359629414020e-01 +9.746559238693424110e-01 5.294821398894512532e-01 +1.700217155238656908e-01 5.075408119665145712e-01 +7.254889937549470202e-01 7.652061514710470913e-01 +8.876874194198891566e-01 4.016024778138125306e-01 +3.052129905495051254e-01 2.409756315254385495e-02 +8.416169013236775021e-01 2.660941948289545778e-01 +7.705144244837808243e-01 7.063650875259269712e-01 +2.967877194186074874e-02 4.786639120970216377e-01 +7.449817879894059525e-01 6.431431009682617717e-01 +2.651308362008266695e-01 7.995712666693107762e-01 +7.461182912574907400e-01 9.759385179074575589e-02 +6.370832629752050114e-01 9.176188303565137039e-01 +9.227711168620567062e-02 8.426289119799799110e-01 +2.210974527005129531e-01 9.353256284880046012e-01 +7.223180082661153634e-01 4.175342817226668224e-01 +3.862777346910406528e-02 7.601777755833890593e-01 +4.704990715940061685e-01 5.359549094288862392e-02 +7.849230423037100168e-01 2.544796317144470965e-02 +4.713624207062446780e-01 9.330759600987514890e-01 +5.934135104272557637e-01 9.149901698274116590e-01 +6.675146061662015073e-01 9.260833775048843419e-01 +9.769631128172938661e-01 9.314416488498484803e-01 +4.134763876571817542e-01 1.281813699400595752e-01 +9.860602052319290545e-01 7.985099557951832461e-01 +6.129852372669720717e-01 2.401219608273685857e-01 +4.026030944261168587e-01 3.503647793933621912e-01 +6.351573476392453621e-01 1.989757813093903094e-01 diff --git a/test/resources/linear_regression/data/training/train_label.txt b/test/resources/linear_regression/data/training/train_label.txt new file mode 100644 index 00000000..72c4b531 --- /dev/null +++ b/test/resources/linear_regression/data/training/train_label.txt @@ -0,0 +1,1000 @@ +1.173879881269729308e+00 +5.504434859143979564e-01 +1.967969238528174181e+00 +8.589601355883371703e-01 +2.016499430905083212e+00 +4.551615854065811373e-01 +1.336955142387406203e+00 +8.638061160360041013e-01 +1.085479327129481586e+00 +8.594006792394423000e-01 +1.055146252225392267e+00 +1.449562142600385739e+00 +1.588223748527864077e+00 +6.297908841899599874e-01 +1.730221903241557779e+00 +1.896881874877798024e+00 +2.252770463435295412e+00 +9.939957842977872327e-01 +2.659974681391862994e+00 +1.187294884247658722e+00 +1.076158930236267297e+00 +1.952360048577287621e+00 +2.067743829972779057e+00 +2.525033830513291999e+00 +1.412982843652544229e+00 +1.658203605203580233e+00 +2.449430719153214309e+00 +2.059661264881929466e+00 +2.397528333999177974e+00 +2.752196662027949214e-01 +4.170163297344672282e-01 +1.726605453596680828e+00 +1.225755382513542102e+00 +7.069797192540089315e-01 +1.306528447764938594e+00 +2.361691266019070312e+00 +1.755498284175463386e+00 +2.495565936679415842e+00 +1.799822588389151434e+00 +2.420695047184860282e+00 +8.524259231428169548e-01 +2.257207221867555624e+00 +2.077719088780114021e+00 +3.113519535706199548e-01 +2.077758204637165207e+00 +1.091808811270992940e+00 +1.860283715622871092e+00 +2.548730618832921291e+00 +1.057666634085676405e+00 +1.016992436418636903e+00 +2.103676054717679378e+00 +1.693787672624148755e+00 +6.187639532597964953e-01 +8.792977945212399060e-01 +9.723962136681100210e-01 +8.033896671303578652e-01 +6.322864380777462046e-01 +1.001107728825185728e+00 +1.138046752627182912e+00 +1.897675188342411445e+00 +2.142807212976721054e+00 +9.856357525365490035e-01 +1.251770758389617821e+00 +7.138425666139659453e-01 +4.005122038982038557e-01 +1.694356549907221510e+00 +2.198952354671682485e+00 +1.738355707751697343e+00 +5.063937732811988335e-01 +1.320278574647756331e+00 +2.171974665473326738e+00 +2.089941893244056104e+00 +9.340656187875175931e-01 +2.510001922566226451e+00 +7.553494812140771897e-01 +2.147651751453902413e+00 +8.832383306415670932e-01 +1.056210211692410139e+00 +2.356517157774772997e+00 +1.821760319560959296e+00 +2.141255948213409255e+00 +2.051702760583517637e+00 +1.745437322561655069e+00 +1.097818701390402829e+00 +9.998524176299571353e-01 +1.761456836009335669e+00 +2.328156096186934310e+00 +2.112402375732344240e+00 +1.543546189500369259e+00 +1.002242053952877576e+00 +1.910272557245922487e+00 +1.606436686104479872e+00 +1.295595375445004915e+00 +1.062645221334977297e+00 +1.937664886358040350e+00 +7.854071981826743487e-01 +2.150973448937828270e+00 +2.005951456445290493e+00 +2.329129526069435130e+00 +1.597941441540374763e+00 +1.701924716852330377e+00 +2.549899068182403195e+00 +2.046729052770414725e+00 +1.343140855094504760e+00 +1.202903372145732508e+00 +2.913019550441527938e-01 +1.588532232453245596e+00 +2.347586147341213181e+00 +1.913439817400202525e+00 +8.722718986531599050e-01 +2.681575983226875515e+00 +2.779178136142151700e+00 +2.746703238492141708e+00 +1.340303630479340313e+00 +1.504545137542518063e+00 +1.456429847337426420e+00 +2.180125518961956832e+00 +1.851881827744466857e+00 +2.115856003433038701e+00 +1.374872258940684544e+00 +7.159394191398474883e-01 +1.219837856151128497e+00 +1.998353182103732362e+00 +2.508094955849806240e+00 +2.470819021045394859e+00 +1.476778953626433744e+00 +2.617447223783643473e+00 +1.511823626077690719e+00 +9.573463052995655476e-01 +1.919801884216704391e+00 +2.037003837099256920e+00 +1.800845298074771783e+00 +6.865598619546003922e-01 +3.664549166607422581e-01 +5.372203479116118841e-01 +1.635904775525448329e+00 +1.778480691555145210e+00 +1.455214023363541997e+00 +1.814525886400860877e+00 +1.160231501643246288e+00 +1.140691556254791017e+00 +2.862737276090214777e+00 +1.630970326409933779e+00 +2.276550038141895715e+00 +1.663802535973283980e+00 +1.328076458373490976e+00 +1.834127615131421862e+00 +1.098311680215708019e+00 +1.153075818932752128e+00 +1.388804739371015007e+00 +2.991385788634141063e-01 +5.083670055288082024e-01 +1.559772122516119186e+00 +2.145675616796734797e+00 +1.964923336372092599e+00 +1.214544169587685962e+00 +1.681593060767285319e+00 +1.713822345134283776e+00 +3.713016956072753283e-01 +1.662702418162075091e+00 +1.748503884080097492e+00 +1.267885264723675576e+00 +2.131180582039999827e-01 +1.680828097713884084e+00 +1.167201846059875425e+00 +1.151339919208131946e-01 +1.766540175394926138e+00 +1.834938066634276943e+00 +2.218698053822988570e+00 +1.468071374583334254e+00 +1.305184748012974794e+00 +1.746928036436675491e+00 +2.813856784719652282e+00 +2.256934483346220599e+00 +1.751669176021913188e+00 +1.487526002935055658e+00 +1.686645852178191296e+00 +1.034321157762164711e+00 +6.673613280593756469e-01 +1.483595063429676841e+00 +2.016994485769395773e+00 +1.023847618687068195e+00 +1.288228338877522638e+00 +1.331542167648706254e+00 +1.677296918312751739e+00 +1.181663616812054229e+00 +2.265498619011048653e+00 +5.003079754245053357e-01 +2.565495073934508152e+00 +6.328237540968817409e-01 +4.939376292654510392e-01 +6.559356473489551531e-01 +1.112229631719227729e+00 +2.528463771080846190e+00 +2.085385803933895499e+00 +2.222069586191548929e+00 +5.782518762652313349e-01 +1.878053860072706804e+00 +1.738421744229697197e+00 +1.596371385241235341e+00 +1.430621517422325129e+00 +1.369909356079315632e+00 +8.064343321603396619e-01 +6.991506368230835378e-01 +1.652189108812733842e+00 +2.613473347155766291e+00 +2.312067464845486420e+00 +1.561089514040984172e-01 +2.473394587219040819e+00 +2.946947451441221943e+00 +7.919280574742105783e-01 +2.312496575860101267e+00 +1.486005179375582852e+00 +2.723873041543158013e+00 +2.475202224025563780e+00 +1.376625091253731004e+00 +2.591758621827306541e+00 +1.149150378870142264e+00 +8.556946440465703629e-01 +1.399880786550418366e+00 +6.261756657870711784e-01 +1.408897650173655869e+00 +1.527297919236833224e+00 +1.519390989731806751e+00 +1.949557611085402264e+00 +1.348176332780437470e+00 +1.507078362554509443e+00 +9.159081623443511289e-01 +1.718768866357398561e+00 +3.517787492613223543e-01 +2.797421150604573192e+00 +1.986767190933481197e+00 +1.006571689481993159e+00 +9.879603714192131125e-01 +2.441732835062806029e+00 +1.846031688203879195e+00 +1.104369115262310963e+00 +7.256401112501624784e-01 +6.557967170906693344e-01 +9.632465886228188667e-01 +1.451068177399697401e+00 +2.598871767727118254e+00 +2.046318009485862621e+00 +1.795606007957485817e+00 +1.057471578980419658e+00 +2.366119543812617909e+00 +1.339123086063498391e+00 +6.543025629927539111e-01 +1.446940224157419186e+00 +1.744280326838958839e+00 +6.942090160172469382e-01 +1.124117718651069575e+00 +1.660910693075998035e+00 +2.237964150820927589e+00 +2.200528669027618456e+00 +1.113067887067772599e+00 +1.802905386991187076e+00 +2.447610810776684076e+00 +1.460729299183819663e+00 +1.356247191751714265e+00 +4.989171574752901961e-01 +1.381402982254127387e+00 +1.639021162451775870e+00 +8.011979994786000425e-01 +1.888157265219889691e+00 +2.016021974450422860e+00 +1.628790310906064853e+00 +1.703333142660445443e+00 +1.627931441334910412e+00 +2.729970073668777530e+00 +1.364751755835527991e+00 +2.154922306279710043e+00 +2.342964314283614513e+00 +7.318351608408015796e-01 +2.811052218167833239e+00 +1.346593209747927844e+00 +2.509751967562520392e+00 +8.593630985472334727e-01 +1.301228724251420665e+00 +1.371447639278202901e+00 +1.827437554520149998e+00 +2.275400756352595977e+00 +2.660968699121146752e-02 +2.615814352756792971e+00 +8.577950229893057665e-01 +2.343417381368980923e+00 +2.343972516129102956e+00 +1.793780524668240339e+00 +2.549600761110212499e+00 +1.568228596430688793e+00 +2.063015184653625766e+00 +1.259555613300492150e+00 +2.100969805524830480e-01 +9.104501295723084198e-01 +1.653546865018034939e+00 +1.507181203688154003e+00 +2.473766657644221212e+00 +2.620820380204671451e-01 +7.082771834014519596e-01 +2.665508237493210864e+00 +2.841546922137345721e+00 +1.970447454252574504e+00 +1.834788887943913593e+00 +8.252245697688388448e-01 +1.954388144218484946e+00 +2.485973734923373701e+00 +1.787328001793979659e+00 +1.277829005821169872e+00 +8.751815304474366286e-01 +3.277102443278253618e-01 +2.475628649034620654e+00 +2.660798737917849932e-01 +2.574399522857247824e+00 +2.511127263392686881e+00 +2.520115119022515948e+00 +1.336053494104742612e+00 +2.261947425533872735e+00 +1.540509108967685004e+00 +1.455811758830833247e+00 +2.286349372696145021e+00 +1.305420306028152400e+00 +1.355854466946833758e+00 +1.150436591164989419e+00 +2.651942876909294533e+00 +1.274125026932515281e+00 +1.618169520861333366e-01 +4.806808633528593111e-01 +1.550992134873364403e+00 +1.716686569821530339e+00 +1.292031199831977339e+00 +1.350528483951797920e+00 +2.492902708336159456e+00 +2.584231113867022422e+00 +1.298468674823404445e+00 +1.285974778764294335e+00 +1.207974575798464789e+00 +1.197223857025865978e+00 +1.631102046707602948e+00 +1.386522127738676335e+00 +1.680148925026273998e+00 +1.757659772885101557e+00 +2.901712673719688551e-01 +1.451717095133708169e+00 +2.232522291545856685e+00 +2.105591126785151701e+00 +9.176278824180795768e-01 +1.625620926349989226e+00 +3.827255049223408090e-01 +1.331714705209255278e+00 +6.594794380702573289e-01 +2.750400466603164062e+00 +8.338520458703430061e-01 +1.292420489452435595e+00 +7.528401722924288331e-01 +1.696968480798160650e+00 +1.792044961452501806e+00 +2.368143262540235217e+00 +4.719125751840170802e-01 +1.543265465256557833e+00 +2.541751510339088416e+00 +2.262756151821248451e+00 +2.059976080676813037e-01 +5.540046447009239206e-01 +2.107055515481598196e+00 +1.530643247295702114e+00 +4.541271078057000921e-01 +2.335768081774222793e+00 +2.269841912070810430e+00 +1.700642397875732348e-01 +8.502232299484161482e-01 +1.145240147059961799e+00 +4.953961024537766322e-01 +1.969326501772505011e+00 +9.561217942668636116e-01 +3.287429118227878089e-01 +1.282542735685295643e+00 +8.069666952958997053e-01 +1.545207973883754082e+00 +2.681857387915953961e+00 +1.602040687390742901e+00 +4.107174996764475505e-01 +1.956241967359567901e+00 +1.181625157404662563e+00 +2.349470716296988559e+00 +1.502357056046616846e+00 +2.076806413469158397e+00 +1.293700387611635305e+00 +6.913280269389017185e-01 +1.609070913439037964e+00 +2.440793443040196742e+00 +7.132387516612760381e-01 +4.725559777361362235e-01 +2.038735761424829818e+00 +2.622507959798332511e+00 +1.832644895355015180e+00 +8.727738179060766655e-01 +1.130415793950272585e+00 +1.945668322846989984e+00 +1.892007393243257507e+00 +1.548284522067327140e+00 +2.472738680243389275e+00 +1.678105679366458158e+00 +1.416780797319425300e+00 +1.588395345571585349e+00 +5.524706657759302919e-01 +1.604239764160202641e+00 +2.492382453593043223e+00 +4.847600024111694550e-01 +1.747127853509677919e+00 +1.387331648012998908e+00 +2.484015963305008068e+00 +6.410422074243269375e-01 +2.296468295430637241e+00 +2.694331543056469602e+00 +7.639015917265200573e-01 +9.618531869194265616e-01 +2.290656922511926652e+00 +2.094636721853177175e+00 +2.041344578758732098e+00 +1.944067257934710913e+00 +2.501527836486606482e+00 +8.896668472543728390e-01 +2.449725830902194978e+00 +1.352569954042188716e+00 +6.026631907807673549e-01 +5.770867421051336654e-01 +7.381867064135871903e-01 +1.024948337673484922e+00 +7.847883218872027111e-01 +1.463908544904589659e+00 +9.840660304220860688e-01 +4.586253513612984500e-01 +1.244782235199795917e+00 +1.446772428830280788e+00 +8.649548171098527805e-01 +1.534302490286085563e+00 +2.084621285610106511e+00 +1.146480406745520542e+00 +1.012650854765739350e+00 +1.232107752994521910e+00 +4.922820600814464820e-01 +7.607704069240902589e-01 +8.101987602541473876e-01 +2.270533794416124351e+00 +2.430434818038419431e-01 +1.509570056556383211e+00 +2.448451244569655127e+00 +1.845967698535854185e+00 +1.094119798499495477e+00 +2.343234102652701489e-01 +2.159712336066048621e+00 +7.995439993115548427e-01 +8.024540943925556613e-01 +1.999659914046446163e+00 +1.360828889986862578e+00 +2.233087353401928876e+00 +9.491125274029978964e-01 +1.445853152399078301e+00 +8.265391854648840297e-01 +6.848584597249934847e-01 +1.628766682831206403e+00 +1.173018211347239603e+00 +1.555645034673222682e+00 +1.895507142868746886e+00 +1.579504858147093849e+00 +1.431770497020115052e+00 +2.135187442562147098e+00 +1.273767138307527746e+00 +2.051222495046800098e+00 +1.406711663948392754e+00 +1.141819742460649323e+00 +1.548080661312661199e+00 +5.237868333490498518e-01 +1.187082318414113935e+00 +2.091050454530566594e+00 +1.019384112671266829e+00 +2.093265410037372209e+00 +2.396083385507750574e+00 +9.403886533613309284e-01 +1.322551770845137753e+00 +4.919005539730100240e-01 +1.170605478156428125e+00 +1.776481655704252205e+00 +1.698828706865550320e+00 +1.851385793621924236e+00 +7.147066254064590174e-01 +5.576077505978211946e-01 +1.895688101567057249e+00 +2.240612187837129898e+00 +1.347689888804413982e+00 +4.059259148547945673e-01 +1.993782909349323784e+00 +8.979701369757964180e-01 +1.805112566225916648e+00 +1.173564326341602460e+00 +2.209970237248955360e+00 +2.200262669195315102e+00 +1.414352858272990066e+00 +1.421147068155934612e+00 +1.899892483588903058e-01 +1.893662014131090920e+00 +1.332962610340685305e+00 +2.247253577527448698e+00 +1.457348069141363833e+00 +8.182865823608106437e-01 +1.674742885946259641e+00 +1.945512972655398354e+00 +2.060641448459671565e+00 +2.253733634575407763e+00 +5.760539763863702367e-01 +8.577428253455504636e-01 +1.004971742367929632e+00 +2.053797587815739512e+00 +1.068384423838911967e+00 +5.964868128009285231e-01 +1.017586506790398637e+00 +8.251292507051257719e-01 +3.205391958703156519e-01 +1.775803434586376683e+00 +6.342725587181106128e-01 +6.066741904936910901e-01 +3.509021401892409298e-01 +2.536747931465455519e+00 +5.741876837581936233e-01 +2.046864592634350721e+00 +2.055650148710819192e+00 +8.358711458675408545e-01 +9.181334155201634761e-01 +2.061585586621737853e+00 +2.114898253803881634e+00 +2.425005743862729712e+00 +1.588388648011259230e+00 +1.827470922093908712e+00 +1.268680241845256518e+00 +1.469694482760877996e+00 +5.579454454769142702e-01 +6.377940923595946110e-01 +2.014939938602088532e+00 +1.706161676762852908e+00 +1.083729005732912309e+00 +1.650936483950469658e+00 +1.049483536763069935e+00 +1.728691623969616398e+00 +2.014564624510136071e+00 +2.248018615294701483e+00 +2.503604651142930848e+00 +1.781030120665335392e+00 +9.990107264465927228e-01 +7.565685302557905167e-01 +7.633215188646546023e-01 +7.353480446182824037e-01 +1.587153509239275895e+00 +2.519466477161675932e+00 +1.285229630814623381e+00 +1.884020171775280250e+00 +2.137549970206741534e+00 +2.263540014774511722e+00 +1.346228231611189319e+00 +2.542680422610639646e+00 +1.451920899328499104e+00 +1.079305178903446905e+00 +7.603347936840297860e-01 +7.148553035520865961e-01 +2.828602786117167867e+00 +1.425777086636739410e+00 +1.016272888351824832e+00 +2.360962576109677080e+00 +1.207887239510876842e+00 +1.743374470370741669e+00 +1.501803282145279805e+00 +2.238840655166673521e+00 +2.397163222977186869e+00 +1.649499789914937065e+00 +2.058603520766119743e+00 +1.321528670754451351e+00 +7.344330045099856097e-02 +8.343318465568284603e-01 +1.082516392000663519e+00 +7.343909415755127679e-01 +1.118819986087318252e+00 +2.699884785755509053e+00 +1.350405697135487193e+00 +9.624393632912058294e-01 +6.031622040880794122e-01 +1.630315065607423008e+00 +1.143817503146981052e+00 +7.826473535070175291e-01 +1.824099033273324899e+00 +1.209718263897805013e+00 +1.549990565022734135e+00 +1.482824175279684908e+00 +2.241886716269428703e+00 +1.138519448236785969e+00 +1.329840997828564575e+00 +1.442933532007003805e+00 +1.769246433661130435e+00 +1.793771713383907507e+00 +2.035001385602914770e+00 +1.963612511886695167e+00 +2.166726665119577788e+00 +7.475676344954031993e-01 +1.997090464559396761e+00 +7.045514307291398381e-01 +1.397496971703811930e+00 +1.708420223490398460e+00 +1.832362203850108617e+00 +3.376959179213833151e-01 +1.765782201082102043e+00 +1.732516808536954445e+00 +1.015756275087577709e+00 +2.074352866995790468e+00 +2.079157778378828425e+00 +1.704769078187722720e+00 +1.482155920562505891e+00 +1.834341963586612945e+00 +1.084444126071073100e+00 +1.741169044907861618e+00 +2.519960997707053174e+00 +1.570267726931172003e+00 +2.366040829503849974e+00 +7.303840970057017268e-01 +9.930543665907164419e-01 +1.320964590804518668e+00 +2.119406155145141746e+00 +1.624125089611779593e+00 +1.703606072150509521e+00 +2.424541731414554313e+00 +2.363100915943689539e+00 +1.858833218979882407e+00 +1.743800083923357169e+00 +1.776680460868375722e+00 +8.736676871444236658e-01 +7.997984822869514954e-01 +1.638567947771597755e+00 +1.920158827678556390e+00 +2.863186081963841056e-01 +1.132852329172159944e+00 +1.656063595154057655e+00 +2.552313125501352253e+00 +2.309260204156736496e+00 +3.360988946728146187e-01 +1.951320592562752143e+00 +1.578812016227276738e-01 +3.159733955972311437e-01 +1.244966542179410496e+00 +1.157125709531469315e+00 +2.146984944168823795e+00 +3.110745925028488568e-01 +1.508317866577684185e-01 +1.538086625068097124e+00 +2.338940918608976460e+00 +2.306620206008131113e+00 +1.721795805934041912e+00 +4.430675279461921967e-01 +7.451524698425047166e-01 +1.230959865658318275e+00 +2.253631503484952336e+00 +2.961565926811442484e-01 +1.414425657758706656e+00 +1.886863486214273911e+00 +1.831938994265982723e+00 +9.328934961580596097e-01 +9.462164349280410836e-01 +1.712589714289662002e+00 +9.442318380219176799e-01 +1.337326413629875699e+00 +1.527010581213674945e+00 +7.906457886257330925e-01 +8.585053860770119893e-01 +1.210835098809594612e+00 +1.282997503074416734e+00 +1.307542088231384181e+00 +1.671845095201549558e-01 +2.457275601939672871e+00 +6.737659541886441561e-01 +2.022362162737915359e+00 +1.316503244681977991e+00 +1.315379154043433640e+00 +2.326380396340538059e+00 +1.881099989309446663e+00 +2.078388740793908784e+00 +1.675680614571675386e+00 +2.098850256368162803e+00 +7.537615260779604309e-01 +3.811592920887689750e-01 +2.247867394445636435e+00 +1.795535759510295204e+00 +2.732566321192225089e+00 +1.012724436235092229e+00 +1.819819341964286519e+00 +2.812841036646871906e+00 +7.609909749121543943e-01 +1.681998611182385472e+00 +2.097159506406550911e+00 +1.723392060743437870e+00 +4.148393491654789322e-01 +5.288785057228253539e-01 +1.904654283424046746e+00 +1.929226825934533984e+00 +3.489417960270546626e-01 +1.849764716957146060e+00 +1.947581759184833228e-01 +1.111693833097633588e+00 +5.296499745724750907e-01 +1.140016200344680763e+00 +2.203200257251838767e+00 +2.500564085681767246e+00 +1.792729175205145742e+00 +4.813671886901659258e-01 +1.163579496832382709e+00 +1.744197585646138915e+00 +1.727212592363701837e+00 +1.694555159492121987e+00 +1.154364526236362209e-01 +2.005005300790784428e+00 +2.144157627991247317e+00 +1.211084403916262042e+00 +2.269174934827983048e+00 +1.523715902543874012e+00 +1.887306347236870074e+00 +2.170732174704789408e+00 +9.869773581565483012e-01 +1.904890862446244615e+00 +1.972676272383736551e+00 +2.950111741724962267e-01 +9.587823986925861908e-01 +1.614950169860075446e+00 +1.233920173649270868e+00 +5.575044043934533899e-01 +2.301983018322603325e+00 +9.321504293497161475e-01 +9.263487511239190120e-01 +1.164167309753915358e+00 +2.662830792411879699e+00 +1.604067850317884680e+00 +8.929948307155568532e-01 +7.965335899063215042e-01 +1.937824497402587332e+00 +1.131175478296996939e+00 +7.358472426769527841e-01 +1.709860516630478777e+00 +1.421794972292863779e+00 +9.329440654380409814e-01 +1.949171753429876475e+00 +2.677392574765950162e+00 +1.714466525587316825e+00 +1.361832295169157936e+00 +5.183945164039927000e-01 +2.117787520792025369e+00 +9.606681920892048421e-01 +1.262964776178046922e+00 +1.848044645087290938e+00 +8.582408972038951811e-01 +7.803952645564810053e-01 +5.921046815180173173e-01 +1.952605331756958940e+00 +2.035511667524434465e+00 +2.105256410783559851e+00 +8.052130732669764424e-01 +2.500913813312017897e+00 +1.143557681604180365e+00 +1.586113042875624712e+00 +1.012871239189666817e+00 +1.711156608818773961e+00 +1.678781976761197337e+00 +4.487275911377179849e-01 +9.364599427903850248e-01 +8.024611036598076064e-01 +1.255425529734055301e+00 +2.172637800575796696e+00 +1.059557931795808372e+00 +2.722317158508352541e+00 +1.676744484616954800e+00 +7.877478822414589743e-01 +1.769162920995854371e+00 +1.962716819746739061e+00 +1.534632884525763075e+00 +1.471628511796965411e+00 +2.333315172589743192e+00 +1.757836938371782676e+00 +2.338094515663083683e+00 +1.947023547541835153e-01 +2.370824783645905098e-01 +2.076032405130704195e+00 +1.716653486541023010e+00 +9.989198903715239553e-01 +2.137641233303767763e+00 +2.372175436957505656e+00 +2.430827902256544881e+00 +1.923384604893873639e+00 +1.041606302972814202e+00 +2.133352228812533724e+00 +8.617085408977450678e-01 +6.627173271269759525e-01 +2.242761272077678836e+00 +8.704290704068707862e-01 +7.675686684415085059e-01 +6.366589855753786997e-01 +1.391144521467354567e-01 +1.319807096198771790e+00 +1.031975262234262836e+00 +2.410587471645578184e+00 +1.958890987077131385e+00 +1.389887211119905430e+00 +2.278567789804396782e+00 +2.685588651005233807e+00 +1.931556826816241745e+00 +1.304023096682751071e+00 +1.090517237142568430e+00 +9.867258298530903193e-01 +1.671272885580049827e+00 +1.399283467146648974e+00 +2.287113794331504302e+00 +1.303569760827072654e+00 +2.190335673290522145e+00 +1.208509951623783163e+00 +7.604877259272841972e-01 +1.932413102107187974e+00 +2.462266905619054036e+00 +2.703672667064165758e+00 +2.345156667640663217e-01 +8.888206857464778787e-01 +2.088552154389632598e+00 +2.522866386944046635e+00 +2.727247955036057103e+00 +1.793484139023393542e+00 +2.640740085332631271e-01 +1.921332349594581990e+00 +1.894982639667482038e+00 +1.387674723330024396e+00 +1.826978508908853049e+00 +1.688661546252278045e+00 +1.513939721228410917e+00 +1.701910609155345977e+00 +1.731029054552289725e+00 +4.025213283803100728e-01 +2.305525435128887413e+00 +1.368809187031724717e+00 +1.055023043440287189e+00 +2.350427135667970902e+00 +8.475627703318939776e-01 +1.015211745731769977e+00 +5.932767258353859319e-01 +1.752605415718679227e+00 +1.963078870875728521e+00 +7.859631127138176909e-01 +1.766096277525061709e+00 +2.023234704948477791e+00 +2.048443278857877026e+00 +2.035536607547305810e+00 +9.561249618959360985e-01 +7.853904192438466714e-01 +2.776682759809621537e+00 +8.836897154545889643e-01 +1.095460290858039532e+00 +2.116387475279861263e+00 +4.834294640621251693e-01 +7.508893068879232136e-01 +2.611687338410039860e+00 +7.875856779290403287e-01 +1.658643124215736897e+00 +9.944862622211869674e-01 +7.726663403054254697e-01 +2.160403012527393418e+00 +2.059612161949185172e+00 +2.004889963550469556e+00 +2.853879735608846335e-01 +1.139552815318194856e+00 +1.492282040324275583e+00 +2.115656702393172495e+00 +1.806021269524240580e+00 +2.300847189427049244e+00 +1.209429375035125265e+00 +1.103419191826894519e+00 +1.001646889206448066e+00 +1.724732726138796801e+00 +2.073864050323766417e+00 +1.219607985532310312e+00 +2.151662933165902292e+00 +2.155855820175260007e+00 +2.037345911205709292e+00 +1.201537205421559174e+00 +3.250597034537087149e-01 +2.540210046367346486e+00 +4.452120628166010841e-01 +1.678700717094270711e+00 +1.356600358054869782e+00 +7.507117098771532993e-01 +1.204284963900550842e+00 +1.599483065022068828e+00 +1.352635515307960112e+00 +1.960713983666331650e+00 +2.242249229554571066e+00 +1.861885617114408475e+00 +1.374235275633991282e+00 +8.081169927838659506e-01 +1.732803998458327221e+00 +1.703810003719697708e+00 +8.606986146498688539e-01 +1.914424467943136587e-01 +1.309624426627635119e+00 +1.162411374766461947e+00 +7.936240768427348380e-01 +1.300131618711018788e+00 +4.457680203040172984e-01 +1.308700356124783859e+00 +1.788269132394916472e+00 +1.933623685270790649e+00 +7.306881219759546742e-01 +1.430294903698021702e+00 +2.917384583574842427e-01 +1.066490810992252403e+00 +1.282043115000969902e+00 +9.790679993849420448e-01 +1.488091592803483465e+00 +6.273332419816519678e-01 +2.149800414963181083e+00 +8.905589992326367055e-01 +1.697805410788904457e+00 +2.236166720693048227e+00 +2.607145304259017138e+00 +1.864553781814157762e+00 +2.746568283079807493e+00 +6.398100787526278532e-01 +7.971826061663127572e-01 +1.203085154501710718e+00 +1.541991677879027245e+00 +1.511219078378917002e+00 +2.210010624984724004e+00 +2.471522853934345232e+00 +1.665608342487011617e-01 +2.740968363253774687e+00 +9.815950058213475105e-01 +2.078244362488174346e+00 +1.391525122706002815e+00 +1.409010970106663763e+00 +1.823730765775070317e+00 +1.412527179412436773e+00 +1.189933010110125977e+00 +1.926826621212410995e+00 +2.018913103497236516e+00 +7.307804482157809201e-01 +1.228396739399596260e+00 +1.875987045256779506e+00 +2.033782663750660191e+00 +1.285107430504305537e+00 +1.874886065742249919e+00 +1.721251732421235525e+00 +9.955706723864347074e-01 +1.603541332308073386e+00 +1.601456134137849485e+00 +1.093620809747563039e+00 +1.157192932833175369e+00 +8.009185358042375524e-01 +4.529667242985772058e-01 +1.438267274784652994e+00 +1.604630352434691432e+00 +7.044233408777358374e-01 +5.460928293925391142e-01 +1.219659313826973346e+00 +2.628653620449373562e+00 +1.653459855705230463e+00 +1.585159222837507098e+00 +2.176873923612041128e+00 +2.559162182632050975e-01 +2.787126453639344525e+00 +1.377756214759192854e+00 +1.301862835923135675e+00 +2.029428476229008460e+00 +1.135193560498924725e+00 +1.481052262087125371e+00 +2.370518414668173257e+00 +1.361075023752642998e+00 +2.033620203648244917e+00 +1.185103339456894833e+00 +2.255901296697041314e+00 +1.690892375047514218e+00 +3.534081168545928353e-01 +1.373805290981586769e+00 +2.183244599535634656e+00 +9.870065961359040241e-01 +2.031267989925929385e+00 +1.864273369539448222e+00 +9.413059948389822518e-01 +2.472320923688232419e+00 +1.777534935646165604e+00 +2.091748709676521933e+00 +1.557386571711449008e+00 +1.558983324635882184e+00 +5.776900534797834164e-01 +8.358189686465994361e-01 +2.337514340903747545e+00 +2.423393850082079304e+00 +2.519681361175970302e+00 +2.839846410516990716e+00 +6.698391275373009046e-01 +2.583080116822295658e+00 +1.093229158921709132e+00 +1.103332653212841130e+00 +1.033108910258025981e+00 diff --git a/test/resources/linear_regression/linear_regression.py b/test/resources/linear_regression/linear_regression.py index 26b73fdb..cb2df686 100644 --- a/test/resources/linear_regression/linear_regression.py +++ b/test/resources/linear_regression/linear_regression.py @@ -1,15 +1,16 @@ # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# +# # Licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. # A copy of the License is located at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing # permissions and limitations under the License. +from __future__ import absolute_import import logging import os diff --git a/test/resources/mnist/mnist.py b/test/resources/mnist/mnist.py index 9219df1b..ea095644 100644 --- a/test/resources/mnist/mnist.py +++ b/test/resources/mnist/mnist.py @@ -10,8 +10,9 @@ # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. - +import argparse import gzip +import json import logging import os import struct @@ -19,6 +20,8 @@ import mxnet as mx import numpy as np +from sagemaker_mxnet_container.distributed import DefaultParameterServer + def load_data(path): with gzip.open(find_file(path, "labels.gz")) as flbl: @@ -55,9 +58,10 @@ def get_train_context(num_gpus): return mx.cpu() -def train(channel_input_dirs, hyperparameters, hosts, current_host, num_gpus, **kwargs): - (train_labels, train_images) = load_data(os.path.join(channel_input_dirs['train'])) - (test_labels, test_images) = load_data(os.path.join(channel_input_dirs['test'])) +def train(batch_size, epochs, learning_rate, num_gpus, training_channel, testing_channel, + hosts, current_host, scheduler_host, model_dir): + (train_labels, train_images) = load_data(training_channel) + (test_labels, test_images) = load_data(testing_channel) # Data parallel training - shard the data so each host # only trains on a subset of the total data. @@ -68,22 +72,58 @@ def train(channel_input_dirs, hyperparameters, hosts, current_host, num_gpus, ** end = start + shard_size break - batch_size = 100 train_iter = mx.io.NDArrayIter(train_images[start:end], train_labels[start:end], batch_size, shuffle=True) val_iter = mx.io.NDArrayIter(test_images, test_labels, batch_size) + logging.getLogger().setLevel(logging.DEBUG) + kvstore = 'local' if len(hosts) == 1 else 'dist_sync' - mlp_model = mx.mod.Module( - symbol=build_graph(), - context=get_train_context(num_gpus)) + + mlp_model = mx.mod.Module(symbol=build_graph(), + context=get_train_context(num_gpus)) mlp_model.fit(train_iter, eval_data=val_iter, kvstore=kvstore, optimizer='sgd', - optimizer_params={ - 'learning_rate': float(hyperparameters.get("learning_rate", 0.1))}, + optimizer_params={'learning_rate': learning_rate}, eval_metric='acc', batch_end_callback=mx.callback.Speedometer(batch_size, 100), - num_epoch=1) - return mlp_model + num_epoch=epochs) + + if len(hosts) == 1 or scheduler_host == current_host: + save(model_dir, mlp_model) + + +def save(model_dir, model): + model.symbol.save(os.path.join(model_dir, 'model-symbol.json')) + model.save_params(os.path.join(model_dir, 'model-0000.params')) + + signature = [{'name': data_desc.name, 'shape': [dim for dim in data_desc.shape]} + for data_desc in model.data_shapes] + with open(os.path.join(model_dir, 'model-shapes.json'), 'w') as f: + json.dump(signature, f) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + + parser.add_argument('--batch-size', type=int, default=100) + parser.add_argument('--epochs', type=int, default=10) + parser.add_argument('--learning-rate', type=float, default=0.1) + + parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR']) + parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN']) + parser.add_argument('--test', type=str, default=os.environ['SM_CHANNEL_TEST']) + + parser.add_argument('--current-host', type=str, default=os.environ['SM_CURRENT_HOST']) + parser.add_argument('--hosts', type=list, default=json.loads(os.environ['SM_HOSTS'])) + + args = parser.parse_args() + + num_gpus = int(os.environ['SM_NUM_GPUS']) + + distributed_server = DefaultParameterServer(args.hosts) + with distributed_server.setup(args.current_host): + train(args.batch_size, args.epochs, args.learning_rate, num_gpus, args.train, args.test, + args.hosts, args.current_host, distributed_server.scheduler, args.model_dir) diff --git a/test/resources/mnist/mnist_script_mode.py b/test/resources/mnist/mnist_script_mode.py deleted file mode 100644 index ea095644..00000000 --- a/test/resources/mnist/mnist_script_mode.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. -import argparse -import gzip -import json -import logging -import os -import struct - -import mxnet as mx -import numpy as np - -from sagemaker_mxnet_container.distributed import DefaultParameterServer - - -def load_data(path): - with gzip.open(find_file(path, "labels.gz")) as flbl: - struct.unpack(">II", flbl.read(8)) - labels = np.fromstring(flbl.read(), dtype=np.int8) - with gzip.open(find_file(path, "images.gz")) as fimg: - _, _, rows, cols = struct.unpack(">IIII", fimg.read(16)) - images = np.fromstring(fimg.read(), dtype=np.uint8).reshape(len(labels), rows, cols) - images = images.reshape(images.shape[0], 1, 28, 28).astype(np.float32) / 255 - return labels, images - - -def find_file(root_path, file_name): - for root, dirs, files in os.walk(root_path): - if file_name in files: - return os.path.join(root, file_name) - - -def build_graph(): - data = mx.sym.var('data') - data = mx.sym.flatten(data=data) - fc1 = mx.sym.FullyConnected(data=data, num_hidden=128) - act1 = mx.sym.Activation(data=fc1, act_type="relu") - fc2 = mx.sym.FullyConnected(data=act1, num_hidden=64) - act2 = mx.sym.Activation(data=fc2, act_type="relu") - fc3 = mx.sym.FullyConnected(data=act2, num_hidden=10) - return mx.sym.SoftmaxOutput(data=fc3, name='softmax') - - -def get_train_context(num_gpus): - if num_gpus: - return [mx.gpu(i) for i in range(num_gpus)] - else: - return mx.cpu() - - -def train(batch_size, epochs, learning_rate, num_gpus, training_channel, testing_channel, - hosts, current_host, scheduler_host, model_dir): - (train_labels, train_images) = load_data(training_channel) - (test_labels, test_images) = load_data(testing_channel) - - # Data parallel training - shard the data so each host - # only trains on a subset of the total data. - shard_size = len(train_images) // len(hosts) - for i, host in enumerate(hosts): - if host == current_host: - start = shard_size * i - end = start + shard_size - break - - train_iter = mx.io.NDArrayIter(train_images[start:end], train_labels[start:end], batch_size, - shuffle=True) - val_iter = mx.io.NDArrayIter(test_images, test_labels, batch_size) - - logging.getLogger().setLevel(logging.DEBUG) - - kvstore = 'local' if len(hosts) == 1 else 'dist_sync' - - mlp_model = mx.mod.Module(symbol=build_graph(), - context=get_train_context(num_gpus)) - mlp_model.fit(train_iter, - eval_data=val_iter, - kvstore=kvstore, - optimizer='sgd', - optimizer_params={'learning_rate': learning_rate}, - eval_metric='acc', - batch_end_callback=mx.callback.Speedometer(batch_size, 100), - num_epoch=epochs) - - if len(hosts) == 1 or scheduler_host == current_host: - save(model_dir, mlp_model) - - -def save(model_dir, model): - model.symbol.save(os.path.join(model_dir, 'model-symbol.json')) - model.save_params(os.path.join(model_dir, 'model-0000.params')) - - signature = [{'name': data_desc.name, 'shape': [dim for dim in data_desc.shape]} - for data_desc in model.data_shapes] - with open(os.path.join(model_dir, 'model-shapes.json'), 'w') as f: - json.dump(signature, f) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - - parser.add_argument('--batch-size', type=int, default=100) - parser.add_argument('--epochs', type=int, default=10) - parser.add_argument('--learning-rate', type=float, default=0.1) - - parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR']) - parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN']) - parser.add_argument('--test', type=str, default=os.environ['SM_CHANNEL_TEST']) - - parser.add_argument('--current-host', type=str, default=os.environ['SM_CURRENT_HOST']) - parser.add_argument('--hosts', type=list, default=json.loads(os.environ['SM_HOSTS'])) - - args = parser.parse_args() - - num_gpus = int(os.environ['SM_NUM_GPUS']) - - distributed_server = DefaultParameterServer(args.hosts) - with distributed_server.setup(args.current_host): - train(args.batch_size, args.epochs, args.learning_rate, num_gpus, args.train, args.test, - args.hosts, args.current_host, distributed_server.scheduler, args.model_dir) From fbcd0e98973f4060177f8f18dcc02966251580dd Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Wed, 24 Oct 2018 17:45:19 -0700 Subject: [PATCH 08/18] Add default save method and update linear regression test (#42) --- src/sagemaker_mxnet_container/default_save.py | 46 +++++++++++++++++++ .../local/test_linear_regression.py | 23 ++++------ .../linear_regression/linear_regression.py | 21 ++++++++- test/unit/test_default_save.py | 33 +++++++++++++ 4 files changed, 109 insertions(+), 14 deletions(-) create mode 100644 src/sagemaker_mxnet_container/default_save.py create mode 100644 test/unit/test_default_save.py diff --git a/src/sagemaker_mxnet_container/default_save.py b/src/sagemaker_mxnet_container/default_save.py new file mode 100644 index 00000000..87bac457 --- /dev/null +++ b/src/sagemaker_mxnet_container/default_save.py @@ -0,0 +1,46 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the 'license' file accompanying this file. This file is +# distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +import json +import os + +SYMBOL_PATH = 'model-symbol.json' +PARAMS_PATH = 'model-0000.params' +SHAPES_PATH = 'model-shapes.json' + + +def save(model_dir, model): + """Save an MXNet Module to a given location. + + This generates three files in the model directory: + + - model-symbol.json: The serialized module symbolic graph. + Formed by invoking ``module.symbole.save``. + - model-0000.params: The serialized module parameters. + Formed by invoking ``module.save_params``. + - model-shapes.json: The serialized module input data shapes in the form of a JSON list of + JSON data-shape objects. Each data-shape object contains a string name and + a list of integer dimensions. + + Args: + model_dir (str): the directory for saving the model + model (mxnet.mod.Module): the module to be saved + """ + model.symbol.save(os.path.join(model_dir, SYMBOL_PATH)) + model.save_params(os.path.join(model_dir, PARAMS_PATH)) + + signature = [{'name': data_desc.name, 'shape': [dim for dim in data_desc.shape]} + for data_desc in model.data_shapes] + with open(os.path.join(model_dir, SHAPES_PATH), 'w') as f: + json.dump(signature, f) diff --git a/test/integration/local/test_linear_regression.py b/test/integration/local/test_linear_regression.py index 0f745708..a26dfca5 100644 --- a/test/integration/local/test_linear_regression.py +++ b/test/integration/local/test_linear_regression.py @@ -14,29 +14,26 @@ import os -import pytest -from sagemaker.fw_utils import tar_and_upload_dir from sagemaker.mxnet import MXNet -from sagemaker.utils import sagemaker_timestamp from test.integration import MODEL_SUCCESS_FILES, RESOURCE_PATH -@pytest.mark.skip(reason='waiting for default save before converting script') def test_linear_regression(docker_image, sagemaker_local_session, local_instance_type): - data_path = os.path.join(RESOURCE_PATH, 'linear_regression') + lr_path = os.path.join(RESOURCE_PATH, 'linear_regression') - s3_source_archive = tar_and_upload_dir(session=sagemaker_local_session.boto_session, - bucket=sagemaker_local_session.default_bucket(), - s3_key_prefix=sagemaker_timestamp(), - script='linear_regression.py', - directory=data_path) - - mx = MXNet(entry_point=os.path.join(data_path, 'linear_regression.py'), role='SageMakerRole', + mx = MXNet(entry_point=os.path.join(lr_path, 'linear_regression.py'), role='SageMakerRole', train_instance_count=1, train_instance_type=local_instance_type, sagemaker_session=sagemaker_local_session, image_name=docker_image) - mx.fit(s3_source_archive.s3_prefix) + data_path = os.path.join(lr_path, 'data') + s3_prefix = 'integ-test-data/mxnet-linear-regression' + train_input = sagemaker_local_session.upload_data(path=os.path.join(data_path, 'training'), + key_prefix=s3_prefix) + eval_input = sagemaker_local_session.upload_data(path=os.path.join(data_path, 'evaluation'), + key_prefix=s3_prefix) + + mx.fit({'training': train_input, 'evaluation': eval_input}) output_path = os.path.dirname(mx.create_model().model_data) for f in MODEL_SUCCESS_FILES: diff --git a/test/resources/linear_regression/linear_regression.py b/test/resources/linear_regression/linear_regression.py index cb2df686..dd2a0328 100644 --- a/test/resources/linear_regression/linear_regression.py +++ b/test/resources/linear_regression/linear_regression.py @@ -12,14 +12,18 @@ # permissions and limitations under the License. from __future__ import absolute_import +import argparse import logging +import json import os import mxnet as mx import numpy as np +from sagemaker_mxnet_container.default_save import save -def train(num_cpus, num_gpus, channel_input_dirs, **kwargs): + +def train(num_cpus, num_gpus, channel_input_dirs): """ ensure mxnet is fully functional by training simple model see http://mxnet.incubator.apache.org/tutorials/python/linear-regression.html @@ -77,3 +81,18 @@ def _get_context(cpus, gpus): logging.info("mxnet context: %s" % str(ctx)) return ctx + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + + parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR']) + parser.add_argument('--input-channels', type=str, default=json.loads(os.environ['SM_TRAINING_ENV'])['channel_input_dirs']) + + args = parser.parse_args() + + num_cpus = int(os.environ['SM_NUM_CPUS']) + num_gpus = int(os.environ['SM_NUM_GPUS']) + + model = train(num_cpus, num_gpus, args.input_channels) + save(args.model_dir, model) diff --git a/test/unit/test_default_save.py b/test/unit/test_default_save.py new file mode 100644 index 00000000..05a6b1ad --- /dev/null +++ b/test/unit/test_default_save.py @@ -0,0 +1,33 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the 'license' file accompanying this file. This file is +# distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +import os + +from mock import Mock, mock_open, patch + +from sagemaker_mxnet_container import default_save + + +@patch('json.dump') +def test_save(json_dump): + model_dir = 'foo/model' + model = Mock() + model.data_shapes = [] + + with patch('six.moves.builtins.open', mock_open(read_data=Mock())): + default_save.save(model_dir, model) + + model.symbol.save.assert_called_with(os.path.join(model_dir, 'model-symbol.json')) + model.save_params.assert_called_with(os.path.join(model_dir, 'model-0000.params')) + json_dump.assert_called_once From 2395a792fc8500502815309644ac2e6425435512 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Fri, 26 Oct 2018 11:10:18 -0700 Subject: [PATCH 09/18] Make container set up parameter server for distributed training (#43) --- src/sagemaker_mxnet_container/__init__.py | 5 +- src/sagemaker_mxnet_container/distributed.py | 78 ------------ src/sagemaker_mxnet_container/training.py | 53 +++++++++ .../{default_save.py => training_utils.py} | 32 +++-- test/integration/local/test_mnist_training.py | 3 +- .../sagemaker/test_mnist_distributed.py | 3 +- .../linear_regression/linear_regression.py | 2 +- test/resources/mnist/mnist.py | 12 +- test/unit/test_default_save.py | 33 ------ test/unit/test_distributed.py | 111 ------------------ test/unit/test_training.py | 87 +++++++++++++- test/unit/test_training_utils.py | 69 +++++++++++ 12 files changed, 244 insertions(+), 244 deletions(-) delete mode 100644 src/sagemaker_mxnet_container/distributed.py rename src/sagemaker_mxnet_container/{default_save.py => training_utils.py} (58%) delete mode 100644 test/unit/test_default_save.py delete mode 100644 test/unit/test_distributed.py create mode 100644 test/unit/test_training_utils.py diff --git a/src/sagemaker_mxnet_container/__init__.py b/src/sagemaker_mxnet_container/__init__.py index 0f80bcae..45ba045d 100644 --- a/src/sagemaker_mxnet_container/__init__.py +++ b/src/sagemaker_mxnet_container/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You # may not use this file except in compliance with the License. A copy of @@ -10,3 +10,6 @@ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. +from __future__ import absolute_import + +from sagemaker_mxnet_container import training_utils # noqa: F401 diff --git a/src/sagemaker_mxnet_container/distributed.py b/src/sagemaker_mxnet_container/distributed.py deleted file mode 100644 index df4a4cfb..00000000 --- a/src/sagemaker_mxnet_container/distributed.py +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the 'License'). You -# may not use this file except in compliance with the License. A copy of -# the License is located at -# -# http://aws.amazon.com/apache2.0/ -# -# or in the 'license' file accompanying this file. This file is -# distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF -# ANY KIND, either express or implied. See the License for the specific -# language governing permissions and limitations under the License. -from __future__ import absolute_import - -from contextlib import contextmanager -import logging -import os -import socket -import subprocess - -from retrying import retry - -logger = logging.getLogger(__name__) - - -class DefaultParameterServer(): - ROLES = ['worker', 'scheduler', 'server'] - - def __init__(self, hosts, ps_port='8000', ps_verbose='0'): - self.ps_verbose = ps_verbose - self.ps_port = ps_port - self.hosts = hosts - self.scheduler = self._scheduler_host() - - def _scheduler_host(self): - return sorted(self.hosts)[0] - - @contextmanager - def setup(self, current_host): - if len(self.hosts) == 1: - logger.info('Only one host, so skipping setting up a parameter server') - else: - self._verify_hosts(self.hosts) - - logger.info('Starting distributed training task') - if self.scheduler == current_host: - self._run_mxnet_process('scheduler') - self._run_mxnet_process('server') - os.environ.update(self._env_vars_for_role('worker')) - - yield - - @retry(stop_max_delay=1000 * 60 * 15, wait_exponential_multiplier=100, - wait_exponential_max=30000) - def _host_lookup(self, host): - return socket.gethostbyname(host) - - def _env_vars_for_role(self, role): - if role in self.ROLES: - return { - 'DMLC_NUM_WORKER': str(len(self.hosts)), - 'DMLC_NUM_SERVER': str(len(self.hosts)), - 'DMLC_ROLE': role, - 'DMLC_PS_ROOT_URI': self._host_lookup(self.scheduler), - 'DMLC_PS_ROOT_PORT': self.ps_port, - 'PS_VERBOSE': self.ps_verbose, - } - - raise ValueError('Unexpected role: {}'.format(role)) - - def _run_mxnet_process(self, role): - role_env = os.environ.copy() - role_env.update(self._env_vars_for_role(role)) - return subprocess.Popen("python -c 'import mxnet'", shell=True, env=role_env).pid - - def _verify_hosts(self, hosts): - for host in hosts: - self._host_lookup(host) diff --git a/src/sagemaker_mxnet_container/training.py b/src/sagemaker_mxnet_container/training.py index 6bc3ec31..71fd6009 100644 --- a/src/sagemaker_mxnet_container/training.py +++ b/src/sagemaker_mxnet_container/training.py @@ -13,14 +13,67 @@ from __future__ import absolute_import import logging +import os +import socket +import subprocess +from retrying import retry import sagemaker_containers.beta.framework as framework +from sagemaker_mxnet_container.training_utils import scheduler_host + +LAUNCH_PS_ENV_NAME = 'sagemaker_mxnet_launch_parameter_server' +ROLES = ['worker', 'scheduler', 'server'] + logger = logging.getLogger(__name__) +def _env_vars_for_role(role, hosts, ps_port, ps_verbose): + if role in ROLES: + return { + 'DMLC_NUM_WORKER': str(len(hosts)), + 'DMLC_NUM_SERVER': str(len(hosts)), + 'DMLC_ROLE': role, + 'DMLC_PS_ROOT_URI': _host_lookup(scheduler_host(hosts)), + 'DMLC_PS_ROOT_PORT': ps_port, + 'PS_VERBOSE': ps_verbose, + } + + raise ValueError('Unexpected role: {}'.format(role)) + + +def _run_mxnet_process(role, hosts, ps_port, ps_verbose): + role_env = os.environ.copy() + role_env.update(_env_vars_for_role(role, hosts, ps_port, ps_verbose)) + subprocess.Popen("python -c 'import mxnet'", shell=True, env=role_env).pid + + +@retry(stop_max_delay=1000 * 60 * 15, wait_exponential_multiplier=100, + wait_exponential_max=30000) +def _host_lookup(host): + return socket.gethostbyname(host) + + +def _verify_hosts(hosts): + for host in hosts: + _host_lookup(host) + + def train(env): logger.info('MXNet training environment: {}'.format(env.to_env_vars())) + + if env.additional_framework_parameters.get(LAUNCH_PS_ENV_NAME, False): + _verify_hosts(env.hosts) + + ps_port = env.hyperparameters.get('_ps_port', '8000') + ps_verbose = env.hyperparameters.get('_ps_verbose', '0') + + logger.info('Starting distributed training task') + if scheduler_host(env.hosts) == env.current_host: + _run_mxnet_process('scheduler', env.hosts, ps_port, ps_verbose) + _run_mxnet_process('server', env.hosts, ps_port, ps_verbose) + os.environ.update(_env_vars_for_role('worker', env.hosts, ps_port, ps_verbose)) + framework.modules.run_module(env.module_dir, env.to_cmd_args(), env.to_env_vars(), env.module_name) diff --git a/src/sagemaker_mxnet_container/default_save.py b/src/sagemaker_mxnet_container/training_utils.py similarity index 58% rename from src/sagemaker_mxnet_container/default_save.py rename to src/sagemaker_mxnet_container/training_utils.py index 87bac457..5168d2bf 100644 --- a/src/sagemaker_mxnet_container/default_save.py +++ b/src/sagemaker_mxnet_container/training_utils.py @@ -20,8 +20,8 @@ SHAPES_PATH = 'model-shapes.json' -def save(model_dir, model): - """Save an MXNet Module to a given location. +def save(model_dir, model, current_host=None, hosts=None): + """Save an MXNet Module to a given location if the current host is the scheduler host. This generates three files in the model directory: @@ -37,10 +37,26 @@ def save(model_dir, model): model_dir (str): the directory for saving the model model (mxnet.mod.Module): the module to be saved """ - model.symbol.save(os.path.join(model_dir, SYMBOL_PATH)) - model.save_params(os.path.join(model_dir, PARAMS_PATH)) + current_host = current_host or os.environ['SM_CURRENT_HOST'] + hosts = hosts or json.loads(os.environ['SM_HOSTS']) - signature = [{'name': data_desc.name, 'shape': [dim for dim in data_desc.shape]} - for data_desc in model.data_shapes] - with open(os.path.join(model_dir, SHAPES_PATH), 'w') as f: - json.dump(signature, f) + if current_host == scheduler_host(hosts): + model.symbol.save(os.path.join(model_dir, SYMBOL_PATH)) + model.save_params(os.path.join(model_dir, PARAMS_PATH)) + + signature = [{'name': data_desc.name, 'shape': [dim for dim in data_desc.shape]} + for data_desc in model.data_shapes] + with open(os.path.join(model_dir, SHAPES_PATH), 'w') as f: + json.dump(signature, f) + + +def scheduler_host(hosts): + """Return which host in a list of hosts serves as the scheduler for a parameter server setup. + + Args: + hosts (list[str]): a list of hosts + + Returns: + str: the name of the scheduler host + """ + return hosts[0] diff --git a/test/integration/local/test_mnist_training.py b/test/integration/local/test_mnist_training.py index 7cfa9787..84597458 100644 --- a/test/integration/local/test_mnist_training.py +++ b/test/integration/local/test_mnist_training.py @@ -46,7 +46,8 @@ def test_mnist_training_and_serving(docker_image, sagemaker_local_session, local def test_distributed_mnist_training(docker_image, sagemaker_local_session): mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=2, train_instance_type='local', sagemaker_session=sagemaker_local_session, - image_name=docker_image) + image_name=docker_image, + hyperparameters={'sagemaker_mxnet_launch_parameter_server': True}) _train_and_assert_success(mx) diff --git a/test/integration/sagemaker/test_mnist_distributed.py b/test/integration/sagemaker/test_mnist_distributed.py index f1ea3564..62863e66 100644 --- a/test/integration/sagemaker/test_mnist_distributed.py +++ b/test/integration/sagemaker/test_mnist_distributed.py @@ -28,7 +28,8 @@ def test_mxnet_distributed(sagemaker_session, ecr_image, instance_type): mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=2, train_instance_type=instance_type, sagemaker_session=sagemaker_session, - image_name=ecr_image) + image_name=ecr_image, + hyperparameters={'sagemaker_mxnet_launch_parameter_server': True}) prefix = 'mxnet_mnist/{}'.format(sagemaker_timestamp()) diff --git a/test/resources/linear_regression/linear_regression.py b/test/resources/linear_regression/linear_regression.py index dd2a0328..d4ebfc91 100644 --- a/test/resources/linear_regression/linear_regression.py +++ b/test/resources/linear_regression/linear_regression.py @@ -20,7 +20,7 @@ import mxnet as mx import numpy as np -from sagemaker_mxnet_container.default_save import save +from sagemaker_mxnet_container.training_utils import save def train(num_cpus, num_gpus, channel_input_dirs): diff --git a/test/resources/mnist/mnist.py b/test/resources/mnist/mnist.py index ea095644..0b6b603b 100644 --- a/test/resources/mnist/mnist.py +++ b/test/resources/mnist/mnist.py @@ -20,7 +20,7 @@ import mxnet as mx import numpy as np -from sagemaker_mxnet_container.distributed import DefaultParameterServer +from sagemaker_mxnet_container.training_utils import scheduler_host def load_data(path): @@ -59,7 +59,7 @@ def get_train_context(num_gpus): def train(batch_size, epochs, learning_rate, num_gpus, training_channel, testing_channel, - hosts, current_host, scheduler_host, model_dir): + hosts, current_host, model_dir): (train_labels, train_images) = load_data(training_channel) (test_labels, test_images) = load_data(testing_channel) @@ -91,7 +91,7 @@ def train(batch_size, epochs, learning_rate, num_gpus, training_channel, testing batch_end_callback=mx.callback.Speedometer(batch_size, 100), num_epoch=epochs) - if len(hosts) == 1 or scheduler_host == current_host: + if len(hosts) == 1 or current_host == scheduler_host(hosts): save(model_dir, mlp_model) @@ -123,7 +123,5 @@ def save(model_dir, model): num_gpus = int(os.environ['SM_NUM_GPUS']) - distributed_server = DefaultParameterServer(args.hosts) - with distributed_server.setup(args.current_host): - train(args.batch_size, args.epochs, args.learning_rate, num_gpus, args.train, args.test, - args.hosts, args.current_host, distributed_server.scheduler, args.model_dir) + train(args.batch_size, args.epochs, args.learning_rate, num_gpus, args.train, args.test, + args.hosts, args.current_host, args.model_dir) diff --git a/test/unit/test_default_save.py b/test/unit/test_default_save.py deleted file mode 100644 index 05a6b1ad..00000000 --- a/test/unit/test_default_save.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the 'License'). You -# may not use this file except in compliance with the License. A copy of -# the License is located at -# -# http://aws.amazon.com/apache2.0/ -# -# or in the 'license' file accompanying this file. This file is -# distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF -# ANY KIND, either express or implied. See the License for the specific -# language governing permissions and limitations under the License. -from __future__ import absolute_import - -import os - -from mock import Mock, mock_open, patch - -from sagemaker_mxnet_container import default_save - - -@patch('json.dump') -def test_save(json_dump): - model_dir = 'foo/model' - model = Mock() - model.data_shapes = [] - - with patch('six.moves.builtins.open', mock_open(read_data=Mock())): - default_save.save(model_dir, model) - - model.symbol.save.assert_called_with(os.path.join(model_dir, 'model-symbol.json')) - model.save_params.assert_called_with(os.path.join(model_dir, 'model-0000.params')) - json_dump.assert_called_once diff --git a/test/unit/test_distributed.py b/test/unit/test_distributed.py deleted file mode 100644 index e7d06e6e..00000000 --- a/test/unit/test_distributed.py +++ /dev/null @@ -1,111 +0,0 @@ -# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the 'License'). You -# may not use this file except in compliance with the License. A copy of -# the License is located at -# -# http://aws.amazon.com/apache2.0/ -# -# or in the 'license' file accompanying this file. This file is -# distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF -# ANY KIND, either express or implied. See the License for the specific -# language governing permissions and limitations under the License. -from __future__ import absolute_import - -from mock import call, patch - -from sagemaker_mxnet_container.distributed import DefaultParameterServer - -SCHEDULER = 'host-1' -SINGLE_HOST_LIST = [SCHEDULER] -MULTIPLE_HOSTS_LIST = ['host-2', SCHEDULER, 'host-3'] - -IP_ADDRESS = '0.0.0.0000' -DEFAULT_PORT = '8000' -DEFAULT_VERBOSITY = '0' -BASE_ENV_VARS = { - 'DMLC_NUM_WORKER': str(len(MULTIPLE_HOSTS_LIST)), - 'DMLC_NUM_SERVER': str(len(MULTIPLE_HOSTS_LIST)), - 'DMLC_PS_ROOT_URI': IP_ADDRESS, - 'DMLC_PS_ROOT_PORT': DEFAULT_PORT, - 'PS_VERBOSE': DEFAULT_VERBOSITY, -} - -MXNET_COMMAND = "python -c 'import mxnet'" - - -def test_init_for_single_host_with_defaults(): - server = DefaultParameterServer(SINGLE_HOST_LIST) - - assert server.hosts == SINGLE_HOST_LIST - assert server.scheduler == SCHEDULER - assert server.ps_port == DEFAULT_PORT - assert server.ps_verbose == DEFAULT_VERBOSITY - - -def test_init_for_multiple_hosts_and_ps_options(): - port = '8080' - verbosity = '1' - server = DefaultParameterServer(MULTIPLE_HOSTS_LIST, ps_port=port, ps_verbose=verbosity) - - assert server.hosts == MULTIPLE_HOSTS_LIST - assert server.scheduler == SCHEDULER - assert server.ps_port == port - assert server.ps_verbose == verbosity - - -def test_scheduler_host(): - server = DefaultParameterServer(MULTIPLE_HOSTS_LIST) - assert server._scheduler_host() == SCHEDULER - - -@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._run_mxnet_process') -def test_setup_for_single_host(run_process): - server = DefaultParameterServer(SINGLE_HOST_LIST) - server.setup(SCHEDULER) - - run_process.assert_not_called() - - -@patch('os.environ', {}) -@patch('subprocess.Popen') -@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._host_lookup') -@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._verify_hosts') -def test_setup_for_distributed_scheduler(verify_hosts, host_lookup, popen): - host_lookup.return_value = IP_ADDRESS - - server = DefaultParameterServer(MULTIPLE_HOSTS_LIST) - with server.setup(SCHEDULER): - pass - - verify_hosts.assert_called_with(MULTIPLE_HOSTS_LIST) - - scheduler_env = BASE_ENV_VARS.copy() - scheduler_env.update({'DMLC_ROLE': 'scheduler'}) - - server_env = BASE_ENV_VARS.copy() - server_env.update({'DMLC_ROLE': 'server'}) - - calls = [call(MXNET_COMMAND, shell=True, env=scheduler_env), - call(MXNET_COMMAND, shell=True, env=server_env)] - - popen.assert_has_calls(calls) - - -@patch('os.environ', {}) -@patch('subprocess.Popen') -@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._host_lookup') -@patch('sagemaker_mxnet_container.distributed.DefaultParameterServer._verify_hosts') -def test_setup_for_distributed_worker(verify_hosts, host_lookup, popen): - host_lookup.return_value = IP_ADDRESS - - server = DefaultParameterServer(MULTIPLE_HOSTS_LIST) - with server.setup('host-2'): - pass - - verify_hosts.assert_called_with(MULTIPLE_HOSTS_LIST) - - server_env = BASE_ENV_VARS.copy() - server_env.update({'DMLC_ROLE': 'server'}) - - popen.assert_called_once_with(MXNET_COMMAND, shell=True, env=server_env) diff --git a/test/unit/test_training.py b/test/unit/test_training.py index 5e80f983..9980829f 100644 --- a/test/unit/test_training.py +++ b/test/unit/test_training.py @@ -1,4 +1,4 @@ -# Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You # may not use this file except in compliance with the License. A copy of @@ -12,7 +12,7 @@ # language governing permissions and limitations under the License. from __future__ import absolute_import -from mock import MagicMock, patch +from mock import call, MagicMock, patch import pytest from sagemaker_mxnet_container import training @@ -20,20 +20,101 @@ MODULE_DIR = 's3://my/bucket' MODULE_NAME = 'script_name' +SCHEDULER = 'host-1' +SINGLE_HOST_LIST = [SCHEDULER] +MULTIPLE_HOST_LIST = [SCHEDULER, 'host-2', 'host-3'] + + +IP_ADDRESS = '0.0.0.0000' +DEFAULT_PORT = '8000' +DEFAULT_VERBOSITY = '0' +BASE_ENV_VARS = { + 'DMLC_NUM_WORKER': str(len(MULTIPLE_HOST_LIST)), + 'DMLC_NUM_SERVER': str(len(MULTIPLE_HOST_LIST)), + 'DMLC_PS_ROOT_URI': IP_ADDRESS, + 'DMLC_PS_ROOT_PORT': DEFAULT_PORT, + 'PS_VERBOSE': DEFAULT_VERBOSITY, +} + +MXNET_COMMAND = "python -c 'import mxnet'" + @pytest.fixture def single_machine_training_env(): env = MagicMock() + env.module_dir = MODULE_DIR + env.module_name = MODULE_NAME + env.hyperparameters = {} + env.additional_framework_parameters = {} + + return env + + +@pytest.fixture +def distributed_training_env(): + env = MagicMock() + env.module_dir = MODULE_DIR env.module_name = MODULE_NAME env.hyperparameters = {} + env.hosts = MULTIPLE_HOST_LIST + env.additional_framework_parameters = { + training.LAUNCH_PS_ENV_NAME: True, + } + return env +@patch('os.environ', {}) +@patch('subprocess.Popen') +@patch('sagemaker_mxnet_container.training._host_lookup') +@patch('sagemaker_mxnet_container.training._verify_hosts') +@patch('sagemaker_containers.beta.framework.modules.run_module') +def test_train_for_distributed_scheduler(run_module, verify_hosts, host_lookup, popen, + distributed_training_env): + host_lookup.return_value = IP_ADDRESS + + distributed_training_env.current_host = SCHEDULER + training.train(distributed_training_env) + + verify_hosts.assert_called_with(MULTIPLE_HOST_LIST) + + scheduler_env = BASE_ENV_VARS.copy() + scheduler_env.update({'DMLC_ROLE': 'scheduler'}) + + server_env = BASE_ENV_VARS.copy() + server_env.update({'DMLC_ROLE': 'server'}) + + calls = [call(MXNET_COMMAND, shell=True, env=scheduler_env), + call(MXNET_COMMAND, shell=True, env=server_env)] + + popen.assert_has_calls(calls) + + +@patch('os.environ', {}) +@patch('subprocess.Popen') +@patch('sagemaker_mxnet_container.training._host_lookup') +@patch('sagemaker_mxnet_container.training._verify_hosts') +@patch('sagemaker_containers.beta.framework.modules.run_module') +def test_train_for_distributed_worker(run_module, verify_hosts, host_lookup, popen, + distributed_training_env): + host_lookup.return_value = IP_ADDRESS + + distributed_training_env.current_host = 'host-2' + training.train(distributed_training_env) + + verify_hosts.assert_called_with(MULTIPLE_HOST_LIST) + + server_env = BASE_ENV_VARS.copy() + server_env.update({'DMLC_ROLE': 'server'}) + + popen.assert_called_once_with(MXNET_COMMAND, shell=True, env=server_env) + + @patch('sagemaker_containers.beta.framework.modules.run_module') -def test_single_machine(run_module, single_machine_training_env): +def test_train_for_single_machine(run_module, single_machine_training_env): training.train(single_machine_training_env) run_module.assert_called_with(MODULE_DIR, single_machine_training_env.to_cmd_args(), single_machine_training_env.to_env_vars(), MODULE_NAME) diff --git a/test/unit/test_training_utils.py b/test/unit/test_training_utils.py new file mode 100644 index 00000000..061ed7c7 --- /dev/null +++ b/test/unit/test_training_utils.py @@ -0,0 +1,69 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the 'license' file accompanying this file. This file is +# distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +import json +import os + +from mock import Mock, mock_open, patch + +from sagemaker_mxnet_container import training_utils + +SCHEDULER_HOST = 'host-1' +WORKER_HOST = 'host-2' +MODEL_DIR = 'foo/model' + + +@patch('json.dump') +@patch('os.environ', {'SM_CURRENT_HOST': SCHEDULER_HOST, 'SM_HOSTS': json.dumps([SCHEDULER_HOST])}) +def test_save_single_machine(json_dump): + model = Mock() + model.data_shapes = [] + + with patch('six.moves.builtins.open', mock_open(read_data=Mock())): + training_utils.save(MODEL_DIR, model) + + model.symbol.save.assert_called_with(os.path.join(MODEL_DIR, 'model-symbol.json')) + model.save_params.assert_called_with(os.path.join(MODEL_DIR, 'model-0000.params')) + json_dump.assert_called_once + + +@patch('json.dump') +def test_save_distributed(json_dump): + model = Mock() + model.data_shapes = [] + + with patch('six.moves.builtins.open', mock_open(read_data=Mock())): + training_utils.save(MODEL_DIR, model, current_host=SCHEDULER_HOST, + hosts=[SCHEDULER_HOST, WORKER_HOST]) + + model.symbol.save.assert_called_with(os.path.join(MODEL_DIR, 'model-symbol.json')) + model.save_params.assert_called_with(os.path.join(MODEL_DIR, 'model-0000.params')) + json_dump.assert_called_once + + +def test_save_for_non_scheduler_host(): + model = Mock() + training_utils.save(MODEL_DIR, model, current_host=WORKER_HOST, + hosts=[SCHEDULER_HOST, WORKER_HOST]) + + model.symbol.save.assert_not_called + model.save_params.assert_not_called + + +def test_single_machine_scheduler_host(): + assert training_utils.scheduler_host([SCHEDULER_HOST]) == SCHEDULER_HOST + + +def test_distributed_scheduler_host(): + assert training_utils.scheduler_host([SCHEDULER_HOST, WORKER_HOST]) == SCHEDULER_HOST From 955e41c3db72576a5a9ab7d55bfc3e371b905100 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Mon, 29 Oct 2018 12:29:56 -0700 Subject: [PATCH 10/18] Update testing section of the README (#44) --- README.rst | 81 +++++++++---------- test/conftest.py | 10 +-- test/integration/local/test_keras_training.py | 5 +- .../local/test_linear_regression.py | 6 +- test/integration/local/test_mnist_training.py | 9 ++- .../sagemaker/test_mnist_distributed.py | 4 +- 6 files changed, 58 insertions(+), 57 deletions(-) diff --git a/README.rst b/README.rst index dc7ac47b..9fc5f3bb 100644 --- a/README.rst +++ b/README.rst @@ -172,19 +172,18 @@ If you want to run unit tests, then use: pytest test/unit -Integration Tests -~~~~~~~~~~~~~~~~~ +Local Integration Tests +~~~~~~~~~~~~~~~~~~~~~~~ -Running integration tests require `Docker `__ and `AWS +Running local integration tests require `Docker `__ and `AWS credentials `__, -as the integration tests make calls to a couple AWS services. The integration and functional +as the integration tests make calls to a couple AWS services. All integration tests require configurations specified within their respective -`conftest.py `__. +`conftest.py `__. -Integration tests on GPU require `Nvidia-Docker `__. +Local integration tests on GPU require `Nvidia-Docker `__. -Before running integration tests: +Before running local integration tests: #. Build your Docker image. #. Pass in the correct pytest arguments to run tests against your Docker image. @@ -193,72 +192,70 @@ If you want to run local integration tests, then use: :: - # Required arguments for integration tests are found in test/integ/conftest.py + # Required arguments for integration tests are found in test/conftest.py - pytest test/integ --docker-base-name \ - --tag \ - --py-version <2_or_3> \ - --framework-version \ - --processor + pytest test/integration/local --docker-base-name \ + --tag \ + --py-version <2_or_3> \ + --framework-version \ + --processor :: # Example - pytest test/integ --docker-base-name preprod-mxnet \ - --tag 1.0 \ - --py-version 2 \ - --framework-version 0.12.1 \ - --processor cpu + pytest test/integration/local --docker-base-name preprod-mxnet \ + --tag 1.0 \ + --py-version 2 \ + --framework-version 0.12.1 \ + --processor cpu -Functional Tests -~~~~~~~~~~~~~~~~ +SageMaker Integration Tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Functional tests require your Docker image to be within an `Amazon ECR repository `__. -The Docker-base-name is your `ECR repository namespace `__. -The instance-type is your specified `Amazon SageMaker Instance Type -`__ that the functional test will run on. +The instance type is your specified `Amazon SageMaker Instance Type +`__ that the tests will run on. -Before running functional tests: +Before running SageMaker Integration tests: #. Build your Docker image. #. Push the image to your ECR repository. #. Pass in the correct pytest arguments to run tests on SageMaker against the image within your ECR repository. -If you want to run a functional end to end test on `Amazon -SageMaker `__, then use: +If you want to run an integration test on `Amazon SageMaker `__, then use: :: - # Required arguments for integration tests are found in test/functional/conftest.py + # Required arguments for integration tests are found in test/conftest.py - pytest test/functional --aws-id \ - --docker-base-name \ - --instance-type \ - --tag \ + pytest test/integration/sagmaker --aws-id \ + --docker-base-name \ + --instance-type \ + --tag \ :: # Example - pytest test/functional --aws-id 12345678910 \ - --docker-base-name preprod-mxnet \ - --instance-type ml.m4.xlarge \ - --tag 1.0 + pytest test/integration/sagemaker --aws-id 12345678910 \ + --docker-base-name preprod-mxnet \ + --instance-type ml.m4.xlarge \ + --tag 1.3.0-cpu-py3 Contributing ------------ Please read `CONTRIBUTING.md `__ -for details on our code of conduct, and the process for submitting pull -requests to us. +for details on our code of conduct, and the process for submitting pull requests to us. License ------- -SageMaker MXNet Containers is licensed under the Apache 2.0 License. It is copyright 2018 Amazon -.com, Inc. or its affiliates. All Rights Reserved. The license is available at: -http://aws.amazon.com/apache2.0/ +SageMaker MXNet Containers is licensed under the Apache 2.0 License. +It is copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +The license is available at: http://aws.amazon.com/apache2.0/ diff --git a/test/conftest.py b/test/conftest.py index 7193c0ca..410fddb2 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -38,7 +38,7 @@ def pytest_addoption(parser): parser.addoption('--framework-version', default='1.2.1') parser.addoption('--py-version', default='3', choices=['2', '3']) parser.addoption('--processor', default='cpu', choices=['gpu', 'cpu']) - parser.addoption('--account-id', default=None) + parser.addoption('--aws-id', default=None) parser.addoption('--instance-type', default=None) # If not specified, will default to {framework-version}-{processor}-py{py-version} parser.addoption('--tag', default=None) @@ -70,8 +70,8 @@ def processor(request): @pytest.fixture(scope='session') -def account_id(request): - return request.config.getoption('--account-id') +def aws_id(request): + return request.config.getoption('--aws-id') @pytest.fixture(scope='session') @@ -93,8 +93,8 @@ def docker_image(docker_base_name, tag): @pytest.fixture(scope='session') -def ecr_image(account_id, docker_base_name, tag, region): - return '{}.dkr.ecr.{}.amazonaws.com/{}:{}'.format(account_id, region, docker_base_name, tag) +def ecr_image(aws_id, docker_base_name, tag, region): + return '{}.dkr.ecr.{}.amazonaws.com/{}:{}'.format(aws_id, region, docker_base_name, tag) @pytest.fixture(scope='session') diff --git a/test/integration/local/test_keras_training.py b/test/integration/local/test_keras_training.py index 9ea7e9f9..ebec43d2 100644 --- a/test/integration/local/test_keras_training.py +++ b/test/integration/local/test_keras_training.py @@ -19,13 +19,14 @@ from test.integration import MODEL_SUCCESS_FILES, RESOURCE_PATH -def test_keras_training(docker_image, sagemaker_local_session, local_instance_type): +def test_keras_training(docker_image, sagemaker_local_session, local_instance_type, + framework_version): keras_path = os.path.join(RESOURCE_PATH, 'keras') script_path = os.path.join(keras_path, 'keras_mnist.py') mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=1, train_instance_type=local_instance_type, sagemaker_session=sagemaker_local_session, - image_name=docker_image) + image_name=docker_image, framework_version=framework_version) train = 'file://{}'.format(os.path.join(keras_path, 'data')) mx.fit({'train': train}) diff --git a/test/integration/local/test_linear_regression.py b/test/integration/local/test_linear_regression.py index a26dfca5..9e917f2b 100644 --- a/test/integration/local/test_linear_regression.py +++ b/test/integration/local/test_linear_regression.py @@ -19,12 +19,14 @@ from test.integration import MODEL_SUCCESS_FILES, RESOURCE_PATH -def test_linear_regression(docker_image, sagemaker_local_session, local_instance_type): +def test_linear_regression(docker_image, sagemaker_local_session, local_instance_type, + framework_version): lr_path = os.path.join(RESOURCE_PATH, 'linear_regression') mx = MXNet(entry_point=os.path.join(lr_path, 'linear_regression.py'), role='SageMakerRole', train_instance_count=1, train_instance_type=local_instance_type, - sagemaker_session=sagemaker_local_session, image_name=docker_image) + sagemaker_session=sagemaker_local_session, image_name=docker_image, + framework_version=framework_version) data_path = os.path.join(lr_path, 'data') s3_prefix = 'integ-test-data/mxnet-linear-regression' diff --git a/test/integration/local/test_mnist_training.py b/test/integration/local/test_mnist_training.py index 84597458..c3755518 100644 --- a/test/integration/local/test_mnist_training.py +++ b/test/integration/local/test_mnist_training.py @@ -27,10 +27,11 @@ TEST_INPUT = 'file://{}'.format(os.path.join(MNIST_PATH, 'test')) -def test_mnist_training_and_serving(docker_image, sagemaker_local_session, local_instance_type): +def test_mnist_training_and_serving(docker_image, sagemaker_local_session, local_instance_type, + framework_version): mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=1, train_instance_type=local_instance_type, sagemaker_session=sagemaker_local_session, - image_name=docker_image) + image_name=docker_image, framework_version=framework_version) _train_and_assert_success(mx) @@ -43,10 +44,10 @@ def test_mnist_training_and_serving(docker_image, sagemaker_local_session, local mx.delete_endpoint() -def test_distributed_mnist_training(docker_image, sagemaker_local_session): +def test_distributed_mnist_training(docker_image, sagemaker_local_session, framework_version): mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=2, train_instance_type='local', sagemaker_session=sagemaker_local_session, - image_name=docker_image, + image_name=docker_image, framework_version=framework_version, hyperparameters={'sagemaker_mxnet_launch_parameter_server': True}) _train_and_assert_success(mx) diff --git a/test/integration/sagemaker/test_mnist_distributed.py b/test/integration/sagemaker/test_mnist_distributed.py index 62863e66..0117a97b 100644 --- a/test/integration/sagemaker/test_mnist_distributed.py +++ b/test/integration/sagemaker/test_mnist_distributed.py @@ -22,13 +22,13 @@ from timeout import timeout, timeout_and_delete_endpoint -def test_mxnet_distributed(sagemaker_session, ecr_image, instance_type): +def test_mxnet_distributed(sagemaker_session, ecr_image, instance_type, framework_version): data_path = os.path.join(RESOURCE_PATH, 'mnist') script_path = os.path.join(data_path, 'mnist.py') mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=2, train_instance_type=instance_type, sagemaker_session=sagemaker_session, - image_name=ecr_image, + image_name=ecr_image, framework_version=framework_version, hyperparameters={'sagemaker_mxnet_launch_parameter_server': True}) prefix = 'mxnet_mnist/{}'.format(sagemaker_timestamp()) From f1ef54642efc794a17c525e7a1a623c0131affb7 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Wed, 31 Oct 2018 21:04:14 -0700 Subject: [PATCH 11/18] Set number of model workers for inference server (#45) This should mitigate the worker timeouts we've seen in some very specific cases. --- test/integration/__init__.py | 3 +++ test/integration/local/test_default_model_fn.py | 5 +++-- test/integration/local/test_gluon_hosting.py | 5 +++-- test/integration/local/test_hosting.py | 5 +++-- test/integration/local/test_mnist_training.py | 5 +++-- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/test/integration/__init__.py b/test/integration/__init__.py index c4f253e2..cbf71718 100644 --- a/test/integration/__init__.py +++ b/test/integration/__init__.py @@ -22,3 +22,6 @@ os.path.join('model', 'model-shapes.json'), os.path.join('model', 'model-0000.params'), ] + +# Workaround for the intermittent worker timeout errors +NUM_MODEL_SERVER_WORKERS = 2 diff --git a/test/integration/local/test_default_model_fn.py b/test/integration/local/test_default_model_fn.py index 552b6cf1..97536751 100644 --- a/test/integration/local/test_default_model_fn.py +++ b/test/integration/local/test_default_model_fn.py @@ -17,7 +17,7 @@ from sagemaker.mxnet.model import MXNetModel import local_mode -from test.integration import RESOURCE_PATH +from test.integration import NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH # The image should serve a MXNet model saved in the @@ -26,7 +26,8 @@ def test_default_model_fn(docker_image, sagemaker_local_session, local_instance_ default_handler_path = os.path.join(RESOURCE_PATH, 'default_handlers') m = MXNetModel(os.path.join('file://', default_handler_path, 'model'), 'SageMakerRole', os.path.join(default_handler_path, 'code', 'empty_module.py'), - image=docker_image, sagemaker_session=sagemaker_local_session) + image=docker_image, sagemaker_session=sagemaker_local_session, + model_server_workers=NUM_MODEL_SERVER_WORKERS) input = [[1, 2]] diff --git a/test/integration/local/test_gluon_hosting.py b/test/integration/local/test_gluon_hosting.py index e74325c4..59cdf4dd 100644 --- a/test/integration/local/test_gluon_hosting.py +++ b/test/integration/local/test_gluon_hosting.py @@ -18,7 +18,7 @@ from sagemaker.mxnet.model import MXNetModel import local_mode -from test.integration import RESOURCE_PATH +from test.integration import NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH # The image should support serving Gluon-created models. @@ -26,7 +26,8 @@ def test_gluon_hosting(docker_image, sagemaker_local_session, local_instance_typ gluon_path = os.path.join(RESOURCE_PATH, 'gluon_hosting') m = MXNetModel(os.path.join('file://', gluon_path, 'model'), 'SageMakerRole', os.path.join(gluon_path, 'code', 'gluon.py'), image=docker_image, - sagemaker_session=sagemaker_local_session) + sagemaker_session=sagemaker_local_session, + model_server_workers=NUM_MODEL_SERVER_WORKERS) with open(os.path.join(RESOURCE_PATH, 'mnist_images', '04.json'), 'r') as f: input = json.load(f) diff --git a/test/integration/local/test_hosting.py b/test/integration/local/test_hosting.py index e00bd004..0bcdfd13 100644 --- a/test/integration/local/test_hosting.py +++ b/test/integration/local/test_hosting.py @@ -18,7 +18,7 @@ from sagemaker.mxnet.model import MXNetModel import local_mode -from test.integration import RESOURCE_PATH +from test.integration import NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH # The image should use the model_fn and transform_fn defined @@ -27,7 +27,8 @@ def test_hosting(docker_image, sagemaker_local_session, local_instance_type): hosting_resource_path = os.path.join(RESOURCE_PATH, 'dummy_hosting') m = MXNetModel(os.path.join('file://', hosting_resource_path, 'code'), 'SageMakerRole', os.path.join(hosting_resource_path, 'code', 'dummy_hosting_module.py'), - image=docker_image, sagemaker_session=sagemaker_local_session) + image=docker_image, sagemaker_session=sagemaker_local_session, + model_server_workers=NUM_MODEL_SERVER_WORKERS) input = json.dumps({'some': 'json'}) diff --git a/test/integration/local/test_mnist_training.py b/test/integration/local/test_mnist_training.py index c3755518..531ff7c3 100644 --- a/test/integration/local/test_mnist_training.py +++ b/test/integration/local/test_mnist_training.py @@ -18,7 +18,7 @@ from sagemaker.mxnet import MXNet import local_mode -from test.integration import MODEL_SUCCESS_FILES, RESOURCE_PATH +from test.integration import MODEL_SUCCESS_FILES, NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH MNIST_PATH = os.path.join(RESOURCE_PATH, 'mnist') SCRIPT_PATH = os.path.join(MNIST_PATH, 'mnist.py') @@ -37,7 +37,8 @@ def test_mnist_training_and_serving(docker_image, sagemaker_local_session, local with local_mode.lock(): try: - predictor = mx.deploy(1, local_instance_type) + model = mx.create_model(model_server_workers=NUM_MODEL_SERVER_WORKERS) + predictor = model.deploy(1, local_instance_type) data = numpy.zeros(shape=(1, 1, 28, 28)) predictor.predict(data) finally: From cdb9d28ec849ca33477bd1ac3493fc97d8c17c57 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Thu, 1 Nov 2018 12:10:50 -0700 Subject: [PATCH 12/18] Fix inference for CSV and limit valid content types (#46) --- src/sagemaker_mxnet_container/serving.py | 40 ++++++++++++++++-- test/unit/test_serving.py | 52 +++++++++++++++++++++--- 2 files changed, 83 insertions(+), 9 deletions(-) diff --git a/src/sagemaker_mxnet_container/serving.py b/src/sagemaker_mxnet_container/serving.py index 6403d117..5cab1374 100644 --- a/src/sagemaker_mxnet_container/serving.py +++ b/src/sagemaker_mxnet_container/serving.py @@ -17,7 +17,8 @@ import os import mxnet as mx -from sagemaker_containers.beta.framework import encoders, env, modules, transformer, worker +from sagemaker_containers.beta.framework import (content_types, encoders, env, errors, modules, + transformer, worker) logger = logging.getLogger(__name__) @@ -95,6 +96,8 @@ class MXNetTransformer(transformer.Transformer): """Base class for creating Transformers with default methods for use with MXNet models. """ + VALID_CONTENT_TYPES = (content_types.JSON) + def __init__(self, model=None, model_fn=None, input_fn=None, predict_fn=None, output_fn=None, error_class=None): """Initialize an ``MXNetTransformer``. For each function, if one is not specified, @@ -141,9 +144,16 @@ def default_input_fn(self, input_data, content_type): Returns: mxnet.nd.array: an MXNet NDArray + + Raises: + sagemaker_containers.beta.framework.errors.UnsupportedFormatError: if an unsupported + content type is used. """ - np_array = encoders.decode(input_data, content_type) - return mx.nd.array(np_array) + if content_type in self.VALID_CONTENT_TYPES: + np_array = encoders.decode(input_data, content_type) + return mx.nd.array(np_array) + else: + raise errors.UnsupportedFormatError(content_type) def default_predict_fn(self, data, model): """Use the model to create a prediction for the data. @@ -166,11 +176,21 @@ def default_output_fn(self, prediction, accept): Returns: sagemaker_containers.beta.framework.worker.Response: a Flask response object + + Raises: + sagemaker_containers.beta.framework.errors.UnsupportedFormatError: if an unsupported + accept type is used. """ - return worker.Response(encoders.encode(prediction.asnumpy().tolist(), accept), accept) + if accept in self.VALID_CONTENT_TYPES: + return worker.Response(encoders.encode(prediction.asnumpy().tolist(), accept), accept) + else: + raise errors.UnsupportedFormatError(accept) class ModuleTransformer(MXNetTransformer): + + VALID_CONTENT_TYPES = (content_types.JSON, content_types.CSV) + def default_input_fn(self, input_data, content_type): """Take request data and deserialize it into an object for prediction. When an InvokeEndpoint operation is made against an Endpoint running SageMaker model server, @@ -187,13 +207,25 @@ def default_input_fn(self, input_data, content_type): Returns: mxnet.io.NDArrayIter: data ready for prediction. + + Raises: + sagemaker_containers.beta.framework.errors.UnsupportedFormatError: if an unsupported + accept type is used. """ + if content_type not in self.VALID_CONTENT_TYPES: + raise errors.UnsupportedFormatError(content_type) + np_array = encoders.decode(input_data, content_type) ndarray = mx.nd.array(np_array) # We require model to only have one input [data_shape] = self._model.data_shapes + # Reshape flattened CSV as specified by the model + if content_type == content_types.CSV: + _, target_shape = data_shape + ndarray = ndarray.reshape(target_shape) + # Batch size is first dimension of model input model_batch_size = data_shape[1][0] pad_rows = max(0, model_batch_size - ndarray.shape[0]) diff --git a/test/unit/test_serving.py b/test/unit/test_serving.py index b58e444b..e88eff41 100644 --- a/test/unit/test_serving.py +++ b/test/unit/test_serving.py @@ -18,7 +18,7 @@ from mock import call, Mock, mock_open, patch import mxnet as mx import pytest -from sagemaker_containers.beta.framework import transformer, worker +from sagemaker_containers.beta.framework import content_types, errors, transformer, worker from sagemaker_mxnet_container.serving import (_user_module_transformer, default_model_fn, GluonBlockTransformer, ModuleTransformer, @@ -66,6 +66,7 @@ def test_mxnet_transformer_init(): assert t._input_fn == t.default_input_fn assert t._predict_fn == t.default_predict_fn assert t._output_fn == t.default_output_fn + assert t.VALID_CONTENT_TYPES == (content_types.JSON) @patch('sagemaker_containers.beta.framework.functions.error_wrapper', lambda x, y: x) @@ -107,7 +108,7 @@ def test_mxnet_transformer_initialize_with_model(transformer_initialize): @patch('sagemaker_containers.beta.framework.encoders.decode', return_value=[0]) def test_mxnet_transformer_default_input_fn(decode): input_data = Mock() - content_type = 'json' + content_type = 'application/json' t = MXNetTransformer() deserialized_data = t.default_input_fn(input_data, content_type) @@ -116,10 +117,18 @@ def test_mxnet_transformer_default_input_fn(decode): assert deserialized_data == mx.nd.array([0]) +def test_mxnet_transformer_default_input_fn_invalid_content_type(): + t = MXNetTransformer() + + with pytest.raises(errors.UnsupportedFormatError) as e: + t.default_input_fn(None, 'bad/content-type') + assert 'Content type bad/content-type is not supported by this framework' in str(e) + + @patch('sagemaker_containers.beta.framework.encoders.encode') def test_mxnet_transformer_default_output_fn(encode): prediction = mx.ndarray.zeros(1) - accept = 'json' + accept = 'application/json' t = MXNetTransformer() response = t.default_output_fn(prediction, accept) @@ -130,21 +139,54 @@ def test_mxnet_transformer_default_output_fn(encode): assert isinstance(response, worker.Response) +def test_mxnet_transformer_default_output_fn_invalid_content_type(): + t = MXNetTransformer() + + with pytest.raises(errors.UnsupportedFormatError) as e: + t.default_output_fn(None, 'bad/content-type') + assert 'Content type bad/content-type is not supported by this framework' in str(e) + + +@patch('mxnet.io.NDArrayIter') +@patch('sagemaker_containers.beta.framework.encoders.decode', return_value=[0]) +def test_module_transformer_default_input_fn_with_json(decode, mx_ndarray_iter): + model = Mock(data_shapes=[(1, (1,))]) + t = ModuleTransformer(model=model) + + input_data = Mock() + content_type = 'application/json' + t.default_input_fn(input_data, content_type) + + decode.assert_called_with(input_data, content_type) + init_call = call(mx.nd.array([0]), batch_size=1, last_batch_handle='pad') + assert init_call in mx_ndarray_iter.mock_calls + + @patch('mxnet.io.NDArrayIter') @patch('sagemaker_containers.beta.framework.encoders.decode', return_value=[0]) -def test_module_transformer_default_input_fn(decode, mx_ndarray_iter): +def test_module_transformer_default_input_fn_with_csv(decode, mx_ndarray_iter): model = Mock(data_shapes=[(1, (1,))]) t = ModuleTransformer(model=model) input_data = Mock() - content_type = 'json' + content_type = 'text/csv' t.default_input_fn(input_data, content_type) + # TODO: check for the reshape call + decode.assert_called_with(input_data, content_type) init_call = call(mx.nd.array([0]), batch_size=1, last_batch_handle='pad') assert init_call in mx_ndarray_iter.mock_calls +def test_module_transformer_default_input_fn_invalid_content_type(): + t = ModuleTransformer() + + with pytest.raises(errors.UnsupportedFormatError) as e: + t.default_input_fn(None, 'bad/content-type') + assert 'Content type bad/content-type is not supported by this framework' in str(e) + + def test_module_transformer_default_predict_fn(): t = ModuleTransformer() module = Mock() From ba779e653b799c2a6125f6ff816e9f6fd6e97b1f Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Thu, 1 Nov 2018 16:03:15 -0700 Subject: [PATCH 13/18] Fix unit test for csv deserialization (#47) * Fix unit test for csv deserialization * fix unit tests --- src/sagemaker_mxnet_container/serving.py | 2 +- test/unit/test_serving.py | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/sagemaker_mxnet_container/serving.py b/src/sagemaker_mxnet_container/serving.py index 5cab1374..5aa98978 100644 --- a/src/sagemaker_mxnet_container/serving.py +++ b/src/sagemaker_mxnet_container/serving.py @@ -96,7 +96,7 @@ class MXNetTransformer(transformer.Transformer): """Base class for creating Transformers with default methods for use with MXNet models. """ - VALID_CONTENT_TYPES = (content_types.JSON) + VALID_CONTENT_TYPES = (content_types.JSON,) def __init__(self, model=None, model_fn=None, input_fn=None, predict_fn=None, output_fn=None, error_class=None): diff --git a/test/unit/test_serving.py b/test/unit/test_serving.py index e88eff41..737c7877 100644 --- a/test/unit/test_serving.py +++ b/test/unit/test_serving.py @@ -66,7 +66,7 @@ def test_mxnet_transformer_init(): assert t._input_fn == t.default_input_fn assert t._predict_fn == t.default_predict_fn assert t._output_fn == t.default_output_fn - assert t.VALID_CONTENT_TYPES == (content_types.JSON) + assert t.VALID_CONTENT_TYPES == (content_types.JSON,) @patch('sagemaker_containers.beta.framework.functions.error_wrapper', lambda x, y: x) @@ -147,6 +147,12 @@ def test_mxnet_transformer_default_output_fn_invalid_content_type(): assert 'Content type bad/content-type is not supported by this framework' in str(e) +def test_module_transformer_init_valid_content_types(): + t = ModuleTransformer() + assert content_types.JSON in t.VALID_CONTENT_TYPES + assert content_types.CSV in t.VALID_CONTENT_TYPES + + @patch('mxnet.io.NDArrayIter') @patch('sagemaker_containers.beta.framework.encoders.decode', return_value=[0]) def test_module_transformer_default_input_fn_with_json(decode, mx_ndarray_iter): @@ -162,9 +168,14 @@ def test_module_transformer_default_input_fn_with_json(decode, mx_ndarray_iter): assert init_call in mx_ndarray_iter.mock_calls +@patch('mxnet.nd.array') @patch('mxnet.io.NDArrayIter') @patch('sagemaker_containers.beta.framework.encoders.decode', return_value=[0]) -def test_module_transformer_default_input_fn_with_csv(decode, mx_ndarray_iter): +def test_module_transformer_default_input_fn_with_csv(decode, mx_ndarray_iter, mx_ndarray): + ndarray = Mock(shape=(1, (1,))) + ndarray.reshape.return_value = ndarray + mx_ndarray.return_value = ndarray + model = Mock(data_shapes=[(1, (1,))]) t = ModuleTransformer(model=model) @@ -172,9 +183,8 @@ def test_module_transformer_default_input_fn_with_csv(decode, mx_ndarray_iter): content_type = 'text/csv' t.default_input_fn(input_data, content_type) - # TODO: check for the reshape call - decode.assert_called_with(input_data, content_type) + ndarray.reshape.assert_called_with((1,)) init_call = call(mx.nd.array([0]), batch_size=1, last_batch_handle='pad') assert init_call in mx_ndarray_iter.mock_calls From 7566e9ec93ab345ce155a8e32a636b59be4c3edd Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Fri, 2 Nov 2018 16:35:54 -0700 Subject: [PATCH 14/18] Add integration test for inference with CSV (#48) --- .gitignore | 1 + test/integration/local/test_mnist_training.py | 18 ++++++++++++++++-- test/resources/mnist/mnist.py | 14 +++++++++----- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index f48bd6f7..3d8c3661 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ dist .tox/* .coverage test/resources/local_mode_lock +.idea/* diff --git a/test/integration/local/test_mnist_training.py b/test/integration/local/test_mnist_training.py index 531ff7c3..e8def81b 100644 --- a/test/integration/local/test_mnist_training.py +++ b/test/integration/local/test_mnist_training.py @@ -16,6 +16,7 @@ import numpy from sagemaker.mxnet import MXNet +from sagemaker.predictor import csv_serializer import local_mode from test.integration import MODEL_SUCCESS_FILES, NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH @@ -38,12 +39,25 @@ def test_mnist_training_and_serving(docker_image, sagemaker_local_session, local with local_mode.lock(): try: model = mx.create_model(model_server_workers=NUM_MODEL_SERVER_WORKERS) - predictor = model.deploy(1, local_instance_type) + predictor = _csv_predictor(model, local_instance_type) data = numpy.zeros(shape=(1, 1, 28, 28)) - predictor.predict(data) + prediction = predictor.predict(data) finally: mx.delete_endpoint() + # Check that there is a probability for each possible class in the prediction + prediction_values = prediction.decode('utf-8').split(',') + assert len(prediction_values) == 10 + + +def _csv_predictor(model, instance_type): + predictor = model.deploy(1, instance_type) + predictor.content_type = 'text/csv' + predictor.serializer = csv_serializer + predictor.accept = 'text/csv' + predictor.deserializer = None + return predictor + def test_distributed_mnist_training(docker_image, sagemaker_local_session, framework_version): mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=2, diff --git a/test/resources/mnist/mnist.py b/test/resources/mnist/mnist.py index 0b6b603b..dc33e46d 100644 --- a/test/resources/mnist/mnist.py +++ b/test/resources/mnist/mnist.py @@ -51,7 +51,7 @@ def build_graph(): return mx.sym.SoftmaxOutput(data=fc3, name='softmax') -def get_train_context(num_gpus): +def get_training_context(num_gpus): if num_gpus: return [mx.gpu(i) for i in range(num_gpus)] else: @@ -81,7 +81,7 @@ def train(batch_size, epochs, learning_rate, num_gpus, training_channel, testing kvstore = 'local' if len(hosts) == 1 else 'dist_sync' mlp_model = mx.mod.Module(symbol=build_graph(), - context=get_train_context(num_gpus)) + context=get_training_context(num_gpus)) mlp_model.fit(train_iter, eval_data=val_iter, kvstore=kvstore, @@ -91,7 +91,7 @@ def train(batch_size, epochs, learning_rate, num_gpus, training_channel, testing batch_end_callback=mx.callback.Speedometer(batch_size, 100), num_epoch=epochs) - if len(hosts) == 1 or current_host == scheduler_host(hosts): + if current_host == scheduler_host(hosts): save(model_dir, mlp_model) @@ -105,7 +105,7 @@ def save(model_dir, model): json.dump(signature, f) -if __name__ == '__main__': +def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('--batch-size', type=int, default=100) @@ -119,7 +119,11 @@ def save(model_dir, model): parser.add_argument('--current-host', type=str, default=os.environ['SM_CURRENT_HOST']) parser.add_argument('--hosts', type=list, default=json.loads(os.environ['SM_HOSTS'])) - args = parser.parse_args() + return parser.parse_args() + + +if __name__ == '__main__': + args = parse_args() num_gpus = int(os.environ['SM_NUM_GPUS']) From 26a0fb3db574c87eab60c0b29c6728424ae9c8b9 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Fri, 2 Nov 2018 17:31:51 -0700 Subject: [PATCH 15/18] Change parameter server hyperparameter name (#49) --- src/sagemaker_mxnet_container/training.py | 2 +- test/integration/local/test_mnist_training.py | 2 +- test/integration/sagemaker/test_mnist_distributed.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/sagemaker_mxnet_container/training.py b/src/sagemaker_mxnet_container/training.py index 71fd6009..ff076e48 100644 --- a/src/sagemaker_mxnet_container/training.py +++ b/src/sagemaker_mxnet_container/training.py @@ -22,7 +22,7 @@ from sagemaker_mxnet_container.training_utils import scheduler_host -LAUNCH_PS_ENV_NAME = 'sagemaker_mxnet_launch_parameter_server' +LAUNCH_PS_ENV_NAME = 'sagemaker_parameter_server_enabled' ROLES = ['worker', 'scheduler', 'server'] logger = logging.getLogger(__name__) diff --git a/test/integration/local/test_mnist_training.py b/test/integration/local/test_mnist_training.py index e8def81b..9567df27 100644 --- a/test/integration/local/test_mnist_training.py +++ b/test/integration/local/test_mnist_training.py @@ -63,7 +63,7 @@ def test_distributed_mnist_training(docker_image, sagemaker_local_session, frame mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=2, train_instance_type='local', sagemaker_session=sagemaker_local_session, image_name=docker_image, framework_version=framework_version, - hyperparameters={'sagemaker_mxnet_launch_parameter_server': True}) + hyperparameters={'sagemaker_parameter_server_enabled': True}) _train_and_assert_success(mx) diff --git a/test/integration/sagemaker/test_mnist_distributed.py b/test/integration/sagemaker/test_mnist_distributed.py index 0117a97b..08a436a8 100644 --- a/test/integration/sagemaker/test_mnist_distributed.py +++ b/test/integration/sagemaker/test_mnist_distributed.py @@ -29,7 +29,7 @@ def test_mxnet_distributed(sagemaker_session, ecr_image, instance_type, framewor mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=2, train_instance_type=instance_type, sagemaker_session=sagemaker_session, image_name=ecr_image, framework_version=framework_version, - hyperparameters={'sagemaker_mxnet_launch_parameter_server': True}) + hyperparameters={'sagemaker_parameter_server_enabled': True}) prefix = 'mxnet_mnist/{}'.format(sagemaker_timestamp()) From c304972a4eb57db7de22f1a1c874c87eb5791747 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Tue, 6 Nov 2018 13:15:10 -0800 Subject: [PATCH 16/18] Add integration test for importing and exporting ONNX models (#50) --- .flake8 | 2 +- test/conftest.py | 2 +- test/integration/__init__.py | 11 +- .../{local_mode.py => local_mode_utils.py} | 7 ++ .../local/test_default_model_fn.py | 6 +- test/integration/local/test_gluon_hosting.py | 6 +- test/integration/local/test_hosting.py | 6 +- test/integration/local/test_keras_training.py | 11 +- .../local/test_linear_regression.py | 10 +- test/integration/local/test_mnist_training.py | 24 ++-- test/integration/local/test_onnx.py | 56 +++++++++ .../resources/onnx/code/onnx_export_import.py | 75 ++++++++++++ .../onnx/mxnet_module/model-0000.params | Bin 0 -> 437990 bytes .../onnx/mxnet_module/model-shapes.json | 1 + .../onnx/mxnet_module/model-symbol.json | 111 ++++++++++++++++++ test/resources/onnx/onnx_model/model.onnx | Bin 0 -> 438774 bytes 16 files changed, 290 insertions(+), 38 deletions(-) rename test/integration/local/{local_mode.py => local_mode_utils.py} (84%) create mode 100644 test/integration/local/test_onnx.py create mode 100644 test/resources/onnx/code/onnx_export_import.py create mode 100644 test/resources/onnx/mxnet_module/model-0000.params create mode 100644 test/resources/onnx/mxnet_module/model-shapes.json create mode 100644 test/resources/onnx/mxnet_module/model-symbol.json create mode 100644 test/resources/onnx/onnx_model/model.onnx diff --git a/.flake8 b/.flake8 index 6e525c3f..fdf48402 100644 --- a/.flake8 +++ b/.flake8 @@ -1,3 +1,3 @@ [flake8] -application_import_names = local_mode, sagemaker_mxnet_container, test, timeout +application_import_names = local_mode_utils, sagemaker_mxnet_container, test, timeout import-order-style = google diff --git a/test/conftest.py b/test/conftest.py index 410fddb2..35cddbe4 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -35,7 +35,7 @@ def pytest_addoption(parser): parser.addoption('--docker-base-name', default='preprod-mxnet') parser.addoption('--region', default='us-west-2') - parser.addoption('--framework-version', default='1.2.1') + parser.addoption('--framework-version', default='1.3.0') parser.addoption('--py-version', default='3', choices=['2', '3']) parser.addoption('--processor', default='cpu', choices=['gpu', 'cpu']) parser.addoption('--aws-id', default=None) diff --git a/test/integration/__init__.py b/test/integration/__init__.py index cbf71718..98debc09 100644 --- a/test/integration/__init__.py +++ b/test/integration/__init__.py @@ -16,12 +16,11 @@ RESOURCE_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'resources')) -MODEL_SUCCESS_FILES = [ - os.path.join('output', 'success'), - os.path.join('model', 'model-symbol.json'), - os.path.join('model', 'model-shapes.json'), - os.path.join('model', 'model-0000.params'), -] +MODEL_SUCCESS_FILES = { + 'output': ['success'], + 'model': ['model-symbol.json', 'model-shapes.json', 'model-0000.params'], +} # Workaround for the intermittent worker timeout errors +# TODO: find and solve the root cause of this issue NUM_MODEL_SERVER_WORKERS = 2 diff --git a/test/integration/local/local_mode.py b/test/integration/local/local_mode_utils.py similarity index 84% rename from test/integration/local/local_mode.py rename to test/integration/local/local_mode_utils.py index 81021500..f4b871b7 100644 --- a/test/integration/local/local_mode.py +++ b/test/integration/local/local_mode_utils.py @@ -15,6 +15,7 @@ from contextlib import contextmanager import fcntl import os +import tarfile import time from test.integration import RESOURCE_PATH @@ -36,3 +37,9 @@ def lock(): finally: time.sleep(5) fcntl.lockf(local_mode_lock, fcntl.LOCK_UN) + + +def assert_output_files_exist(output_path, directory, files): + with tarfile.open(os.path.join(output_path, '{}.tar.gz'.format(directory))) as tar: + for f in files: + tar.getmember(f) diff --git a/test/integration/local/test_default_model_fn.py b/test/integration/local/test_default_model_fn.py index 97536751..5824ccf6 100644 --- a/test/integration/local/test_default_model_fn.py +++ b/test/integration/local/test_default_model_fn.py @@ -16,7 +16,7 @@ from sagemaker.mxnet.model import MXNetModel -import local_mode +import local_mode_utils from test.integration import NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH @@ -24,14 +24,14 @@ # default format, even without a user-provided script. def test_default_model_fn(docker_image, sagemaker_local_session, local_instance_type): default_handler_path = os.path.join(RESOURCE_PATH, 'default_handlers') - m = MXNetModel(os.path.join('file://', default_handler_path, 'model'), 'SageMakerRole', + m = MXNetModel('file://{}'.format(os.path.join(default_handler_path, 'model')), 'SageMakerRole', os.path.join(default_handler_path, 'code', 'empty_module.py'), image=docker_image, sagemaker_session=sagemaker_local_session, model_server_workers=NUM_MODEL_SERVER_WORKERS) input = [[1, 2]] - with local_mode.lock(): + with local_mode_utils.lock(): try: predictor = m.deploy(1, local_instance_type) output = predictor.predict(input) diff --git a/test/integration/local/test_gluon_hosting.py b/test/integration/local/test_gluon_hosting.py index 59cdf4dd..d51d78d8 100644 --- a/test/integration/local/test_gluon_hosting.py +++ b/test/integration/local/test_gluon_hosting.py @@ -17,14 +17,14 @@ from sagemaker.mxnet.model import MXNetModel -import local_mode +import local_mode_utils from test.integration import NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH # The image should support serving Gluon-created models. def test_gluon_hosting(docker_image, sagemaker_local_session, local_instance_type): gluon_path = os.path.join(RESOURCE_PATH, 'gluon_hosting') - m = MXNetModel(os.path.join('file://', gluon_path, 'model'), 'SageMakerRole', + m = MXNetModel('file://{}'.format(os.path.join(gluon_path, 'model')), 'SageMakerRole', os.path.join(gluon_path, 'code', 'gluon.py'), image=docker_image, sagemaker_session=sagemaker_local_session, model_server_workers=NUM_MODEL_SERVER_WORKERS) @@ -32,7 +32,7 @@ def test_gluon_hosting(docker_image, sagemaker_local_session, local_instance_typ with open(os.path.join(RESOURCE_PATH, 'mnist_images', '04.json'), 'r') as f: input = json.load(f) - with local_mode.lock(): + with local_mode_utils.lock(): try: predictor = m.deploy(1, local_instance_type) output = predictor.predict(input) diff --git a/test/integration/local/test_hosting.py b/test/integration/local/test_hosting.py index 0bcdfd13..a468043b 100644 --- a/test/integration/local/test_hosting.py +++ b/test/integration/local/test_hosting.py @@ -17,7 +17,7 @@ from sagemaker.mxnet.model import MXNetModel -import local_mode +import local_mode_utils from test.integration import NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH @@ -25,14 +25,14 @@ # in the user-provided script when serving. def test_hosting(docker_image, sagemaker_local_session, local_instance_type): hosting_resource_path = os.path.join(RESOURCE_PATH, 'dummy_hosting') - m = MXNetModel(os.path.join('file://', hosting_resource_path, 'code'), 'SageMakerRole', + m = MXNetModel('file://{}'.format(os.path.join(hosting_resource_path, 'code')), 'SageMakerRole', os.path.join(hosting_resource_path, 'code', 'dummy_hosting_module.py'), image=docker_image, sagemaker_session=sagemaker_local_session, model_server_workers=NUM_MODEL_SERVER_WORKERS) input = json.dumps({'some': 'json'}) - with local_mode.lock(): + with local_mode_utils.lock(): try: predictor = m.deploy(1, local_instance_type) output = predictor.predict(input) diff --git a/test/integration/local/test_keras_training.py b/test/integration/local/test_keras_training.py index ebec43d2..4068fe3c 100644 --- a/test/integration/local/test_keras_training.py +++ b/test/integration/local/test_keras_training.py @@ -16,21 +16,22 @@ from sagemaker.mxnet import MXNet +import local_mode_utils from test.integration import MODEL_SUCCESS_FILES, RESOURCE_PATH def test_keras_training(docker_image, sagemaker_local_session, local_instance_type, - framework_version): + framework_version, tmpdir): keras_path = os.path.join(RESOURCE_PATH, 'keras') script_path = os.path.join(keras_path, 'keras_mnist.py') mx = MXNet(entry_point=script_path, role='SageMakerRole', train_instance_count=1, train_instance_type=local_instance_type, sagemaker_session=sagemaker_local_session, - image_name=docker_image, framework_version=framework_version) + image_name=docker_image, framework_version=framework_version, + output_path='file://{}'.format(tmpdir)) train = 'file://{}'.format(os.path.join(keras_path, 'data')) mx.fit({'train': train}) - output_path = os.path.dirname(mx.create_model().model_data) - for f in MODEL_SUCCESS_FILES: - assert os.path.exists(os.path.join(output_path, f)), 'expected file not found: {}'.format(f) + for directory, files in MODEL_SUCCESS_FILES.items(): + local_mode_utils.assert_output_files_exist(str(tmpdir), directory, files) diff --git a/test/integration/local/test_linear_regression.py b/test/integration/local/test_linear_regression.py index 9e917f2b..b6baf675 100644 --- a/test/integration/local/test_linear_regression.py +++ b/test/integration/local/test_linear_regression.py @@ -16,17 +16,18 @@ from sagemaker.mxnet import MXNet +import local_mode_utils from test.integration import MODEL_SUCCESS_FILES, RESOURCE_PATH def test_linear_regression(docker_image, sagemaker_local_session, local_instance_type, - framework_version): + framework_version, tmpdir): lr_path = os.path.join(RESOURCE_PATH, 'linear_regression') mx = MXNet(entry_point=os.path.join(lr_path, 'linear_regression.py'), role='SageMakerRole', train_instance_count=1, train_instance_type=local_instance_type, sagemaker_session=sagemaker_local_session, image_name=docker_image, - framework_version=framework_version) + framework_version=framework_version, output_path='file://{}'.format(tmpdir)) data_path = os.path.join(lr_path, 'data') s3_prefix = 'integ-test-data/mxnet-linear-regression' @@ -37,6 +38,5 @@ def test_linear_regression(docker_image, sagemaker_local_session, local_instance mx.fit({'training': train_input, 'evaluation': eval_input}) - output_path = os.path.dirname(mx.create_model().model_data) - for f in MODEL_SUCCESS_FILES: - assert os.path.exists(os.path.join(output_path, f)), 'expected file not found: {}'.format(f) + for directory, files in MODEL_SUCCESS_FILES.items(): + local_mode_utils.assert_output_files_exist(str(tmpdir), directory, files) diff --git a/test/integration/local/test_mnist_training.py b/test/integration/local/test_mnist_training.py index 9567df27..b9a79511 100644 --- a/test/integration/local/test_mnist_training.py +++ b/test/integration/local/test_mnist_training.py @@ -18,7 +18,7 @@ from sagemaker.mxnet import MXNet from sagemaker.predictor import csv_serializer -import local_mode +import local_mode_utils from test.integration import MODEL_SUCCESS_FILES, NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH MNIST_PATH = os.path.join(RESOURCE_PATH, 'mnist') @@ -29,14 +29,15 @@ def test_mnist_training_and_serving(docker_image, sagemaker_local_session, local_instance_type, - framework_version): + framework_version, tmpdir): mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=1, train_instance_type=local_instance_type, sagemaker_session=sagemaker_local_session, - image_name=docker_image, framework_version=framework_version) + image_name=docker_image, framework_version=framework_version, + output_path='file://{}'.format(tmpdir)) - _train_and_assert_success(mx) + _train_and_assert_success(mx, str(tmpdir)) - with local_mode.lock(): + with local_mode_utils.lock(): try: model = mx.create_model(model_server_workers=NUM_MODEL_SERVER_WORKERS) predictor = _csv_predictor(model, local_instance_type) @@ -59,18 +60,19 @@ def _csv_predictor(model, instance_type): return predictor -def test_distributed_mnist_training(docker_image, sagemaker_local_session, framework_version): +def test_distributed_mnist_training(docker_image, sagemaker_local_session, framework_version, + tmpdir): mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=2, train_instance_type='local', sagemaker_session=sagemaker_local_session, image_name=docker_image, framework_version=framework_version, + output_path='file://{}'.format(tmpdir), hyperparameters={'sagemaker_parameter_server_enabled': True}) - _train_and_assert_success(mx) + _train_and_assert_success(mx, str(tmpdir)) -def _train_and_assert_success(estimator): +def _train_and_assert_success(estimator, output_path): estimator.fit({'train': TRAIN_INPUT, 'test': TEST_INPUT}) - output_path = os.path.dirname(estimator.create_model().model_data) - for f in MODEL_SUCCESS_FILES: - assert os.path.exists(os.path.join(output_path, f)), 'expected file not found: {}'.format(f) + for directory, files in MODEL_SUCCESS_FILES.items(): + local_mode_utils.assert_output_files_exist(output_path, directory, files) diff --git a/test/integration/local/test_onnx.py b/test/integration/local/test_onnx.py new file mode 100644 index 00000000..54ce55b5 --- /dev/null +++ b/test/integration/local/test_onnx.py @@ -0,0 +1,56 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). +# You may not use this file except in compliance with the License. +# A copy of the License is located at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# permissions and limitations under the License. +from __future__ import absolute_import + +import os + +import numpy +from sagemaker.mxnet import MXNet, MXNetModel + +import local_mode_utils +from test.integration import NUM_MODEL_SERVER_WORKERS, RESOURCE_PATH + +ONNX_PATH = os.path.join(RESOURCE_PATH, 'onnx') +SCRIPT_PATH = os.path.join(ONNX_PATH, 'code', 'onnx_export_import.py') + + +def test_onnx_export(docker_image, sagemaker_local_session, local_instance_type, framework_version, + tmpdir): + mx = MXNet(entry_point=SCRIPT_PATH, role='SageMakerRole', train_instance_count=1, + train_instance_type=local_instance_type, sagemaker_session=sagemaker_local_session, + image_name=docker_image, framework_version=framework_version, + output_path='file://{}'.format(tmpdir)) + + input_path = 'file://{}'.format(os.path.join(ONNX_PATH, 'mxnet_module')) + mx.fit({'train': input_path}) + + local_mode_utils.assert_output_files_exist(str(tmpdir), 'model', ['model.onnx']) + + +def test_onnx_import(docker_image, sagemaker_local_session, local_instance_type): + model_path = 'file://{}'.format(os.path.join(ONNX_PATH, 'onnx_model')) + m = MXNetModel(model_path, 'SageMakerRole', SCRIPT_PATH, image=docker_image, + sagemaker_session=sagemaker_local_session, + model_server_workers=NUM_MODEL_SERVER_WORKERS) + + input = numpy.zeros(shape=(1, 1, 28, 28)) + + with local_mode_utils.lock(): + try: + predictor = m.deploy(1, local_instance_type) + output = predictor.predict(input) + finally: + sagemaker_local_session.delete_endpoint(m.endpoint_name) + + # Check that there is a probability for each possible class in the prediction + assert len(output[0]) == 10 diff --git a/test/resources/onnx/code/onnx_export_import.py b/test/resources/onnx/code/onnx_export_import.py new file mode 100644 index 00000000..b3fa959e --- /dev/null +++ b/test/resources/onnx/code/onnx_export_import.py @@ -0,0 +1,75 @@ +# Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from __future__ import absolute_import + +import argparse +import json +import os + +import mxnet as mx +from mxnet.contrib import onnx as onnx_mxnet +import numpy as np +import onnx +from onnx import checker + + +def _read_data_shapes(path, preferred_batch_size=1): + with open(path, 'r') as f: + signature = json.load(f) + + data_shapes = [] + + for s in signature: + shape = s['shape'] + + if preferred_batch_size: + shape[0] = preferred_batch_size + + data_shapes.append(shape) + + return data_shapes + + +def _assert_onnx_validity(model_path): + model_proto = onnx.load_model(model_path) + checker.check_graph(model_proto.graph) + + +def main(training_dir, model_dir): + sym = os.path.join(training_dir, 'model-symbol.json') + params = os.path.join(training_dir, 'model-0000.params') + data_shapes = _read_data_shapes(os.path.join(training_dir, 'model-shapes.json')) + + output_path = os.path.join(model_dir, 'model.onnx') + converted_path = onnx_mxnet.export_model(sym, params, data_shapes, np.float32, output_path) + _assert_onnx_validity(converted_path) + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR']) + parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN']) + return parser.parse_args() + + +if __name__ == '__main__': + args = parse_args() + main(args.train, args.model_dir) + + +def model_fn(model_dir): + sym, arg_params, aux_params = onnx_mxnet.import_model(os.path.join(model_dir, 'model.onnx')) + mod = mx.mod.Module(symbol=sym, data_names=['data'], label_names=None) + mod.bind(for_training=False, data_shapes=[('data', [100, 1, 28, 28])]) + mod.set_params(arg_params=arg_params, aux_params=aux_params) + return mod diff --git a/test/resources/onnx/mxnet_module/model-0000.params b/test/resources/onnx/mxnet_module/model-0000.params new file mode 100644 index 0000000000000000000000000000000000000000..21479bf1adba370d103243ce35d952447ff40ac5 GIT binary patch literal 437990 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%0A)veHA6%nh!^EGx{zghrQP+V%L{zVYohn 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 z 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Ξ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�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 literal 0 HcmV?d00001 diff --git a/test/resources/onnx/mxnet_module/model-shapes.json b/test/resources/onnx/mxnet_module/model-shapes.json new file mode 100644 index 00000000..b10c2926 --- /dev/null +++ b/test/resources/onnx/mxnet_module/model-shapes.json @@ -0,0 +1 @@ +[{"name": "data", "shape": [100, 1, 28, 28]}] diff --git a/test/resources/onnx/mxnet_module/model-symbol.json b/test/resources/onnx/mxnet_module/model-symbol.json new file mode 100644 index 00000000..5478ff83 --- /dev/null +++ b/test/resources/onnx/mxnet_module/model-symbol.json @@ -0,0 +1,111 @@ +{ + "nodes": [ + { + "op": "null", + "name": "data", + "inputs": [] + }, + { + "op": "Flatten", + "name": "flatten0", + "inputs": [[0, 0, 0]] + }, + { + "op": "null", + "name": "fullyconnected0_weight", + "attrs": {"num_hidden": "128"}, + "inputs": [] + }, + { + "op": "null", + "name": "fullyconnected0_bias", + "attrs": {"num_hidden": "128"}, + "inputs": [] + }, + { + "op": "FullyConnected", + "name": "fullyconnected0", + "attrs": {"num_hidden": "128"}, + "inputs": [[1, 0, 0], [2, 0, 0], [3, 0, 0]] + }, + { + "op": "Activation", + "name": "activation0", + "attrs": {"act_type": "relu"}, + "inputs": [[4, 0, 0]] + }, + { + "op": "null", + "name": "fullyconnected1_weight", + "attrs": {"num_hidden": "64"}, + "inputs": [] + }, + { + "op": "null", + "name": "fullyconnected1_bias", + "attrs": {"num_hidden": "64"}, + "inputs": [] + }, + { + "op": "FullyConnected", + "name": "fullyconnected1", + "attrs": {"num_hidden": "64"}, + "inputs": [[5, 0, 0], [6, 0, 0], [7, 0, 0]] + }, + { + "op": "Activation", + "name": "activation1", + "attrs": {"act_type": "relu"}, + "inputs": [[8, 0, 0]] + }, + { + "op": "null", + "name": "fullyconnected2_weight", + "attrs": {"num_hidden": "10"}, + "inputs": [] + }, + { + "op": "null", + "name": "fullyconnected2_bias", + "attrs": {"num_hidden": "10"}, + "inputs": [] + }, + { + "op": "FullyConnected", + "name": "fullyconnected2", + "attrs": {"num_hidden": "10"}, + "inputs": [[9, 0, 0], [10, 0, 0], [11, 0, 0]] + }, + { + "op": "null", + "name": "softmax_label", + "inputs": [] + }, + { + "op": "SoftmaxOutput", + "name": "softmax", + "inputs": [[12, 0, 0], [13, 0, 0]] + } + ], + "arg_nodes": [0, 2, 3, 6, 7, 10, 11, 13], + "node_row_ptr": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + "heads": [[14, 0, 0]], + "attrs": {"mxnet_version": ["int", 10300]} +} diff --git a/test/resources/onnx/onnx_model/model.onnx b/test/resources/onnx/onnx_model/model.onnx new file mode 100644 index 0000000000000000000000000000000000000000..df78f0e71712cc81a18def78984fe0b9fafd6985 GIT binary patch literal 438774 zcmcG#c{GsG*Dr3K=XoZxXrP4W>|-jWNz$ZA6e*QdG*KZWN`_=eibSSDC7yGRA!(9G zqei7cAr;NhwSITq`+L`Sz4yO+|2uoH^*m>N&e><5efIur31P0UTT9AFO2pqU)K5ub z?MA=Q(175HTK{`wC_epv>ZDEzO8sxGl-k;`jT?8Z*&G}kuqHIXf8weg0qX#>z{H`fUtZ=cg(l5b1PEP;jiAl*sCU(EneSl@bfx z>KDAtMML0}pwQU=CAw+|j*3#&Qvdm1C27Akq3gH%g|6Q`3hKWKh9X`88^fgX1*QJ0 z_CIl1{~vH!ulnzBS^p<4>;Ff%tp6)6>;H;tbjJS%m-T<*viU#YviWau+59IioBunw z9R72^Y?Q>eZC)F?$#19D{~8#IFZiFDvC>i^emmE1`~S9DNp;iC;DFFoqXxJ=VC$#> zuG+NOKVak7f(8wVNI{8YF$F=x$OaAHzJ1)!)q~s(vBPL`?kjY*QVe;fe?$}KZ{V!b zy3snr8@$H1G3c{{6H-W2C*SVm^BX_Lkja7qkm{yLpL|k>ufs=4!Zi)jVDquodqO?3 zPrr>6_NsHfLw9R?R#kDK2V_Wom^7SqeulJ?W#}z~MMQg+IE5*$XriqyUC&z)zl;ZH ze}y8fd{lx|sy~vU)ZZvPX&A}08p6xLAGHC`n$Typ5~S$!fj4(3a`-k-i|SWzL^lS$ zk&u^ZNVeV<**?6>`I8SM^2<~%{*od@Miiq{8gCt57z$FGi!XW2W_^C$$8552Oe@*2 zxdzRMKaDnT=&7CfFM|+;+32O)4&r|FGjZ_GsTn6N3DfU~^ZdmERMc)yAS)GB%`)Xf z@|3|TLLGe9ok2bqJa{PwJMvUj85t;^;kP~#2BFv})aoHj57;PBmt|@Y5VRfr?O%>= z{!T}3_GgGm+*#7K(vnNPU`%ooO(1rwFOl)8KqJPRP@23kbjuy*E;pYWE4r)V&oVj?N)WIhb51`a{a}1j)3Aw@J@OC1Ss67I`1$gF1aA$aPL0Zq2Xc6uxw! zRnsYHnCMN;?{h;7#!g2zmcVnw018t6flqoMY-le>J+FDF`F9G=dj&w}wJP-2ujSlh!Fax| z|1Qd#ZUuoa
u9yrDFK%*yPJH;Bf@lplci_3_0sV!-v`?w=V& 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

48*)8}r(g{dd;amoVbe)9*MbR-e?^l8#nu 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

lC

hcF91ivl{%pj3xDV35}e7KQfYj%W$% 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

dyD)UHO?3=XJnW6aF+Y_S0k-L?r#f=5=Ni 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�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 HC;oo`lfcwO literal 0 HcmV?d00001 From 6470a320c32e95b00f34c2853f589f918450a5ab Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 7 Nov 2018 13:08:44 -0800 Subject: [PATCH 17/18] Add port label to Dockerfile (#51) --- docker/1.3.0/final/Dockerfile.cpu | 2 ++ docker/1.3.0/final/Dockerfile.gpu | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docker/1.3.0/final/Dockerfile.cpu b/docker/1.3.0/final/Dockerfile.cpu index 3c71e84e..af7cceb8 100644 --- a/docker/1.3.0/final/Dockerfile.cpu +++ b/docker/1.3.0/final/Dockerfile.cpu @@ -3,6 +3,8 @@ ARG framework_installable ARG py_version ARG framework_support_installable=sagemaker_mxnet_container-2.0.0.tar.gz +LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true + # Validate that arguments are specified RUN test $framework_installable || exit 1 && \ test $py_version || exit 1 diff --git a/docker/1.3.0/final/Dockerfile.gpu b/docker/1.3.0/final/Dockerfile.gpu index 42650e1a..ce515a9b 100644 --- a/docker/1.3.0/final/Dockerfile.gpu +++ b/docker/1.3.0/final/Dockerfile.gpu @@ -3,6 +3,8 @@ ARG framework_installable ARG py_version ARG framework_support_installable=sagemaker_mxnet_container-2.0.0.tar.gz +LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true + # Validate that arguments are specified RUN test $framework_installable || exit 1 && \ test $py_version || exit 1 From 511541c9919a8b9e46aec811d95a9b2a5379a45d Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Wed, 7 Nov 2018 16:14:59 -0800 Subject: [PATCH 18/18] Remove incompatible Dockerfiles and update README (#52) --- README.rst | 242 ++++++++++-------- docker/0.12.1/base/Dockerfile.cpu | 38 --- docker/0.12.1/base/Dockerfile.gpu | 45 ---- ...blity-during-optimizer-serialization.patch | 25 -- docker/0.12.1/final/py2/Dockerfile.cpu | 15 -- docker/0.12.1/final/py2/Dockerfile.gpu | 15 -- docker/0.12.1/final/py3/Dockerfile.cpu | 15 -- docker/0.12.1/final/py3/Dockerfile.gpu | 15 -- docker/1.0.0/base/Dockerfile.cpu | 41 --- docker/1.0.0/base/Dockerfile.gpu | 45 ---- ...001-apache.incubator-mxnet.pull.9218.patch | 20 -- ...blity-during-optimizer-serialization.patch | 25 -- docker/1.0.0/final/py2/Dockerfile.cpu | 15 -- docker/1.0.0/final/py2/Dockerfile.gpu | 15 -- docker/1.0.0/final/py3/Dockerfile.cpu | 15 -- docker/1.0.0/final/py3/Dockerfile.gpu | 15 -- docker/1.1.0/final/Dockerfile.cpu | 46 ---- docker/1.1.0/final/Dockerfile.gpu | 46 ---- docker/1.2.1/final/Dockerfile.cpu | 49 ---- docker/1.2.1/final/Dockerfile.gpu | 49 ---- 20 files changed, 134 insertions(+), 657 deletions(-) delete mode 100644 docker/0.12.1/base/Dockerfile.cpu delete mode 100644 docker/0.12.1/base/Dockerfile.gpu delete mode 100644 docker/0.12.1/base/patches/0001-Python-3-compatiblity-during-optimizer-serialization.patch delete mode 100644 docker/0.12.1/final/py2/Dockerfile.cpu delete mode 100644 docker/0.12.1/final/py2/Dockerfile.gpu delete mode 100644 docker/0.12.1/final/py3/Dockerfile.cpu delete mode 100644 docker/0.12.1/final/py3/Dockerfile.gpu delete mode 100644 docker/1.0.0/base/Dockerfile.cpu delete mode 100644 docker/1.0.0/base/Dockerfile.gpu delete mode 100644 docker/1.0.0/base/cpu_patches/0001-apache.incubator-mxnet.pull.9218.patch delete mode 100644 docker/1.0.0/base/patches/0001-Python-3-compatiblity-during-optimizer-serialization.patch delete mode 100644 docker/1.0.0/final/py2/Dockerfile.cpu delete mode 100644 docker/1.0.0/final/py2/Dockerfile.gpu delete mode 100644 docker/1.0.0/final/py3/Dockerfile.cpu delete mode 100644 docker/1.0.0/final/py3/Dockerfile.gpu delete mode 100644 docker/1.1.0/final/Dockerfile.cpu delete mode 100644 docker/1.1.0/final/Dockerfile.gpu delete mode 100644 docker/1.2.1/final/Dockerfile.cpu delete mode 100644 docker/1.2.1/final/Dockerfile.gpu diff --git a/README.rst b/README.rst index 9fc5f3bb..d055317a 100644 --- a/README.rst +++ b/README.rst @@ -1,18 +1,9 @@ -========================== -SageMaker MXNet Containers -========================== +========================= +SageMaker MXNet Container +========================= -SageMaker MXNet Containers is an open source library for making the -MXNet framework run on Amazon SageMaker. - -This repository also contains Dockerfiles which install this library, MXNet, and dependencies -for building SageMaker MXNet images. - -For information on running MXNet jobs on SageMaker: `Python -SDK `__. - -For notebook examples: `SageMaker Notebook -Examples `__. +SageMaker MXNet Container is an open-source library for making Docker images for using MXNet on Amazon SageMaker. +For information on running MXNet jobs on Amazon SageMaker, please refer to the `SageMaker Python SDK documentation `__. Table of Contents ----------------- @@ -27,102 +18,148 @@ Getting Started Prerequisites ~~~~~~~~~~~~~ -Make sure you have installed all of the following prerequisites on your -development machine: +Make sure you have installed all of the following prerequisites on your development machine: - `Docker `__ - -For Testing on GPU -^^^^^^^^^^^^^^^^^^ - -- `Nvidia-Docker `__ +- For GPU testing: `nvidia-docker2 `__ Recommended ^^^^^^^^^^^ -- A python environment management tool. (e.g. - `PyEnv `__, +- A Python environment management tool (e.g. `PyEnv `__, `VirtualEnv `__) -Building your image -------------------- +Building Images +--------------- -`Amazon SageMaker `__ -utilizes Docker containers to run all training jobs & inference endpoints. +The Dockerfiles in this repository are intended to be used for building Docker images to run training jobs and inference endpoints on `Amazon SageMaker `__. -The Docker images are built from the Dockerfiles specified in -`Docker/ `__. +The current master branch of this repository contains Dockerfiles and support code for MXNet versions 1.3.0 and higher. +For MXNet versions 0.12.1-1.2.1, check out v1.0.0 of this repository. -The Docker files are grouped based on MXNet version and separated -based on Python version and processor type. +For each supported MXNet version, Dockerfiles can be found for each processor type (i.e. CPU and GPU). +For MXNet versions 0.12.1 and 1.0.0, there are separate Dockerfiles for each Python version as well. -The Docker images, used to run training & inference jobs, are built from -both corresponding "base" and "final" Dockerfiles. +All images are tagged with -- (e.g. 1.3.0-cpu-py3). -Base Images -~~~~~~~~~~~ +MXNet 1.1.0 and higher +~~~~~~~~~~~~~~~~~~~~~~ -The "base" Dockerfile encompass the installation of the framework and all of the dependencies -needed. +For these MXNet versions, there is one set of Dockerfiles for each version. +They install the SageMaker-specific support code found in this repository. -Tagging scheme is based on --. (e.g. 0.12.1-cpu-py2) +Before building these images, you need to have two files already saved locally. +The first is a pip-installable binary of the MXNet library. +This can be something you compile from source or `download from PyPI `__. -All "final" Dockerfiles build images using base images that use the tagging scheme -above. +The second is a pip-installable binary of this repository. +To create the SageMaker MXNet Container Python package: + +:: + + # Create the binary + git clone https://github.com/aws/sagemaker-mxnet-container.git + cd sagemaker-mxnet-container + python setup.py sdist + + # Copy your Python package to the appropriate "final" Dockerfile directory + cp dist/sagemaker_mxnet_container-.tar.gz docker//final -If you want to build your base docker image, then use: +Once you have those binaries, you can then build the image. +The Dockerfiles expect two build arguments: + +- ``py_version``: the Python version. +- ``framework_installable``: the path to the MXNet binary + +To build an image: :: - # All build instructions assume you're building from the same directory as the dockerfile. + # All build instructions assume you're building from the same directory as the Dockerfile. # CPU - docker build -t mxnet-base:-cpu- -f Dockerfile.cpu . + docker build -t preprod-mxnet: \ + --build-arg py_version= \ + --build-arg framework_installable= \ + -f Dockerfile.cpu . # GPU - docker build -t mxnet-base:-gpu- -f Dockerfile.gpu . + docker build -t preprod-mxnet: \ + --build-arg py_version= \ + --build-arg framework_installable= \ + -f Dockerfile.gpu . + +Don't forget the period at the end of the command! :: # Example # CPU - docker build -t mxnet-base:0.12.1-cpu-py2 -f Dockerfile.cpu . + docker build -t preprod-mxnet:1.1.0-cpu-py3 --build-arg py_version=3 + --build-arg framework_installable=mxnet-1.1.0-py2.py3-none-manylinux1_x86_64.whl -f Dockerfile.cpu . # GPU - docker build -t mxnet-base:0.12.1-gpu-py2 -f Dockerfile.gpu . + docker build -t preprod-mxnet:1.1.0-gpu-py3 --build-arg py_version=3 + --build-arg framework_installable=mxnet-1.1.0-py2.py3-none-manylinux1_x86_64.whl -f Dockerfile.gpu . -Final Images -~~~~~~~~~~~~ -The "final" Dockerfiles encompass the installation of the SageMaker specific support code. +MXNet 0.12.1 and 1.0.0 +~~~~~~~~~~~~~~~~~~~~~~ + +For these MXNet versions, there are "base" and "final" Dockerfiles for each image. +The "base" Dockerfile installs MXNet and its necessary dependencies. +The "final" Dockerfile installs the SageMaker-specific support code found in this repository. + +Base Images +^^^^^^^^^^^ + +To build a "base" image: -All "final" Dockerfiles use `base images for building `__. +:: -These "base" images are specified with the naming convention of -mxnet-base:--. + # All build instructions assume you're building from the same directory as the Dockerfile. -Before building "final" images: + # CPU + docker build -t mxnet-base:-cpu- -f Dockerfile.cpu . -Build your "base" image. Make sure it is named and tagged in accordance with your "final" -Dockerfile. + # GPU + docker build -t mxnet-base:-gpu- -f Dockerfile.gpu . +:: + + # Example + + # CPU + docker build -t mxnet-base:0.12.1-cpu-py2 -f Dockerfile.cpu . + + # GPU + docker build -t mxnet-base:0.12.1-gpu-py2 -f Dockerfile.gpu . + +Final Images +^^^^^^^^^^^^ + +All "final" Dockerfiles assume the "base" image has already been built. +Make sure the "base" image is named and tagged as expected by the "final" Dockerfile. + +In addition, the "final" Dockerfiles require a pip-installable binary of this repository. +To create the SageMaker MXNet Container Python package: :: - # Create the SageMaker MXNet Container Python package. - cd sagemaker-mxnet-containers + # Create the binary + git clone -b v1.0.0 https://github.com/aws/sagemaker-mxnet-container.git + cd sagemaker-mxnet-container python setup.py sdist - #. Copy your Python package to "final" Dockerfile directory that you are building. + # Copy your Python package to the appropriate "final" Dockerfile directory cp dist/sagemaker_mxnet_container-.tar.gz docker//final -If you want to build "final" Docker images, then use: +To build a "final" image: :: - # All build instructions assumes you're building from the same directory as the dockerfile. + # All build instructions assumes you're building from the same directory as the Dockerfile. # CPU docker build -t : -f Dockerfile.cpu . @@ -140,60 +177,54 @@ If you want to build "final" Docker images, then use: # GPU docker build -t preprod-mxnet:0.12.1-gpu-py2 -f Dockerfile.gpu . - # For building images of MXNet versions 1.1 and above - docker build -t preprod-mxnet:1.1.0-cpu-py2 --build-arg py_version=2 - --build-arg framework_installable=mxnet-1.1.0-py2.py3-none-manylinux1_x86_64.whl -f Dockerfile.cpu . - Running the tests ----------------- -Running the tests requires installation of the SageMaker MXNet Container code and its test -dependencies. +Running the tests requires installation of the SageMaker MXNet Container code and its test dependencies. :: - git clone https://github.com/aws/sagemaker-mxnet-containers.git - cd sagemaker-mxnet-containers + git clone https://github.com/aws/sagemaker-mxnet-container.git + cd sagemaker-mxnet-container pip install -e .[test] -Tests are defined in -`test/ `__ -and include unit, integration and functional tests. +Tests are defined in `test/ `__ and include unit and integration tests. +The integration tests include both running the Docker containers locally and running them on SageMaker. +The tests are compatible with only the Docker images built by Dockerfiles in the current branch. +If you want to run tests for MXNet versions 1.2.1 or below, please use the v1.0.0 tests. + +All test instructions should be run from the top level directory Unit Tests ~~~~~~~~~~ -If you want to run unit tests, then use: +To run unit tests: :: - # All test instructions should be run from the top level directory - pytest test/unit Local Integration Tests ~~~~~~~~~~~~~~~~~~~~~~~ -Running local integration tests require `Docker `__ and `AWS -credentials `__, -as the integration tests make calls to a couple AWS services. All integration -tests require configurations specified within their respective -`conftest.py `__. - -Local integration tests on GPU require `Nvidia-Docker `__. +Running local integration tests require `Docker `__ and `AWS credentials `__, +as the integration tests make calls to a couple AWS services. +Local integration tests on GPU require `nvidia-docker2 `__. +You Docker image must also be built in order to run the tests against it. -Before running local integration tests: +Local integration tests use the following pytest arguments: -#. Build your Docker image. -#. Pass in the correct pytest arguments to run tests against your Docker image. +- ``docker-base-name``: the Docker image's repository. Defaults to 'preprod-mxnet'. +- ``framework-version``: the MXNet version. Defaults to the latest supported version. +- ``py-version``: the Python version. Defaults to '3'. +- ``processor``: CPU or GPU. Defaults to 'cpu'. +- ``tag``: the Docker image's tag. Defaults to --py -If you want to run local integration tests, then use: +To run local integration tests: :: - # Required arguments for integration tests are found in test/conftest.py - pytest test/integration/local --docker-base-name \ --tag \ --py-version <2_or_3> \ @@ -204,35 +235,31 @@ If you want to run local integration tests, then use: # Example pytest test/integration/local --docker-base-name preprod-mxnet \ - --tag 1.0 \ - --py-version 2 \ - --framework-version 0.12.1 \ + --tag 1.3.0-cpu-py3 \ + --py-version 3 \ + --framework-version 1.3.0 \ --processor cpu SageMaker Integration Tests ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -SageMaker Integration tests require your Docker image to be within an `Amazon ECR repository `__. +SageMaker integration tests require your Docker image to be within an `Amazon ECR repository `__. -The Docker base name is your `ECR repository namespace `__. +SageMaker integration tests use the following pytest arguments: -The instance type is your specified `Amazon SageMaker Instance Type -`__ that the tests will run on. +- ``docker-base-name``: the Docker image's `ECR repository namespace `__. +- ``framework-version``: the MXNet version. Defaults to the latest supported version. +- ``py-version``: the Python version. Defaults to '3'. +- ``processor``: CPU or GPU. Defaults to 'cpu'. +- ``tag``: the Docker image's tag. Defaults to --py +- ``aws-id``: your AWS account ID. +- ``instance-type``: the specified `Amazon SageMaker Instance Type `__ that the tests will run on. + Defaults to 'ml.c4.xlarge' for CPU and 'ml.p2.xlarge' for GPU. -Before running SageMaker Integration tests: - -#. Build your Docker image. -#. Push the image to your ECR repository. -#. Pass in the correct pytest arguments to run tests on SageMaker against the image within your ECR repository. - -If you want to run an integration test on `Amazon SageMaker `__, then use: +To run SageMaker integration tests: :: - # Required arguments for integration tests are found in test/conftest.py - pytest test/integration/sagmaker --aws-id \ --docker-base-name \ --instance-type \ @@ -249,8 +276,7 @@ If you want to run an integration test on `Amazon SageMaker `__ +Please read `CONTRIBUTING.md `__ for details on our code of conduct, and the process for submitting pull requests to us. License diff --git a/docker/0.12.1/base/Dockerfile.cpu b/docker/0.12.1/base/Dockerfile.cpu deleted file mode 100644 index 79fe0d68..00000000 --- a/docker/0.12.1/base/Dockerfile.cpu +++ /dev/null @@ -1,38 +0,0 @@ -FROM ubuntu:16.04 - -RUN apt-get update && \ - apt-get -y install build-essential libopencv-dev libopenblas-dev libjemalloc-dev libgfortran3 \ - python-dev python3-dev git wget curl nginx - -RUN cd /tmp && \ - curl -O https://bootstrap.pypa.io/get-pip.py && \ - python2 get-pip.py && \ - python3 get-pip.py - -COPY patches /patches - -RUN cd /tmp && \ - git clone --recursive https://github.com/apache/incubator-mxnet mxnet && \ - cd /tmp/mxnet && \ - git checkout tags/0.12.1 -b 0.12.1 && git submodule update --init --recursive && \ - git apply --verbose /patches/*.patch && \ - make -j$(nproc) USE_BLAS=openblas USE_MKL2017=1 USE_DIST_KVSTORE=1 && \ - cd /tmp/mxnet/python && \ - python2 setup.py install && \ - python3 setup.py install && \ - cd / && \ - rm -fr /tmp/mxnet - -# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 -RUN ln -s /dev/null /dev/raw1394 - -RUN cd /tmp && \ - curl -O https://dl.influxdata.com/telegraf/releases/telegraf_1.4.2-1_amd64.deb && \ - dpkg -i telegraf_1.4.2-1_amd64.deb && \ - rm telegraf_1.4.2-1_amd64.deb - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" - -WORKDIR / diff --git a/docker/0.12.1/base/Dockerfile.gpu b/docker/0.12.1/base/Dockerfile.gpu deleted file mode 100644 index 25b82ffd..00000000 --- a/docker/0.12.1/base/Dockerfile.gpu +++ /dev/null @@ -1,45 +0,0 @@ -FROM nvidia/cuda:9.0-cudnn7-devel - -RUN apt-get update && \ - apt-get -y install build-essential libopencv-dev libatlas-base-dev libcurl4-openssl-dev libgtest-dev \ - libjemalloc-dev cmake python-dev python3-dev python-opencv unzip git wget curl nginx - -# install pip -RUN cd /tmp && \ - curl -O https://bootstrap.pypa.io/get-pip.py && \ - python2 get-pip.py && \ - python3 get-pip.py - -COPY patches /patches - -# build mxnet -# from https://github.com/apache/incubator-mxnet/blob/master/docker/install/cpp.sh -RUN cd /usr/src/gtest && cmake CMakeLists.txt && make && cp *.a /usr/lib - -# using (future) version of: -# https://github.com/apache/incubator-mxnet/blob/master/docker/Dockerfiles/Dockerfile.in.lib.gpu -RUN cd /tmp && \ - git clone --recursive https://github.com/apache/incubator-mxnet mxnet && cd mxnet && \ - git checkout tags/0.12.1 -b 0.12.1 && git submodule update --init --recursive && \ - git apply --verbose /patches/*.patch && \ - make -j$(nproc) USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1 USE_DIST_KVSTORE=1 && \ - cd /tmp/mxnet/python && \ - python2 setup.py install && \ - python3 setup.py install && \ - cd / && \ - rm -fr /tmp/mxnet - -# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 -RUN ln -s /dev/null /dev/raw1394 - -# install telegraf -RUN cd /tmp && \ - curl -O https://dl.influxdata.com/telegraf/releases/telegraf_1.4.2-1_amd64.deb && \ - dpkg -i telegraf_1.4.2-1_amd64.deb && \ - rm telegraf_1.4.2-1_amd64.deb - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" - -WORKDIR / diff --git a/docker/0.12.1/base/patches/0001-Python-3-compatiblity-during-optimizer-serialization.patch b/docker/0.12.1/base/patches/0001-Python-3-compatiblity-during-optimizer-serialization.patch deleted file mode 100644 index f75f36d2..00000000 --- a/docker/0.12.1/base/patches/0001-Python-3-compatiblity-during-optimizer-serialization.patch +++ /dev/null @@ -1,25 +0,0 @@ -From c462d343b0782e82a7a91d3dcccc3863bb947dff Mon Sep 17 00:00:00 2001 -From: Tobias Domhan -Date: Sat, 25 Nov 2017 23:02:49 +0100 -Subject: [PATCH] Python 3 compatiblity during optimizer serialization. (#8334) - ---- - python/mxnet/kvstore.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/python/mxnet/kvstore.py b/python/mxnet/kvstore.py -index d068d06..ad598d0 100644 ---- a/python/mxnet/kvstore.py -+++ b/python/mxnet/kvstore.py -@@ -451,7 +451,7 @@ class KVStore(object): - # send the optimizer to server - try: - # use ASCII protocol 0, might be slower, but not a big ideal -- optim_str = pickle.dumps(optimizer, 0) -+ optim_str = py_str(pickle.dumps(optimizer, 0)) - except: - raise - self._send_command_to_servers(0, optim_str) --- -2.7.3.AMZN - diff --git a/docker/0.12.1/final/py2/Dockerfile.cpu b/docker/0.12.1/final/py2/Dockerfile.cpu deleted file mode 100644 index d528843d..00000000 --- a/docker/0.12.1/final/py2/Dockerfile.cpu +++ /dev/null @@ -1,15 +0,0 @@ -# Use local version of image built from Dockerfile.cpu in /docker/$version/base directory -FROM mxnet-base:0.12.1-cpu-py2 -ARG mxnet_support_tar=sagemaker_mxnet_container-1.0.0.tar.gz - -RUN pip2 install --no-cache \ - numpy==1.13.3 - -COPY $mxnet_support_tar . - -RUN pip2 install $mxnet_support_tar - -RUN rm $mxnet_support_tar - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python2", "/usr/local/bin/entry.py"] diff --git a/docker/0.12.1/final/py2/Dockerfile.gpu b/docker/0.12.1/final/py2/Dockerfile.gpu deleted file mode 100644 index e186c0d1..00000000 --- a/docker/0.12.1/final/py2/Dockerfile.gpu +++ /dev/null @@ -1,15 +0,0 @@ -# Use local version of image built from Dockerfile.gpu in /docker/$version/base directory -FROM mxnet-base:0.12.1-gpu-py2 -ARG mxnet_support_tar=sagemaker_mxnet_container-1.0.0.tar.gz - -RUN pip2 install --no-cache \ - numpy==1.13.3 - -COPY $mxnet_support_tar . - -RUN pip2 install $mxnet_support_tar - -RUN rm $mxnet_support_tar - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python2", "/usr/local/bin/entry.py"] diff --git a/docker/0.12.1/final/py3/Dockerfile.cpu b/docker/0.12.1/final/py3/Dockerfile.cpu deleted file mode 100644 index 09fc3151..00000000 --- a/docker/0.12.1/final/py3/Dockerfile.cpu +++ /dev/null @@ -1,15 +0,0 @@ -# Use local version of image built from Dockerfile.cpu in /docker/$version/base directory -FROM mxnet-base:0.12.1-cpu-py3 -ARG mxnet_support_tar=sagemaker_mxnet_container-1.0.0.tar.gz - -RUN pip3 install --no-cache \ - numpy==1.13.3 - -COPY $mxnet_support_tar . - -RUN pip3 install $mxnet_support_tar - -RUN rm $mxnet_support_tar - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python3", "/usr/local/bin/entry.py"] diff --git a/docker/0.12.1/final/py3/Dockerfile.gpu b/docker/0.12.1/final/py3/Dockerfile.gpu deleted file mode 100644 index 5fc6dd96..00000000 --- a/docker/0.12.1/final/py3/Dockerfile.gpu +++ /dev/null @@ -1,15 +0,0 @@ -# Use local version of image built from Dockerfile.gpu in /docker/$version/base directory -FROM mxnet-base:0.12.1-gpu-py3 -ARG mxnet_support_tar=sagemaker_mxnet_container-1.0.0.tar.gz - -RUN pip3 install --no-cache \ - numpy==1.13.3 - -COPY $mxnet_support_tar . - -RUN pip3 install $mxnet_support_tar - -RUN rm $mxnet_support_tar - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python3", "/usr/local/bin/entry.py"] diff --git a/docker/1.0.0/base/Dockerfile.cpu b/docker/1.0.0/base/Dockerfile.cpu deleted file mode 100644 index fb3e6207..00000000 --- a/docker/1.0.0/base/Dockerfile.cpu +++ /dev/null @@ -1,41 +0,0 @@ -FROM ubuntu:16.04 - -RUN apt-get update && \ - apt-get -y install build-essential libopencv-dev libopenblas-dev libjemalloc-dev libgfortran3 \ - python-dev python3-dev git wget curl nginx - -RUN cd /tmp && \ - curl -O https://bootstrap.pypa.io/get-pip.py && \ - python2 get-pip.py && \ - python3 get-pip.py - -COPY patches /patches -COPY cpu_patches /cpu_patches - -# Install mxnet for python 2 and python 3 -RUN cd /tmp && \ - git clone --recursive https://github.com/apache/incubator-mxnet mxnet && \ - cd /tmp/mxnet && \ - git checkout tags/1.0.0 -b 1.0.0 && git submodule update --init --recursive && \ - git apply --verbose /patches/*.patch && \ - git apply --verbose /cpu_patches/*.patch && \ - make -j$(nproc) USE_BLAS=openblas USE_MKL2017=1 USE_DIST_KVSTORE=1 && \ - cd /tmp/mxnet/python && \ - python2 setup.py install && \ - python3 setup.py install && \ - cd / && \ - rm -fr /tmp/mxnet - -# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 -RUN ln -s /dev/null /dev/raw1394 - -RUN cd /tmp && \ - curl -O https://dl.influxdata.com/telegraf/releases/telegraf_1.4.2-1_amd64.deb && \ - dpkg -i telegraf_1.4.2-1_amd64.deb && \ - rm telegraf_1.4.2-1_amd64.deb - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" - -WORKDIR / diff --git a/docker/1.0.0/base/Dockerfile.gpu b/docker/1.0.0/base/Dockerfile.gpu deleted file mode 100644 index b6b4184f..00000000 --- a/docker/1.0.0/base/Dockerfile.gpu +++ /dev/null @@ -1,45 +0,0 @@ -FROM nvidia/cuda:9.0-cudnn7-devel - -RUN apt-get update && \ - apt-get -y install build-essential libopencv-dev libatlas-base-dev libcurl4-openssl-dev libgtest-dev \ - libjemalloc-dev cmake python-dev python3-dev python-opencv unzip git wget curl nginx - -# install pip -RUN cd /tmp && \ - curl -O https://bootstrap.pypa.io/get-pip.py && \ - python2 get-pip.py && \ - python3 get-pip.py - -COPY patches /patches - -# build mxnet -# from https://github.com/apache/incubator-mxnet/blob/master/docker/install/cpp.sh -RUN cd /usr/src/gtest && cmake CMakeLists.txt && make && cp *.a /usr/lib - -# using (future) version of: -# https://github.com/apache/incubator-mxnet/blob/master/docker/Dockerfiles/Dockerfile.in.lib.gpu -RUN cd /tmp && \ - git clone --recursive https://github.com/apache/incubator-mxnet mxnet && cd mxnet && \ - git checkout tags/1.0.0 -b 1.0.0 && git submodule update --init --recursive && \ - git apply --verbose /patches/*.patch && \ - make -j$(nproc) USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1 USE_DIST_KVSTORE=1 && \ - cd /tmp/mxnet/python && \ - python2 setup.py install && \ - python3 setup.py install && \ - cd / && \ - rm -fr /tmp/mxnet - -# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 -RUN ln -s /dev/null /dev/raw1394 - -# install telegraf -RUN cd /tmp && \ - curl -O https://dl.influxdata.com/telegraf/releases/telegraf_1.4.2-1_amd64.deb && \ - dpkg -i telegraf_1.4.2-1_amd64.deb && \ - rm telegraf_1.4.2-1_amd64.deb - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" - -WORKDIR / diff --git a/docker/1.0.0/base/cpu_patches/0001-apache.incubator-mxnet.pull.9218.patch b/docker/1.0.0/base/cpu_patches/0001-apache.incubator-mxnet.pull.9218.patch deleted file mode 100644 index a8a94c77..00000000 --- a/docker/1.0.0/base/cpu_patches/0001-apache.incubator-mxnet.pull.9218.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/prepare_mkl.sh -+++ b/prepare_mkl.sh -@@ -75,14 +75,14 @@ MXNET_ROOT=`dirname $0` - USE_MKLML=0 - # NOTE: if you update the following line, please also update the dockerfile at - # tests/ci_build/Dockerfile.mkl --VERSION_MATCH=20170908 -+VERSION_MATCH=20171227 - PLATFORM=$(uname) - if [ $PLATFORM == "Darwin" ]; then - INFIX=mac - elif [ $PLATFORM == "Linux" ]; then - INFIX=lnx - fi --ARCHIVE_BASENAME=mklml_${INFIX}_2018.0.20170908.tgz -+ARCHIVE_BASENAME=mklml_${INFIX}_2018.0.1.20171227.tgz - MKL_CONTENT_DIR=`echo $ARCHIVE_BASENAME | rev | cut -d "." -f 2- | rev` --MKLURL="https://github.com/01org/mkl-dnn/releases/download/v0.10/$ARCHIVE_BASENAME" -+MKLURL="https://github.com/intel/mkl-dnn/releases/download/v0.12/$ARCHIVE_BASENAME" - # there are diffrent MKL lib to be used for GCC and for ICC diff --git a/docker/1.0.0/base/patches/0001-Python-3-compatiblity-during-optimizer-serialization.patch b/docker/1.0.0/base/patches/0001-Python-3-compatiblity-during-optimizer-serialization.patch deleted file mode 100644 index f75f36d2..00000000 --- a/docker/1.0.0/base/patches/0001-Python-3-compatiblity-during-optimizer-serialization.patch +++ /dev/null @@ -1,25 +0,0 @@ -From c462d343b0782e82a7a91d3dcccc3863bb947dff Mon Sep 17 00:00:00 2001 -From: Tobias Domhan -Date: Sat, 25 Nov 2017 23:02:49 +0100 -Subject: [PATCH] Python 3 compatiblity during optimizer serialization. (#8334) - ---- - python/mxnet/kvstore.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/python/mxnet/kvstore.py b/python/mxnet/kvstore.py -index d068d06..ad598d0 100644 ---- a/python/mxnet/kvstore.py -+++ b/python/mxnet/kvstore.py -@@ -451,7 +451,7 @@ class KVStore(object): - # send the optimizer to server - try: - # use ASCII protocol 0, might be slower, but not a big ideal -- optim_str = pickle.dumps(optimizer, 0) -+ optim_str = py_str(pickle.dumps(optimizer, 0)) - except: - raise - self._send_command_to_servers(0, optim_str) --- -2.7.3.AMZN - diff --git a/docker/1.0.0/final/py2/Dockerfile.cpu b/docker/1.0.0/final/py2/Dockerfile.cpu deleted file mode 100644 index 29c97ce6..00000000 --- a/docker/1.0.0/final/py2/Dockerfile.cpu +++ /dev/null @@ -1,15 +0,0 @@ -# Use local version of image built from Dockerfile.cpu in /docker/$version/base directory -FROM mxnet-base:1.0.0-cpu-py2 -ARG mxnet_support_tar=sagemaker_mxnet_container-1.0.0.tar.gz - -RUN pip2 install --no-cache \ - numpy==1.13.3 - -COPY $mxnet_support_tar . - -RUN pip2 install $mxnet_support_tar - -RUN rm $mxnet_support_tar - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python2", "/usr/local/bin/entry.py"] diff --git a/docker/1.0.0/final/py2/Dockerfile.gpu b/docker/1.0.0/final/py2/Dockerfile.gpu deleted file mode 100644 index d0a0ea34..00000000 --- a/docker/1.0.0/final/py2/Dockerfile.gpu +++ /dev/null @@ -1,15 +0,0 @@ -# Use local version of image built from Dockerfile.gpu in /docker/$version/base directory -FROM mxnet-base:1.0.0-gpu-py2 -ARG mxnet_support_tar=sagemaker_mxnet_container-1.0.0.tar.gz - -RUN pip2 install --no-cache \ - numpy==1.13.3 - -COPY $mxnet_support_tar . - -RUN pip2 install $mxnet_support_tar - -RUN rm $mxnet_support_tar - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python2", "/usr/local/bin/entry.py"] diff --git a/docker/1.0.0/final/py3/Dockerfile.cpu b/docker/1.0.0/final/py3/Dockerfile.cpu deleted file mode 100644 index 65356fce..00000000 --- a/docker/1.0.0/final/py3/Dockerfile.cpu +++ /dev/null @@ -1,15 +0,0 @@ -# Use local version of image built from Dockerfile.cpu in /docker/$version/base directory -FROM mxnet-base:1.0.0-cpu-py3 -ARG mxnet_support_tar=sagemaker_mxnet_container-1.0.0.tar.gz - -RUN pip3 install --no-cache \ - numpy==1.13.3 - -COPY $mxnet_support_tar . - -RUN pip3 install $mxnet_support_tar - -RUN rm $mxnet_support_tar - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python3", "/usr/local/bin/entry.py"] diff --git a/docker/1.0.0/final/py3/Dockerfile.gpu b/docker/1.0.0/final/py3/Dockerfile.gpu deleted file mode 100644 index 642110e2..00000000 --- a/docker/1.0.0/final/py3/Dockerfile.gpu +++ /dev/null @@ -1,15 +0,0 @@ -# Use local version of image built from Dockerfile.gpu in /docker/$version/base directory -FROM mxnet-base:1.0.0-gpu-py3 -ARG mxnet_support_tar=sagemaker_mxnet_container-1.0.0.tar.gz - -RUN pip3 install --no-cache \ - numpy==1.13.3 - -COPY $mxnet_support_tar . - -RUN pip3 install $mxnet_support_tar - -RUN rm $mxnet_support_tar - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python3", "/usr/local/bin/entry.py"] diff --git a/docker/1.1.0/final/Dockerfile.cpu b/docker/1.1.0/final/Dockerfile.cpu deleted file mode 100644 index f260f535..00000000 --- a/docker/1.1.0/final/Dockerfile.cpu +++ /dev/null @@ -1,46 +0,0 @@ -FROM ubuntu:16.04 -ARG framework_installable -ARG py_version -ARG framework_support_installable=sagemaker_mxnet_container-1.0.0.tar.gz - -# Validate that arguments are specified -RUN test $framework_installable || exit 1 && \ - test $py_version || exit 1 - -WORKDIR /tmp - -RUN apt-get update && \ - apt-get -y install build-essential libopencv-dev libopenblas-dev libjemalloc-dev libgfortran3 \ - python-dev python3-dev wget curl nginx - -# Symlink /usr/bin/python to the python version we're building for. -RUN rm /usr/bin/python && ln -s "/usr/bin/python$py_version" /usr/bin/python - -# Install pip -RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ - /usr/bin/python get-pip.py - -# Will install from pypi once packages are released there. For now, copy from local file system. -COPY $framework_installable . -COPY $framework_support_installable . - -RUN framework_installable_local=$(basename $framework_installable) && \ - framework_support_installable_local=$(basename $framework_support_installable) && \ - \ - pip install $framework_installable_local && \ - pip install $framework_support_installable_local && \ - \ - rm $framework_installable_local && \ - rm $framework_support_installable_local - -# This is here to make our installed version of OpenCV work. -# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 -# TODO: Should we be installing OpenCV in our image like this? Is there another way we can fix this? -RUN ln -s /dev/null /dev/raw1394 - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python", "/usr/local/bin/entry.py"] diff --git a/docker/1.1.0/final/Dockerfile.gpu b/docker/1.1.0/final/Dockerfile.gpu deleted file mode 100644 index e302cb1e..00000000 --- a/docker/1.1.0/final/Dockerfile.gpu +++ /dev/null @@ -1,46 +0,0 @@ -FROM nvidia/cuda:9.0-cudnn7-devel -ARG framework_installable -ARG py_version -ARG framework_support_installable=sagemaker_mxnet_container-1.0.0.tar.gz - -# Validate that arguments are specified -RUN test $framework_installable || exit 1 && \ - test $py_version || exit 1 - -WORKDIR /tmp - -RUN apt-get update && \ - apt-get -y install build-essential libopencv-dev libatlas-base-dev libcurl4-openssl-dev libgtest-dev \ - libjemalloc-dev python-dev python3-dev unzip git wget curl nginx - -# Symlink /usr/bin/python to the python version we're building for. -RUN rm /usr/bin/python && ln -s "/usr/bin/python$py_version" /usr/bin/python - -# install pip -RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ - /usr/bin/python get-pip.py - -# Will install from pypi once packages are released there. For now, copy from local file system. -COPY $framework_installable . -COPY $framework_support_installable . - -RUN framework_installable_local=$(basename $framework_installable) && \ - framework_support_installable_local=$(basename $framework_support_installable) && \ - \ - pip install $framework_installable_local && \ - pip install $framework_support_installable_local && \ - \ - rm $framework_installable_local && \ - rm $framework_support_installable_local - -# This is here to make our installed version of OpenCV work. -# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 -# TODO: Should we be installing OpenCV in our image like this? Is there another way we can fix this? -RUN ln -s /dev/null /dev/raw1394 - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python", "/usr/local/bin/entry.py"] diff --git a/docker/1.2.1/final/Dockerfile.cpu b/docker/1.2.1/final/Dockerfile.cpu deleted file mode 100644 index f1e7d9e1..00000000 --- a/docker/1.2.1/final/Dockerfile.cpu +++ /dev/null @@ -1,49 +0,0 @@ -FROM ubuntu:16.04 -ARG framework_installable -ARG py_version -ARG framework_support_installable=sagemaker_mxnet_container-1.0.0.tar.gz - -# Validate that arguments are specified -RUN test $framework_installable || exit 1 && \ - test $py_version || exit 1 - -WORKDIR /tmp - -RUN apt-get update && \ - apt-get -y install build-essential libopencv-dev libopenblas-dev libjemalloc-dev libgfortran3 \ - python-dev python3-dev wget curl nginx - -# Symlink /usr/bin/python to the python version we're building for. -RUN rm /usr/bin/python && ln -s "/usr/bin/python$py_version" /usr/bin/python - -# Install pip -RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ - /usr/bin/python get-pip.py - -# Will install from pypi once packages are released there. For now, copy from local file system. -COPY $framework_installable . -COPY $framework_support_installable . - -RUN framework_installable_local=$(basename $framework_installable) && \ - framework_support_installable_local=$(basename $framework_support_installable) && \ - \ - pip install $framework_installable_local && \ - pip install $framework_support_installable_local && \ - \ - rm $framework_installable_local && \ - rm $framework_support_installable_local - -# For ONNX model import - https://onnx.ai/ -RUN pip install onnx - -# This is here to make our installed version of OpenCV work. -# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 -# TODO: Should we be installing OpenCV in our image like this? Is there another way we can fix this? -RUN ln -s /dev/null /dev/raw1394 - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python", "/usr/local/bin/entry.py"] diff --git a/docker/1.2.1/final/Dockerfile.gpu b/docker/1.2.1/final/Dockerfile.gpu deleted file mode 100644 index 52bc94dd..00000000 --- a/docker/1.2.1/final/Dockerfile.gpu +++ /dev/null @@ -1,49 +0,0 @@ -FROM nvidia/cuda:9.0-cudnn7-devel -ARG framework_installable -ARG py_version -ARG framework_support_installable=sagemaker_mxnet_container-1.0.0.tar.gz - -# Validate that arguments are specified -RUN test $framework_installable || exit 1 && \ - test $py_version || exit 1 - -WORKDIR /tmp - -RUN apt-get update && \ - apt-get -y install build-essential libopencv-dev libatlas-base-dev libcurl4-openssl-dev libgtest-dev \ - libjemalloc-dev python-dev python3-dev unzip git wget curl nginx - -# Symlink /usr/bin/python to the python version we're building for. -RUN rm /usr/bin/python && ln -s "/usr/bin/python$py_version" /usr/bin/python - -# install pip -RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ - /usr/bin/python get-pip.py - -# Will install from pypi once packages are released there. For now, copy from local file system. -COPY $framework_installable . -COPY $framework_support_installable . - -RUN framework_installable_local=$(basename $framework_installable) && \ - framework_support_installable_local=$(basename $framework_support_installable) && \ - \ - pip install $framework_installable_local && \ - pip install $framework_support_installable_local && \ - \ - rm $framework_installable_local && \ - rm $framework_support_installable_local - -# For ONNX model import - https://onnx.ai/ -RUN pip install onnx - -# This is here to make our installed version of OpenCV work. -# https://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394 -# TODO: Should we be installing OpenCV in our image like this? Is there another way we can fix this? -RUN ln -s /dev/null /dev/raw1394 - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib" - -# Entrypoint script comes from sagemaker_container_support -ENTRYPOINT ["/usr/bin/python", "/usr/local/bin/entry.py"]