웜 스타트 하이퍼파라미터 튜닝 작업 실행 - 아마존 SageMaker

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

웜 스타트 하이퍼파라미터 튜닝 작업 실행

웜 스타트를 사용하여 이전 튜닝 작업 중 하나 이상을 시작점으로 활용해 하이퍼파라미터 튜닝 작업을 시작합니다. 이전 튜닝 작업의 결과는 새 튜닝 작업에서 검색할 하이퍼파라미터 조합을 알려주는 데 사용됩니다. 하이퍼파라미터 튜닝은 베이지안 또는 임의 검색을 사용하여 지정한 범위에서 하이퍼파라미터 값의 조합을 선택합니다. 자세한 정보는 SageMaker Amazon을 통한 하이퍼파라미터 튜닝의 작동 방식을 참조하세요. 이전 하이퍼파라미터 튜닝 값의 정보를 사용하면 최적의 하이퍼파라미터 조합을 보다 효율적으로 검색하여 새 하이퍼파라미터 튜닝 작업의 성능을 개선할 수 있습니다.

참고

작업을 시작하려면 상위 작업의 결과를 로드해야 하기 때문에 웜 스타트 튜닝 작업은 일반적으로 표준 하이퍼파라미터 튜닝 작업보다 시작하는데 더 오래 걸립니다. 상위 작업에서 시작한 총 훈련 작업 수에 따라 시간이 길어집니다.

웜 스타트를 고려해야 하는 이유는 다음과 같습니다.

  • 각 반복 후 확인되는 결과를 기반으로 여러 튜닝 작업에 대한 훈련 작업 수를 점진적으로 늘리기 위해.

  • 수신한 새 데이터를 사용하여 모델을 튜닝하기 위해.

  • 이전 튜닝 작업에서 사용했던 하이퍼파라미터의 범위를 변경하거나, 정적 하이퍼파라미터를 튜닝 가능한 하이퍼파라미터로 변경하거나, 튜닝 가능한 하이퍼파라미터를 정적 하이퍼파라미터로 변경하기 위해.

  • 이전 하이퍼파라미터 작업을 조기에 중지했거나 해당 작업이 예기치 않게 중지되었습니다.

웜 스타트 튜닝 작업의 유형

두 가지 유형의 웜 스타트 튜닝 작업이 있습니다.

IDENTICAL_DATA_AND_ALGORITHM

새 하이퍼파라미터 튜닝 작업은 동일한 입력 데이터와 훈련 이미지를 상위 튜닝 작업으로 사용합니다. 검색할 하이퍼파라미터 범위와 하이퍼파라미터 튜닝 작업이 시작하는 훈련 작업의 최대 개수는 변경할 수 있습니다. 하이퍼파라미터는 튜닝 가능에서 정적으로, 또는 그 반대로 변경할 수 있지만 정적 하이퍼파라미터와 튜닝 가능한 하이퍼파라미터의 총 개수는 모두 상위 작업에 있기 때문에 동일하게 유지되어야 합니다. 새 버전에서 변경된 내용이 알고리즘 자체에 영향을 미치는 경우에는 새 버전의 훈련 알고리즘을 사용할 수 없습니다. 예를 들어, 다른 데이터 형식에 대한 로깅 또는 추가에 대한 지원을 개선하는 변경 사항은 허용됩니다.

이전 하이퍼파라미터 튜닝 작업에서 사용했을 때와 동일한 훈련 데이터를 사용하는 경우 동일한 데이터 및 알고리즘을 사용합니다. 그러나 총 훈련 작업 수를 늘리거나 하이퍼파라미터의 범위 또는 값을 변경하려고 합니다.

IDENTICAL_DATA_AND_ALGORITHM 유형의 웜 스타트 튜닝 작업을 실행하는 경우 DescribeHyperParameterTuningJob이라는 이름의 OverallBestTrainingJob에 대한 응답에는 추가 필드가 있습니다. 이 필드의 값은 이 조정 작업에서 시작한 모든 교육 작업과 웜 스타트 조정 작업에 지정된 모든 상위 작업 중에서 객관적 측정치가 가장 좋은 교육 작업에 대한 값입니다. TrainingJobSummary

TRANSFER_LEARNING

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

웜 스타트 튜닝 제약 조건

