Skip to content

Commit 72055b9

Browse files
authored
Merge branch 'master' into hf-inf-spec-pr
2 parents d201b41 + 0971c55 commit 72055b9

File tree

90 files changed

+7998
-811
lines changed

Some content is hidden

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

90 files changed

+7998
-811
lines changed

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/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

src/sagemaker/image_uris.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def retrieve(
7171
inference_tool=None,
7272
serverless_inference_config=None,
7373
sagemaker_session=DEFAULT_JUMPSTART_SAGEMAKER_SESSION,
74+
config_name=None,
7475
) -> str:
7576
"""Retrieves the ECR URI for the Docker image matching the given arguments.
7677
@@ -126,6 +127,7 @@ def retrieve(
126127
object, used for SageMaker interactions. If not
127128
specified, one is created using the default AWS configuration
128129
chain. (Default: sagemaker.jumpstart.constants.DEFAULT_JUMPSTART_SAGEMAKER_SESSION).
130+
config_name (Optional[str]): Name of the JumpStart Model config to apply. (Default: None).
129131
130132
Returns:
131133
str: The ECR URI for the corresponding SageMaker Docker image.
@@ -166,6 +168,7 @@ def retrieve(
166168
tolerate_vulnerable_model,
167169
tolerate_deprecated_model,
168170
sagemaker_session=sagemaker_session,
171+
config_name=config_name,
169172
)
170173

171174
if training_compiler_config and (framework in [HUGGING_FACE_FRAMEWORK, "pytorch"]):

0 commit comments

Comments
 (0)