1 つ以上のアルゴリズムのハイパーパラメータ最適化チューニングジョブを作成する (コンソール) - Amazon SageMaker

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

1 つ以上のアルゴリズムのハイパーパラメータ最適化チューニングジョブを作成する (コンソール)

このガイドでは、1 つ以上のアルゴリズムに対して新しいハイパーパラメータ最適化 (HPO) チューニングジョブを作成する方法について説明します。HPO ジョブを作成するには、調整ジョブの設定を定義し、調整するアルゴリズムごとにトレーニングジョブ定義を作成します。次に、そのリソースを設定して、調整ジョブを作成します。以下のセクションでは、各ステップを完了する方法について詳しく説明します。このガイドの最後に、 SDK for Pythonクライアントを使用して SageMaker複数のアルゴリズムを調整する方法の例を示します。

調整ジョブのコンポーネント

調整ジョブには、次の HPO 3 つのコンポーネントが含まれます。

  • 調整ジョブの設定

  • トレーニングジョブの定義

  • 調整ジョブの構成

これらのコンポーネントを調整ジョブに含める方法は、調整ジョブに HPO 1 つ以上のトレーニングアルゴリズムが含まれているかどうかによって異なります。以下のガイドでは、各コンポーネントについて説明し、両方のタイプの調整ジョブの例を示します。

調整ジョブの設定は、HPO調整ジョブのすべてのアルゴリズムに適用されます。ウォームスタートと早期停止は、1 つのアルゴリズムを調整する場合にのみ使用できます。ジョブ設定を定義した後、調整するアルゴリズムまたはバリエーションごとに個別のトレーニング定義を作成します。

ウォームスタート

このジョブを複製した場合、以前のチューニングジョブの結果を使って、この新しいチューニングジョブのパフォーマンスを向上させることができます。このウォームスタート機能は、1 つのアルゴリズムを調整する場合にのみ使うことができます。ウォームスタートオプションを選択すると、以前のハイパーパラメータ調整ジョブを 5 つまで選択して使うことができます。または、転移学習を使って、親調整ジョブにデータを追加することもできます。このオプションを選択すると、以前の調整ジョブの 1 つが親として選択されます。

注記

ウォームスタートは、2018 年 10 月 1 日以降に作成された調整ジョブとのみ互換性があります。詳細については、「ウォームスタートジョブを実行する」を参照してください。

早期停止

計算時間を短縮し、モデルの過剰な作成を防ぐには、トレーニングジョブを早期停止します。トレーニングジョブによりハイパーパラメータ調整ジョブの現在の最良の目標メトリクスが改善される可能性が低い場合、早期停止が役に立ちます。ウォームスタートと同様に、この機能は単一のアルゴリズムを調整する場合にのみ使用できます。これは設定オプションがない自動機能で、デフォルトでは無効になっています。早期停止の仕組み、それをサポートするアルゴリズム、および独自のアルゴリズムと併用する方法の詳細については、「トレーニングジョブを早期停止する」を参照してください。

調整方法

調整戦略は、ランダムサーチ、ベイズ最適化、Hyperband のいずれかになります。どれを選択するかにより、後のステップで選択する特定のハイパーパラメータ範囲を自動調整アルゴリズムがどのように検索するかが指定されます。ランダムサーチでは、指定した範囲からランダムな値の組み合わせが選択され、順次または並列に実行できます。ベイズ最適化では、既知の選択履歴に基づいて、最良の結果が得られる可能性が高い値を選択します。Hyperband では、使用率の高いジョブにリソースを動的に割り当て、パフォーマンスが低いジョブを自動的に停止する多重忠実度戦略を採用しています。他の構成を停止した後に開始される新しい構成は、ランダムに選択されます。

Hyperband は、反復アルゴリズム、または XGBoostRandom Cut Forest などの反復処理でステップを実行するアルゴリズムでのみ使用できます。Hyperband は、デシジョンツリーや K 最近傍などの非反復アルゴリズムでは使用できません。サーチ戦略の詳細については、「ハイパーパラメータチューニングの仕組み」を参照してください。

注記

Hyperband では高度な内部メカニズムを使用して早期停止を適用します。したがって、Hyperband内部早期停止機能を使用する場合、 TrainingJobEarlyStoppingTypeの パラメータを に設定HyperParameterTuningJobConfigAPIする必要がありますOFF

タグ

調整ジョブを管理しやすくするには、タグをキーバリューのペアとして入力し、調整ジョブにメタデータが割り当てます。キーバリューのペアの値は必須ではありません。キーは値なしでも使用できます。ジョブに関連付けられているキーを表示するには、チューニングジョブの詳細ページで [Tags] (タグ) タブを選択します。調整ジョブのタグの使い方については、「ハイパーパラメータのチューニングジョブとトレーニングジョブを管理する」を参照してください。

