

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

# 執行超參數調校任務的暖啟動
<a name="automatic-model-tuning-warm-start"></a>

使用暖啟動開始超參數調校任務，同時使用一或多個先前的調校任務做為起點。先前調校任務的結果可用來通知新的調校任務中要搜尋哪些超參數組合。超參數調校會使用貝葉斯或隨機搜尋，從您指定的範圍來選擇超參數值組合。如需詳細資訊，請參閱[了解 Amazon SageMaker AI 中可用的超參數調校策略](automatic-model-tuning-how-it-works.md)。使用先前超參數調校任務學到的資訊時，可以更有效率地搜尋最佳超參數值組合，有助於提高新的超參數調校任務效能。

**注意**  
暖啟動調校任務通常比標準超參數調校任務要花更長的時間才能開始，因為其必須先載入父系任務的結果之後才會開始任務。拉長的時間取決於父系任務啟動的訓練任務總數而定。

考慮暖啟動的原因包含下列幾點：
+ 如要依據每次反覆運算後所見的結果，在多個調校任務之上逐步增加訓練任務的數量。
+ 如要使用您收到的新資料來調校模型。
+ 如要變更先前調校任務所用的超參數範圍、將靜態超參數變更為可調校，或將可調校的超參數變更為靜態值。
+ 您提早停止先前的超參數調校任務，或其意外停止。

