Skip to content

Commit cdb4251

Browse files
qidewenwhenDewen Qi
and
Dewen Qi
committed
change: Clean up test resources to remove model files (aws#756)
* change: Clean up test resources to remove model files * fix: Change experiment enums to upper case * change: Upgrade boto3 and update test to validate mixed case name * fix: Update as per latest botocore release and backend change Co-authored-by: Dewen Qi <[email protected]>
1 parent 9ea789c commit cdb4251

19 files changed

+85
-69303
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ env/
3232
.python-version
3333
**/_repack_script_launcher.sh
3434
tests/data/**/_repack_model.py
35-
tests/data/experiment/resources/sagemaker-beta-1.0.tar.gz
35+
tests/data/experiment/sagemaker-dev-1.0.tar.gz

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def read_requirements(filename):
4848
# Declare minimal set for installation
4949
required_packages = [
5050
"attrs>=20.3.0,<23",
51-
"boto3>=1.26.20,<2.0",
51+
"boto3>=1.26.28,<2.0",
5252
"google-pasta",
5353
"numpy>=1.9.0,<2.0",
5454
"protobuf>=3.1,<4.0",

src/sagemaker/experiments/_metrics.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,7 @@ def __init__(self, metric_name, value, timestamp=None, step=None):
155155

156156
self.MetricName = metric_name
157157
self.Value = float(value)
158-
# Update timestamp to milliseconds
159-
# to be compatible with the metrics service
160-
self.Timestamp = timestamp * 1000
158+
self.Timestamp = timestamp
161159
if step is not None:
162160
if not isinstance(step, int):
163161
raise ValueError("step must be int.")
@@ -169,10 +167,12 @@ def to_record(self):
169167

170168
def to_raw_metric_data(self):
171169
"""Converts the metric data to a BatchPutMetrics RawMetricData item"""
170+
# Convert timestamp from float to timestamp str.
171+
# Otherwise will get ParamValidationError
172172
raw_metric_data = {
173173
"MetricName": self.MetricName,
174174
"Value": self.Value,
175-
"Timestamp": int(self.Timestamp),
175+
"Timestamp": str(int(self.Timestamp)),
176176
}
177177
if self.Step is not None:
178178
raw_metric_data["Step"] = int(self.Step)

src/sagemaker/experiments/run.py

+15-18
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,9 @@
6161
TRIAL_NAME_TEMPLATE = "Default-Run-Group-{}"
6262
MAX_RUN_TC_ARTIFACTS_LEN = 30
6363
MAX_NAME_LEN_IN_BACKEND = 120
64-
UNKNOWN_NAME = "unknown"
65-
EXP_NAME_BASE = "Sagemaker-Experiment"
6664
EXPERIMENT_NAME = "ExperimentName"
6765
TRIAL_NAME = "TrialName"
6866
RUN_NAME = "RunName"
69-
TRIAL_COMPONENT_NAME = "TrialComponentName"
7067
DELIMITER = "-"
7168
RUN_TC_TAG_KEY = "sagemaker:trial-component-source"
7269
RUN_TC_TAG_VALUE = "run"
@@ -76,15 +73,15 @@
7673
class SortByType(Enum):
7774
"""The type of property by which to sort the `list_runs` results."""
7875

79-
CreationTime = "CreationTime"
80-
Name = "Name"
76+
CREATION_TIME = "CreationTime"
77+
NAME = "Name"
8178

8279

8380
class SortOrderType(Enum):
8481
"""The type of order to sort the list or search results."""
8582

86-
Ascending = "Ascending"
87-
Descending = "Descending"
83+
ASCENDING = "Ascending"
84+
DESCENDING = "Descending"
8885

8986

9087
class Run(object):
@@ -169,9 +166,9 @@ def __init__(
169166
sagemaker_session=sagemaker_session,
170167
)
171168
if is_existed:
172-
logger.warning(
169+
logger.info(
173170
"The Run (%s) under experiment (%s) already exists. Loading it. "
174-
"Note, sagemaker.experiments.load_run is recommended to use when "
171+
"Note: sagemaker.experiments.load_run is recommended to use when "
175172
"the desired Run already exists.",
176173
self.run_name,
177174
self.experiment_name,
@@ -496,10 +493,10 @@ def close(self):
496493

497494
@staticmethod
498495
def _generate_trial_name(base_name) -> str:
499-
"""Generate the reserved trial name based on run name
496+
"""Generate the reserved trial name based on experiment name
500497
501498
Args:
502-
base_name (str): The run_name of this `Run` object.
499+
base_name (str): The ``experiment_name`` of this ``Run`` object.
503500
"""
504501
available_length = MAX_NAME_LEN_IN_BACKEND - len(TRIAL_NAME_TEMPLATE)
505502
return TRIAL_NAME_TEMPLATE.format(base_name[:available_length])
@@ -760,8 +757,8 @@ def list_runs(
760757
sagemaker_session: Optional["Session"] = None,
761758
max_results: Optional[int] = None,
762759
next_token: Optional[str] = None,
763-
sort_by: SortByType = SortByType.CreationTime,
764-
sort_order: SortOrderType = SortOrderType.Descending,
760+
sort_by: SortByType = SortByType.CREATION_TIME,
761+
sort_order: SortOrderType = SortOrderType.DESCENDING,
765762
) -> list:
766763
"""Return a list of `Run` objects matching the given criteria.
767764
@@ -776,11 +773,11 @@ def list_runs(
776773
manages interactions with Amazon SageMaker APIs and any other
777774
AWS services needed. If not specified, one is created using the
778775
default AWS configuration chain.
779-
max_results (int): maximum number of Run objects to retrieve (default: None).
780-
next_token (str): token for next page of results (default: None).
781-
sort_by (SortByType): Which property to sort results by. One of Name, CreationTime
782-
(default: CreationTime).
783-
sort_order (SortOrderType): One of Ascending, or Descending (default: Descending).
776+
max_results (int): Maximum number of Run objects to retrieve (default: None).
777+
next_token (str): Token for next page of results (default: None).
778+
sort_by (SortByType): The property to sort results by. One of NAME, CREATION_TIME
779+
(default: CREATION_TIME).
780+
sort_order (SortOrderType): One of ASCENDING, or DESCENDING (default: DESCENDING).
784781
785782
Returns:
786783
list: A list of `Run` objects.

tests/__init__.py

-16
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,3 @@
1111
# ANY KIND, either express or implied. See the License for the specific
1212
# language governing permissions and limitations under the License.
1313
from __future__ import absolute_import
14-
15-
import os
16-
17-
18-
# TODO-experiment-plus: Remove this line, which loads the internal boto models.
19-
# The corresponding model jsons were generated from the coral model package and should
20-
# be updated regularly.
21-
normal_json = "file://./tests/data/experiment/resources/sagemaker-2017-07-24.normal.json"
22-
os.system(f"aws configure add-model --service-model {normal_json} --service-name sagemaker")
23-
24-
public_metrics_model_json = (
25-
"file://./tests/data/experiment/resources/sagemaker-metrics-2022-09-30.normal.json"
26-
)
27-
os.system(
28-
f"aws configure add-model --service-model {public_metrics_model_json} --service-name sagemaker-metrics"
29-
)

tests/data/experiment/docker/Dockerfile

-50
This file was deleted.

tests/data/experiment/docker/scripts/train_job_script_for_run_clz.py

-55
This file was deleted.

tests/data/experiment/inference.py

+3-16
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
1111
# express or implied. See the License for the specific language governing
1212
# permissions and limitations under the License.
13-
import importlib
1413
import logging
1514
import os
1615
import pickle as pkl
@@ -19,22 +18,10 @@
1918
import numpy as np
2019
import sagemaker_xgboost_container.encoder as xgb_encoders
2120

21+
sdk_name = "sagemaker-dev-1.0.tar.gz"
22+
code_dir = "/opt/ml/code"
2223

23-
sm_json = "sagemaker-2017-07-24.normal.json"
24-
metrics_json = "sagemaker-metrics-2022-09-30.normal.json"
25-
beta_sdk = "sagemaker-beta-1.0.tar.gz"
26-
resource_dir = "/opt/ml/code/resources"
27-
28-
os.system("pip install awscli")
29-
os.system(
30-
f"aws configure add-model --service-model file://{resource_dir}/{sm_json} --service-name sagemaker"
31-
)
32-
os.system(
33-
f"aws configure add-model --service-model file://{resource_dir}/{metrics_json} --service-name sagemaker-metrics"
34-
)
35-
importlib.reload(boto3) # Reload boto3 to let the added API models take effect
36-
37-
sdk_file = f"{resource_dir}/{beta_sdk}"
24+
sdk_file = f"{code_dir}/{sdk_name}"
3825
os.system(f"pip install {sdk_file}")
3926

4027
from sagemaker.session import Session

tests/data/experiment/process_job_script_for_run_clz.py

+1-15
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,11 @@
1313
"""This script file runs on SageMaker processing job"""
1414
from __future__ import absolute_import
1515

16-
import importlib
1716
import logging
1817
import os
1918
import boto3
2019

21-
sm_json = "sagemaker-2017-07-24.normal.json"
22-
metrics_json = "sagemaker-metrics-2022-09-30.normal.json"
23-
beta_sdk = "sagemaker-beta-1.0.tar.gz"
24-
resource_dir = "resources"
25-
26-
os.system(
27-
f"aws configure add-model --service-model file://{resource_dir}/{sm_json} --service-name sagemaker"
28-
)
29-
os.system(
30-
f"aws configure add-model --service-model file://{resource_dir}/{metrics_json} --service-name sagemaker-metrics"
31-
)
32-
importlib.reload(boto3) # Reload boto3 to let the added API models take effect
33-
34-
sdk_file = f"{resource_dir}/{beta_sdk}"
20+
sdk_file = "sagemaker-dev-1.0.tar.gz"
3521
os.system(f"pip install {sdk_file}")
3622

3723

0 commit comments

Comments
 (0)