Skip to content

Commit b71adc3

Browse files
committed
Add end of support messaging for DLCs
1 parent ddf6242 commit b71adc3

File tree

3 files changed

+191
-31
lines changed

3 files changed

+191
-31
lines changed

src/sagemaker/image_uri_config/pytorch.json

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"us-east-2": "763104351884",
3535
"us-west-2": "763104351884"
3636
},
37-
"repository": "pytorch-inference-eia"
37+
"repository": "pytorch-inference-eia",
38+
"end_of_support": "2022-06-21T00:00:00.0Z"
3839
},
3940
"1.5.1": {
4041
"py_versions": [
@@ -146,7 +147,8 @@
146147
"us-west-1": "520713654638",
147148
"us-west-2": "520713654638"
148149
},
149-
"repository": "sagemaker-pytorch"
150+
"repository": "sagemaker-pytorch",
151+
"end_of_support": "2022-06-21T00:00:00.0Z"
150152
},
151153
"1.1.0": {
152154
"py_versions": [
@@ -180,7 +182,8 @@
180182
"us-west-1": "520713654638",
181183
"us-west-2": "520713654638"
182184
},
183-
"repository": "sagemaker-pytorch"
185+
"repository": "sagemaker-pytorch",
186+
"end_of_support": "2022-06-21T00:00:00.0Z"
184187
},
185188
"1.2.0": {
186189
"py_versions": [
@@ -222,7 +225,8 @@
222225
"us-west-1": "763104351884",
223226
"us-west-2": "763104351884"
224227
},
225-
"repository": "pytorch-inference"
228+
"repository": "pytorch-inference",
229+
"end_of_support": "2022-06-21T00:00:00.0Z"
226230
},
227231
"1.3.1": {
228232
"py_versions": [
@@ -264,7 +268,8 @@
264268
"us-west-1": "763104351884",
265269
"us-west-2": "763104351884"
266270
},
267-
"repository": "pytorch-inference"
271+
"repository": "pytorch-inference",
272+
"end_of_support": "2022-06-21T00:00:00.0Z"
268273
},
269274
"1.4.0": {
270275
"py_versions": [
@@ -305,7 +310,8 @@
305310
"us-west-1": "763104351884",
306311
"us-west-2": "763104351884"
307312
},
308-
"repository": "pytorch-inference"
313+
"repository": "pytorch-inference",
314+
"end_of_support": "2022-06-21T00:00:00.0Z"
309315
},
310316
"1.5.0": {
311317
"py_versions": [
@@ -346,7 +352,8 @@
346352
"us-west-1": "763104351884",
347353
"us-west-2": "763104351884"
348354
},
349-
"repository": "pytorch-inference"
355+
"repository": "pytorch-inference",
356+
"end_of_support": "2022-06-21T00:00:00.0Z"
350357
},
351358
"1.6.0": {
352359
"py_versions": [
@@ -388,7 +395,8 @@
388395
"us-west-1": "763104351884",
389396
"us-west-2": "763104351884"
390397
},
391-
"repository": "pytorch-inference"
398+
"repository": "pytorch-inference",
399+
"end_of_support": "2022-06-21T00:00:00.0Z"
392400
},
393401
"1.7.1": {
394402
"py_versions": [
@@ -430,7 +438,8 @@
430438
"us-west-1": "763104351884",
431439
"us-west-2": "763104351884"
432440
},
433-
"repository": "pytorch-inference"
441+
"repository": "pytorch-inference",
442+
"end_of_support": "2022-06-21T00:00:00.0Z"
434443
},
435444
"1.8.0": {
436445
"py_versions": [
@@ -472,7 +481,8 @@
472481
"us-west-1": "763104351884",
473482
"us-west-2": "763104351884"
474483
},
475-
"repository": "pytorch-inference"
484+
"repository": "pytorch-inference",
485+
"end_of_support": "2022-06-21T00:00:00.0Z"
476486
},
477487
"1.8.1": {
478488
"py_versions": [
@@ -514,7 +524,8 @@
514524
"us-west-1": "763104351884",
515525
"us-west-2": "763104351884"
516526
},
517-
"repository": "pytorch-inference"
527+
"repository": "pytorch-inference",
528+
"end_of_support": "2022-06-21T00:00:00.0Z"
518529
},
519530
"1.9.0": {
520531
"py_versions": [
@@ -555,7 +566,8 @@
555566
"us-west-1": "763104351884",
556567
"us-west-2": "763104351884"
557568
},
558-
"repository": "pytorch-inference"
569+
"repository": "pytorch-inference",
570+
"end_of_support": "2022-06-21T00:00:00.0Z"
559571
},
560572
"1.9.1": {
561573
"py_versions": [
@@ -596,7 +608,8 @@
596608
"us-west-1": "763104351884",
597609
"us-west-2": "763104351884"
598610
},
599-
"repository": "pytorch-inference"
611+
"repository": "pytorch-inference",
612+
"end_of_support": "2022-06-21T00:00:00.0Z"
600613
},
601614
"1.10.0": {
602615
"py_versions": [
@@ -637,7 +650,8 @@
637650
"us-west-1": "763104351884",
638651
"us-west-2": "763104351884"
639652
},
640-
"repository": "pytorch-inference"
653+
"repository": "pytorch-inference",
654+
"end_of_support": "2022-10-26T00:00:00.0Z"
641655
},
642656
"1.10.2": {
643657
"py_versions": [
@@ -678,7 +692,8 @@
678692
"us-west-1": "763104351884",
679693
"us-west-2": "763104351884"
680694
},
681-
"repository": "pytorch-inference"
695+
"repository": "pytorch-inference",
696+
"end_of_support": "2022-10-26T00:00:00.0Z"
682697
},
683698
"1.11.0": {
684699
"py_versions": [
@@ -719,7 +734,8 @@
719734
"us-west-1": "763104351884",
720735
"us-west-2": "763104351884"
721736
},
722-
"repository": "pytorch-inference"
737+
"repository": "pytorch-inference",
738+
"end_of_support": "2023-03-10T00:00:00.0Z"
723739
},
724740
"1.12.0": {
725741
"py_versions": [
@@ -760,7 +776,8 @@
760776
"us-west-1": "763104351884",
761777
"us-west-2": "763104351884"
762778
},
763-
"repository": "pytorch-inference"
779+
"repository": "pytorch-inference",
780+
"end_of_support": "2022-09-16T00:00:00.0Z"
764781
},
765782
"1.12.1": {
766783
"py_versions": [
@@ -800,7 +817,8 @@
800817
"us-west-1": "763104351884",
801818
"us-west-2": "763104351884"
802819
},
803-
"repository": "pytorch-inference"
820+
"repository": "pytorch-inference",
821+
"end_of_support": "2023-07-01T00:00:00.0Z"
804822
},
805823
"1.13.1": {
806824
"py_versions": [
@@ -837,7 +855,8 @@
837855
"us-west-1": "763104351884",
838856
"us-west-2": "763104351884"
839857
},
840-
"repository": "pytorch-inference"
858+
"repository": "pytorch-inference",
859+
"end_of_support": "2023-10-28T00:00:00.0Z"
841860
}
842861
}
843862
},