トレーニングジョブの定義を作成するには、アルゴリズムとパラメータの設定、データの入力と出力の定義、リソースの設定を行う必要があります。調整ジョブTrainingJobDefinitionごとに少なくとも 1 HPO つ指定します。各トレーニング定義は、アルゴリズムの構成を指定します。

複数のトレーニングジョブ定義を作成するには、ジョブ定義を複製します。ジョブを複製すると、データチャネル、Amazon S3 における出力アーティファクトの保存場所など、ジョブのすべての設定がコピーされるため、時間を節約できます。複製したジョブを編集して、ユースケースに必要なものを変更できます。

アルゴリズムとパラメータを構成する

次のリストは、各トレーニングジョブのハイパーパラメータ値のセットを設定するのに必要なものを示します。

  • 調整ジョブの名前

  • サービスにアクセスするアクセス許可

  • あらゆるアルゴリズムオプションのパラメータ

  • 目標メトリクス

  • ハイパーパラメータ値の範囲 (必要な場合)

名前

トレーニング定義の一意の名前を指定します。

アクセス許可

Amazon SageMaker では、ユーザーに代わって他の サービスを呼び出すためのアクセス許可が必要です。 AWS Identity and Access Management (IAM) ロールを選択するか、AmazonSageMakerFullAccessIAMポリシーがアタッチされたロールを に AWS 作成させます。

オプションのセキュリティ設定

ネットワークの隔離の設定により、コンテナがアウトバウンドネットワーク呼び出しを行うことができなくなります。これは AWS Marketplace 機械学習サービスに必要です。

仮想プライベートクラウド () を使用することもできますVPC。

注記

コンテナ間の暗号化は、 からジョブ定義を作成する場合にのみ使用できますAPI。

アルゴリズムオプション

組み込みアルゴリズム、独自のアルゴリズム、アルゴリズムを含む独自のコンテナを選択するか、 AWS Marketplaceからアルゴリズムをサブスクライブします。

  • 組み込みアルゴリズムを選択した場合、Amazon Elastic Container Registry (Amazon ECR) イメージ情報があらかじめ入力されています。

  • 独自のコンテナを選択する場合は、 (Amazon ECR) イメージ情報を指定する必要があります。アルゴリズムの入力モードは、ファイルまたはパイプとして選択できます。

  • Amazon S3 のCSVファイルを使用してデータを提供する場合は、ファイルを選択する必要があります。

メトリクス

組み込みアルゴリズムを選択すると、メトリクスが提供されます。独自のアルゴリズムを選択する場合は、メトリクスを定義する必要があります。モニタリングジョブを調整するために、最大 20 個のメトリクスを定義できます。そのうちの 1 つを目標メトリクスとして選択する必要があります。チューニングジョブのメトリクスを定義する方法の詳細については、「メトリクスを定義する」を参照してください。

目標メトリクス

最善なトレーニングジョブを見つけるには、目標メトリクスと、その値を最大化するか最小化するかを設定します。トレーニングジョブの完了後、調整ジョブの詳細ページを表示できます。この詳細ページには、この目標メトリクスを使用して検出された最適なトレーニングジョブの要約が表示されます。

ハイパーパラメータの設定

組み込みアルゴリズムを選択した場合、チューニングするアルゴリズムに合わせて最適化された範囲を使って、ハイパーパラメータのデフォルト値が設定されます。これらの値は、必要に応じて変更できます。例えば、範囲の代わりに、パラメータタイプを static (静的) に設定することで、ハイパーパラメータに固定値を設定できます。各アルゴリズムには、異なる必須およびオプションのパラメータがあります。詳細については、「ハイパーパラメータ調整のベストプラクティス」と「ハイパーパラメータの範囲を定義する」を参照してください。

データの入力および出力を定義する

チューニングジョブの各トレーニングジョブ定義にはデータ入力、データ出力の場所、また、任意でチェックポイントの保存場所のチャネルを設定する必要があります。

入力データ設定

入力データはチャネルごとに定義されます。各チャネルには、それぞれ独自のソースの場所 (Amazon S3 または Amazon Elastic File System)、圧縮、形式オプションがあります。入力ソースは最大20チャネルまで定義できます。選択したアルゴリズムが複数の入力チャネルをサポートしている場合は、それらも指定できます。たとえば、「XGBoost churn prediction notebook」を使用する場合、トレーニングと検証の 2 つのチャネルを追加できます。

チェックポイントの設定

