From 58f6af683f5621b87d82fe9fd67811a9b1c72265 Mon Sep 17 00:00:00 2001 From: Mergepath Date: Sun, 2 Aug 2026 04:30:58 +0000 Subject: [PATCH] fix: address #5904 - ModelTrainer generates sm_train.sh with CRLF line endings on Windows causing training job failure Closes #5904 --- sagemaker-train/src/sagemaker/train/model_trainer.py | 2 +- sagemaker-train/tests/unit/train/test_model_trainer.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sagemaker-train/src/sagemaker/train/model_trainer.py b/sagemaker-train/src/sagemaker/train/model_trainer.py index 48a80af03b..c4e46ca8a4 100644 --- a/sagemaker-train/src/sagemaker/train/model_trainer.py +++ b/sagemaker-train/src/sagemaker/train/model_trainer.py @@ -1195,7 +1195,7 @@ def _prepare_train_script( execute_driver=execute_driver, ) - with open(os.path.join(tmp_dir.name, TRAIN_SCRIPT), "w") as f: + with open(os.path.join(tmp_dir.name, TRAIN_SCRIPT), "w", newline="\n") as f: f.write(train_script) @classmethod diff --git a/sagemaker-train/tests/unit/train/test_model_trainer.py b/sagemaker-train/tests/unit/train/test_model_trainer.py index ce5d208bbc..b6c1a3e3c1 100644 --- a/sagemaker-train/tests/unit/train/test_model_trainer.py +++ b/sagemaker-train/tests/unit/train/test_model_trainer.py @@ -714,6 +714,8 @@ def test_train_with_distributed_config( ) assert os.path.exists(expected_train_script_path) + with open(expected_train_script_path, "rb") as f: + assert b"\r\n" not in f.read() with open(expected_train_script_path, "r") as f: train_script_content = f.read() assert test_case["expected_template"] in train_script_content