ウォームスタートのハイパーパラメータ調整ジョブを実行する - アマゾン SageMaker

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

ウォームスタートのハイパーパラメータ調整ジョブを実行する

開始点として 1 つ以上の以前の調整ジョブを使用して、ハイパーパラメータ調整ジョブを開始するには、ウォームスタートを使用します。以前の調整ジョブの結果は、新しい調整ジョブで検索するハイパーパラメータの組み合わせを通知する目的で使用されます。ハイパーパラメータの調整では、ベイズ検索またはランダム検索を使用して、指定された範囲からハイパーパラメータ値の組み合わせを選択します。詳細については、ハイパーパラメータ調整の仕組み を参照してください。以前のハイパーパラメータ調整ジョブからの情報を使用すると、ハイパーパラメータの最善の組み合わせの検索が効率化されるため、新しいハイパーパラメータ調整ジョブのパフォーマンスを向上させることができます。

注記

ウォームスタート調整ジョブは通常、標準のハイパーパラメータ調整ジョブより開始に時間がかかります。これは、親ジョブからの結果をジョブの開始前にロードする必要があるためです。時間がどの程度長くなるかは、親のジョブによって開始されたトレーニングジョブの総数に依存します。

ウォームスタートの検討に至る理由は以下のとおりです。

  • 各反復の後で表示される結果に基づいて、いくつかの調整ジョブに比べてトレーニングジョブの数を徐々に増やしていきたい。

  • 新しいデータを取得し、その新しいデータを使用してモデルを調整したい。

  • 以前の調整ジョブで使用したハイパーパラメータの範囲を変更するか、静的ハイパーパラメータを調整可能に変更するか、調整可能ハイパーパラメータを静的値に変更したい。

  • 以前のハイパーパラメータジョブが早期停止されたか、予期せず停止した。

ウォームスタート調整ジョブのタイプ

ウォームスタート調整ジョブには 2 つの異なるタイプがあります。

IDENTICAL_DATA_AND_ALGORITHM

新しいハイパーパラメータ調整ジョブは、親の調整ジョブと同じ入力データおよびトレーニングイメージを使用します。検索するハイパーパラメータの範囲と、ハイパーパラメータ調整ジョブが開始するトレーニングジョブの最大数を変更することができます。ハイパーパラメータを調整可能から静的、および静的から調整可能に変更することもできますが、静的ハイパーパラメータと調整可能ハイパーパラメータの合計数は、すべての親ジョブの数と同じである必要があります。新しいバージョンでの変更がアルゴリズム自体に影響しない限り、新しいバージョンのトレーニングアルゴリズムを使用することはできません。たとえば、ログ記録を改善したり、異なるデータ形式のサポートを追加したりする変更が可能です。

以前のハイパーパラメータ調整ジョブで使用したのと同じトレーニングデータを使用する場合は、同一のデータとアルゴリズムを使用しますが、トレーニングジョブの総数を増やしたり、ハイパーパラメータの範囲や値を変更したりしなければならない可能性があります。

タイプ のウォーム スタート チューニング ジョブを実行する場合 IDENTICAL_DATA_AND_ALGORITHM様への応答には追加のフィールドがあります DescribeHyperParameterTuningJob 名前付き OverallBestTrainingJob。 このフィールドの値は、 トレーニングジョブサマリー このチューニングジョブによって開始されるすべてのトレーニングジョブと、ウォームスタートチューニングジョブに指定されたすべての親ジョブの最良の目標指標値を持つトレーニングジョブ。

TRANSFER_LEARNING

新しいハイパーパラメータ調整ジョブには、入力データ、ハイパーパラメータ範囲、最大同時トレーニングジョブ数、およびその親ハイパーパラメータ調整ジョブとは異なる最大トレーニングジョブ数を含めることができます。ハイパーパラメータを調整可能から静的、および静的から調整可能に変更することもできますが、静的ハイパーパラメータと調整可能ハイパーパラメータの合計数は、すべての親ジョブの数と同じである必要があります。トレーニングアルゴリズムイメージは、親ハイパーパラメータ調整ジョブで使用されているバージョンとは異なるバージョンにすることもできます。転移学習を使用する場合、目標メトリクスの値に大きな影響を与えるデータセットまたはアルゴリズムの変更は、ウォームスタート調整の使用の有用性を低下させる可能性があります。

