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

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

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

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

참고

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

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

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

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

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

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

웜 스타트 튜닝 작업의 유형

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

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를 참조하세요. SageMaker AI에서 예제를 실행하는 데 사용할 수 있는 Jupyter 노트북 인스턴스를 생성하고 액세스하는 방법에 대한 지침은 섹션을 참조하세요예시 노트북 액세스. 노트북 인스턴스를 생성하고 연 후 SageMaker AI 예제 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인합니다. 웜 스타트 튜닝 예제 노트북은 Hyperparameter tuning(하이퍼파라미터 튜닝) 섹션에 있으며 이 노트북의 이름은 hpo_image_classification_warmstart.ipynb입니다. 노트북을 열려면 사용 탭을 클릭하고 사본 생성을 선택합니다.

웜 스타트 튜닝 작업 생성

Python용 하위 수준 AWS SDK(Boto 3) 또는 상위 수준 SageMaker AI PythonSDK을 사용하여 웜 스타트 튜닝 작업을 생성할 수 있습니다.

웜 스타트 튜닝 작업 생성(PythonAPI용 하위 수준 SageMaker AI(Boto 3))

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

다음 코드는 PythonAPI용 하위 수준 SageMaker AI(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)

웜 스타트 튜닝 작업 생성(SageMaker AI PythonSDK)

Amazon SageMaker PythonSDK을 사용하여 웜 스타트 튜닝 작업을 실행하려면 다음을 수행합니다.

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

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

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

Amazon SageMaker PythonSDK을 하이퍼파라미터 튜닝에 사용하는 방법에 대한 자세한 내용은 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)