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

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

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

重要

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

SageMaker リソースを作成するためのアクセス許可を付与する AWS Amazon SageMaker AI の マネージドポリシー には、それらのリソースの作成中にタグを追加するためのアクセス許可もあらかじめ含まれています。

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

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

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

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

この JSON オブジェクトで、次のように指定します。

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

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

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

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

注記

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

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

このコードサンプルでは、ハイパーパラメータ調整ジョブの目標メトリクスにより、validation:auc を最大化するハイパーパラメータ構成が見つかります。SageMaker AI 組み込みアルゴリズムは、目標メトリクスを自動的に CloudWatch Logs に書き込みます。次のコードサンプルは、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 }

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

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

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

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

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

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

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

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

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

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

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

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

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

次のコードサンプルでは、Amazon SageMaker AI を使用した XGBoost アルゴリズム 組み込みアルゴリズムの 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 AI エンドポイントでホストできるモデルとして最適なトレーニングジョブをデプロイするには、モデルの作成を選択します。

次のステップ

クリーンアップ