aws / aws/sagemaker-python-sdk

ModelTrainer doesn't propagate hyperparameters if SourceCode-command is used

Offen
#5,226 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
component: training type: bug
Vorherrschende Sprache
Python
Sterne
2.3k
Forks
1.3k
Ø Merge
1 T. 22 Std.
Gemergte PRs (30 T.)
35

Beschreibung

**Describe the bug**
With ModelTrainer, when I'm using the command parameter in the SourceCode with an argument provided as part of the command, for example `python launcher.py -e test.py`, hyperparameters defined in the ModelTrainer are not passed to the training script.

**To reproduce**
A clear, step-by-step set of instructions to reproduce the bug.

```
from sagemaker.modules.configs import (
Compute,
OutputDataConfig,
RemoteDebugConfig,
SourceCode,
StoppingCondition,
)
from sagemaker.modules.train import ModelTrainer

# Define the script to be run
source_code = SourceCode(
source_dir="./scripts",
requirements="requirements.txt",
command="python launcher.py -e train.py",
)

# Define the compute
compute_configs = Compute(
instance_type=instance_type,
instance_count=instance_count,
keep_alive_period_in_seconds=0,
)

job_name = "train-ray-processing-train"

output_path = f"s3://{bucket_name}/{job_name}"

model_trainer = ModelTrainer(
training_image=image_uri,
source_code=source_code,
base_job_name=job_name,
compute=compute_configs,
hyperparameters={
"epochs": 25,
"learning_rate": 0.001,
"batch_size": 100,
},
stopping_condition=StoppingCondition(max_runtime_in_seconds=18000),
output_data_config=OutputDataConfig(
s3_output_path=output_path, compression_type="NONE"
),
role=role,
)
```

in the launcher.py:

```
from argparse import ArgumentParser, Namespace

def __read_params():
try:
parser = ArgumentParser()

parser.add_argument("-e", "--entrypoint", type=str)
parser.add_argument("--epochs", type=int, default=25)
parser.add_argument("--learning_rate", type=float, default=0.001)
parser.add_argument("--batch_size", type=int, default=100)

# Parse only the arguments we care about and ignore the rest
args, unknown = parser.parse_known_args()

return args, unknown
except Exception as e:

raise e

if __name__ == "__main__":
args, _ = __read_params()
```
**Expected behavior**
both the arguments passed as command in the SoureCode, and the hyperparameters provided in the ModelTrainer definition, should be passed to the training script

**Screenshots or logs**
If applicable, add screenshots or logs to help explain your problem.

**System information**
A description of your system. Please provide:
- **SageMaker Python SDK version**: 2.247.1
- **Framework name (eg. PyTorch) or algorithm (eg. KMeans)**: Any
- **Framework version**: Any
- **Python version**: 3.12
- **CPU or GPU**: CPU and GPU
- **Custom Docker image (Y/N)**: N

**Additional context**
Add any other context about the problem here.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne damit nachzuverfolgen, wie ModelTrainer Hyperparameter mit dem SourceCode-Befehl kombiniert, wobei du die launcher.py-Reproduktion und die ModelTrainer- und SourceCode-Einstiegspunkte des SageMaker SDK verwendest. Reproduziere das Problem mit der bereitgestellten Konfiguration und überprüfe anschließend, dass sowohl Befehlsargumente als auch ModelTrainer-Hyperparameter das Trainingsskript erreichen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
aws, python
Bereich
cloud, machine-learning
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.