チェックポイントは、トレーニング中に定期的に生成されます。保存するチェックポイントについては、Amazon S3 の場所を選択する必要があります。チェックポイントは、メトリクスレポートで使用され、マネージドスポットトレーニングジョブを再開するためにも使用されます。詳細については、「Amazon でチェックポイントを使用する SageMaker」を参照してください。

出力データ設定

トレーニングジョブのアーティファクトを保存する Amazon S3 の場所を定義します。 AWS Key Management Service (AWS KMS) キーを使用して出力に暗号化を追加するオプションがあります。

トレーニングジョブのリソースを設定する

チューニングジョブの各トレーニングジョブ定義には、インスタンスタイプとカウント、マネージドスポットトレーニング、停止条件など、デプロイするリソースを設定する必要があります。

リソース設定

各トレーニング定義には、異なるリソース構成を設定できます。インスタンスタイプとノード数を選択します。

マネージドスポットトレーニング

がスペア容量を使用してジョブを実行できるようにすることで、開始時刻と終了時刻に柔軟性がある場合は SageMaker 、ジョブのコンピュータコストを節約できます。詳細については、「Amazon でマネージドスポットトレーニングを使用する SageMaker」を参照してください。

停止条件

停止条件には、各トレーニングジョブに許容される最大の期間を指定します。

トレーニングジョブを追加または複製する

調整ジョブのトレーニングジョブ定義を作成したら、[トレーニングジョブ定義] パネルに戻ります。このパネルでは、追加アルゴリズムをトレーニングするための追加トレーニングジョブ定義を作成できます。[トレーニングジョブ定義の追加] を選択し、トレーニングジョブを定義する手順をもう一度実行します。

または、既存のトレーニングジョブ定義を複製して新しいアルゴリズム用に編集するには、[アクション] メニューから [クローン] を選択します。クローンオプションを使うと、データのチャネル、Amazon S3 における保存場所など、ジョブのすべての設定がコピーされるため、時間を節約できます。クローン作成の詳細については、「ハイパーパラメータのチューニングジョブとトレーニングジョブを管理する」を参照してください。

リソースの制限

ハイパーパラメータ調整ジョブが同時に実行できる同時トレーニングジョブの最大数 (最大 10 個) を指定できます。また、ハイパーパラメータ調整ジョブが実行できるトレーニングジョブの最大数 (最大 500 個) も指定することができます。同時ジョブの数は、すべてのトレーニング定義で要求したノード数を超えないようにする必要があります。ジョブの総数は、定義によって実行されると予想されるジョブの数を超えることはできません。

ジョブ設定、トレーニングジョブの定義、およびリソースの制限を確認します。次に、[Create hyperparameter tuning job] (ハイパーパラメータチューニングジョブを作成) を選択します。

HPO 調整ジョブの例

ハイパーパラメータ最適化 (HPO) トレーニングジョブを実行するには、まずチューニングするアルゴリズムごとにトレーニングジョブ定義を作成します。次に、調整ジョブの設定を定義し、調整ジョブのリソースを設定します。最後に、調整ジョブを実行します。

HPO 調整ジョブに 1 つのトレーニングアルゴリズムが含まれている場合、 SageMaker 調整関数は HyperparameterTuner API を直接呼び出してパラメータを渡します。HPO 調整ジョブに複数のトレーニングアルゴリズムが含まれている場合、調整関数は の HyperparameterTuner create関数を呼び出しますAPI。create 関数は、1 つ以上の推定器を含むディクショナリを期待APIするように に指示します。

次のセクションのコード例は、 を使用して 1 つのトレーニングアルゴリズムまたは複数のアルゴリズムを含むジョブを調整する方法を示しています SageMaker Python SDK。

トレーニングジョブの定義を作成する

複数のトレーニングアルゴリズムを含む調整ジョブを作成すると、調整ジョブの構成にトレーニングジョブの推定器とメトリクスおよびその他のパラメータが含まれます。このため、まずトレーニングジョブ定義を作成してから、調整ジョブを設定する必要があります。

次のコード例は、組み込みアルゴリズム XGBoostと を含む 2 つの SageMaker コンテナを取得する方法を示していますLinear Learner。調整ジョブに含まれるトレーニングアルゴリズムが 1 つのみの場合は、いずれかのコンテナといずれかの推定器を省略します。

