Skip to content

Commit dab8c8f

Browse files
authored
Merge branch 'aws:master' into master
2 parents c9a0875 + 1c0699d commit dab8c8f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1158
-72
lines changed

.pylintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ ignore-mixin-members=yes
310310
# (useful for modules/projects where namespaces are manipulated during runtime
311311
# and thus existing member attributes cannot be deduced by static analysis. It
312312
# supports qualified module names, as well as Unix pattern matching.
313-
ignored-modules=distutils
313+
ignored-modules=
314314

315315
# List of class names for which member attributes should not be checked (useful
316316
# for classes with dynamically set attributes). This supports the use of

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# Changelog
22

3+
## v2.232.2 (2024-10-03)
4+
5+
### Bug Fixes and Other Changes
6+
7+
* Pass kwargs to HuggingFaceModel.deploy()
8+
* improve logging and exception messages
9+
* remove deprecated distutils
10+
* update image_uri_configs 09-24-2024 07:18:00 PST
11+
12+
## v2.232.1 (2024-09-19)
13+
14+
### Bug Fixes and Other Changes
15+
16+
* update image_uri_configs 09-17-2024 07:17:54 PST
17+
* support latest container version in image_uris and DJLModel for lmi c…
18+
319
## v2.232.0 (2024-09-12)
420

521
### Features

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.232.1.dev0
1+
2.232.3.dev0

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ dependencies = [
4848
"PyYAML~=6.0",
4949
"requests",
5050
"sagemaker-core>=1.0.0,<2.0.0",
51+
"sagemaker-mlflow",
5152
"schema",
5253
"smdebug_rulesconfig==1.0.1",
5354
"tblib>=1.7.0,<4",

src/sagemaker/estimator.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@
107107
from sagemaker.workflow.parameters import ParameterString
108108
from sagemaker.workflow.pipeline_context import PipelineSession, runnable_by_pipeline
109109

110+
from sagemaker.mlflow.forward_sagemaker_metrics import log_sagemaker_job_to_mlflow
111+
110112
logger = logging.getLogger(__name__)
111113

112114

@@ -1366,8 +1368,14 @@ def fit(
13661368
experiment_config = check_and_get_run_experiment_config(experiment_config)
13671369
self.latest_training_job = _TrainingJob.start_new(self, inputs, experiment_config)
13681370
self.jobs.append(self.latest_training_job)
1371+
forward_to_mlflow_tracking_server = False
1372+
if os.environ.get("MLFLOW_TRACKING_URI") and self.enable_network_isolation():
1373+
wait = True
1374+
forward_to_mlflow_tracking_server = True
13691375
if wait:
13701376
self.latest_training_job.wait(logs=logs)
1377+
if forward_to_mlflow_tracking_server:
1378+
log_sagemaker_job_to_mlflow(self.latest_training_job.name)
13711379

13721380
def _compilation_job_name(self):
13731381
"""Placeholder docstring"""

src/sagemaker/huggingface/model.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -334,11 +334,7 @@ def deploy(
334334
container_startup_health_check_timeout=container_startup_health_check_timeout,
335335
inference_recommendation_id=inference_recommendation_id,
336336
explainer_config=explainer_config,
337-
endpoint_logging=kwargs.get("endpoint_logging", False),
338-
endpoint_type=kwargs.get("endpoint_type", None),
339-
resources=kwargs.get("resources", None),
340-
managed_instance_scaling=kwargs.get("managed_instance_scaling", None),
341-
routing_config=kwargs.get("routing_config", None),
337+
**kwargs,
342338
)
343339

344340
def register(

src/sagemaker/image_uri_config/djl-lmi.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"eu-west-3": "763104351884",
2929
"eu-south-1": "692866216735",
3030
"me-south-1": "217643126080",
31+
"me-central-1": "914824155844",
3132
"sa-east-1": "763104351884",
3233
"us-east-1": "763104351884",
3334
"us-east-2": "763104351884",
@@ -62,6 +63,7 @@
6263
"eu-west-3": "763104351884",
6364
"eu-south-1": "692866216735",
6465
"me-south-1": "217643126080",
66+
"me-central-1": "914824155844",
6567
"sa-east-1": "763104351884",
6668
"us-east-1": "763104351884",
6769
"us-east-2": "763104351884",

src/sagemaker/image_uri_config/pytorch.json

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1407,7 +1407,8 @@
14071407
"2.0": "2.0.1",
14081408
"2.1": "2.1.0",
14091409
"2.2": "2.2.0",
1410-
"2.3": "2.3.0"
1410+
"2.3": "2.3.0",
1411+
"2.4": "2.4.0"
14111412
},
14121413
"versions": {
14131414
"0.4.0": {
@@ -2429,6 +2430,47 @@
24292430
"us-west-2": "763104351884"
24302431
},
24312432
"repository": "pytorch-training"
2433+
},
2434+
"2.4.0": {
2435+
"py_versions": [
2436+
"py311"
2437+
],
2438+
"registries": {
2439+
"af-south-1": "626614931356",
2440+
"ap-east-1": "871362719292",
2441+
"ap-northeast-1": "763104351884",
2442+
"ap-northeast-2": "763104351884",
2443+
"ap-northeast-3": "364406365360",
2444+
"ap-south-1": "763104351884",
2445+
"ap-south-2": "772153158452",
2446+
"ap-southeast-1": "763104351884",
2447+
"ap-southeast-2": "763104351884",
2448+
"ap-southeast-3": "907027046896",
2449+
"ap-southeast-4": "457447274322",
2450+
"ca-central-1": "763104351884",
2451+
"ca-west-1": "204538143572",
2452+
"cn-north-1": "727897471807",
2453+
"cn-northwest-1": "727897471807",
2454+
"eu-central-1": "763104351884",
2455+
"eu-central-2": "380420809688",
2456+
"eu-north-1": "763104351884",
2457+
"eu-south-1": "692866216735",
2458+
"eu-south-2": "503227376785",
2459+
"eu-west-1": "763104351884",
2460+
"eu-west-2": "763104351884",
2461+
"eu-west-3": "763104351884",
2462+
"il-central-1": "780543022126",
2463+
"me-central-1": "914824155844",
2464+
"me-south-1": "217643126080",
2465+
"sa-east-1": "763104351884",
2466+
"us-east-1": "763104351884",
2467+
"us-east-2": "763104351884",
2468+
"us-gov-east-1": "446045086412",
2469+
"us-gov-west-1": "442386744353",
2470+
"us-west-1": "763104351884",
2471+
"us-west-2": "763104351884"
2472+
},
2473+
"repository": "pytorch-training"
24322474
}
24332475
}
24342476
}

