aws / aws/sagemaker-python-sdk

Incorrect type annotation of hyperparameter_ranges argument of HyperparameterTuner constructor

オープン
#5,243 コメント 0 件 リアクション 2 件 担当者 0 名 GitHub で見る
component: training type: bug
主要言語
Python
スター
2.3k
フォーク
1.3k
平均マージ
1日 22時間
マージ済み PR(30日)
35

説明

**Describe the bug**
hyperparameter_ranges argument of HyperparameterTuner constructor is annotated as Dict[str, ParameterRange], however HyperparameterTuner works correctly with PipelineVariable as key of Dict (hyperparam name), so the correct type annotation could be: Dict[str, ParameterRange]

**To reproduce**
That code works properly:
```python
from sagemaker.pytorch import PyTorch
from sagemaker.tuner import HyperparameterTuner, CategoricalParameter
from sagemaker.workflow.parameters import ParameterString
from sagemaker.workflow.steps import TuningStep
from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.pipeline_context import (
PipelineSession
)

if __name__ == "__main__":
pipeline_session = PipelineSession()

estimator = PyTorch(
sagemaker_session=pipeline_session,
instance_type='ml.m5.large',
instance_count=1,
framework_version="2.3",
py_version="py311",
source_dir='source',
entry_point='main.py',
metric_definitions=[
{'Name': 'valid:loss', 'Regex': 'valid_loss=([0-9]+\\.?[0-9]*)'}
]
)

hparam_name = ParameterString("HParamName", default_value='hparam')

tuner = HyperparameterTuner(
estimator=estimator,
objective_metric_name='valid:loss',
objective_type='Minimize',
hyperparameter_ranges={
hparam_name: CategoricalParameter(
[1, 2]
)
},
max_jobs=2,
max_parallel_jobs=1,
base_tuning_job_name='test-tuning',
strategy='Grid',
metric_definitions=estimator.metric_definitions,
)

tuning_step = TuningStep(
name="Tuning",
step_args=tuner.fit(),
)

pipeline = Pipeline(
name="TestTuningPipeline",
parameters=[hparam_name],
steps=[tuning_step],
sagemaker_session=pipeline_session
)

pipeline.upsert()
execution = pipeline.start(
execution_display_name="TuningTest",
)
print(execution)
```
But the type annotation of hyperparameter_ranges is incorrect.
`mypy main.py --follow-untyped-imports` reports:
```
test.py:35: error: Dict entry 0 has incompatible type "ParameterString": "CategoricalParameter"; expected "str": "ParameterRange" [dict-item]
```

**Expected behavior**
Correct type annotation of constructor arguments of HyperparameterTuner

**Screenshots or logs**
-

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

**Additional context**
-

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

HyperparameterTuner のコンストラクターから始めて、hyperparameter_ranges のアノテーションを確認し、提示された例を使って受け入れられるキーの型を追跡します。mypy main.py --follow-untyped-imports を実行し、コンストラクターが正しく型付けされたまま、報告されていた dict-item エラーが解消されたことを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
aws, python
領域
machine-learning
issue の種類
バグ
難易度
2/5
見積もり時間
1〜3時間
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
52/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。