Skip to content

Commit bcb470a

Browse files
committed
Merge remote-tracking branch 'origin' into chore/move-jumpstart-region-definitions-to-json-file
2 parents 6a48dcc + 1491499 commit bcb470a

File tree

6 files changed

+153
-1
lines changed

6 files changed

+153
-1
lines changed

src/sagemaker/image_uri_config/spark.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"ap-southeast-3": "800295151634",
2222
"ap-southeast-4": "819679513684",
2323
"ap-southeast-5": "841784149062",
24+
"ap-southeast-7": "471112967968",
2425
"ca-central-1": "446299261295",
2526
"ca-west-1": "000907499111",
2627
"cn-north-1": "671472414489",
@@ -36,6 +37,7 @@
3637
"il-central-1": "408426139102",
3738
"me-central-1": "395420993607",
3839
"me-south-1": "750251592176",
40+
"mx-central-1": "211125459255",
3941
"sa-east-1": "737130764395",
4042
"us-east-1": "173754725891",
4143
"us-east-2": "314815235551",
@@ -63,6 +65,7 @@
6365
"ap-southeast-3": "800295151634",
6466
"ap-southeast-4": "819679513684",
6567
"ap-southeast-5": "841784149062",
68+
"ap-southeast-7": "471112967968",
6669
"ca-central-1": "446299261295",
6770
"ca-west-1": "000907499111",
6871
"cn-north-1": "671472414489",
@@ -78,6 +81,7 @@
7881
"il-central-1": "408426139102",
7982
"me-central-1": "395420993607",
8083
"me-south-1": "750251592176",
84+
"mx-central-1": "211125459255",
8185
"sa-east-1": "737130764395",
8286
"us-east-1": "173754725891",
8387
"us-east-2": "314815235551",
@@ -105,6 +109,7 @@
105109
"ap-southeast-3": "800295151634",
106110
"ap-southeast-4": "819679513684",
107111
"ap-southeast-5": "841784149062",
112+
"ap-southeast-7": "471112967968",
108113
"ca-central-1": "446299261295",
109114
"ca-west-1": "000907499111",
110115
"cn-north-1": "671472414489",
@@ -120,6 +125,7 @@
120125
"il-central-1": "408426139102",
121126
"me-central-1": "395420993607",
122127
"me-south-1": "750251592176",
128+
"mx-central-1": "211125459255",
123129
"sa-east-1": "737130764395",
124130
"us-east-1": "173754725891",
125131
"us-east-2": "314815235551",
@@ -147,6 +153,7 @@
147153
"ap-southeast-3": "800295151634",
148154
"ap-southeast-4": "819679513684",
149155
"ap-southeast-5": "841784149062",
156+
"ap-southeast-7": "471112967968",
150157
"ca-central-1": "446299261295",
151158
"ca-west-1": "000907499111",
152159
"cn-north-1": "671472414489",
@@ -162,6 +169,7 @@
162169
"il-central-1": "408426139102",
163170
"me-central-1": "395420993607",
164171
"me-south-1": "750251592176",
172+
"mx-central-1": "211125459255",
165173
"sa-east-1": "737130764395",
166174
"us-east-1": "173754725891",
167175
"us-east-2": "314815235551",
@@ -189,6 +197,7 @@
189197
"ap-southeast-3": "800295151634",
190198
"ap-southeast-4": "819679513684",
191199
"ap-southeast-5": "841784149062",
200+
"ap-southeast-7": "471112967968",
192201
"ca-central-1": "446299261295",
193202
"ca-west-1": "000907499111",
194203
"cn-north-1": "671472414489",
@@ -204,6 +213,7 @@
204213
"il-central-1": "408426139102",
205214
"me-central-1": "395420993607",
206215
"me-south-1": "750251592176",
216+
"mx-central-1": "211125459255",
207217
"sa-east-1": "737130764395",
208218
"us-east-1": "173754725891",
209219
"us-east-2": "314815235551",

src/sagemaker/session.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4463,6 +4463,49 @@ def wait_for_model_package(self, model_package_name, poll=5):
44634463
)
44644464
return desc
44654465

