From cb2c1609a7119e6ae152899451c8edb02ca84afa Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Wed, 10 Jun 2020 16:54:56 -0700 Subject: [PATCH 1/4] infra: use fixture for Python version in MXNet integ tests --- tests/conftest.py | 10 +++++-- tests/integ/test_airflow_config.py | 4 +-- tests/integ/test_debugger.py | 48 ++++++++++++++++-------------- tests/integ/test_git.py | 8 ++--- tests/integ/test_local_mode.py | 34 ++++++++++++--------- tests/integ/test_multidatamodel.py | 11 +++++-- tests/integ/test_mxnet_train.py | 44 +++++++++++++++++++-------- tests/integ/test_neo_mxnet.py | 7 +++-- tests/integ/test_transformer.py | 6 ++-- tests/integ/test_tuner.py | 4 +-- 10 files changed, 108 insertions(+), 68 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index fcc4cfa897..5fa68c7ec3 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -44,7 +44,6 @@ def pytest_addoption(parser): parser.addoption("--sagemaker-runtime-config", action="store", default=None) parser.addoption("--boto-config", action="store", default=None) parser.addoption("--chainer-full-version", action="store", default="5.0.0") - parser.addoption("--mxnet-full-version", action="store", default="1.6.0") parser.addoption("--ei-mxnet-full-version", action="store", default="1.5.1") parser.addoption( "--rl-coach-mxnet-full-version", @@ -255,8 +254,13 @@ def chainer_full_version(request): @pytest.fixture(scope="module") -def mxnet_full_version(request): - return request.config.getoption("--mxnet-full-version") +def mxnet_full_version(): + return "1.6.0" + + +@pytest.fixture(scope="module") +def mxnet_full_py_version(): + return "py3" @pytest.fixture(scope="module") diff --git a/tests/integ/test_airflow_config.py b/tests/integ/test_airflow_config.py index 7f4c5ecc9e..9dd693d4c6 100644 --- a/tests/integ/test_airflow_config.py +++ b/tests/integ/test_airflow_config.py @@ -480,7 +480,7 @@ def test_chainer_airflow_config_uploads_data_source_to_s3( @pytest.mark.canary_quick def test_mxnet_airflow_config_uploads_data_source_to_s3( - sagemaker_session, cpu_instance_type, mxnet_full_version + sagemaker_session, cpu_instance_type, mxnet_full_version, mxnet_full_py_version ): with timeout(seconds=AIRFLOW_CONFIG_TIMEOUT_IN_SECONDS): script_path = os.path.join(DATA_DIR, "chainer_mnist", "mnist.py") @@ -490,7 +490,7 @@ def test_mxnet_airflow_config_uploads_data_source_to_s3( entry_point=script_path, role=ROLE, framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=SINGLE_INSTANCE_COUNT, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, diff --git a/tests/integ/test_debugger.py b/tests/integ/test_debugger.py index 54c0d7455c..c87c05b44a 100644 --- a/tests/integ/test_debugger.py +++ b/tests/integ/test_debugger.py @@ -17,13 +17,9 @@ import pytest -from sagemaker.debugger import Rule -from sagemaker.debugger import DebuggerHookConfig -from sagemaker.debugger import TensorBoardOutputConfig - -from sagemaker.debugger import rule_configs +from sagemaker.debugger import DebuggerHookConfig, Rule, rule_configs, TensorBoardOutputConfig from sagemaker.mxnet.estimator import MXNet -from tests.integ import DATA_DIR, PYTHON_VERSION, TRAINING_DEFAULT_TIMEOUT_MINUTES +from tests.integ import DATA_DIR, TRAINING_DEFAULT_TIMEOUT_MINUTES from tests.integ.retry import retries from tests.integ.timeout import timeout @@ -60,7 +56,9 @@ # TODO-reinvent-2019: test get_debugger_artifacts_path and get_tensorboard_artifacts_path -def test_mxnet_with_rules(sagemaker_session, mxnet_full_version, cpu_instance_type): +def test_mxnet_with_rules( + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type +): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): rules = [ Rule.sagemaker(rule_configs.vanishing_gradient()), @@ -77,7 +75,7 @@ def test_mxnet_with_rules(sagemaker_session, mxnet_full_version, cpu_instance_ty entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, @@ -119,7 +117,9 @@ def test_mxnet_with_rules(sagemaker_session, mxnet_full_version, cpu_instance_ty _wait_and_assert_that_no_rule_jobs_errored(training_job=mx.latest_training_job) -def test_mxnet_with_custom_rule(sagemaker_session, mxnet_full_version, cpu_instance_type): +def test_mxnet_with_custom_rule( + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type +): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): rules = [_get_custom_rule(sagemaker_session)] @@ -130,7 +130,7 @@ def test_mxnet_with_custom_rule(sagemaker_session, mxnet_full_version, cpu_insta entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, @@ -166,7 +166,9 @@ def test_mxnet_with_custom_rule(sagemaker_session, mxnet_full_version, cpu_insta _wait_and_assert_that_no_rule_jobs_errored(training_job=mx.latest_training_job) -def test_mxnet_with_debugger_hook_config(sagemaker_session, mxnet_full_version, cpu_instance_type): +def test_mxnet_with_debugger_hook_config( + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type +): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): debugger_hook_config = DebuggerHookConfig( s3_output_path=os.path.join( @@ -181,7 +183,7 @@ def test_mxnet_with_debugger_hook_config(sagemaker_session, mxnet_full_version, entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, @@ -204,7 +206,7 @@ def test_mxnet_with_debugger_hook_config(sagemaker_session, mxnet_full_version, def test_mxnet_with_rules_and_debugger_hook_config( - sagemaker_session, mxnet_full_version, cpu_instance_type + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type ): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): rules = [ @@ -227,7 +229,7 @@ def test_mxnet_with_rules_and_debugger_hook_config( entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, @@ -272,7 +274,7 @@ def test_mxnet_with_rules_and_debugger_hook_config( def test_mxnet_with_custom_rule_and_debugger_hook_config( - sagemaker_session, mxnet_full_version, cpu_instance_type + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type ): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): rules = [_get_custom_rule(sagemaker_session)] @@ -289,7 +291,7 @@ def test_mxnet_with_custom_rule_and_debugger_hook_config( entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, @@ -328,7 +330,7 @@ def test_mxnet_with_custom_rule_and_debugger_hook_config( def test_mxnet_with_tensorboard_output_config( - sagemaker_session, mxnet_full_version, cpu_instance_type + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type ): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): tensorboard_output_config = TensorBoardOutputConfig( @@ -344,7 +346,7 @@ def test_mxnet_with_tensorboard_output_config( entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, @@ -370,7 +372,9 @@ def test_mxnet_with_tensorboard_output_config( @pytest.mark.canary_quick -def test_mxnet_with_all_rules_and_configs(sagemaker_session, mxnet_full_version, cpu_instance_type): +def test_mxnet_with_all_rules_and_configs( + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type +): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): rules = [ Rule.sagemaker(rule_configs.vanishing_gradient()), @@ -398,7 +402,7 @@ def test_mxnet_with_all_rules_and_configs(sagemaker_session, mxnet_full_version, entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, @@ -441,7 +445,7 @@ def test_mxnet_with_all_rules_and_configs(sagemaker_session, mxnet_full_version, def test_mxnet_with_debugger_hook_config_disabled( - sagemaker_session, mxnet_full_version, cpu_instance_type + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type ): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "mnist_gluon.py") @@ -451,7 +455,7 @@ def test_mxnet_with_debugger_hook_config_disabled( entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, diff --git a/tests/integ/test_git.py b/tests/integ/test_git.py index b29d9531b8..c6eaf6c2dd 100644 --- a/tests/integ/test_git.py +++ b/tests/integ/test_git.py @@ -81,7 +81,7 @@ def test_github(sagemaker_local_session, pytorch_full_version, pytorch_full_py_v @pytest.mark.local_mode @pytest.mark.skip("needs a secure authentication approach") -def test_private_github(sagemaker_local_session, mxnet_full_version): +def test_private_github(sagemaker_local_session, mxnet_full_version, mxnet_full_py_version): script_path = "mnist.py" data_path = os.path.join(DATA_DIR, "mxnet_mnist") git_config = { @@ -100,7 +100,7 @@ def test_private_github(sagemaker_local_session, mxnet_full_version): source_dir=source_dir, dependencies=dependencies, framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type="local", sagemaker_session=sagemaker_local_session, @@ -219,7 +219,7 @@ def test_github_with_ssh_passphrase_not_configured(sagemaker_local_session, skle @pytest.mark.local_mode @pytest.mark.skip("needs a secure authentication approach") -def test_codecommit(sagemaker_local_session, mxnet_full_version): +def test_codecommit(sagemaker_local_session, mxnet_full_version, mxnet_full_py_version): script_path = "mnist.py" data_path = os.path.join(DATA_DIR, "mxnet_mnist") git_config = { @@ -236,7 +236,7 @@ def test_codecommit(sagemaker_local_session, mxnet_full_version): source_dir=source_dir, dependencies=dependencies, framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type="local", sagemaker_session=sagemaker_local_session, diff --git a/tests/integ/test_local_mode.py b/tests/integ/test_local_mode.py index 7e448ff542..e25d3cf135 100644 --- a/tests/integ/test_local_mode.py +++ b/tests/integ/test_local_mode.py @@ -23,7 +23,7 @@ import stopit import tests.integ.lock as lock -from tests.integ import DATA_DIR, PYTHON_VERSION +from tests.integ import DATA_DIR from sagemaker.local import LocalSession, LocalSagemakerRuntimeClient, LocalSagemakerClient from sagemaker.mxnet import MXNet @@ -54,7 +54,7 @@ def _initialize(self, boto_session, sagemaker_client, sagemaker_runtime_client): @pytest.fixture(scope="module") -def mxnet_model(sagemaker_local_session, mxnet_full_version): +def mxnet_model(sagemaker_local_session, mxnet_full_version, mxnet_full_py_version): def _create_model(output_path): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "mnist.py") data_path = os.path.join(DATA_DIR, "mxnet_mnist") @@ -66,7 +66,7 @@ def _create_model(output_path): train_instance_type="local", output_path=output_path, framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, sagemaker_session=sagemaker_local_session, ) @@ -85,7 +85,9 @@ def _create_model(output_path): @pytest.mark.local_mode -def test_local_mode_serving_from_s3_model(sagemaker_local_session, mxnet_model, mxnet_full_version): +def test_local_mode_serving_from_s3_model( + sagemaker_local_session, mxnet_model, mxnet_full_version, mxnet_full_py_version +): path = "s3://%s" % sagemaker_local_session.default_bucket() s3_model = mxnet_model(path) s3_model.sagemaker_session = sagemaker_local_session @@ -119,14 +121,14 @@ def test_local_mode_serving_from_local_model(tmpdir, sagemaker_local_session, mx @pytest.mark.local_mode -def test_mxnet_local_mode(sagemaker_local_session, mxnet_full_version): +def test_mxnet_local_mode(sagemaker_local_session, mxnet_full_version, mxnet_full_py_version): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "mnist.py") data_path = os.path.join(DATA_DIR, "mxnet_mnist") mx = MXNet( entry_point=script_path, role="SageMakerRole", - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type="local", sagemaker_session=sagemaker_local_session, @@ -153,14 +155,16 @@ def test_mxnet_local_mode(sagemaker_local_session, mxnet_full_version): @pytest.mark.local_mode -def test_mxnet_distributed_local_mode(sagemaker_local_session, mxnet_full_version): +def test_mxnet_distributed_local_mode( + sagemaker_local_session, mxnet_full_version, mxnet_full_py_version +): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "mnist.py") data_path = os.path.join(DATA_DIR, "mxnet_mnist") mx = MXNet( entry_point=script_path, role="SageMakerRole", - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=2, train_instance_type="local", sagemaker_session=sagemaker_local_session, @@ -179,7 +183,7 @@ def test_mxnet_distributed_local_mode(sagemaker_local_session, mxnet_full_versio @pytest.mark.local_mode -def test_mxnet_local_data_local_script(mxnet_full_version): +def test_mxnet_local_data_local_script(mxnet_full_version, mxnet_full_py_version): data_path = os.path.join(DATA_DIR, "mxnet_mnist") script_path = os.path.join(data_path, "mnist.py") @@ -189,7 +193,7 @@ def test_mxnet_local_data_local_script(mxnet_full_version): train_instance_count=1, train_instance_type="local", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, sagemaker_session=LocalNoS3Session(), ) @@ -209,14 +213,16 @@ def test_mxnet_local_data_local_script(mxnet_full_version): @pytest.mark.local_mode -def test_mxnet_training_failure(sagemaker_local_session, mxnet_full_version, tmpdir): +def test_mxnet_training_failure( + sagemaker_local_session, mxnet_full_version, mxnet_full_py_version, tmpdir +): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "failure_script.py") mx = MXNet( entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type="local", sagemaker_session=sagemaker_local_session, @@ -233,7 +239,7 @@ def test_mxnet_training_failure(sagemaker_local_session, mxnet_full_version, tmp @pytest.mark.local_mode def test_local_transform_mxnet( - sagemaker_local_session, tmpdir, mxnet_full_version, cpu_instance_type + sagemaker_local_session, tmpdir, mxnet_full_version, mxnet_full_py_version, cpu_instance_type ): data_path = os.path.join(DATA_DIR, "mxnet_mnist") script_path = os.path.join(data_path, "mnist.py") @@ -244,7 +250,7 @@ def test_local_transform_mxnet( train_instance_count=1, train_instance_type="local", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, sagemaker_session=sagemaker_local_session, ) diff --git a/tests/integ/test_multidatamodel.py b/tests/integ/test_multidatamodel.py index 0585fa3852..2178e9c952 100644 --- a/tests/integ/test_multidatamodel.py +++ b/tests/integ/test_multidatamodel.py @@ -28,7 +28,7 @@ from sagemaker.mxnet import MXNet from sagemaker.predictor import RealTimePredictor, StringDeserializer, npy_serializer from sagemaker.utils import sagemaker_timestamp, unique_name_from_base, get_ecr_image_uri_prefix -from tests.integ import DATA_DIR, PYTHON_VERSION, TRAINING_DEFAULT_TIMEOUT_MINUTES +from tests.integ import DATA_DIR, TRAINING_DEFAULT_TIMEOUT_MINUTES from tests.integ.retry import retries from tests.integ.timeout import timeout, timeout_and_delete_endpoint_by_name @@ -309,7 +309,12 @@ def test_multi_data_model_deploy_trained_model_from_framework_estimator( def __mxnet_training_job( - sagemaker_session, container_image, mxnet_full_version, cpu_instance_type, learning_rate + sagemaker_session, + container_image, + mxnet_full_version, + mxnet_full_py_version, + cpu_instance_type, + learning_rate, ): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "mnist.py") @@ -319,7 +324,7 @@ def __mxnet_training_job( entry_point=script_path, role=ROLE, framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, diff --git a/tests/integ/test_mxnet_train.py b/tests/integ/test_mxnet_train.py index 6e58f1ddfb..f25e5692e8 100644 --- a/tests/integ/test_mxnet_train.py +++ b/tests/integ/test_mxnet_train.py @@ -22,14 +22,16 @@ from sagemaker.mxnet.estimator import MXNet from sagemaker.mxnet.model import MXNetModel from sagemaker.utils import sagemaker_timestamp -from tests.integ import DATA_DIR, PYTHON_VERSION, TRAINING_DEFAULT_TIMEOUT_MINUTES +from tests.integ import DATA_DIR, TRAINING_DEFAULT_TIMEOUT_MINUTES from tests.integ.kms_utils import get_or_create_kms_key from tests.integ.retry import retries from tests.integ.timeout import timeout, timeout_and_delete_endpoint_by_name @pytest.fixture(scope="module") -def mxnet_training_job(sagemaker_session, mxnet_full_version, cpu_instance_type): +def mxnet_training_job( + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type +): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "mnist.py") data_path = os.path.join(DATA_DIR, "mxnet_mnist") @@ -38,7 +40,7 @@ def mxnet_training_job(sagemaker_session, mxnet_full_version, cpu_instance_type) entry_point=script_path, role="SageMakerRole", framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, @@ -68,7 +70,13 @@ def test_attach_deploy(mxnet_training_job, sagemaker_session, cpu_instance_type) assert result is not None -def test_deploy_model(mxnet_training_job, sagemaker_session, mxnet_full_version, cpu_instance_type): +def test_deploy_model( + mxnet_training_job, + sagemaker_session, + mxnet_full_version, + mxnet_full_py_version, + cpu_instance_type, +): endpoint_name = "test-mxnet-deploy-model-{}".format(sagemaker_timestamp()) with timeout_and_delete_endpoint_by_name(endpoint_name, sagemaker_session): @@ -81,7 +89,7 @@ def test_deploy_model(mxnet_training_job, sagemaker_session, mxnet_full_version, model_data, "SageMakerRole", entry_point=script_path, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, sagemaker_session=sagemaker_session, framework_version=mxnet_full_version, ) @@ -98,7 +106,11 @@ def test_deploy_model(mxnet_training_job, sagemaker_session, mxnet_full_version, def test_deploy_model_with_tags_and_kms( - mxnet_training_job, sagemaker_session, mxnet_full_version, cpu_instance_type + mxnet_training_job, + sagemaker_session, + mxnet_full_version, + mxnet_full_py_version, + cpu_instance_type, ): endpoint_name = "test-mxnet-deploy-model-{}".format(sagemaker_timestamp()) @@ -112,7 +124,7 @@ def test_deploy_model_with_tags_and_kms( model_data, "SageMakerRole", entry_point=script_path, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, sagemaker_session=sagemaker_session, framework_version=mxnet_full_version, ) @@ -155,6 +167,7 @@ def test_deploy_model_with_update_endpoint( mxnet_training_job, sagemaker_session, mxnet_full_version, + mxnet_full_py_version, cpu_instance_type, alternative_cpu_instance_type, ): @@ -170,7 +183,7 @@ def test_deploy_model_with_update_endpoint( model_data, "SageMakerRole", entry_point=script_path, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, sagemaker_session=sagemaker_session, framework_version=mxnet_full_version, ) @@ -205,6 +218,7 @@ def test_deploy_model_with_update_non_existing_endpoint( mxnet_training_job, sagemaker_session, mxnet_full_version, + mxnet_full_py_version, cpu_instance_type, alternative_cpu_instance_type, ): @@ -224,7 +238,7 @@ def test_deploy_model_with_update_non_existing_endpoint( model_data, "SageMakerRole", entry_point=script_path, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, sagemaker_session=sagemaker_session, framework_version=mxnet_full_version, ) @@ -244,7 +258,11 @@ def test_deploy_model_with_update_non_existing_endpoint( reason="EI isn't supported in that specific region.", ) def test_deploy_model_with_accelerator( - mxnet_training_job, sagemaker_session, ei_mxnet_full_version, cpu_instance_type + mxnet_training_job, + sagemaker_session, + ei_mxnet_full_version, + mxnet_full_py_version, + cpu_instance_type, ): endpoint_name = "test-mxnet-deploy-model-ei-{}".format(sagemaker_timestamp()) @@ -259,7 +277,7 @@ def test_deploy_model_with_accelerator( "SageMakerRole", entry_point=script_path, framework_version=ei_mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, sagemaker_session=sagemaker_session, ) predictor = model.deploy( @@ -271,7 +289,7 @@ def test_deploy_model_with_accelerator( assert result is not None -def test_async_fit(sagemaker_session, mxnet_full_version, cpu_instance_type): +def test_async_fit(sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type): endpoint_name = "test-mxnet-attach-deploy-{}".format(sagemaker_timestamp()) with timeout(minutes=5): @@ -281,7 +299,7 @@ def test_async_fit(sagemaker_session, mxnet_full_version, cpu_instance_type): mx = MXNet( entry_point=script_path, role="SageMakerRole", - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, diff --git a/tests/integ/test_neo_mxnet.py b/tests/integ/test_neo_mxnet.py index e3778e892c..692548dff0 100644 --- a/tests/integ/test_neo_mxnet.py +++ b/tests/integ/test_neo_mxnet.py @@ -20,11 +20,12 @@ from sagemaker.mxnet.estimator import MXNet from sagemaker.mxnet.model import MXNetModel from sagemaker.utils import unique_name_from_base -from tests.integ import DATA_DIR, PYTHON_VERSION, TRAINING_DEFAULT_TIMEOUT_MINUTES +from tests.integ import DATA_DIR, TRAINING_DEFAULT_TIMEOUT_MINUTES from tests.integ.timeout import timeout, timeout_and_delete_endpoint_by_name NEO_MXNET_VERSION = "1.4.1" # Neo doesn't support MXNet 1.6 yet. INF_MXNET_VERSION = "1.5.1" +NEO_PYTHON_VERSION = "py3" @pytest.fixture(scope="module") @@ -37,7 +38,7 @@ def mxnet_training_job(sagemaker_session, cpu_instance_type): entry_point=script_path, role="SageMakerRole", framework_version=NEO_MXNET_VERSION, - py_version=PYTHON_VERSION, + py_version=NEO_PYTHON_VERSION, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, @@ -94,7 +95,7 @@ def test_deploy_model( model_data, role, entry_point=script_path, - py_version=PYTHON_VERSION, + py_version=NEO_PYTHON_VERSION, framework_version=NEO_MXNET_VERSION, sagemaker_session=sagemaker_session, ) diff --git a/tests/integ/test_transformer.py b/tests/integ/test_transformer.py index b87a6064b1..6cae146646 100644 --- a/tests/integ/test_transformer.py +++ b/tests/integ/test_transformer.py @@ -42,7 +42,9 @@ @pytest.fixture(scope="module") -def mxnet_estimator(sagemaker_session, mxnet_full_version, cpu_instance_type): +def mxnet_estimator( + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type +): mx = MXNet( entry_point=os.path.join(MXNET_MNIST_PATH, "mnist.py"), role="SageMakerRole", @@ -50,7 +52,7 @@ def mxnet_estimator(sagemaker_session, mxnet_full_version, cpu_instance_type): train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, framework_version=mxnet_full_version, - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, ) train_input = mx.sagemaker_session.upload_data( diff --git a/tests/integ/test_tuner.py b/tests/integ/test_tuner.py index 38cef9c8df..e6edd95e79 100644 --- a/tests/integ/test_tuner.py +++ b/tests/integ/test_tuner.py @@ -538,7 +538,7 @@ def test_stop_tuning_job(sagemaker_session, cpu_instance_type): @pytest.mark.canary_quick -def test_tuning_mxnet(sagemaker_session, mxnet_full_version, cpu_instance_type): +def test_tuning_mxnet(sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type): with timeout(minutes=TUNING_DEFAULT_TIMEOUT_MINUTES): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "mnist.py") data_path = os.path.join(DATA_DIR, "mxnet_mnist") @@ -546,7 +546,7 @@ def test_tuning_mxnet(sagemaker_session, mxnet_full_version, cpu_instance_type): estimator = MXNet( entry_point=script_path, role="SageMakerRole", - py_version=PYTHON_VERSION, + py_version=mxnet_full_py_version, train_instance_count=1, train_instance_type=cpu_instance_type, framework_version=mxnet_full_version, From 458a37516cc5b9904d0b83653b594cda638621c6 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Tue, 23 Jun 2020 15:11:16 -0700 Subject: [PATCH 2/4] fix formatting --- tests/integ/test_git.py | 2 +- tests/integ/test_multidatamodel.py | 23 ++++++++++++++++------- tests/integ/test_neo_mxnet.py | 2 +- tests/integ/test_tuner.py | 4 +++- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/tests/integ/test_git.py b/tests/integ/test_git.py index c6eaf6c2dd..bcf2111503 100644 --- a/tests/integ/test_git.py +++ b/tests/integ/test_git.py @@ -24,7 +24,7 @@ from sagemaker.pytorch.estimator import PyTorch from sagemaker.sklearn.estimator import SKLearn from sagemaker.sklearn.model import SKLearnModel -from tests.integ import DATA_DIR, PYTHON_VERSION +from tests.integ import DATA_DIR GIT_REPO = "https://github.com/aws/sagemaker-python-sdk.git" diff --git a/tests/integ/test_multidatamodel.py b/tests/integ/test_multidatamodel.py index 2178e9c952..645364b229 100644 --- a/tests/integ/test_multidatamodel.py +++ b/tests/integ/test_multidatamodel.py @@ -240,16 +240,20 @@ def test_multi_data_model_deploy_pretrained_models_local_mode(container_image, s def test_multi_data_model_deploy_trained_model_from_framework_estimator( - container_image, sagemaker_session, cpu_instance_type + container_image, sagemaker_session, cpu_instance_type, mxnet_full_version, mxnet_full_py_version ): timestamp = sagemaker_timestamp() endpoint_name = "test-multimodel-endpoint-{}".format(timestamp) model_name = "test-multimodel-{}".format(timestamp) - mxnet_version = "1.4.1" with timeout_and_delete_endpoint_by_name(endpoint_name, sagemaker_session): - mxnet_model_1 = __mxnet_training_job( - sagemaker_session, container_image, mxnet_version, cpu_instance_type, 0.1 + mxnet_model_1 = _mxnet_training_job( + sagemaker_session, + container_image, + mxnet_full_version, + mxnet_full_py_version, + cpu_instance_type, + 0.1, ) model_data_prefix = os.path.join( "s3://", sagemaker_session.default_bucket(), "multimodel-{}/".format(timestamp) @@ -267,8 +271,13 @@ def test_multi_data_model_deploy_trained_model_from_framework_estimator( multi_data_model.deploy(1, cpu_instance_type, endpoint_name=endpoint_name) # Train another model - mxnet_model_2 = __mxnet_training_job( - sagemaker_session, container_image, mxnet_version, cpu_instance_type, 0.01 + mxnet_model_2 = _mxnet_training_job( + sagemaker_session, + container_image, + mxnet_full_version, + mxnet_full_py_version, + cpu_instance_type, + 0.01, ) # Deploy newly trained model multi_data_model.add_model(mxnet_model_2.model_data, PRETRAINED_MODEL_PATH_2) @@ -308,7 +317,7 @@ def test_multi_data_model_deploy_trained_model_from_framework_estimator( assert "Could not find endpoint" in str(exception.value) -def __mxnet_training_job( +def _mxnet_training_job( sagemaker_session, container_image, mxnet_full_version, diff --git a/tests/integ/test_neo_mxnet.py b/tests/integ/test_neo_mxnet.py index 692548dff0..bbca7eb63e 100644 --- a/tests/integ/test_neo_mxnet.py +++ b/tests/integ/test_neo_mxnet.py @@ -132,7 +132,7 @@ def test_inferentia_deploy_model( role, entry_point=script_path, framework_version=INF_MXNET_VERSION, - py_version=PYTHON_VERSION, + py_version=NEO_PYTHON_VERSION, sagemaker_session=sagemaker_session, ) diff --git a/tests/integ/test_tuner.py b/tests/integ/test_tuner.py index e6edd95e79..d6c3de27cc 100644 --- a/tests/integ/test_tuner.py +++ b/tests/integ/test_tuner.py @@ -538,7 +538,9 @@ def test_stop_tuning_job(sagemaker_session, cpu_instance_type): @pytest.mark.canary_quick -def test_tuning_mxnet(sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type): +def test_tuning_mxnet( + sagemaker_session, mxnet_full_version, mxnet_full_py_version, cpu_instance_type +): with timeout(minutes=TUNING_DEFAULT_TIMEOUT_MINUTES): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "mnist.py") data_path = os.path.join(DATA_DIR, "mxnet_mnist") From 110bb603ea1cbb795762e99082b53eaf550a6ee0 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Tue, 23 Jun 2020 15:57:04 -0700 Subject: [PATCH 3/4] fix param names --- tests/integ/test_multidatamodel.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/integ/test_multidatamodel.py b/tests/integ/test_multidatamodel.py index 645364b229..7cbbadd1bd 100644 --- a/tests/integ/test_multidatamodel.py +++ b/tests/integ/test_multidatamodel.py @@ -320,8 +320,8 @@ def test_multi_data_model_deploy_trained_model_from_framework_estimator( def _mxnet_training_job( sagemaker_session, container_image, - mxnet_full_version, - mxnet_full_py_version, + mxnet_version, + py_version, cpu_instance_type, learning_rate, ): @@ -332,8 +332,8 @@ def _mxnet_training_job( mx = MXNet( entry_point=script_path, role=ROLE, - framework_version=mxnet_full_version, - py_version=mxnet_full_py_version, + framework_version=mxnet_version, + py_version=py_version, train_instance_count=1, train_instance_type=cpu_instance_type, sagemaker_session=sagemaker_session, From cbba80d8e2575d444015cf6bc34752568dc1481d Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Tue, 23 Jun 2020 16:11:19 -0700 Subject: [PATCH 4/4] black format --- tests/integ/test_airflow_config.py | 2 +- tests/integ/test_multidatamodel.py | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/tests/integ/test_airflow_config.py b/tests/integ/test_airflow_config.py index 5eaad34b48..4b43004cb5 100644 --- a/tests/integ/test_airflow_config.py +++ b/tests/integ/test_airflow_config.py @@ -573,7 +573,7 @@ def test_xgboost_airflow_config_uploads_data_source_to_s3( @pytest.mark.canary_quick def test_pytorch_airflow_config_uploads_data_source_to_s3_when_inputs_not_provided( - sagemaker_session, cpu_instance_type, pytorch_full_version, pytorch_full_py_version, + sagemaker_session, cpu_instance_type, pytorch_full_version, pytorch_full_py_version ): with timeout(seconds=AIRFLOW_CONFIG_TIMEOUT_IN_SECONDS): estimator = PyTorch( diff --git a/tests/integ/test_multidatamodel.py b/tests/integ/test_multidatamodel.py index 7cbbadd1bd..3317a71655 100644 --- a/tests/integ/test_multidatamodel.py +++ b/tests/integ/test_multidatamodel.py @@ -318,12 +318,7 @@ def test_multi_data_model_deploy_trained_model_from_framework_estimator( def _mxnet_training_job( - sagemaker_session, - container_image, - mxnet_version, - py_version, - cpu_instance_type, - learning_rate, + sagemaker_session, container_image, mxnet_version, py_version, cpu_instance_type, learning_rate ): with timeout(minutes=TRAINING_DEFAULT_TIMEOUT_MINUTES): script_path = os.path.join(DATA_DIR, "mxnet_mnist", "mnist.py")