ウォームスタート調整の制限事項

すべてのウォームスタート調整ジョブに、次の制限が適用されます。

  • 調整ジョブは最大 5 つの親ジョブを持つことができ、新しい調整ジョブを開始する前に、すべての親ジョブが終了状態 (CompletedStopped、または Failed) である必要があります。

  • 新しい調整ジョブで使用される目標メトリクスは、親ジョブで使用される目標メトリクスと同じである必要があります。

  • 静的および調整可能ハイパーパラメータの合計数は、親ジョブと新しい調整ジョブの間で同じである必要があります。そのため、今後のウォームスタート調整ジョブでハイパーパラメータを調整可能として使用するには、調整ジョブを作成するときにそれを静的ハイパーパラメータとして追加する必要があります。

  • 各ハイパーパラメータのタイプ (連続、整数、カテゴリ別) は、親ジョブと新しい調整ジョブの間で変更してはなりません。

  • 親ジョブ内の調整可能ハイパーパラメータから新規調整ジョブ内の静的ハイパーパラメータへの合計変更数と、静的ハイパーパラメータの値の変更数の合計は、10 を超えてはなりません。カテゴリ別ハイパーパラメータの各値は、この制限に対してカウントされます。たとえば、親ジョブに、redblue の値を持つ調整可能なカテゴリ別ハイパーパラメータがある場合、新しい調整ではそのハイパーパラメータを static に変更します。これは、許容合計数 10 のうち 2 の変更としてカウントされます。親ジョブで同じハイパーパラメータの静的値が red であり、新しい調整ジョブで静的値を blue に変更した場合も、2 回の変更としてカウントされます。

  • ウォームスタート調整は再帰的ではありません。たとえば、 MyTuningJob3 ウォームスタートのチューニングジョブとして MyTuningJob2 親ジョブとして 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.ipynb を参照してください。SageMaker でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法については、サンプルノートブックの使用を参照してください。ノートブックインスタンスを作成して開いたら、[SageMaker Examples (SageMaker サンプル)] タブを選択して、すべての SageMaker サンプルのリストを表示します。ウォーム スタート チューニングの例のノートブックは、 ハイパーパラメータのチューニング セクションに名前を付け、 hpo_image_classification_warmstart.ipynb. ノートブックを開くには、ノートブックの 使用 タブを選択し、 コピーを作成.

ウォームスタート調整ジョブを作成する

ウォームスタート調整ジョブを作成するには、低レベルの AWS SDK for Python (Boto 3) または高レベルの SageMaker Python SDK を使用できます。

ウォームスタート調整ジョブを作成する (低レベルの SageMaker API for Python (Boto 3))

ウォームスタート調整を使用するには、HyperParameterTuningJobWarmStartConfig オブジェクトの値を指定し、それを CreateHyperParameterTuningJob への呼び出しの WarmStartConfig フィールドとして渡します。

次のコードは、低レベルの SageMaker 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 Python SDK)

Amazon SageMaker Python SDK を使用してウォームスタート調整ジョブを実行するには、次の手順に従います。

  • WarmStartConfig オブジェクトを使用して、親ジョブとウォームスタートのタイプを指定します。

  • HyperparameterTuner オブジェクトの warm_start_config 引数の値として WarmStartConfig オブジェクトを渡します。

  • HyperparameterTuner オブジェクトの fit メソッドを呼び出します。

ハイパーパラメータの調整に Amazon SageMaker Python SDK を使用する方法の詳細については、https://github.com/aws/sagemaker-python-sdk#sagemaker-automatic-model-tuning を参照してください。

この例では、トレーニングに イメージ分類アルゴリズム アルゴリズムを使用する推定器を使用しています。次のコードは、ウォームスタート調整ジョブが検索するハイパーパラメータの範囲を設定して、値の最適な組み合わせを見つけます。ハイパーパラメータ範囲の設定については、ハイパーパラメータの範囲を定義するを参照してください。

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(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)