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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

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

注記

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

ウォームスタートを検討する理由は次のとおりです。

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

  • 受け取った新しいデータを使用してモデルを調整するため。

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

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

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

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

IDENTICAL_DATA_AND_ALGORITHM

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

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

IDENTICAL_DATA_AND_ALGORITHM タイプのウォームスタート調整ジョブを実行するときには、DescribeHyperParameterTuningJob へのレスポンスに OverallBestTrainingJob という名前の追加のフィールドを使用できます。このフィールドの値は、この調整ジョブによって開始されたすべてのトレーニングジョブと、ウォームスタート調整ジョブに指定されたすべての親ジョブのうち、目標メトリクスの値が最善であるトレーニングジョブの TrainingJobSummary です。

TRANSFER_LEARNING

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

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

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

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

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

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

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

  • 親ジョブ内の調整可能ハイパーパラメータから新規調整ジョブ内の静的ハイパーパラメータへの合計変更数と、静的ハイパーパラメータの値の変更数の合計は、10 を超えてはなりません。たとえば、親ジョブに、redblue の値を持つ調整可能なカテゴリ別ハイパーパラメータがある場合、新しい調整ではそのハイパーパラメータを 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 .ipynb を参照してください。でサンプルを実行するために使用できる Jupyter Notebook インスタンスを作成してアクセスする方法については SageMaker、「」を参照してくださいサンプルノートブック。ノートブックインスタンスを作成して開いたら、SageMaker 「例」タブを選択すると、すべての SageMaker サンプルのリストが表示されます。ウォームスタート調整のサンプルノートブックは、[Hyperparameter tuning (ハイパーパラメータの調整)] セクションにあり、hpo_image_classification_warmstart.ipynb という名前です。ノートブックを開くには、その [Use (使用)] タブをクリックして [Create copy (コピーを作成)] を選択します。

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

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

ウォームスタートチューニングジョブを作成する (Python 用の低レベル SageMaker API (Boto 3))

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

次のコードは、Python 用の低レベル SageMaker API (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 オブジェクトを使用して、親ジョブとウォームスタートのタイプを指定します。

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

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

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

この例では、トレーニングに 画像分類 - 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)