

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

# 如何使用 SageMaker AI 受管暖集區
<a name="train-warm-pools-how-to-use"></a>

您可以透過 SageMaker Python SDK、Amazon SageMaker AI 主控台，或透過低階 API 使用 SageMaker AI 受管暖集區。管理員可以選擇性地使用 `sagemaker:KeepAlivePeriod` 條件索引鍵，進一步限制特定使用者或群組的 `KeepAlivePeriodInSeconds` 範圍。

**Topics**
+ [使用 SageMaker AI Python SDK](#train-warm-pools-how-to-use-python-sdk)
+ [使用 Amazon SageMaker AI 主控台](#train-warm-pools-how-to-use-sagemaker-console)
+ [使用低階 SageMaker API](#train-warm-pools-how-to-use-low-level-apis)
+ [IAM 條件索引鍵](#train-warm-pools-how-to-use-iam-condition-key)

## 使用 SageMaker AI Python SDK
<a name="train-warm-pools-how-to-use-python-sdk"></a>

使用 SageMaker Python SDK 建立、更新或終止暖集區。

**注意**  
此功能可在 SageMaker AI [Python SDK v2.110.0](https://pypi.org/project/sagemaker/2.110.0/) 或更新的版本中使用。

**Topics**
+ [建立暖集區](#train-warm-pools-how-to-use-python-sdk-create)
+ [更新暖集區](#train-warm-pools-how-to-use-python-sdk-update)
+ [終止暖集區](#train-warm-pools-how-to-use-python-sdk-terminate)

### 建立暖集區
<a name="train-warm-pools-how-to-use-python-sdk-create"></a>

若要建立暖集區，請使用 SageMaker Python SDK 建立 `keep_alive_period_in_seconds` 值大於 0 的估算器，然後呼叫 `fit()`。訓練工作完成時，會保留一個暖集區。如需有關訓練指令碼和估算器的更多資訊，請參閱[使用 SageMaker Python SDK 訓練模型](https://sagemaker.readthedocs.io/en/stable/overview.html#train-a-model-with-the-sagemaker-python-sdk)。如果您的指令碼尚未建立暖集區，請參閱[暖集區建立](train-warm-pools.md#train-warm-pools-creation)取得可能的問題說明。

```
import sagemaker
from sagemaker import get_execution_role
from sagemaker.tensorflow import TensorFlow

# Creates a SageMaker AI 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,
)

# Starts a SageMaker training job and waits until completion
estimator.fit('s3://my_bucket/my_training_data/')
```

接下來，建立第二個相符的訓練工作。在這個範例中，我們建立 `my-training-job-2` 以進行實驗，它具有與 `my-training-job-1` 符合的所有必要的屬性，但有一個不同的超參數。第二個訓練工作重複使用暖集區，並且比第一個訓練工作更快啟動。下列程式碼範例使用 Tensorflow 估算器。暖集區功能可與在 Amazon SageMaker AI 上執行的所有訓練演算法搭配使用。如需哪些屬性必須符合的更多資訊，請參閱[符合的訓練任務](train-warm-pools.md#train-warm-pools-matching-criteria)。

```
# Creates an example estimator
estimator = TensorFlow(
    ...
    entry_point='my-training-script.py',
    source_dir='code',
    role=role,
    model_dir='model_dir',
    framework_version='py37',
    py_version='pyxy',
    job_name='my-training-job-2',
    instance_type='ml.g4dn.xlarge',
    instance_count=1,
    volume_size=250,
    hyperparameters={
        "batch-size": 512,
        "epochs": 2,
        "learning-rate": 1e-3,
        "beta_1": 0.9,
        "beta_2": 0.999,
    },
    keep_alive_period_in_seconds=1800,
)

# Starts a SageMaker training job and waits until completion
estimator.fit('s3://my_bucket/my_training_data/')
```

檢查兩個訓練工作的暖集區狀態，以確認 `my-training-job-1` 的暖集區為 `Reused`，而 `my-training-job-2` 的為`InUse`。

**注意**  
訓練任務名稱有日期/時間尾碼。範例訓練任務名稱 `my-training-job-1` 和 `my-training-job-2` 應以實際的訓練任務名稱取代。您可以透過命令 `estimator.latest_training_job.job_name` 來擷取實際的訓練任務名稱。

```
session.describe_training_job('my-training-job-1')
session.describe_training_job('my-training-job-2')
```

`describe_training_job` 的結果會提供指定的訓練任務的所有更多資訊。尋找 `WarmPoolStatus` 屬性以檢視關於訓練任務暖集區的資訊。您的輸出應該類似以下範例內容：

```
# Warm pool status for training-job-1
...
'WarmPoolStatus': {'Status': 'Reused', 
  'ResourceRetainedBillableTimeInSeconds': 1000,
  'ReusedByName': my-training-job-2}
...

# Warm pool status for training-job-2
... 
'WarmPoolStatus': {'Status': 'InUse'}
...
```

### 更新暖集區
<a name="train-warm-pools-how-to-use-python-sdk-update"></a>

當訓練工作完成且暖集區狀態為 `Available` 時，您可以更新 `KeepAlivePeriodInSeconds` 的值。

```
session.update_training_job(job_name, resource_config={"KeepAlivePeriodInSeconds":3600})
```

### 終止暖集區
<a name="train-warm-pools-how-to-use-python-sdk-terminate"></a>

若要手動終止暖集區，請將 `KeepAlivePeriodInSeconds ` 的值設定為 0。

```
session.update_training_job(job_name, resource_config={"KeepAlivePeriodInSeconds":0})
```

當暖集區超過指定的 `KeepAlivePeriodInSeconds` 值或叢集有修補程式更新時，就會自動終止。

## 使用 Amazon SageMaker AI 主控台
<a name="train-warm-pools-how-to-use-sagemaker-console"></a>

透過主控台，您可以建立暖集區、釋放暖集區，或檢查特定訓練工作的暖集區狀態和應計費時間。您還可以查看哪些相符的訓練任務重複使用了暖集區。

1. 開啟 [Amazon SageMaker AI 主控台](https://console.aws.amazon.com/ec2/)，然後在導覽窗格中選擇**訓練任務**。如果適用，每個訓練工作的暖集區狀態會顯示在 **暖集區狀態** 欄內，而使用中暖集區的剩餘時間則會顯示在 **剩餘時間** 欄內。

1. 若要從主控台建立使用暖集區的訓練工作，請選擇 **建立訓練任務**。接著，在設定訓練工作資源時，請務必指定 **保持作用期間** 欄位的值。此值必須是介於 1 到 3600 之間的整數，表示持續時間，以秒為單位。

1. 若要從主控台釋放暖集區，請選取特定的訓練工作，然後從 **動作** 下拉式功能表選擇 **發佈叢集**。

1. 若要查看暖集區的更多資訊，請選擇一個訓練任務名稱。在工作詳細資料頁面中，向下捲動至 **暖集區狀態** 區段，尋找暖集區狀態、剩餘時間 (若暖集區狀態為 `Available`)、暖集區計費秒數，以及重複使用暖集區的訓練工作名稱 (若暖集區狀態為 `Reused`)。

## 使用低階 SageMaker API
<a name="train-warm-pools-how-to-use-low-level-apis"></a>

搭配 SageMaker API 或 CLI 使用 SageMaker AI AWS 受管暖集區。

### SageMaker AI API
<a name="train-warm-pools-how-to-use-low-level-apis-sagemaker"></a>

透過下列命令使用 SageMaker API 來設定 SageMaker AI 受管暖集區：
+ [ CreateTrainingJob ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)
+ [ UpdateTrainingJob ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateTrainingJob.html)
+ [ ListTrainingJobs ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListTrainingJobs.html)
+ [ DescribeTrainingJob ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html)

### AWS CLI
<a name="train-warm-pools-how-to-use-low-level-apis-cli"></a>

使用 CLI 搭配下列命令設定 SageMaker AI AWS 受管暖集區：
+ [create-training-job](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/create-training-job.html)
+ [update-training-job](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/update-training-job.html)
+ [list-training-jobs](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/list-training-jobs.html)
+ [describe-training-job](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/describe-training-job.html)

## IAM 條件索引鍵
<a name="train-warm-pools-how-to-use-iam-condition-key"></a>

管理員可以選擇性地使用 `sagemaker:KeepAlivePeriod` 條件索引鍵，進一步限制特定使用者或群組的 `KeepAlivePeriodInSeconds` 範圍。SageMaker AI 受管暖集區的 `KeepAlivePeriodInSeconds` 值限制為 3600 秒 (60 分鐘)，但管理員可以視需要降低此限制。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EnforceKeepAlivePeriodLimit",
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob"
            ],
            "Resource": "*",
            "Condition": {
                "NumericLessThanIfExists": {
                    "sagemaker:KeepAlivePeriod": "1800"
                }
            }
        }
    ]
}
```

------

如需更多資訊，請參閱*服務授權參考*內的 [Amazon SageMaker AI 的條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys)。