

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

# SageMaker AI マネージドウォームプール
<a name="train-warm-pools"></a>

SageMaker AI マネージドウォームプールを使用すると、トレーニングジョブの完了後もプロビジョニングされたインフラストラクチャを保持して再利用できるため、反復的な実験や多数のジョブの連続実行など、反復的なワークロードの待ち時間を短縮できます。指定されたパラメータに一致する後続のトレーニングジョブは、保持されているウォームプールインフラストラクチャ上で実行されます。これにより、リソースのプロビジョニングに費やす時間が減り、起動時間が短縮されます。

**重要**  
SageMaker AI マネージドウォームプールは課金対象のリソースです。詳細については、「[料金](#train-warm-pools-billing)」を参照してください。

**Topics**
+ [仕組み](#train-warm-pools-how-it-works)
+ [考慮事項](#train-warm-pools-considerations)
+ [ウォームプールのクォータの引き上げをリクエストする](train-warm-pools-resource-limits.md)
+ [SageMaker AI マネージドウォームプールの使用](train-warm-pools-how-to-use.md)

## 仕組み
<a name="train-warm-pools-how-it-works"></a>

SageMaker AI マネージドウォームプールを使用して、同じような連続したトレーニングジョブ間の待ち時間を短縮するには、`ResourceConfig` の `KeepAlivePeriodInSeconds` 値を指定するトレーニングジョブを作成します。この値は、設定したリソースを以降のトレーニングジョブのためにウォームプールに保持する時間を秒単位で表します。同じような構成で複数のトレーニングジョブを実行する必要がある場合、専用の永続キャッシュディレクトリを使用して情報を保存し、別のジョブで再利用することで、レイテンシーと課金対象時間をさらに短縮できます。

**Topics**
+ [ウォームプールのライフサイクル](#train-warm-pools-lifecycle)
+ [ウォームプールの作成](#train-warm-pools-creation)
+ [トレーニングジョブのマッチング](#train-warm-pools-matching-criteria)
+ [ウォームプールの最大持続時間](#train-warm-pools-maximum-duration)
+ [永続キャッシュを使用する](#train-warm-pools-persistent-cache)
+ [料金](#train-warm-pools-billing)

### ウォームプールのライフサイクル
<a name="train-warm-pools-lifecycle"></a>

1. `KeepAlivePeriodInSeconds` 値が 0 より大きい最初のトレーニングジョブを作成します。この最初のトレーニングジョブを実行すると、通常の起動時間でクラスターが「コールドスタート」されます。

1. 最初のトレーニングジョブが完了すると、プロビジョニングされたリソースは、`KeepAlivePeriodInSeconds` 値に指定された期間、ウォームプールに保持されます。クラスターが正常で、ウォームプールが指定の `KeepAlivePeriodInSeconds` の範囲内にある間は、ウォームプールのステータスは `Available` になります。

1. ウォームプールは、一致するトレーニングジョブを見つけて再利用するか、指定された `KeepAlivePeriodInSeconds` を超えて終了するまで `Available` のままです。`KeepAlivePeriodInSeconds` に許容される最大時間は 3600 秒 (60 分) です。ウォームプールのステータスが `Terminated` の場合、ウォームプールのライフサイクルは終了します。

1. ウォームプールが、インスタンス数やインスタンスタイプなどの仕様が一致する 2 つ目のトレーニングジョブを識別した場合、ウォームプールは最初のトレーニングジョブから 2 番目のトレーニングジョブに移動して再利用します。1 つ目のトレーニングジョブのウォームプールのステータスは `Reused` になります。これで、最初のトレーニングジョブのウォームプールのライフサイクルは終了します。

1. ウォームプールを再利用した 2 つ目のトレーニングジョブのステータスは `InUse` になります。2 つ目のトレーニングジョブが完了すると、ウォームプールは 2 つ目のトレーニングジョブで指定された `KeepAlivePeriodInSeconds` 期間だけ `Available` になります。ウォームプールは、最大 28 日間、対応するトレーニングジョブに引き続き移行できます。

1. ウォームプールが再利用できなくなった場合、ウォームプールのステータスは `Terminated` になります。ウォームプールは、ユーザーによって終了されたり、パッチアップデートのため終了されたり、指定された `KeepAlivePeriodInSeconds` を超えたりすると使用できなくなります。

ウォームプールのステータスオプションの詳細については、「Amazon SageMaker API リファレンス」の「[WarmPoolStatus](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_WarmPoolStatus.html)」を参照してください。**

### ウォームプールの作成
<a name="train-warm-pools-creation"></a>

最初のトレーニングジョブが正常に完了し、`KeepAlivePeriodInSeconds` 値が 0 より大きい場合は、ウォームプールが作成されます。クラスターが既に起動した後でトレーニングジョブを停止しても、ウォームプールは保持されます。アルゴリズムまたはクライアントのエラーによりトレーニングジョブが失敗した場合でも、ウォームプールは保持されます。クラスターの状態を損なう可能性のあるその他の理由でトレーニングジョブが失敗した場合、ウォームプールは作成されません。

ウォームプールが正常に作成されたことを確認するには、トレーニングジョブのウォームプールのステータスを確認します。ウォームプールのプロビジョニングが成功すると、ウォームプールのステータスは `Available` になります。ウォームプールがプロビジョニングに失敗した場合、ウォームプールのステータスは `Terminated` になります。

### トレーニングジョブのマッチング
<a name="train-warm-pools-matching-criteria"></a>

ウォームプールを維持するには、`KeepAlivePeriodInSeconds` 値に指定された時間内に一致するトレーニングジョブを見つける必要があります。次の値が同じであれば、次のトレーニングジョブは一致します。
+ `RoleArn` 
+ `ResourceConfig` 値:
  + `InstanceCount`
  + `InstanceType`
  + `VolumeKmsKeyId`
  + `VolumeSizeInGB`
+ `VpcConfig` 値:
  + `SecurityGroupIds`
  + `Subnets`
+ `EnableInterContainerTrafficEncryption`
+ `EnableNetworkIsolation`
+ トレーニングジョブの `SessionChainingConfig` で `EnableSessionTagChaining` を `True` に設定したトレーニングジョブの[セッションタグ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_operations)を渡した場合、一致するトレーニングジョブも `EnableSessionTagChaining` を `True` に設定し、同じセッションキーを持つ必要があります。詳細については、「[マルチテナンシートレーニングに属性ベースのアクセス制御 (ABAC) を使用する](model-access-training-data-abac.md)」を参照してください。

ウォームプールを次のトレーニングジョブに移動して再利用するには、これらの値がすべて同じである必要があります。

### ウォームプールの最大持続時間
<a name="train-warm-pools-maximum-duration"></a>

1 つのトレーニングジョブの最大 `KeepAlivePeriodInSeconds` は 3600 秒 (60 分) で、ウォームプールクラスターが連続してトレーニングジョブを実行し続けることができる最大時間は 28 日間です。

それ以降の各トレーニングジョブでも `KeepAlivePeriodInSeconds` 値を指定する必要があります。ウォームプールが次のトレーニングジョブに移動すると、そのトレーニングジョブの `ResourceConfig` で指定された新しい `KeepAlivePeriodInSeconds` 値が継承されます。これにより、ウォームプールをトレーニングジョブからトレーニングジョブへと最大 28 日間移動させ続けることができます。

`KeepAlivePeriodInSeconds` が指定されていない場合、ウォームプールはトレーニングジョブの完了後にスピンダウンします。

### 永続キャッシュを使用する
<a name="train-warm-pools-persistent-cache"></a>

ウォームプールを作成すると、SageMaker AI はウォームプールのライフサイクル全体を通じて維持する特別なディレクトリをボリュームにマウントします。このディレクトリには、別のジョブで再利用する情報を保存するのにも使用できます。

永続キャッシュを使用すると、以下を必要とするジョブでウォームプールだけを使用する場合よりもレイテンシーと課金対象時間を短縮できます。
+ 類似の設定での複数のやりとり
+ 段階的トレーニングジョブ
+ ハイパーパラメータの最適化

例えば、永続キャッシュディレクトリ内に pip キャッシュディレクトリを設定することで、繰り返し実行する際に同じ Python 依存関係をダウンロードすることを回避できます。このディレクトリの内容を管理する責任は、すべてユーザーにあります。レイテンシーと請求対象時間を短縮するために永続キャッシュに入れることができる情報の種類の例を以下に示します。
+ pip によって管理される依存関係。
+ conda によって管理される依存関係。
+ [チェックポイント情報](https://docs.aws.amazon.com/sagemaker/latest/dg/model-checkpoints.html)。
+ トレーニング中に生成されたその他の情報。

永続キャッシュの場所は `/opt/ml/sagemaker/warmpoolcache` です。環境変数 `SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY` は永続キャッシュディレクトリの場所を指します。

以下のコード例は、ウォームプールを設定し、永続キャッシュを使用して pip の依存関係を保存して後続のジョブで使用する方法を示しています。後続のジョブは、パラメータ `keep_alive_period_in_seconds` で指定された時間枠内で実行する必要があります。

```
import sagemakerfrom sagemaker import get_execution_rolefrom sagemaker.tensorflow import TensorFlow
# Creates a SageMaker session and gets execution role
session = sagemaker.Session()
role = get_execution_role()
# Creates an example estimator
estimator = TensorFlow(
    ...
    entry_point='{{my-training-script.py}}',
    source_dir='{{code}}',
    role={{role}},
    model_dir='{{model_dir}}',
    framework_version='{{2.2}}',
    py_version='{{py37}}',
    job_name='{{my-training-job-1}}',
    instance_type='{{ml.g4dn.xlarge}}',
    instance_count={{1}},
    volume_size={{250}},
    hyperparameters={
"batch-size": {{512}},
        "epochs": {{1}},
        "learning-rate": {{1e-3}},
        "beta_1": {{0.9}},
        "beta_2": {{0.999}},
    },
    keep_alive_period_in_seconds={{1800}},
    environment={"PIP_CACHE_DIR": "/opt/ml/sagemaker/warmpoolcache/pip"}
)
```

前のコード例では、[環境](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#estimators)パラメータを使用してディレクトリ `/opt/ml/sagemaker/warmpoolcache/pip` を指すように環境変数 `PIP_CACHE_DIRECTORY` をエクスポートします。この環境変数をエクスポートすると、pip がキャッシュを保存する場所が新しい場所に変わります。永続キャッシュディレクトリ内に作成したすべてのディレクトリ (ネストされたディレクトリを含む) は、その後のトレーニング実行時に再利用できます。前のコード例では、`pip` というディレクトリが、pip を使用してインストールされた依存関係をキャッシュするデフォルトの場所に変更されています。

永続キャッシュの場所には、次のコード例に示すように、環境変数を使用して Python トレーニングスクリプト内からアクセスすることもできます。

```
import os
import shutil
if __name__ == '__main__':
    PERSISTED_DIR = os.environ["SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY"]

    # create a file to be persisted
    open(os.path.join(PERSISTED_DIR, "{{test.txt}}"), 'a').close()
    # create a directory to be persisted
    os.mkdir(os.path.join(PERSISTED_DIR, "{{test_dir}}"))

    # Move a file to be persisted
    shutil.move("{{path/of/your/file.txt}}", PERSISTED_DIR)
```

### 料金
<a name="train-warm-pools-billing"></a>

SageMaker AI マネージドウォームプールは課金対象のリソースです。トレーニングジョブのウォームプールのステータスを取得して、ウォームプールの請求対象時間を確認できます。ウォームプールのステータスは、[Amazon SageMaker AI コンソールを使用する](train-warm-pools-how-to-use.md#train-warm-pools-how-to-use-sagemaker-console) で確認するか、[DescribeTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html) API コマンドで直接確認することができます。詳細については、「Amazon SageMaker API リファレンス」の「[WarmPoolStatus](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_WarmPoolStatus.html)」を参照してください。**

**注記**  
パラメータ `KeepAlivePeriodInSeconds` で指定された時間が経過すると、ウォームプールと永続キャッシュの両方がシャットダウンされ、内容は削除されます。

## 考慮事項
<a name="train-warm-pools-considerations"></a>

SageMaker AI マネージドウォームプールを使用する場合は、次の点を考慮してください。
+ SageMaker AI マネージドウォームプールは、異種クラスタートレーニングでは使用できません。
+ SageMaker AI マネージドウォームプールはスポットインスタンスでは使用できません。
+ SageMaker AI マネージドウォームプールの `KeepAlivePeriodInSeconds` 値は 3600 秒 (60 分) に制限されています。
+ ウォームプールが指定された `KeepAlivePeriodInSeconds` 値内のトレーニングジョブと正常に一致し続けると、クラスターは最大 28 日間しか稼働し続けることができません。