翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ウォームスタートのハイパーパラメータ調整ジョブを実行する
開始点として 1 つ以上の以前の調整ジョブを使用して、ハイパーパラメータ調整ジョブを開始するには、ウォームスタートを使用します。以前の調整ジョブの結果は、新しい調整ジョブで検索するハイパーパラメータの組み合わせを通知する目的で使用されます。ハイパーパラメータの調整では、ベイズ検索またはランダム検索を使用して、指定された範囲からハイパーパラメータ値の組み合わせを選択します。詳細については、「Amazon SageMaker AI で利用可能なハイパーパラメータ調整戦略を理解する」を参照してください。以前のハイパーパラメータ調整ジョブからの情報を使用すると、ハイパーパラメータの最善の組み合わせの検索が効率化されるため、新しいハイパーパラメータ調整ジョブのパフォーマンスを向上させることができます。
注記
ウォームスタート調整ジョブは通常、標準のハイパーパラメータ調整ジョブより開始に時間がかかります。これは、親ジョブからの結果をジョブの開始前にロードする必要があるためです。時間がどの程度長くなるかは、親のジョブによって開始されたトレーニングジョブの総数に依存します。
ウォームスタートを検討する理由は次のとおりです。
-
各反復の後で表示される結果に基づいて、いくつかの調整ジョブに比べてトレーニングジョブの数を徐々に増やすため。
-
受け取った新しいデータを使用してモデルを調整するため。
-
以前の調整ジョブで使用したハイパーパラメータの範囲を変更するか、静的ハイパーパラメータを調整可能に変更するか、調整可能ハイパーパラメータを静的値に変更するため。
-
以前のハイパーパラメータジョブが早期停止されたか、予期せず停止した。
ウォームスタート調整ジョブのタイプ
ウォームスタート調整ジョブには 2 つの異なるタイプがあります。
IDENTICAL_DATA_AND_ALGORITHM
-
新しいハイパーパラメータ調整ジョブは、親の調整ジョブと同じ入力データおよびトレーニングイメージを使用します。検索するハイパーパラメータの範囲と、ハイパーパラメータ調整ジョブが開始するトレーニングジョブの最大数を変更することができます。ハイパーパラメータを調整可能から静的、および静的から調整可能に変更することもできますが、静的ハイパーパラメータと調整可能ハイパーパラメータの合計数は、すべての親ジョブの数と同じである必要があります。新しいバージョンでの変更がアルゴリズム自体に影響しない限り、新しいバージョンのトレーニングアルゴリズムを使用することはできません。たとえば、ログ記録を改善したり、異なるデータ形式のサポートを追加したりする変更が可能です。
以前のハイパーパラメータ調整ジョブで使用したのと同じトレーニングデータを使用する場合は、同一のデータとアルゴリズムを使用しますが、トレーニングジョブの総数を増やしたり、ハイパーパラメータの範囲や値を変更したりしなければならない可能性があります。
IDENTICAL_DATA_AND_ALGORITHM
タイプのウォームスタート調整ジョブを実行するときには、DescribeHyperParameterTuningJob
へのレスポンスにOverallBestTrainingJob
という名前の追加のフィールドを使用できます。このフィールドの値は、この調整ジョブによって開始されたすべてのトレーニングジョブと、ウォームスタート調整ジョブに指定されたすべての親ジョブのうち、目標メトリクスの値が最善であるトレーニングジョブの TrainingJobSummary です。 TRANSFER_LEARNING
-
新しいハイパーパラメータ調整ジョブには、入力データ、ハイパーパラメータ範囲、最大同時トレーニングジョブ数、およびその親ハイパーパラメータ調整ジョブとは異なる最大トレーニングジョブ数を含めることができます。ハイパーパラメータを調整可能から静的、および静的から調整可能に変更することもできますが、静的ハイパーパラメータと調整可能ハイパーパラメータの合計数は、すべての親ジョブの数と同じである必要があります。トレーニングアルゴリズムイメージは、親ハイパーパラメータ調整ジョブで使用されているバージョンとは異なるバージョンにすることもできます。転移学習を使用する場合、目標メトリクスの値に大きな影響を与えるデータセットまたはアルゴリズムの変更は、ウォームスタート調整の使用の有用性を低下させる可能性があります。
ウォームスタート調整の制限事項
すべてのウォームスタート調整ジョブに、次の制限が適用されます。
-
調整ジョブは最大 5 つの親ジョブを持つことができ、新しい調整ジョブを開始する前に、すべての親ジョブが終了状態 (
Completed
、Stopped
、またはFailed
) である必要があります。 -
新しい調整ジョブで使用される目標メトリクスは、親ジョブで使用される目標メトリクスと同じである必要があります。
-
静的および調整可能ハイパーパラメータの合計数は、親ジョブと新しい調整ジョブの間で同じである必要があります。そのため、今後のウォームスタート調整ジョブでハイパーパラメータを調整可能として使用するには、調整ジョブを作成するときにそれを静的ハイパーパラメータとして追加する必要があります。
-
各ハイパーパラメータのタイプ (連続、整数、カテゴリ別) は、親ジョブと新しい調整ジョブの間で変更してはなりません。
-
親ジョブ内の調整可能ハイパーパラメータから新規調整ジョブ内の静的ハイパーパラメータへの合計変更数と、静的ハイパーパラメータの値の変更数の合計は、10 を超えてはなりません。たとえば、親ジョブに、
red
とblue
の値を持つ調整可能なカテゴリ別ハイパーパラメータがある場合、新しい調整ではそのハイパーパラメータを static に変更します。これは、許容合計数 10 のうち 2 の変更としてカウントされます。親ジョブで同じハイパーパラメータの静的値がred
であり、新しい調整ジョブで静的値をblue
に変更した場合も、2 回の変更としてカウントされます。 -
ウォームスタート調整は再帰的ではありません。たとえば、親ジョブが
MyTuningJob2
であるウォームスタート調整ジョブとしてMyTuningJob3
を作成し、MyTuningJob2
自体が、親ジョブがMyTuningJob1
であるウォームスタート調整ジョブである場合、MyTuningJob1
の実行時に学習された情報は、MyTuningJob3
には使用されません。MyTuningJob1
からの情報を使用するには、MyTuningJob3
の親として明示的に追加する必要があります。 -
ウォームスタート調整ジョブですべての親ジョブによって開始されたトレーニングジョブは、調整ジョブのトレーニングジョブの最大数である 500 に対してカウントされます。
-
2018 年 10 月 1 日より前に作成されたハイパーパラメータ調整ジョブは、ウォームスタート調整ジョブの親ジョブとして使用できません。
ウォームスタート調整のサンプルノートブック
ウォームスタート調整の使用方法を示すサンプルノートブックについては、https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynbhpo_image_classification_warmstart.ipynb
という名前です。ノートブックを開くには、その [Use (使用)] タブをクリックして [Create copy (コピーを作成)] を選択します。
ウォームスタート調整ジョブを作成する
ウォームスタート調整ジョブを作成するには、低レベルの AWS SDK for Python (Boto 3) または高レベルの SageMaker AI Python SDK を使用できます。
トピック
ウォームスタート調整ジョブを作成する ( Python 用低レベル SageMaker AI API (Boto 3))
ウォームスタート調整を使用するには、HyperParameterTuningJobWarmStartConfig
オブジェクトの値を指定し、それを CreateHyperParameterTuningJob
のコールの WarmStartConfig
フィールドとして渡します。
次のコードは、低レベルの SageMaker AI API for Python (Boto 3) を使用してHyperParameterTuningJobWarmStartConfig
オブジェクトを作成し、CreateHyperParameterTuningJob
ジョブに渡す方法を示しています。
HyperParameterTuningJobWarmStartConfig
オブジェクトは次のように作成します。
warm_start_config = { "ParentHyperParameterTuningJobs" : [ {"HyperParameterTuningJobName" : 'MyParentTuningJob'} ], "WarmStartType" : "IdenticalDataAndAlgorithm" }
ウォームスタート調整ジョブは次のように作成します。
smclient = boto3.Session().client('sagemaker') smclient.create_hyper_parameter_tuning_job(HyperParameterTuningJobName = 'MyWarmStartTuningJob', HyperParameterTuningJobConfig = tuning_job_config, # See notebook for tuning configuration TrainingJobDefinition = training_job_definition, # See notebook for job definition WarmStartConfig = warm_start_config)
ウォームスタート調整ジョブを作成する (SageMaker AI Python SDK)
Amazon SageMaker Python SDK
-
WarmStartConfig
オブジェクトを使用して、親ジョブとウォームスタートのタイプを指定します。 -
HyperParameterTuner
オブジェクトの warm_start_config
引数の値としてWarmStartConfig
オブジェクトを渡します。 -
HyperparameterTuner
オブジェクトのfit
メソッドを呼び出します。
ハイパーパラメータチューニングに Amazon SageMaker Python SDK
この例では、トレーニングに 画像分類 - MXNet アルゴリズムを使用する推定器を使用しています。次のコードは、ウォームスタート調整ジョブが検索するハイパーパラメータの範囲を設定して、値の最適な組み合わせを見つけます。ハイパーパラメータ範囲の設定については、ハイパーパラメータの範囲を定義するを参照してください。
hyperparameter_ranges = {'learning_rate': ContinuousParameter(0.0, 0.1), 'momentum': ContinuousParameter(0.0, 0.99)}
次のコードは、WarmStartConfig
オブジェクトを作成することによってウォームスタート調整ジョブを設定します。
from sagemaker.tuner import WarmStartConfig,WarmStartTypes parent_tuning_job_name = "MyParentTuningJob" warm_start_config = WarmStartConfig(warm_start_type=WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents={parent_tuning_job_name})
ここで、静的ハイパーパラメータの値を設定します。静的ハイパーパラメータは、ウォームスタート調整ジョブが開始するすべてのトレーニングジョブに対して同じ値を保持します。次のコードでは、imageclassification
は以前に作成された推定器です。
imageclassification.set_hyperparameters(num_layers=18, image_shape='3,224,224', num_classes=257, num_training_samples=15420, mini_batch_size=128, epochs=30, optimizer='sgd', top_k='2', precision_dtype='float32', augmentation_type='crop')
HyperparameterTuner
オブジェクトを作成し、以前に作成した WarmStartConfig
オブジェクトを warm_start_config
引数として渡します。
tuner_warm_start = HyperparameterTuner(imageclassification, 'validation:accuracy', hyperparameter_ranges, objective_type='Maximize', max_jobs=10, max_parallel_jobs=2, base_tuning_job_name='warmstart', warm_start_config=warm_start_config)
最後に、HyperparameterTuner
オブジェクトの fit
メソッドを呼び出して、ウォームスタート調整ジョブを開始します。
tuner_warm_start.fit( {'train': s3_input_train, 'validation': s3_input_validation}, include_cls_metadata=False)