src/sagemaker/image_uris.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import logging
1818
import os
1919
import re
20+
import datetime
2021
from typing import Optional
2122
from packaging.version import Version
2223

@@ -446,6 +447,42 @@ def _validate_accelerator_type(accelerator_type):
446447
)
447448

448449

450+
def _get_end_of_support_warn_message(end_of_support, framework, version):
451+
"""
452+
Get end of support warning message if needed.
453+
454+
Args:
455+
end_of_support (str): json datetime string
456+
framework (str): ML framework
457+
version (str): ML framework version
458+
459+
Returns:
460+
str: Warning message if version is nearing or out of support, else empty string
461+
"""
462+
if not end_of_support:
463+
return ""
464+
dlc_support_policy = "https://aws.amazon.com/releasenotes/dlc-support-policy/"
465+
# Convert json object to UTC timezone string
466+
end_of_support_dt = datetime.datetime.strptime(
467+
end_of_support, '%Y-%m-%dT%H:%M:%S.%fZ'
468+
).replace(tzinfo=None).astimezone(tz=datetime.timezone.utc)
469+
# Ensure that the version is still supported
470+
current_dt = datetime.datetime.now(datetime.timezone.utc)
471+
time_delt_days = (end_of_support_dt - current_dt).days
472+
if current_dt >= end_of_support_dt:
473+
return (
474+
f"Unsupported DLC {framework} version: {version}."
475+
f"Please choose a supported version from our support policy - {dlc_support_policy}"
476+
)
477+
if time_delt_days <= 60:
478+
return (
479+
f"The {framework} {version} DLC is approaching end of support, "
480+
f"and patching will stop on {end_of_support}. "
481+
f"Please choose a supported version from our support policy - {dlc_support_policy}"
482+
)
483+
return ""
484+
485+
449486
def _validate_version_and_set_if_needed(version, config, framework):
450487
"""Checks if the framework/algorithm version is one of the supported versions."""
451488
available_versions = list(config["versions"].keys())
@@ -463,6 +500,12 @@ def _validate_version_and_set_if_needed(version, config, framework):
463500
return available_versions[0]
464501

465502
_validate_arg(version, available_versions + aliased_versions, "{} version".format(framework))
503+
504+
# For DLCs, warn if image is out of support
505+
end_of_support = config.get("end_of_support")
506+
end_of_support_warning = _get_end_of_support_warn_message(end_of_support, framework, version)
507+
if end_of_support_warning:
508+
logger.warning(end_of_support_warning)
466509
return version
467510

468511

0 commit comments

Comments
 (0)