Skip to content

Commit 05b2c61

Browse files
authored
Merge branch 'master' into master
2 parents 6815adb + 6758bd6 commit 05b2c61

File tree

115 files changed

+8906
-870
lines changed

Some content is hidden

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

115 files changed

+8906
-870
lines changed

.github/workflows/codeql.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: "CodeQL"
2+
on:
3+
push:
4+
branches: [ "master" ]
5+
pull_request:
6+
branches: [ "master" ]
7+
schedule:
8+
- cron: '30 8 * * *'
9+
jobs:
10+
analyze:
11+
name: Analyze (${{ matrix.language }})
12+
runs-on: ${{ 'ubuntu-latest' }}
13+
permissions:
14+
security-events: write
15+
packages: read
16+
17+
strategy:
18+
matrix:
19+
include:
20+
- language: python
21+
build-mode: none
22+
- language: java-kotlin
23+
build-mode: none
24+
steps:
25+
- name: Checkout repository
26+
uses: actions/checkout@6ccd57f4c5d15bdc2fef309bd9fb6cc9db2ef1c6
27+
- name: Initialize CodeQL
28+
uses: github/codeql-action/init@4b1d7da102ff94aca014c0245062b1a463356d72
29+
with:
30+
languages: ${{ matrix.language }}
31+
build-mode: ${{ matrix.build-mode }}
32+
- name: Perform CodeQL Analysis
33+
uses: github/codeql-action/analyze@4b1d7da102ff94aca014c0245062b1a463356d72
34+
with:
35+
category: "/language:${{matrix.language}}"

CHANGELOG.md

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

3+
## v2.226.1 (2024-07-17)
4+
5+
## v2.226.0 (2024-07-12)
6+
7+
### Features
8+
9+
* Curated hub improvements
10+
* InferenceSpec support for MMS and testing
11+
12+
### Bug Fixes and Other Changes
13+
14+
* ModelBuilder not passing HF_TOKEN to model.
15+
* update image_uri_configs 07-10-2024 07:18:04 PST
16+
17+
## v2.225.0 (2024-07-10)
18+
19+
### Features
20+
21+
* model optimization
22+
23+
### Bug Fixes and Other Changes
24+
25+
* fix integ test
26+
* update uris for v1.1.1
27+
* update image_uri_configs 07-04-2024 07:17:24 PST
28+
29+
## v2.224.4 (2024-07-04)
30+
31+
### Bug Fixes and Other Changes
32+
33+
* allow for inf spec and server override to be passed
34+
35+
## v2.224.3 (2024-07-03)
36+
37+
### Bug Fixes and Other Changes
38+
39+
* Upgrade local dependencies
40+
* Improve docstrings for estimator tags
41+
342
## v2.224.2 (2024-06-27)
443

544
### Bug Fixes and Other Changes

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.224.3.dev0
1+
2.226.2.dev0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
urllib3>=1.26.8,<3.0.0
2-
docker>=5.0.2,<7.0.0
2+
docker>=5.0.2,<8.0.0
33
PyYAML>=5.4.1,<7