src/sagemaker/jumpstart/cache.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,8 @@ def _model_id_retrieval_function(
293293
raise KeyError(error_msg)
294294

295295
error_msg = f"Unable to find model manifest for '{model_id}' with version '{version}'. "
296-
error_msg += f"Visit {MODEL_ID_LIST_WEB_URL} for updated list of models. "
296+
error_msg += "Specify a different model ID or try a different AWS Region. "
297+
error_msg += f"For a list of available models, see {MODEL_ID_LIST_WEB_URL}. "
297298

298299
other_model_id_version = None
299300
if model_type == JumpStartModelType.OPEN_WEIGHTS:

src/sagemaker/jumpstart/constants.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,6 @@
222222

223223
JUMPSTART_MODEL_HUB_NAME = "SageMakerPublicHub"
224224

225-
JUMPSTART_MODEL_HUB_NAME = "SageMakerPublicHub"
226-
227225
JUMPSTART_DEFAULT_MANIFEST_FILE_S3_KEY = "models_manifest.json"
228226
JUMPSTART_DEFAULT_PROPRIETARY_MANIFEST_KEY = "proprietary-sdk-manifest.json"
229227

src/sagemaker/jumpstart/exceptions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
)
3333

3434
INVALID_MODEL_ID_ERROR_MSG = (
35-
"Invalid model ID: '{model_id}'. Please visit "
36-
f"{MODEL_ID_LIST_WEB_URL} for a list of valid model IDs. "
35+
"Invalid model ID: '{model_id}'. Specify a different model ID or try a different AWS Region. "
36+
f"For a list of available models, see {MODEL_ID_LIST_WEB_URL}. "
3737
"The module `sagemaker.jumpstart.notebook_utils` contains utilities for "
3838
"fetching model IDs. We recommend upgrading to the latest version of sagemaker "
3939
"to get access to the most models."

src/sagemaker/jumpstart/model.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ def retrieve_example_payload(self) -> JumpStartSerializablePayload:
447447
return payloads.retrieve_example(
448448
model_id=self.model_id,
449449
model_version=self.model_version,
450+
hub_arn=self.hub_arn,
450451
model_type=self.model_type,
451452
region=self.region,
452453
tolerate_deprecated_model=self.tolerate_deprecated_model,
@@ -1036,13 +1037,15 @@ def _get_deployment_configs(
10361037
image_uri=image_uri,
10371038
region=self.region,
10381039
model_version=self.model_version,
1040+
hub_arn=self.hub_arn,
10391041
)
10401042
deploy_kwargs = get_deploy_kwargs(
10411043
model_id=self.model_id,
10421044
instance_type=instance_type_to_use,
10431045
sagemaker_session=self.sagemaker_session,
10441046
region=self.region,
10451047
model_version=self.model_version,
1048+
hub_arn=self.hub_arn,
10461049
)
10471050

10481051
deployment_config_metadata = DeploymentConfigMetadata(

src/sagemaker/jumpstart/utils.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,12 @@
5050
)
5151
from sagemaker.session import Session
5252
from sagemaker.config import load_sagemaker_config
53-
from sagemaker.utils import resolve_value_from_config, TagsDict, get_instance_rate_per_hour
53+
from sagemaker.utils import (
54+
resolve_value_from_config,
55+
TagsDict,
56+
get_instance_rate_per_hour,
57+
get_domain_for_region,
58+
)
5459
from sagemaker.workflow import is_pipeline_variable
5560
from sagemaker.user_agent import get_user_agent_extra_suffix
5661

@@ -553,7 +558,7 @@ def get_eula_message(model_specs: JumpStartModelSpecs, region: str) -> str:
553558
return (
554559
f"Model '{model_specs.model_id}' requires accepting end-user license agreement (EULA). "
555560
f"See https://{get_jumpstart_content_bucket(region=region)}.s3.{region}."
556-
f"amazonaws.com{'.cn' if region.startswith('cn-') else ''}"
561+
f"{get_domain_for_region(region)}"
557562
f"/{model_specs.hosting_eula_key} for terms of use."
558563
)
559564

src/sagemaker/local/image.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import tarfile
3131
import tempfile
3232

33-
from distutils.spawn import find_executable
3433
from threading import Thread
3534
from typing import Dict, List
3635
from six.moves.urllib.parse import urlparse
@@ -170,7 +169,7 @@ def _get_compose_cmd_prefix():
170169
compose_cmd_prefix.extend(["docker", "compose"])
171170
return compose_cmd_prefix
172171

173-
if find_executable("docker-compose") is not None:
172+
if shutil.which("docker-compose") is not None:
174173
logger.info("'Docker Compose' found using Docker Compose CLI.")
175174
compose_cmd_prefix.extend(["docker-compose"])
176175
return compose_cmd_prefix

src/sagemaker/local/utils.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import re
2222
import errno
2323

24-
from distutils.dir_util import copy_tree
2524
from six.moves.urllib.parse import urlparse
2625

2726
from sagemaker import s3
@@ -102,7 +101,7 @@ def move_to_destination(source, destination, job_name, sagemaker_session, prefix
102101

103102

104103
def recursive_copy(source, destination):
105-
"""A wrapper around distutils.dir_util.copy_tree.
104+
"""A wrapper around shutil.copy_tree.
106105
107106
This won't throw any exception when the source directory does not exist.
108107
@@ -111,7 +110,7 @@ def recursive_copy(source, destination):
111110
destination (str): destination path
112111
"""
113112
if os.path.isdir(source):
114-
copy_tree(source, destination)
113+
shutil.copytree(source, destination, dirs_exist_ok=True)
115114

116115

117116
def kill_child_processes(pid):

0 commit comments

Comments
 (0)