ハイパーパラメータ調整ジョブを設定して開始する - Amazon SageMaker

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

ハイパーパラメータ調整ジョブを設定して開始する

重要

Amazon SageMaker Studio または Amazon SageMaker Studio Classic が Amazon SageMaker リソースを作成できるようにするカスタムIAMポリシーは、それらのリソースにタグを追加するアクセス許可も付与する必要があります。Studio と Studio Classic は、作成したリソースに自動的にタグ付けするため、リソースにタグを追加するアクセス許可が必要です。IAM ポリシーで Studio と Studio Classic がリソースの作成を許可されていてもタグ付けが許可されていない場合、リソースの作成を試みるとAccessDenied「」エラーが発生する可能性があります。詳細については、「リソースにタグ付けするための SageMakerアクセス許可を提供する」を参照してください。

AWS Amazon のマネージドポリシー SageMaker SageMaker リソースを作成するアクセス許可を付与する には、これらのリソースの作成中にタグを追加するアクセス許可が既に含まれています。

ハイパーパラメータは、モデルトレーニング中の学習プロセスに影響を与える高レベルのパラメータです。最適なモデル予測を行うには、ハイパーパラメータ構成を最適化するか、ハイパーパラメータ値を設定します。最適な構成を見つけるプロセスをハイパーパラメータ調整と呼びます。ハイパーパラメータ調整ジョブを設定して開始するには、以下のガイドの手順を実行します。

ハイパーパラメータ調整ジョブの設定

ハイパーパラメータチューニングジョブの設定を指定するには、チューニングジョブを作成するときにJSONオブジェクトを定義します。このJSONオブジェクトを HyperParameterTuningJobConfigパラメータの値として CreateHyperParameterTuningJob に渡しますAPI。

このJSONオブジェクトで、以下を指定します。

このJSONオブジェクトでは、以下を指定します。

  • HyperParameterTuningJobObjective — ハイパーパラメータ調整ジョブによって開始されたトレーニングジョブのパフォーマンスを評価するために使用される目標メトリクス。

  • ParameterRanges — 調整可能なハイパーパラメータが最適化中に使用できる値の範囲。詳細については、「ハイパーパラメータの範囲を定義する」を参照してください

  • RandomSeed — 疑似乱数生成器の初期化に使用される値。ランダムシードを設定すると、ハイパーパラメータ調整検索戦略によって、同じ調整ジョブに対してより一貫性のある構成を生成できるようになります (オプション)。

  • ResourceLimits — ハイパーパラメータ調整ジョブが使用できるトレーニングジョブと並列トレーニングジョブの最大数。

注記

SageMaker 組み込みアルゴリズム ではなく、独自のアルゴリズムを使用してハイパーパラメータチューニングを行う場合は、アルゴリズムのメトリクスを定義する必要があります。詳細については、「メトリクスを定義する」を参照してください。

次のコード例は、組み込みXGBoostアルゴリズム を使用してハイパーパラメータチューニングジョブを設定する方法を示しています。このコードサンプルは etaalphamin_child_weightmax_depth ハイパーパラメータの範囲を定義する方法を示しています。これらのハイパーパラメータおよびその他のハイパーパラメータの詳細については、XGBoost「パラメータ」を参照してください。

このコード例では、ハイパーパラメータ調整ジョブの目標メトリクスは、 を最大化するハイパーパラメータ設定を見つけますvalidation:auc。 SageMaker 組み込みアルゴリズムは、目標メトリクスを CloudWatch ログに自動的に書き込みます。次のコードサンプルは、RandomSeed を設定する方法も示しています。

tuning_job_config = { "ParameterRanges": { "CategoricalParameterRanges": [], "ContinuousParameterRanges": [ { "MaxValue": "1", "MinValue": "0", "Name": "eta" }, { "MaxValue": "2", "MinValue": "0", "Name": "alpha" }, { "MaxValue": "10", "MinValue": "1", "Name": "min_child_weight" } ], "IntegerParameterRanges": [ { "MaxValue": "10", "MinValue": "1", "Name": "max_depth" } ] }, "ResourceLimits": { "MaxNumberOfTrainingJobs": 20, "MaxParallelTrainingJobs": 3 }, "Strategy": "Bayesian", "HyperParameterTuningJobObjective": { "MetricName": "validation:auc", "Type": "Maximize" }, "RandomSeed" : 123 }