import sagemaker from sagemaker import image_uris from sagemaker.estimator import Estimator sess = sagemaker.Session() region = sess.boto_region_name role = sagemaker.get_execution_role() bucket = sess.default_bucket() prefix = "sagemaker/multi-algo-hpo" # Define the training containers and intialize the estimators xgb_container = image_uris.retrieve("xgboost", region, "latest") ll_container = image_uris.retrieve("linear-learner", region, "latest") xgb_estimator = Estimator( xgb_container, role=role, instance_count=1, instance_type="ml.m4.xlarge", output_path='s3://{}/{}/xgb_output".format(bucket, prefix)', sagemaker_session=sess, ) ll_estimator = Estimator( ll_container, role, instance_count=1, instance_type="ml.c4.xlarge", output_path="s3://{}/{}/ll_output".format(bucket, prefix), sagemaker_session=sess, ) # Set static hyperparameters ll_estimator.set_hyperparameters(predictor_type="binary_classifier") xgb_estimator.set_hyperparameters( eval_metric="auc", objective="binary:logistic", num_round=100, rate_drop=0.3, tweedie_variance_power=1.4, )

次に、次のコード例に示すように、トレーニング、検証、テストのデータセットを指定して入力データを定義します。この例は、複数のトレーニングアルゴリズムを調整する方法を示しています。

training_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/train".format(bucket, prefix), content_type="csv" ) validation_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/validate".format(bucket, prefix), content_type="csv" ) test_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/test".format(bucket, prefix), content_type="csv" ) train_inputs = { "estimator-1": { "train": training_data, "validation": validation_data, "test": test_data, }, "estimator-2": { "train": training_data, "validation": validation_data, "test": test_data, }, }

調整アルゴリズムに含まれるトレーニングアルゴリズムが 1 つのみの場合は、train_inputs に推定器が 1 つのみ含まれている必要があります。

チューニングジョブで使用する前に、トレーニング、検証、トレーニングデータセットの入力を Amazon S3 HPO バケットにアップロードする必要があります。

調整ジョブのリソースと設定を定義する

このセクションでは、チューナーを初期化し、リソースを定義して、調整ジョブのジョブ設定を指定する方法を説明します。調整ジョブに複数のトレーニングアルゴリズムが含まれている場合、これらの設定は調整ジョブに含まれるすべてのアルゴリズムに適用されます。このセクションでは、チューナーを定義する 2 つのコードサンプルを紹介します。コードサンプルでは、単一のトレーニングアルゴリズムを最適化する方法を示してから、複数のトレーニングアルゴリズムを調整する方法の例を示します。

1 つのトレーニングアルゴリズムを調整する

次のコード例は、チューナーを初期化し、1 つの SageMaker 組み込みアルゴリズム にハイパーパラメータ範囲を設定する方法を示していますXGBoost。

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter hyperparameter_ranges = { "max_depth": IntegerParameter(1, 10), "eta": ContinuousParameter(0.1, 0.3), } objective_metric_name = "validation:accuracy" tuner = HyperparameterTuner( xgb_estimator, objective_metric_name, hyperparameter_ranges, objective_type="Maximize", max_jobs=5, max_parallel_jobs=2, )

複数のトレーニングアルゴリズムをチューニングする

トレーニングジョブごとに異なる構成が必要で、これらはディクショナリを使用して指定されます。次のコード例は、2 つの SageMaker 組み込みアルゴリズム、 XGBoostと の設定でチューナーを初期化する方法を示していますLinear Learner。このコードサンプルには、調整戦略やその他のジョブ設定 (調整ジョブのコンピューティングリソースなど) を設定する方法も示されています。以下のコードサンプルでは metric_definitions_dict を使用していますが、これはオプションです。

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter # Initialize your tuner tuner = HyperparameterTuner.create( estimator_dict={ "estimator-1": xgb_estimator, "estimator-2": ll_estimator, }, objective_metric_name_dict={ "estimator-1": "validation:auc", "estimator-2": "test:binary_classification_accuracy", }, hyperparameter_ranges_dict={ "estimator-1": {"eta": ContinuousParameter(0.1, 0.3)}, "estimator-2": {"learning_rate": ContinuousParameter(0.1, 0.3)}, }, metric_definitions_dict={ "estimator-1": [ {"Name": "validation:auc", "Regex": "Overall test accuracy: (.*?);"} ], "estimator-2": [ { "Name": "test:binary_classification_accuracy", "Regex": "Overall test accuracy: (.*?);", } ], }, strategy="Bayesian", max_jobs=10, max_parallel_jobs=3, )

HPO 調整ジョブを実行する

これで、トレーニング入力を HyperparameterTuner クラスの fit 関数に渡すことで調整ジョブを実行できるようになりました。次のコード例は、前のコード例で定義した train_inputs パラメータをチューナーに渡す方法を示しています。

tuner.fit(inputs=train_inputs, include_cls_metadata ={}, estimator_kwargs ={})