4466+
def get_most_recently_created_approved_model_package(self, model_package_group_name):
4467+
"""Returns the most recently created and Approved model package in a model package group
4468+
4469+
Args:
4470+
model_package_group_name (str): Name or Arn of the model package group
4471+
4472+
Returns:
4473+
dict: Returns a "sagemaker.model.ModelPackage" value.
4474+
"""
4475+
4476+
approved_model_packages = self.sagemaker_client.list_model_packages(
4477+
ModelPackageGroupName=model_package_group_name,
4478+
ModelApprovalStatus="Approved",
4479+
SortBy="CreationTime",
4480+
SortOrder="Descending",
4481+
MaxResults=1,
4482+
)
4483+
next_token = approved_model_packages.get("NextToken")
4484+
4485+
while (
4486+
len(approved_model_packages.get("ModelPackageSummaryList")) == 0
4487+
and next_token is not None
4488+
and next_token != ""
4489+
):
4490+
approved_model_packages = self.sagemaker_client.list_model_packages(
4491+
ModelPackageGroupName=model_package_group_name,
4492+
ModelApprovalStatus="Approved",
4493+
SortBy="CreationTime",
4494+
SortOrder="Descending",
4495+
MaxResults=1,
4496+
NextToken=next_token,
4497+
)
4498+
next_token = approved_model_packages.get("NextToken")
4499+
4500+
if len(approved_model_packages.get("ModelPackageSummaryList")) == 0:
4501+
return None
4502+
4503+
return sagemaker.model.ModelPackage(
4504+
model_package_arn=approved_model_packages.get("ModelPackageSummaryList")[0].get(
4505+
"ModelPackageArn"
4506+
)
4507+
)
4508+
44664509
def describe_model(self, name):
44674510
"""Calls the DescribeModel API for the given model name.
44684511

tests/integ/sagemaker/serve/test_serve_model_builder_gpu.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ def model_builder(request):
9696
def test_non_text_generation_model_single_GPU(
9797
sagemaker_session, model_builder, model_input, **kwargs
9898
):
99+
if kwargs["instance_type"] == "ml.p2.xlarge":
100+
pytest.skip("Instance type ml.p2.xlarge has been deprecated")
99101
iam_client = sagemaker_session.boto_session.client("iam")
100102
role_arn = iam_client.get_role(RoleName="SageMakerRole")["Role"]["Arn"]
101103
model = model_builder.build(role_arn=role_arn, sagemaker_session=sagemaker_session)
@@ -147,6 +149,8 @@ def test_non_text_generation_model_single_GPU(
147149
def test_non_text_generation_model_multi_GPU(
148150
sagemaker_session, model_builder, model_input, **kwargs
149151
):
152+
if kwargs["instance_type"] == "ml.p2.xlarge":
153+
pytest.skip("Instance type ml.p2.xlarge has been deprecated")
150154
iam_client = sagemaker_session.boto_session.client("iam")
151155
role_arn = iam_client.get_role(RoleName="SageMakerRole")["Role"]["Arn"]
152156
caught_ex = None

tests/integ/sagemaker/serve/test_serve_transformers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ def model_builder(request):
9797
def test_pytorch_transformers_sagemaker_endpoint(
9898
sagemaker_session, model_builder, model_input, **kwargs
9999
):
100+
if kwargs["instance_type"] == "ml.p2.xlarge":
101+
pytest.skip("Instance type ml.p2.xlarge has been deprecated")
102+
100103
logger.info("Running in SAGEMAKER_ENDPOINT mode...")
101104
caught_ex = None
102105

tests/integ/test_session.py

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
import boto3
1616
from botocore.config import Config
1717

18-
from sagemaker import Session
18+
from sagemaker import Session, ModelPackage
19+
from sagemaker.utils import unique_name_from_base
1920

2021
CUSTOM_BUCKET_NAME = "this-bucket-should-not-exist"
2122

@@ -44,3 +45,62 @@ def test_sagemaker_session_does_not_create_bucket_on_init(
4445

4546
s3 = boto3.resource("s3", region_name=boto_session.region_name)
4647
assert s3.Bucket(CUSTOM_BUCKET_NAME).creation_date is None
48+
49+
50+
def test_sagemaker_session_to_return_most_recent_approved_model_package(sagemaker_session):
51+
model_package_group_name = unique_name_from_base("test-model-package-group")
52+
approved_model_package = sagemaker_session.get_most_recently_created_approved_model_package(
53+
model_package_group_name=model_package_group_name
54+
)
55+
assert approved_model_package is None
56+
sagemaker_session.sagemaker_client.create_model_package_group(
57+
ModelPackageGroupName=model_package_group_name
58+
)
59+
approved_model_package = sagemaker_session.get_most_recently_created_approved_model_package(
60+
model_package_group_name=model_package_group_name
61+
)
62+
assert approved_model_package is None
63+
source_uri = "dummy source uri"
64+
model_package = sagemaker_session.sagemaker_client.create_model_package(
65+
ModelPackageGroupName=model_package_group_name, SourceUri=source_uri
66+
)
67+
approved_model_package = sagemaker_session.get_most_recently_created_approved_model_package(
68+
model_package_group_name=model_package_group_name
69+
)
70+
assert approved_model_package is None
71+
ModelPackage(
72+
sagemaker_session=sagemaker_session,
73+
model_package_arn=model_package["ModelPackageArn"],
74+
).update_approval_status(approval_status="Approved")
75+
approved_model_package = sagemaker_session.get_most_recently_created_approved_model_package(
76+
model_package_group_name=model_package_group_name
77+
)
78+
assert approved_model_package is not None
79+
assert approved_model_package.model_package_arn == model_package.get("ModelPackageArn")
80+
model_package_2 = sagemaker_session.sagemaker_client.create_model_package(
81+
ModelPackageGroupName=model_package_group_name, SourceUri=source_uri
82+
)
83+
approved_model_package = sagemaker_session.get_most_recently_created_approved_model_package(
84+
model_package_group_name=model_package_group_name
85+
)
86+
assert approved_model_package is not None
87+
assert approved_model_package.model_package_arn == model_package.get("ModelPackageArn")
88+
ModelPackage(
89+
sagemaker_session=sagemaker_session,
90+
model_package_arn=model_package_2["ModelPackageArn"],
91+
).update_approval_status(approval_status="Approved")
92+
approved_model_package = sagemaker_session.get_most_recently_created_approved_model_package(
93+
model_package_group_name=model_package_group_name
94+
)
95+
assert approved_model_package is not None
96+
assert approved_model_package.model_package_arn == model_package_2.get("ModelPackageArn")
97+
98+
sagemaker_session.sagemaker_client.delete_model_package(
99+
ModelPackageName=model_package_2["ModelPackageArn"]
100+
)
101+
sagemaker_session.sagemaker_client.delete_model_package(
102+
ModelPackageName=model_package["ModelPackageArn"]
103+
)
104+
sagemaker_session.sagemaker_client.delete_model_package_group(
105+
ModelPackageGroupName=model_package_group_name
106+
)

tests/unit/test_session.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7253,3 +7253,35 @@ def test_create_model_package_from_containers_to_create_mpg_if_not_present(sagem
72537253
sagemaker_session.sagemaker_client.create_model_package_group.assert_called_with(
72547254
ModelPackageGroupName="mock-mpg"
72557255
)
7256+
7257+
7258+
def test_get_most_recently_created_approved_model_package(sagemaker_session):
7259+
sagemaker_session.sagemaker_client.list_model_packages.side_effect = [
7260+
(
7261+
{
7262+
"ModelPackageSummaryList": [],
7263+
"NextToken": "NextToken",
7264+
}
7265+
),
7266+
(
7267+
{
7268+
"ModelPackageSummaryList": [
7269+
{
7270+
"CreationTime": 1697440162,
7271+
"ModelApprovalStatus": "Approved",
7272+
"ModelPackageArn": "arn:aws:sagemaker:us-west-2:123456789012:model-package/model-version/3",
7273+
"ModelPackageGroupName": "model-version",
7274+
"ModelPackageVersion": 3,
7275+
},
7276+
],
7277+
}
7278+
),
7279+
]
7280+
model_package = sagemaker_session.get_most_recently_created_approved_model_package(
7281+
model_package_group_name="mpg"
7282+
)
7283+
assert model_package is not None
7284+
assert (
7285+
model_package.model_package_arn
7286+
== "arn:aws:sagemaker:us-west-2:123456789012:model-package/model-version/3"
7287+
)

0 commit comments

Comments
 (0)