

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

# 1 つ以上のアルゴリズムのハイパーパラメータ最適化チューニングジョブを作成する (コンソール)
<a name="multiple-algorithm-hpo-create-tuning-jobs"></a>

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

## 調整ジョブのコンポーネント
<a name="multiple-algorithm-hpo-create-tuning-jobs-define-settings"></a>

HPO 調整ジョブには次の 3 つのコンポーネントが含まれています。
+ 調整ジョブの設定
+ トレーニングジョブの定義
+ 調整ジョブの構成

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

### 調整ジョブの設定
<a name="multiple-algorithm-hpo-create-tuning-jobs-components-tuning-settings"></a>

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

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

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

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

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

 Hyperband は、反復アルゴリズム、または [https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html) や [Random Cut Forest](https://docs.aws.amazon.com/sagemaker/latest/dg/randomcutforest.html) などの反復処理でステップを実行するアルゴリズムでのみ使用できます。Hyperband は、デシジョンツリーや [K 最近傍](https://docs.aws.amazon.com/sagemaker/latest/dg/k-nearest-neighbors.html)などの非反復アルゴリズムでは使用できません。サーチ戦略の詳細については、「[ハイパーパラメータチューニングの仕組み](automatic-model-tuning-how-it-works.html)」を参照してください。

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

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

### トレーニングジョブの定義
<a name="multiple-algorithm-hpo-create-tuning-jobs-training-definitions"></a>

トレーニングジョブの定義を作成するには、アルゴリズムとパラメータの設定、データの入力と出力の定義、リソースの設定を行う必要があります。HPO 調整ジョブごとに少なくとも 1 つの [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TrainingJobDefinition.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TrainingJobDefinition.html) を指定します。各トレーニング定義は、アルゴリズムの構成を指定します。

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

**Topics**
+ [アルゴリズムとパラメータを構成する](#multiple-algorithm-hpo-algorithm-configuration)
+ [データの入力および出力を定義する](#multiple-algorithm-hpo-data)
+ [トレーニングジョブのリソースを設定する](#multiple-algorithm-hpo-training-job-definition-resources)
+ [トレーニングジョブを追加または複製する](#multiple-algorithm-hpo-add-training-job)

#### アルゴリズムとパラメータを構成する
<a name="multiple-algorithm-hpo-algorithm-configuration"></a>

 次のリストは、各トレーニングジョブのハイパーパラメータ値のセットを設定するのに必要なものを示します。
+ 調整ジョブの名前
+ サービスにアクセスするアクセス許可
+ あらゆるアルゴリズムオプションのパラメータ
+ 目標メトリクス
+ ハイパーパラメータ値の範囲 (必要な場合)

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

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

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

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

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

**アルゴリズムオプション**  
組み込みアルゴリズム、独自のアルゴリズム、アルゴリズムを含む独自のコンテナを選択するか、 AWS Marketplaceからアルゴリズムをサブスクライブします。
+ 組み込みアルゴリズムを選択すると、Amazon Elastic Container Registry (Amazon ECR) イメージ情報が事前に入力されます。
+ 独自のコンテナを選択した場合は、(Amazon ECR) イメージの情報を指定する必要があります。アルゴリズムの入力モードにはファイルまたはパイプを選択できます。
+ Amazon S3 の CSV ファイルを使用してデータを提供する場合は、ファイルを選択する必要があります。

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

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

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

#### データの入力および出力を定義する
<a name="multiple-algorithm-hpo-data"></a>

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

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

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

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

#### トレーニングジョブのリソースを設定する
<a name="multiple-algorithm-hpo-training-job-definition-resources"></a>

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

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

**マネージドスポットトレーニング**  
SageMaker AI に予備の容量を使ってジョブを実行できるようにして、開始時間と終了時間に柔軟性を持たせている場合、ジョブのコンピューティングコストを節約できます。詳細については、「[Amazon SageMaker AI でのマネージドスポットトレーニング](model-managed-spot-training.md)」を参照してください。

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

#### トレーニングジョブを追加または複製する
<a name="multiple-algorithm-hpo-add-training-job"></a>

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

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

### 調整ジョブの構成
<a name="multiple-algorithm-hpo-resource-config"></a>

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

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

## HPO 調整ジョブの例
<a name="multiple-algorithm-hpo-create-tuning-jobs-define-example"></a>

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

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

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

### トレーニングジョブの定義を作成する
<a name="multiple-algorithm-hpo-create-tuning-jobs-define-example-train"></a>

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

以下のコード例は、組み込みアルゴリズム [https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html) と [https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html) を含む 2 つの SageMaker AI コンテナを取得する方法を示しています。調整ジョブに含まれるトレーニングアルゴリズムが 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 バケットにアップロードする必要があります。

### 調整ジョブのリソースと設定を定義する
<a name="multiple-algorithm-hpo-create-tuning-jobs-define-example-resources"></a>

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

#### 1 つのトレーニングアルゴリズムを調整する
<a name="multiple-algorithm-hpo-create-tuning-jobs-define-example-resources-single"></a>

次のコード例は、チューナーを初期化し、1 つの SageMaker AI 組み込みアルゴリズム (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,
)
```

#### 複数のトレーニングアルゴリズムをチューニングする
<a name="multiple-algorithm-hpo-create-tuning-jobs-define-example-resources-multiple"></a>

トレーニングジョブごとに異なる構成が必要で、これらはディクショナリを使用して指定されます。次のコード例は、2 つの SageMaker AI 組み込みアルゴリズム (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 調整ジョブを実行する
<a name="multiple-algorithm-hpo-create-tuning-jobs-define-example-run"></a>

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

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