**Topics**
+ [暖啟動調校任務的類型](#tuning-warm-start-types)
+ [暖啟動調校限制](#warm-start-tuning-restrictions)
+ [暖啟動調校範例筆記本](#warm-start-tuning-sample-notebooks)
+ [建立暖啟動調校任務](#warm-start-tuning-example)

## 暖啟動調校任務的類型
<a name="tuning-warm-start-types"></a>

有兩種不同類型的暖啟動調校任務：

`IDENTICAL_DATA_AND_ALGORITHM`  
新的超參數調校任務會使用父系調校任務的相同輸入資料和訓練影像。您可以變更要搜尋的超參數範圍，以及超參數調校任務啟動的訓練任務數量上限。您也可以將超參數從可調校變更為靜態，或從靜態變更為可調校，但靜態超參數加上可調校的超參數總數必須與所有父系任務保持相同。除非新版本的變更不會影響演算法本身，否則您都不能使用新版本的訓練演算法。例如，若是可改善記錄日誌或新增對不同資料格式支援的變更，即允許使用。  
當您使用先前超參數調校任務所用的相同訓練資料時，請使用相同的資料和演算法，但您想要提高訓練任務總數或變更超參數的範圍或值。  
當您執行 `IDENTICAL_DATA_AND_ALGORITHM` 類型的暖啟動調校任務時，會有額外的欄位來回應名為 `OverallBestTrainingJob` 的 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeHyperParameterTuningJob.html)。針對含所有訓練任務之最佳目標指標值的訓練任務，此欄位的值是 [TrainingJobSummary](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TrainingJobSummary.html)，而這些任務是由此調校任務和指定暖啟動調校的所有父系任務啟動。

`TRANSFER_LEARNING`  
新的超參數調校任務可以包含輸入資料、超參數範圍、同時訓練任務數量上限，以及父系超參數調校任務不同的訓練任務數量上限。您也可以將超參數從可調校變更為靜態，或從靜態變更為可調校，但靜態超參數加上可調校的超參數總數必須與所有父系任務保持相同。訓練演算法映像的版本也可以不同於父系超參數調校任務使用的版本。當您使用轉移學習時，大幅影響目標指標值的資料集或演算法變更可能會降低使用暖啟動調校的實用性。

## 暖啟動調校限制
<a name="warm-start-tuning-restrictions"></a>

以下限制適用於所有暖啟動調校任務：
+ 調校任務最多可以有 5 個父系任務，而且所有父系任務必須處於結束狀態 (`Completed`、`Stopped` 或 `Failed`) 之後，您才能啟動新的調校任務。
+ 新調校任務使用的目標指標必須與父系任務所用的目標指標相同。
+ 父系任務和新調校任務的靜態超參數加上可調校的超參數總數必須保持相同。因此，如果您認為未來可能會在暖啟動調校任務中使用可調校超參數，則應該在建立調校任務將其新增為靜態超參數。
+ 您不能變更父系任務和新調校任務間的每個超參數類型 (連續、整數、分類)。
+ 從父系任務中可調校的超參數變更為新調校任務中的靜態超參數總數，加上靜態超參數的值變更數量不能超過 10。例如，假設父系任務已具有可能值為 `red` 與 `blue` 的可調校分類超參數，若您將新調校任務中的該超參數變更為靜態，即會視為 2 個變更，並計入允許的總數 10 當中。如果相同超參數在父系任務中具有靜態值 `red`，而您將新調校任務中的該靜態值變更為 `blue`，這也會視為 2 個變更。
+ 暖啟動調校不是遞迴的。例如，如果您將 `MyTuningJob3` 建立為暖啟動調校任務，其父系任務為 `MyTuningJob2`，而 `MyTuningJob2` 本身為暖啟動調校任務，其父系任務為 `MyTuningJob1`，則 `MyTuningJob3` 不會使用在執行 `MyTuningJob1` 時學到的資訊。如果您想要使用來自 `MyTuningJob1` 的資訊，您必須明確將它新增為 `MyTuningJob3` 的父系。
+ 暖啟動調校任務中每個父系任務啟動的訓練任務，都會計入調校任務的 500 個訓練任務上限。
+ 2018 年 10 月 1 日之前建立的超參數調校任務不能做為暖啟動調校任務的父系任務。

## 暖啟動調校範例筆記本
<a name="warm-start-tuning-sample-notebooks"></a>

如需說明如何使用暖啟動調校的範例筆記本，請參閱 [https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter\_tuning/image\_classification\_warmstart/hpo\_image\_classification\_warmstart.ipynb](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynb)。

## 建立暖啟動調校任務
<a name="warm-start-tuning-example"></a>

您可以使用適用於 Python 的低階 AWS SDK (Boto 3) 或高階 SageMaker AI Python SDK 來建立暖啟動調校任務。

**Topics**
+ [建立暖啟動調校任務 (適用於 Python (Boto 3) 的低階 SageMaker AI API)](#warm-start-tuning-example-boto)
+ [建立暖啟動調校任務 (SageMaker AI Python SDK)](#warm-start-tuning-example-sdk)

### 建立暖啟動調校任務 (適用於 Python (Boto 3) 的低階 SageMaker AI API)
<a name="warm-start-tuning-example-boto"></a>

若要使用暖啟動調校，請指定 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobWarmStartConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobWarmStartConfig.html) 物件的值，並將其做為 `WarmStartConfig` 欄位傳遞給 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) 呼叫。

以下程式碼說明如何建立 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobWarmStartConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobWarmStartConfig.html) 物件，並使用適用於 Python (Boto 3) 的低階 SageMaker AI API 將其傳遞給 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) 任務。

建立 `HyperParameterTuningJobWarmStartConfig` 物件：

```
warm_start_config = {
          "ParentHyperParameterTuningJobs" : [
          {"HyperParameterTuningJobName" : 'MyParentTuningJob'}
          ],
          "WarmStartType" : "IdenticalDataAndAlgorithm"
}
```

建立暖啟動調校任務：

```
smclient = boto3.Session().client('sagemaker')
smclient.create_hyper_parameter_tuning_job(HyperParameterTuningJobName = 'MyWarmStartTuningJob',
   HyperParameterTuningJobConfig = tuning_job_config, # See notebook for tuning configuration
   TrainingJobDefinition = training_job_definition, # See notebook for job definition
   WarmStartConfig = warm_start_config)
```

### 建立暖啟動調校任務 (SageMaker AI Python SDK)
<a name="warm-start-tuning-example-sdk"></a>

若要使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 來執行暖啟動調校任務，請執行下列作業：
+ 使用 `WarmStartConfig` 物件，指定父系任務和暖啟動類型。
+ 將 `WarmStartConfig` 物件當做 [HyperparameterTuner](https://sagemaker.readthedocs.io/en/stable/tuner.html) 物件的 `warm_start_config` 引數值傳遞。
+ 呼叫 `HyperparameterTuner` 物件的 `fit` 方法。

如需如何使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 進行超參數調校的詳細資訊，請參閱 [https://github.com/aws/sagemaker-python-sdk\#sagemaker-automatic-model-tuning](https://github.com/aws/sagemaker-python-sdk#sagemaker-automatic-model-tuning)。

此範例使用的估算器是使用 [影像分類 - MXNet](image-classification.md) 演算法進行訓練。下列程式碼會設定超參數範圍，以讓暖啟動調校任務在該範圍內尋找最佳的值組合。如需如何設定超參數範圍的資訊，請參閱[定義超參數範圍](automatic-model-tuning-define-ranges.md)。

```
hyperparameter_ranges = {'learning_rate': ContinuousParameter(0.0, 0.1),
                         'momentum': ContinuousParameter(0.0, 0.99)}
```

下列程式碼會建立 `WarmStartConfig` 物件，以設定暖啟動調校任務。

```
from sagemaker.tuner import WarmStartConfig,WarmStartTypes

parent_tuning_job_name = "MyParentTuningJob"
warm_start_config = WarmStartConfig(warm_start_type=WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents={parent_tuning_job_name})
```

現在，請設定靜態超參數的值；靜態超參數是指在暖啟動調校任務啟動的每個訓練任務中都要保持相同值的超參數。在下列程式碼中，`imageclassification` 是之前建立的估算器。

```
imageclassification.set_hyperparameters(num_layers=18,
                                        image_shape='3,224,224',
                                        num_classes=257,
                                        num_training_samples=15420,
                                        mini_batch_size=128,
                                        epochs=30,
                                        optimizer='sgd',
                                        top_k='2',
                                        precision_dtype='float32',
                                        augmentation_type='crop')
```

現在，請建立 `HyperparameterTuner` 物件，並以 `warm_start_config` 引數形式傳遞您之前建立的 `WarmStartConfig` 物件。

```
tuner_warm_start = HyperparameterTuner(imageclassification,
                            'validation:accuracy',
                            hyperparameter_ranges,
                            objective_type='Maximize',
                            max_jobs=10,
                            max_parallel_jobs=2,
                            base_tuning_job_name='warmstart',
                            warm_start_config=warm_start_config)
```

最後，呼叫 `HyperparameterTuner` 物件的 `fit` 方法以啟動暖啟動調校任務。

```
tuner_warm_start.fit(
        {'train': s3_input_train, 'validation': s3_input_validation},
        include_cls_metadata=False)
```