

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 웜 스타트 하이퍼파라미터 튜닝 작업 실행
<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` 유형의 웜 스타트 튜닝 작업을 실행하는 경우 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeHyperParameterTuningJob.html)이라는 이름의 `OverallBestTrainingJob`에 대한 응답에는 추가 필드가 있습니다. 이 필드의 값은 이 튜닝 작업에서 시작한 모든 훈련 작업과 웜 스타트 튜닝 작업에 대해 지정된 모든 상위 작업 중 최적의 목표 지표 값을 가진 훈련 작업의 [TrainingJobSummary](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TrainingJobSummary.html)입니다.

`TRANSFER_LEARNING`  
새 하이퍼파라미터 튜닝 작업에는 입력 데이터, 하이퍼파라미터 범위, 동시 훈련 작업의 최대 개수와 상위 하이퍼파라미터 튜닝 작업과 다른 훈련 작업의 최대 개수가 포함되어 있습니다. 하이퍼파라미터는 튜닝 가능에서 정적으로, 또는 그 반대로 변경할 수 있지만 정적 하이퍼파라미터와 튜닝 가능한 하이퍼파라미터의 총 개수는 모두 상위 작업에 있기 때문에 동일하게 유지되어야 합니다. 또한 훈련 알고리즘 이미지는 상위 하이퍼파라미터 튜닝 작업에 사용되는 버전과 버전이 다를 수 있습니다. 전이 학습(transfer learning)을 사용하는 경우 목표 지표의 값에 크게 영향을 미치는 데이터세트 또는 알고리즘의 변경 사항으로 인해 웜 스타트 튜닝 사용의 유용성이 줄어들 수 있습니다.

## 웜 스타트 튜닝 제약 조건
<a name="warm-start-tuning-restrictions"></a>

다음 제한은 모든 웜 스타트 튜닝 작업에 적용됩니다.
+ 튜닝 작업에는 상위 작업이 최대 5개까지 있을 수 있으며 새 튜닝 작업을 시작하려면 상위 작업은 모두 터미널 상태(`Completed`, `Stopped` 또는 `Failed`)여야 합니다.
+ 새 튜닝 작업에 사용되는 목표 지표는 상위 작업에 사용된 목표 지표와 동일해야 합니다.
+ 정적 하이퍼파라미터와 튜닝 가능 하이퍼파라미터의 합은 상위 작업과 새 튜닝 작업 간에 동일하게 유지되어야 합니다. 따라서 향후 웜 스타트 튜닝 작업에서 하이퍼파라미터를 튜닝 가능한 하이퍼파라미터로 사용하려는 경우에는 튜닝 작업을 생성할 때 하이퍼파라미터를 정적 하이퍼파라미터로 추가해야 합니다.
+ 각 하이퍼파라미터의 유형(연속, 정수, 범주형)은 상위 작업과 새 튜닝 작업 간에 변경하면 안 됩니다.
+ 정적 하이퍼파라미터 값의 변경 횟수와 상위 작업의 튜닝 가능한 파라미터를 새 튜닝 작업에서 정적 하이퍼파라미터로 변경하는 총 횟수는 10회를 초과할 수 없습니다. 예를 들어, 상위 작업에 가능한 값인 `red` 및 `blue`를 갖는 튜닝 가능한 범주형 하이퍼파라미터가 있는 경우 새 튜닝 작업에서 하이퍼파라미터를 정적으로 변경하면 허용 가능한 총 10회의 변경에 대해 2회로 계산됩니다. 동일한 하이퍼파라미터가 상위 작업에서 정적 값 `red`를 갖는 경우, 새 튜닝 작업에서 이 정적 값을 `blue`로 변경하면 이 또한 2회 변경으로 계산됩니다.
+ 웜 스타트 튜닝은 반복되지 않습니다. 예를 들어, `MyTuningJob2`를 상위 작업으로 갖는 웜 스타트 튜닝 작업으로 `MyTuningJob3`를 생성하고`MyTuningJob2` 자체가 `MyTuningJob1`을 상위 작업으로 갖는 웜 스타트 튜닝 작업인 경우 `MyTuningJob1` 실행 시 배운 정보는 `MyTuningJob3`에 사용되지 않습니다. `MyTuningJob1` 실행 시 배운 정보를 사용하려면 이 작업을 `MyTuningJob3`에 대한 상위 작업으로 명시적으로 추가해야 합니다.
+ 웜 스타트 튜닝 작업의 상위 작업이 시작한 훈련 작업은 튜닝 작업에 대한 최대 훈련 작업 수 한도인 500개에 대해 계산됩니다.
+ 2018년 10월 1일 이전에 생성한 하이퍼파라미터 튜닝 작업은 웜 스타트 튜닝 작업에 대한 상위 작업으로 사용할 수 없습니다.

## 웜 스타트 튜닝 샘플 노트북
<a name="warm-start-tuning-sample-notebooks"></a>

웜 스타트 튜닝 사용 방법을 보여주는 샘플 노트북은 [https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter\$1tuning/image\$1classification\$1warmstart/hpo\$1image\$1classification\$1warmstart.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**
+ [웜 스타트 튜닝 작업(하위 수준 SageMaker AI API for Python(Boto 3)) 만들기](#warm-start-tuning-example-boto)
+ [웜 스타트 튜닝 작업 만들기(SageMaker AI Python SDK)](#warm-start-tuning-example-sdk)

### 웜 스타트 튜닝 작업(하위 수준 SageMaker AI API for Python(Boto 3)) 만들기
<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) 객체의 값을 지정하고 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) 호출 시 이 값을 `WarmStartConfig` 필드로 전달합니다.

다음 코드에서는 하위 수준 SageMaker AI API for Python(Boto 3)을 사용하여 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobWarmStartConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobWarmStartConfig.html) 객체를 만들어 [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\$1sagemaker-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)
```