トレーニングジョブを設定する

ハイパーパラメータ調整ジョブは、調整ジョブを開始して、ハイパーパラメータの最適な設定を見つけます。これらのトレーニングジョブはCreateHyperParameterTuningJob、 SageMakerを使用して設定する必要がありますAPI。

トレーニングジョブを設定するには、JSONオブジェクトを定義し、 内の TrainingJobDefinitionパラメータの値として渡しますCreateHyperParameterTuningJob

このJSONオブジェクトでは、以下を指定できます。

  • AlgorithmSpecification — トレーニングアルゴリズムと関連メタデータを含んでいる Docker イメージのレジストリパス。アルゴリズムを指定するには、Docker コンテナまたは組み込みアルゴリズム (必須) 内で独自のカスタムSageMaker ビルドアルゴリズムを使用できます。

  • InputDataConfig — トレーニングデータおよびテストデータの ChannelNameContentType、およびデータソースを含む入力設定。(必須)

  • InputDataConfig — トレーニングデータおよびテストデータの ChannelNameContentType、およびデータソースを含む入力設定。(必須)

  • アルゴリズムの出力の保存場所。トレーニングジョブの出力を保存する S3 バケットを指定します。

  • RoleArn – タスクの実行 SageMaker に使用する (ARN) ロールの Amazon リソースネーム AWS Identity and Access Management (IAM)。タスクには、入力データの読み取り、Docker イメージのダウンロード、S3 バケットへのモデルアーティファクトの書き込み、Amazon CloudWatch Logs へのログの書き込み、Amazon へのメトリクスの書き込み CloudWatch (必須) が含まれます。

  • StoppingCondition — トレーニングジョブが停止されるまでに実行できる最大ランタイム (秒単位)。この値は、モデルのトレーニングに必要な時間よりも大きい必要があります。(必須)

  • MetricDefinitions — トレーニングジョブが出力するメトリクスを定義する名前と正規表現。カスタムトレーニングアルゴリズムを使用する場合にのみメトリクスを定義します。次のコードサンプルでは、既にメトリクスが定義されている組み込みアルゴリズムが使用されています。メトリクスの定義 (オプション) については、「メトリクスを定義する」を参照してください。

  • TrainingImage — トレーニングアルゴリズムを指定する Docker コンテナイメージ。(オプション)

  • StaticHyperParameters – 調整ジョブで調整されていないハイパーパラメータの名前と値。

次のコードサンプルでは、XGBoost Amazon でのアルゴリズム SageMaker 組み込みアルゴリズムの eval_metricnum_roundobjectiverate_droptweedie_variance_power の各パラメータに静的な値を設定します。

