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

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

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

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

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

チューニングジョブには、次の 3 HPO つのコンポーネントが含まれます。

  • 調整ジョブの設定

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

  • 調整ジョブの構成

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

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

ウォームスタート

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

注記

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

早期停止

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

調整方法

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

Hyperband は、反復アルゴリズム、または次のような反復でステップを実行するアルゴリズムでのみ使用できます。 XGBoost または Random Cut Forest 。Hyperband は、決定木や k-Nearest Neighbors などの非反復アルゴリズムでは使用できません。サーチ戦略の詳細については、「ハイパーパラメータチューニングの仕組み」を参照してください。

注記

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 予測ノートブック を解約すると、トレーニングと検証の 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 チューニングジョブに単一のトレーニングアルゴリズムが含まれている場合、 SageMaker チューニング関数は HyperparameterTunerAPIを直接呼び出してパラメータを渡します。HPO チューニングジョブに複数のトレーニングアルゴリズムが含まれている場合、チューニング関数は HyperparameterTunercreate関数を呼び出しますAPI。create 関数は、1 つ以上の推定器を含むディクショナリを期待APIするように に指示します。

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

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

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

次のコード例は、組み込みアルゴリズムを含む 2 つの SageMaker コンテナを取得する方法を示しています。 XGBoost および Linear Learner。 チューニングジョブにトレーニングアルゴリズムが 1 つだけ含まれている場合は、コンテナの 1 つと推定器の 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 つのみ含まれている必要があります。

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

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

このセクションでは、チューナーを初期化し、リソースを定義して、調整ジョブのジョブ設定を指定する方法を説明します。調整ジョブに複数のトレーニングアルゴリズムが含まれている場合、これらの設定は調整ジョブに含まれるすべてのアルゴリズムに適用されます。このセクションでは、チューナーを定義する 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 ={})