Skip to content

Commit d610bfb

Browse files
authored
fix: container env generation for S3 URI and add test for the same (#2971)
1 parent 6db3774 commit d610bfb

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

src/sagemaker/model.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ def _upload_code(self, key_prefix: str, repack: bool = False) -> None:
466466
)
467467

468468
def _script_mode_env_vars(self):
469-
"""Placeholder docstring"""
469+
"""Returns a mapping of environment variables for script mode execution"""
470470
script_name = None
471471
dir_name = None
472472
if self.uploaded_code:
@@ -478,8 +478,11 @@ def _script_mode_env_vars(self):
478478
elif self.entry_point is not None:
479479
script_name = self.entry_point
480480
if self.source_dir is not None:
481-
dir_name = "file://" + self.source_dir
482-
481+
dir_name = (
482+
self.source_dir
483+
if self.source_dir.startswith("s3://")
484+
else "file://" + self.source_dir
485+
)
483486
return {
484487
SCRIPT_PARAM_NAME.upper(): script_name or str(),
485488
DIR_PARAM_NAME.upper(): dir_name or str(),

tests/unit/sagemaker/model/test_model.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
from sagemaker.sklearn.model import SKLearnModel
2727
from sagemaker.tensorflow.model import TensorFlowModel
2828
from sagemaker.xgboost.model import XGBoostModel
29+
from sagemaker.workflow.properties import Properties
30+
2931

3032
MODEL_DATA = "s3://bucket/model.tar.gz"
3133
MODEL_IMAGE = "mi"
@@ -42,7 +44,6 @@
4244
BRANCH = "test-branch-git-config"
4345
COMMIT = "ae15c9d7d5b97ea95ea451e4662ee43da3401d73"
4446
ENTRY_POINT_INFERENCE = "inference.py"
45-
4647
SCRIPT_URI = "s3://codebucket/someprefix/sourcedir.tar.gz"
4748
IMAGE_URI = "763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-inference:1.9.0-gpu-py38"
4849

@@ -71,6 +72,23 @@ def sagemaker_session():
7172
return sms
7273

7374

75+
@patch("shutil.rmtree", MagicMock())
76+
@patch("tarfile.open", MagicMock())
77+
@patch("os.listdir", MagicMock(return_value=[ENTRY_POINT_INFERENCE]))
78+
def test_prepare_container_def_with_model_src_s3_returns_correct_url(sagemaker_session):
79+
model = Model(
80+
entry_point=ENTRY_POINT_INFERENCE,
81+
role=ROLE,
82+
sagemaker_session=sagemaker_session,
83+
source_dir=SCRIPT_URI,
84+
image_uri=MODEL_IMAGE,
85+
model_data=Properties("Steps.MyStep"),
86+
)
87+
container_def = model.prepare_container_def(INSTANCE_TYPE, "ml.eia.medium")
88+
89+
assert container_def["Environment"]["SAGEMAKER_SUBMIT_DIRECTORY"] == SCRIPT_URI
90+
91+
7492
def test_prepare_container_def_with_model_data():
7593
model = Model(MODEL_IMAGE)
7694
container_def = model.prepare_container_def(INSTANCE_TYPE, "ml.eia.medium")

0 commit comments

Comments
 (0)