SageMaker Python SDK v1
from sagemaker.amazon.amazon_estimator import get_image_uri training_image = get_image_uri(region, 'xgboost', repo_version='1.0-1') s3_input_train = 's3://{}/{}/train'.format(bucket, prefix) s3_input_validation ='s3://{}/{}/validation/'.format(bucket, prefix) training_job_definition = { "AlgorithmSpecification": { "TrainingImage": training_image, "TrainingInputMode": "File" }, "InputDataConfig": [ { "ChannelName": "train", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_train } } }, { "ChannelName": "validation", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_validation } } } ], "OutputDataConfig": { "S3OutputPath": "s3://{}/{}/output".format(bucket,prefix) }, "ResourceConfig": { "InstanceCount": 2, "InstanceType": "ml.c4.2xlarge", "VolumeSizeInGB": 10 }, "RoleArn": role, "StaticHyperParameters": { "eval_metric": "auc", "num_round": "100", "objective": "binary:logistic", "rate_drop": "0.3", "tweedie_variance_power": "1.4" }, "StoppingCondition": { "MaxRuntimeInSeconds": 43200 } }
SageMaker Python SDK v2
training_image = sagemaker.image_uris.retrieve('xgboost', region, '1.0-1') s3_input_train = 's3://{}/{}/train'.format(bucket, prefix) s3_input_validation ='s3://{}/{}/validation/'.format(bucket, prefix) training_job_definition = { "AlgorithmSpecification": { "TrainingImage": training_image, "TrainingInputMode": "File" }, "InputDataConfig": [ { "ChannelName": "train", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_train } } }, { "ChannelName": "validation", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_validation } } } ], "OutputDataConfig": { "S3OutputPath": "s3://{}/{}/output".format(bucket,prefix) }, "ResourceConfig": { "InstanceCount": 2, "InstanceType": "ml.c4.2xlarge", "VolumeSizeInGB": 10 }, "RoleArn": role, "StaticHyperParameters": { "eval_metric": "auc", "num_round": "100", "objective": "binary:logistic", "rate_drop": "0.3", "tweedie_variance_power": "1.4" }, "StoppingCondition": { "MaxRuntimeInSeconds": 43200 } }

ハイパーパラメータ調整ジョブに名前を付けて開始する

ハイパーパラメータ調整ジョブを設定したら、 CreateHyperParameterTuningJob を呼び出して起動できますAPI。次のコードサンプルでは tuning_job_configtraining_job_definition を使用しています。これらは前の 2 つのコードサンプルでハイパーパラメータ調整ジョブを作成するために定義したものです。

tuning_job_name = "MyTuningJob" smclient.create_hyper_parameter_tuning_job(HyperParameterTuningJobName = tuning_job_name, HyperParameterTuningJobConfig = tuning_job_config, TrainingJobDefinition = training_job_definition)

トレーニングジョブのステータスを確認する

ハイパーパラメータ調整ジョブが開始したトレーニングジョブのステータスを確認するには
  1. ハイパーパラメータ調整ジョブのリストで、開始したジョブを選択します。

  2. [トレーニングジョブ] を選択します。

    のトレーニングジョブの場所。
  3. 各トレーニングジョブのステータスを確認します。ジョブの詳細を確認するには、トレーニングジョブのリストでそれを選択します。ハイパーパラメータ調整ジョブが開始したすべてのトレーニングジョブのステータスの要約を確認するには、[トレーニングジョブのステータスカウンター] を確認します。

    トレーニングジョブのステータスは以下のとおりです。

    • Completed - トレーニングジョブは正常に完了しました。

    • InProgress - トレーニングジョブは進行中です。

    • Stopped - トレーニングジョブは完了する前に手動で停止されました。

    • Failed (Retryable) - トレーニングジョブは失敗しましたが、再試行できます。失敗したトレーニングジョブは、内部サービスエラーが発生したことが原因で失敗した場合にのみ再試行できます。

    • Failed (Non-retryable) - トレーニングジョブは失敗し、再試行できません。クライアントエラーの発生時に失敗したトレーニングジョブは、再試行できません。

    注記

    ハイパーパラメータのチューニングジョブを停止でき、基礎となるリソースを削除できます。ただし、ジョブ自体は削除できません。

最善のトレーニングジョブを確認する

ハイパーパラメータ調整ジョブは、各トレーニングジョブが返す目標メトリクスを使用してトレーニングジョブを評価します。ハイパーパラメータ調整ジョブの進行中、最善であると見なされるトレーニングジョブは、その時点で最善の目標メトリクスを返したジョブです。ハイパーパラメータ調整ジョブの完了後、最善であると見なされるトレーニングジョブは、最善の目標メトリクスを返したジョブです。

最善のトレーニングジョブを確認するには、[最善のトレーニングジョブ] を選択します。

ハイパーパラメータ調整ジョブコンソールでの最適なトレーニングジョブの場所。

SageMaker エンドポイントでホストできるモデルとして最適なトレーニングジョブをデプロイするには、モデルの作成 を選択します。

次のステップ

クリーンアップ