requirements/extras/test_requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,4 @@ accelerate>=0.24.1,<=0.27.0
3838
schema==0.7.5
3939
tensorflow>=2.1,<=2.16
4040
mlflow>=2.12.2,<2.13
41+
huggingface_hub>=0.23.4

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def read_requirements(filename):
4949
# Declare minimal set for installation
5050
required_packages = [
5151
"attrs>=23.1.0,<24",
52-
"boto3>=1.33.3,<2.0",
52+
"boto3>=1.34.142,<2.0",
5353
"cloudpickle==2.2.1",
5454
"google-pasta",
5555
"numpy>=1.9.0,<2.0",

src/sagemaker/accept_types.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ def retrieve_default(
8282
tolerate_deprecated_model: bool = False,
8383
sagemaker_session: Session = DEFAULT_JUMPSTART_SAGEMAKER_SESSION,
8484
model_type: JumpStartModelType = JumpStartModelType.OPEN_WEIGHTS,
85+
config_name: Optional[str] = None,
8586
) -> str:
8687
"""Retrieves the default accept type for the model matching the given arguments.
8788
@@ -105,6 +106,7 @@ def retrieve_default(
105106
object, used for SageMaker interactions. If not
106107
specified, one is created using the default AWS configuration
107108
chain. (Default: sagemaker.jumpstart.constants.DEFAULT_JUMPSTART_SAGEMAKER_SESSION).
109+
config_name (Optional[str]): Name of the JumpStart Model config to apply. (Default: None).
108110
Returns:
109111
str: The default accept type to use for the model.
110112
@@ -125,4 +127,5 @@ def retrieve_default(
125127
tolerate_deprecated_model=tolerate_deprecated_model,
126128
sagemaker_session=sagemaker_session,
127129
model_type=model_type,
130+
config_name=config_name,
128131
)

src/sagemaker/content_types.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ def retrieve_default(
8282
tolerate_deprecated_model: bool = False,
8383
sagemaker_session: Session = DEFAULT_JUMPSTART_SAGEMAKER_SESSION,
8484
model_type: JumpStartModelType = JumpStartModelType.OPEN_WEIGHTS,
85+
config_name: Optional[str] = None,
8586
) -> str:
8687
"""Retrieves the default content type for the model matching the given arguments.
8788
@@ -105,6 +106,7 @@ def retrieve_default(
105106
object, used for SageMaker interactions. If not
106107
specified, one is created using the default AWS configuration
107108
chain. (Default: sagemaker.jumpstart.constants.DEFAULT_JUMPSTART_SAGEMAKER_SESSION).
109+
config_name (Optional[str]): Name of the JumpStart Model config to apply. (Default: None).
108110
Returns:
109111
str: The default content type to use for the model.
110112
@@ -125,6 +127,7 @@ def retrieve_default(
125127
tolerate_deprecated_model=tolerate_deprecated_model,
126128
sagemaker_session=sagemaker_session,
127129
model_type=model_type,
130+
config_name=config_name,
128131
)
129132

130133

src/sagemaker/deserializers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ def retrieve_default(
102102
tolerate_deprecated_model: bool = False,
103103
sagemaker_session: Session = DEFAULT_JUMPSTART_SAGEMAKER_SESSION,
104104
model_type: JumpStartModelType = JumpStartModelType.OPEN_WEIGHTS,
105+
config_name: Optional[str] = None,
105106
) -> BaseDeserializer:
106107
"""Retrieves the default deserializer for the model matching the given arguments.
107108
@@ -125,6 +126,7 @@ def retrieve_default(
125126
object, used for SageMaker interactions. If not
126127
specified, one is created using the default AWS configuration
127128
chain. (Default: sagemaker.jumpstart.constants.DEFAULT_JUMPSTART_SAGEMAKER_SESSION).
129+
config_name (Optional[str]): Name of the JumpStart Model config to apply. (Default: None).
128130
Returns:
129131
BaseDeserializer: The default deserializer to use for the model.
130132
@@ -146,4 +148,5 @@ def retrieve_default(
146148
tolerate_deprecated_model=tolerate_deprecated_model,
147149
sagemaker_session=sagemaker_session,
148150
model_type=model_type,
151+
config_name=config_name,
149152
)

src/sagemaker/enums.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,12 @@ class RoutingStrategy(Enum):
4040
"""The endpoint routes requests to the specific instances that have
4141
more capacity to process them.
4242
"""
43+
44+
45+
class Tag(str, Enum):
46+
"""Enum class for tag keys to apply to models."""
47+
48+
OPTIMIZATION_JOB_NAME = "sagemaker-sdk:optimization-job-name"
49+
SPECULATIVE_DRAFT_MODEL_PROVIDER = "sagemaker-sdk:speculative-draft-model-provider"
50+
FINE_TUNING_MODEL_PATH = "sagemaker-sdk:fine-tuning-model-path"
51+
FINE_TUNING_JOB_NAME = "sagemaker-sdk:fine-tuning-job-name"

src/sagemaker/environment_variables.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ def retrieve_default(
3737
sagemaker_session: Session = DEFAULT_JUMPSTART_SAGEMAKER_SESSION,
3838
instance_type: Optional[str] = None,
3939
script: JumpStartScriptScope = JumpStartScriptScope.INFERENCE,
40+
config_name: Optional[str] = None,
4041
) -> Dict[str, str]:
4142
"""Retrieves the default container environment variables for the model matching the arguments.
4243
@@ -68,6 +69,7 @@ def retrieve_default(
6869
variables specific for the instance type.
6970
script (JumpStartScriptScope): The JumpStart script for which to retrieve environment
7071
variables.
72+
config_name (Optional[str]): Name of the JumpStart Model config to apply. (Default: None).
7173
Returns:
7274
dict: The variables to use for the model.
7375
@@ -91,4 +93,5 @@ def retrieve_default(
9193
sagemaker_session=sagemaker_session,
9294
instance_type=instance_type,
9395
script=script,
96+
config_name=config_name,
9497
)

src/sagemaker/estimator.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
from sagemaker.interactive_apps import SupportedInteractiveAppTypes
6969
from sagemaker.interactive_apps.tensorboard import TensorBoardApp
7070
from sagemaker.instance_group import InstanceGroup
71+
from sagemaker.model_card.model_card import ModelCard, TrainingDetails
7172
from sagemaker.utils import instance_supports_kms
7273
from sagemaker.job import _Job
7374
from sagemaker.jumpstart.utils import (
@@ -1797,8 +1798,17 @@ def register(
17971798
else:
17981799
if "model_kms_key" not in kwargs:
17991800
kwargs["model_kms_key"] = self.output_kms_key
1800-
model = self.create_model(image_uri=image_uri, **kwargs)
1801+
model = self.create_model(image_uri=image_uri, name=model_name, **kwargs)
18011802
model.name = model_name
1803+
if self.model_data is not None and model_card is None:
1804+
training_details = TrainingDetails.from_model_s3_artifacts(
1805+
model_artifacts=[self.model_data], sagemaker_session=self.sagemaker_session
1806+
)
1807+
model_card = ModelCard(
1808+
name="estimator_card",
1809+
training_details=training_details,
1810+
sagemaker_session=self.sagemaker_session,
1811+
)
18021812
return model.register(
18031813
content_types,
18041814
response_types,

src/sagemaker/huggingface/llm_utils.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
"""Functions for generating ECR image URIs for pre-built SageMaker Docker images."""
1414
from __future__ import absolute_import
1515

16+
import os
1617
from typing import Optional
18+
import importlib.util
1719

1820
import urllib.request
1921
from urllib.error import HTTPError, URLError
@@ -123,3 +125,26 @@ def get_huggingface_model_metadata(model_id: str, hf_hub_token: Optional[str] =
123125
"Did not find model metadata for the following HuggingFace Model ID %s" % model_id
124126
)
125127
return hf_model_metadata_json
128+
129+
130+
def download_huggingface_model_metadata(
131+
model_id: str, model_local_path: str, hf_hub_token: Optional[str] = None
132+
) -> None:
133+
"""Downloads the HuggingFace Model snapshot via HuggingFace API.
134+
135+
Args:
136+
model_id (str): The HuggingFace Model ID
137+
model_local_path (str): The local path to save the HuggingFace Model snapshot.
138+
hf_hub_token (str): The HuggingFace Hub Token
139+
140+
Raises:
141+
ImportError: If huggingface_hub is not installed.
142+
"""
143+
if not importlib.util.find_spec("huggingface_hub"):
144+
raise ImportError("Unable to import huggingface_hub, check if huggingface_hub is installed")
145+
146+
from huggingface_hub import snapshot_download
147+
148+
os.makedirs(model_local_path, exist_ok=True)
149+
logger.info("Downloading model %s from Hugging Face Hub to %s", model_id, model_local_path)
150+
snapshot_download(repo_id=model_id, local_dir=model_local_path, token=hf_hub_token)

src/sagemaker/hyperparameters.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ def retrieve_default(
3737
tolerate_vulnerable_model: bool = False,
3838
tolerate_deprecated_model: bool = False,
3939
sagemaker_session: Session = DEFAULT_JUMPSTART_SAGEMAKER_SESSION,
40+
config_name: Optional[str] = None,
4041
) -> Dict[str, str]:
4142
"""Retrieves the default training hyperparameters for the model matching the given arguments.
4243
@@ -69,6 +70,7 @@ def retrieve_default(
6970
object, used for SageMaker interactions. If not
7071
specified, one is created using the default AWS configuration
7172
chain. (Default: sagemaker.jumpstart.constants.DEFAULT_JUMPSTART_SAGEMAKER_SESSION).
73+
config_name (Optional[str]): Name of the JumpStart Model config to apply. (Default: None).
7274
Returns:
7375
dict: The hyperparameters to use for the model.
7476
@@ -90,6 +92,7 @@ def retrieve_default(
9092
tolerate_vulnerable_model=tolerate_vulnerable_model,
9193
tolerate_deprecated_model=tolerate_deprecated_model,
9294
sagemaker_session=sagemaker_session,
95+
config_name=config_name,
9396
)
9497

9598

0 commit comments

Comments
 (0)