다음 제한은 모든 웜 스타트 튜닝 작업에 적용됩니다.

  • 튜닝 작업에는 상위 작업이 최대 5개까지 있을 수 있으며 새 튜닝 작업을 시작하려면 상위 작업은 모두 터미널 상태(Completed, Stopped 또는 Failed)여야 합니다.

  • 새 튜닝 작업에 사용되는 목표 지표는 상위 작업에 사용된 목표 지표와 동일해야 합니다.

  • 정적 하이퍼파라미터와 튜닝 가능 하이퍼파라미터의 합은 상위 작업과 새 튜닝 작업 간에 동일하게 유지되어야 합니다. 따라서 향후 웜 스타트 튜닝 작업에서 하이퍼파라미터를 튜닝 가능한 하이퍼파라미터로 사용하려는 경우에는 튜닝 작업을 생성할 때 하이퍼파라미터를 정적 하이퍼파라미터로 추가해야 합니다.

  • 각 하이퍼파라미터의 유형(연속, 정수, 범주형)은 상위 작업과 새 튜닝 작업 간에 변경하면 안 됩니다.

  • 정적 하이퍼파라미터 값의 변경 횟수와 상위 작업의 튜닝 가능한 파라미터를 새 튜닝 작업에서 정적 하이퍼파라미터로 변경하는 총 횟수는 10회를 초과할 수 없습니다. 예를 들어, 상위 작업에 가능한 값인 redblue를 갖는 튜닝 가능한 범주형 하이퍼파라미터가 있는 경우 새 튜닝 작업에서 하이퍼파라미터를 정적으로 변경하면 허용 가능한 총 10회의 변경에 대해 2회로 계산됩니다. 동일한 하이퍼파라미터가 상위 작업에서 정적 값 red를 갖는 경우, 새 튜닝 작업에서 이 정적 값을 blue로 변경하면 이 또한 2회 변경으로 계산됩니다.

  • 웜 스타트 튜닝은 반복되지 않습니다. 예를 들어, MyTuningJob2를 상위 작업으로 갖는 웜 스타트 튜닝 작업으로 MyTuningJob3를 생성하고MyTuningJob2 자체가 MyTuningJob1을 상위 작업으로 갖는 웜 스타트 튜닝 작업인 경우 MyTuningJob1 실행 시 배운 정보는 MyTuningJob3에 사용되지 않습니다. MyTuningJob1 실행 시 배운 정보를 사용하려면 이 작업을 MyTuningJob3에 대한 상위 작업으로 명시적으로 추가해야 합니다.

  • 웜 스타트 튜닝 작업의 상위 작업이 시작한 훈련 작업은 튜닝 작업에 대한 최대 훈련 작업 수 한도인 500개에 대해 계산됩니다.

  • 2018년 10월 1일 이전에 생성한 하이퍼파라미터 튜닝 작업은 웜 스타트 튜닝 작업에 대한 상위 작업으로 사용할 수 없습니다.

웜 스타트 튜닝 샘플 노트북

웜 스타트 튜닝을 사용하는 방법을 보여주는 샘플 노트북은 https://github.com/awslabs/ amazon-sagemaker-examples /blob/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynb를 참조하십시오. 예제를 실행하는 데 사용할 수 있는 Jupyter 노트북 인스턴스를 만들고 액세스하는 방법에 대한 지침은 을 참조하십시오. SageMaker 예제 노트북 Notebook 인스턴스를 생성하여 연 후 SageMaker Examples 탭을 선택하면 모든 샘플 목록이 표시됩니다. SageMaker 웜 스타트 튜닝 예제 노트북은 Hyperparameter tuning(하이퍼파라미터 튜닝) 섹션에 있으며 이 노트북의 이름은 hpo_image_classification_warmstart.ipynb입니다. 노트북을 열려면 사용 탭을 클릭하고 Create copy(사본 생성)를 선택합니다.

웜 스타트 튜닝 작업 생성

Python용 로우 레벨 AWS SDK (Boto 3) 또는 하이 레벨 SageMaker Python SDK를 사용하여 웜 스타트 튜닝 작업을 생성할 수 있습니다.

웜 스타트 튜닝 작업 만들기 (Python용 저수준 SageMaker API (Boto 3))

웜 스타트 튜닝을 사용하려면 HyperParameterTuningJobWarmStartConfig 객체의 값을 지정하고 CreateHyperParameterTuningJob 호출 시 이 값을 WarmStartConfig 필드로 전달합니다.

다음 코드는 Python용 저수준 SageMaker API (Boto 3) 를 사용하여 HyperParameterTuningJobWarmStartConfig객체를 만들고 CreateHyperParameterTuningJob작업에 전달하는 방법을 보여줍니다.

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)

웜 스타트 튜닝 작업 만들기 (SageMakerPython SDK)

Amazon SageMaker Python SDK를 사용하여 웜 스타트 조정 작업을 실행하려면 다음을 수행하십시오.

  • WarmStartConfig 객체를 사용하여 상위 작업과 웜 스타트 유형을 지정합니다.

  • WarmStartConfig객체를 객체 warm_start_config 인수 값으로 전달합니다. HyperparameterTuner

  • HyperparameterTuner 객체의 fit 메서드를 호출합니다.

하이퍼파라미터 튜닝에 Amazon SageMaker Python SDK를 사용하는 방법에 대한 자세한 내용은 https://github.com/aws/ sagemaker-python-sdk #을 참조하십시오. sagemaker-automatic-model-tuning

이 예제에서는 훈련에 이미지 분류 - MXNet 알고리즘을 사용하는 예측기를 사용합니다. 다음 코드는 최적의 값 조합을 찾기 위해 웜 스타트 튜닝 작업이 검색할 하이퍼파라미터 범위를 설정합니다. 하이퍼파라미터 범위 설정에 대한 자세한 정보는 하이퍼파라미터 범위 정의 단원을 참조하세요.

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)