

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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. 暖集區會維持 `Available`，直到辨識出要重複使用的相符訓練工作，或者直到超過指定的 `KeepAlivePeriodInSeconds` 並終止。`KeepAlivePeriodInSeconds` 允許的最大時間長度為 3600 秒 (60 分鐘)。如果暖集區狀態為 `Terminated`，則此暖集區的生命週期結束。

1. 如果暖集區辨識出規格相符 (例如執行個體計數或執行個體類型) 的第二個訓練工作，則暖集區會從第一個訓練工作移至第二個訓練工作，以供重複使用。第一個訓練工作暖集區的狀態變成 `Reused`。第一個訓練工作的暖集區生命週期結束。

1. 重複使用暖集區的第二個訓練工作的狀態會變成 `InUse`。訓練工作完成之後，暖集區會在第二個訓練工作指定的 `KeepAlivePeriodInSeconds` 時間內保持 `Available`。暖集區可以接續用於後續相符訓練工作，最多至 28 天。

1. 如果暖集區無法再重複使用，則暖集區狀態為 `Terminated`。如果使用者終止暖集區以更新修補程式，或超過指定的 `KeepAlivePeriodInSeconds`，則無法再使用暖集區。

如需暖集區狀態選項的更多資訊，請參閱 *Amazon SageMaker API 參考中*的[暖集區狀態](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`
+ 如果您已傳遞訓練任務的[工作階段標籤](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_operations)，並在訓練任務的 `SessionChainingConfig` 中將 `EnableSessionTagChaining` 設定為 `True`，則相符的訓練任務也必須將 `EnableSessionTagChaining` 設定為 `True`，並具有相同的工作階段金鑰。如需詳細資訊，請參閱[使用屬性型存取控制 (ABAC) 進行多租戶訓練](model-access-training-data-abac.md)。

這些值都必須相同，暖集區才能移至後續的訓練工作供重複使用。

### 暖集區最長上限持續時間
<a name="train-warm-pools-maximum-duration"></a>

單一訓練任務的 `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)參數匯出環境變數 `PIP_CACHE_DIRECTORY` 以指向目錄 `/opt/ml/sagemaker/warmpoolcache/pip`。匯出此環境變數將變更 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 API](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html) 命令來檢查暖集區狀態。如需更多資訊，請參閱 *Amazon SageMaker API 參考*內的[暖集區狀態](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 受管暖集區無法與 spot 執行個體搭配使用。
+ SageMaker AI 受管暖集區的 `KeepAlivePeriodInSeconds` 值為 3600 秒 (60 分鐘)。
+ 如果暖集區持續成功符合指定 `KeepAlivePeriodInSeconds` 數值的訓練工作，叢集最多只能繼續執行 28 天。