Skip to content

fix: shorten base job name to avoid collision #1170

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Dec 17, 2019
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/sagemaker/automl/automl.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from sagemaker.automl.candidate_estimator import CandidateEstimator
from sagemaker.job import _Job
from sagemaker.session import Session
from sagemaker.utils import name_from_base
from sagemaker.utils import unique_name_from_base


class AutoML(object):
Expand Down Expand Up @@ -379,9 +379,9 @@ def _prepare_for_auto_ml_job(self, job_name=None):
if self.base_job_name:
base_name = self.base_job_name
else:
base_name = "sagemaker-auto-ml"
base_name = "automl"
# CreateAutoMLJob API validates that member length less than or equal to 32
self.current_job_name = name_from_base(base_name, max_length=32)
self.current_job_name = unique_name_from_base(base_name, max_length=32)

if self.output_path is None:
self.output_path = "s3://{}/".format(self.sagemaker_session.default_bucket())
Expand Down
12 changes: 8 additions & 4 deletions tests/integ/test_auto_ml.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,10 @@ def test_auto_ml_fit(sagemaker_session):
max_candidates=3,
)

job_name = unique_name_from_base("auto-ml", max_length=32)
inputs = sagemaker_session.upload_data(path=TRAINING_DATA, key_prefix=PREFIX + "/input")
with timeout(minutes=AUTO_ML_DEFAULT_TIMEMOUT_MINUTES):
auto_ml.fit(inputs)
auto_ml.fit(inputs, job_name=job_name)


@pytest.mark.skipif(
Expand All @@ -76,8 +77,9 @@ def test_auto_ml_fit_local_input(sagemaker_session):
)

inputs = TRAINING_DATA
job_name = unique_name_from_base("auto-ml", max_length=32)
with timeout(minutes=AUTO_ML_DEFAULT_TIMEMOUT_MINUTES):
auto_ml.fit(inputs)
auto_ml.fit(inputs, job_name=job_name)


@pytest.mark.skipif(
Expand All @@ -91,10 +93,11 @@ def test_auto_ml_input_object_fit(sagemaker_session):
sagemaker_session=sagemaker_session,
max_candidates=1,
)
job_name = unique_name_from_base("auto-ml", max_length=32)
s3_input = sagemaker_session.upload_data(path=TRAINING_DATA, key_prefix=PREFIX + "/input")
inputs = AutoMLInput(inputs=s3_input, target_attribute_name=TARGET_ATTRIBUTE_NAME)
with timeout(minutes=AUTO_ML_DEFAULT_TIMEMOUT_MINUTES):
auto_ml.fit(inputs)
auto_ml.fit(inputs, job_name=job_name)


@pytest.mark.skipif(
Expand Down Expand Up @@ -134,11 +137,12 @@ def test_auto_ml_invalid_target_attribute(sagemaker_session):
auto_ml = AutoML(
role=ROLE, target_attribute_name="y", sagemaker_session=sagemaker_session, max_candidates=1
)
job_name = unique_name_from_base("auto-ml", max_length=32)
inputs = sagemaker_session.upload_data(path=TRAINING_DATA, key_prefix=PREFIX + "/input")
with pytest.raises(
UnexpectedStatusException, match="Could not complete the data builder processing job."
):
auto_ml.fit(inputs)
auto_ml.fit(inputs, job_name=job_name)


@pytest.mark.skipif(
Expand Down
44 changes: 19 additions & 25 deletions tests/unit/sagemaker/automl/test_auto_ml.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,13 @@
from __future__ import absolute_import

import pytest
from mock import Mock, patch
from mock import Mock
from sagemaker import AutoML, AutoMLJob, AutoMLInput, CandidateEstimator

MODEL_DATA = "s3://bucket/model.tar.gz"
MODEL_IMAGE = "mi"
ENTRY_POINT = "blah.py"

TIMESTAMP = "2017-11-06-14:14:15.671"
BUCKET_NAME = "mybucket"
INSTANCE_COUNT = 1
INSTANCE_TYPE = "ml.c5.2xlarge"
Expand All @@ -32,7 +31,6 @@
DEFAULT_OUTPUT_PATH = "s3://{}/".format(BUCKET_NAME)
LOCAL_DATA_PATH = "file://data"
DEFAULT_MAX_CANDIDATES = 500
DEFAULT_JOB_NAME = "sagemake-{}".format(TIMESTAMP)

JOB_NAME = "default-job-name"
JOB_NAME_2 = "banana-auto-ml-job"
Expand Down Expand Up @@ -283,38 +281,34 @@ def test_auto_ml_additional_optional_params(sagemaker_session):
}


@patch("time.strftime", return_value=TIMESTAMP)
def test_auto_ml_default_fit(strftime, sagemaker_session):
def test_auto_ml_default_fit(sagemaker_session):
auto_ml = AutoML(
role=ROLE, target_attribute_name=TARGET_ATTRIBUTE_NAME, sagemaker_session=sagemaker_session
)
inputs = DEFAULT_S3_INPUT_DATA
auto_ml.fit(inputs)
sagemaker_session.auto_ml.assert_called_once()
_, args = sagemaker_session.auto_ml.call_args
assert args == {
"input_config": [
{
"DataSource": {
"S3DataSource": {"S3DataType": "S3Prefix", "S3Uri": DEFAULT_S3_INPUT_DATA}
},
"TargetAttributeName": TARGET_ATTRIBUTE_NAME,
}
],
"output_config": {"S3OutputPath": DEFAULT_OUTPUT_PATH},
"auto_ml_job_config": {
"CompletionCriteria": {"MaxCandidates": DEFAULT_MAX_CANDIDATES},
"SecurityConfig": {
"EnableInterContainerTrafficEncryption": ENCRYPT_INTER_CONTAINER_TRAFFIC
assert args["input_config"] == [
{
"DataSource": {
"S3DataSource": {"S3DataType": "S3Prefix", "S3Uri": DEFAULT_S3_INPUT_DATA}
},
"TargetAttributeName": TARGET_ATTRIBUTE_NAME,
}
]
assert args["output_config"] == {"S3OutputPath": DEFAULT_OUTPUT_PATH}
assert args["auto_ml_job_config"] == {
"CompletionCriteria": {"MaxCandidates": DEFAULT_MAX_CANDIDATES},
"SecurityConfig": {
"EnableInterContainerTrafficEncryption": ENCRYPT_INTER_CONTAINER_TRAFFIC
},
"role": ROLE,
"job_name": DEFAULT_JOB_NAME,
"problem_type": None,
"job_objective": None,
"generate_candidate_definitions_only": GENERATE_CANDIDATE_DEFINITIONS_ONLY,
"tags": None,
}
assert args["role"] == ROLE
assert args["problem_type"] is None
assert args["job_objective"] is None
assert args["generate_candidate_definitions_only"] == GENERATE_CANDIDATE_DEFINITIONS_ONLY
assert args["tags"] is None


def test_auto_ml_local_input(sagemaker_session):
Expand Down