기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
웜 스타트 하이퍼파라미터 튜닝 작업 실행
웜 스타트를 사용하여 이전 튜닝 작업 중 하나 이상을 시작점으로 활용해 하이퍼파라미터 튜닝 작업을 시작합니다. 이전 튜닝 작업의 결과는 새 튜닝 작업에서 검색할 하이퍼파라미터 조합을 알려주는 데 사용됩니다. 하이퍼파라미터 튜닝은 베이지안 또는 임의 검색을 사용하여 지정한 범위에서 하이퍼파라미터 값의 조합을 선택합니다. 자세한 정보는 SageMaker Amazon을 통한 하이퍼파라미터 튜닝의 작동 방식을 참조하세요. 이전 하이퍼파라미터 튜닝 값의 정보를 사용하면 최적의 하이퍼파라미터 조합을 보다 효율적으로 검색하여 새 하이퍼파라미터 튜닝 작업의 성능을 개선할 수 있습니다.
참고
작업을 시작하려면 상위 작업의 결과를 로드해야 하기 때문에 웜 스타트 튜닝 작업은 일반적으로 표준 하이퍼파라미터 튜닝 작업보다 시작하는데 더 오래 걸립니다. 상위 작업에서 시작한 총 훈련 작업 수에 따라 시간이 길어집니다.
웜 스타트를 고려해야 하는 이유는 다음과 같습니다.
-
각 반복 후 확인되는 결과를 기반으로 여러 튜닝 작업에 대한 훈련 작업 수를 점진적으로 늘리기 위해.
-
수신한 새 데이터를 사용하여 모델을 튜닝하기 위해.
-
이전 튜닝 작업에서 사용했던 하이퍼파라미터의 범위를 변경하거나, 정적 하이퍼파라미터를 튜닝 가능한 하이퍼파라미터로 변경하거나, 튜닝 가능한 하이퍼파라미터를 정적 하이퍼파라미터로 변경하기 위해.
-
이전 하이퍼파라미터 작업을 조기에 중지했거나 해당 작업이 예기치 않게 중지되었습니다.
웜 스타트 튜닝 작업의 유형
두 가지 유형의 웜 스타트 튜닝 작업이 있습니다.
IDENTICAL_DATA_AND_ALGORITHM
-
새 하이퍼파라미터 튜닝 작업은 동일한 입력 데이터와 훈련 이미지를 상위 튜닝 작업으로 사용합니다. 검색할 하이퍼파라미터 범위와 하이퍼파라미터 튜닝 작업이 시작하는 훈련 작업의 최대 개수는 변경할 수 있습니다. 하이퍼파라미터는 튜닝 가능에서 정적으로, 또는 그 반대로 변경할 수 있지만 정적 하이퍼파라미터와 튜닝 가능한 하이퍼파라미터의 총 개수는 모두 상위 작업에 있기 때문에 동일하게 유지되어야 합니다. 새 버전에서 변경된 내용이 알고리즘 자체에 영향을 미치는 경우에는 새 버전의 훈련 알고리즘을 사용할 수 없습니다. 예를 들어, 다른 데이터 형식에 대한 로깅 또는 추가에 대한 지원을 개선하는 변경 사항은 허용됩니다.
이전 하이퍼파라미터 튜닝 작업에서 사용했을 때와 동일한 훈련 데이터를 사용하는 경우 동일한 데이터 및 알고리즘을 사용합니다. 그러나 총 훈련 작업 수를 늘리거나 하이퍼파라미터의 범위 또는 값을 변경하려고 합니다.
IDENTICAL_DATA_AND_ALGORITHM
유형의 웜 스타트 튜닝 작업을 실행하는 경우DescribeHyperParameterTuningJob
이라는 이름의OverallBestTrainingJob
에 대한 응답에는 추가 필드가 있습니다. 이 필드의 값은 이 조정 작업에서 시작한 모든 교육 작업과 웜 스타트 조정 작업에 지정된 모든 상위 작업 중에서 객관적 측정치가 가장 좋은 교육 작업에 대한 값입니다. TrainingJobSummary TRANSFER_LEARNING
-
새 하이퍼파라미터 튜닝 작업에는 입력 데이터, 하이퍼파라미터 범위, 동시 훈련 작업의 최대 개수와 상위 하이퍼파라미터 튜닝 작업과 다른 훈련 작업의 최대 개수가 포함되어 있습니다. 하이퍼파라미터는 튜닝 가능에서 정적으로, 또는 그 반대로 변경할 수 있지만 정적 하이퍼파라미터와 튜닝 가능한 하이퍼파라미터의 총 개수는 모두 상위 작업에 있기 때문에 동일하게 유지되어야 합니다. 또한 훈련 알고리즘 이미지는 상위 하이퍼파라미터 튜닝 작업에 사용되는 버전과 버전이 다를 수 있습니다. 전이 학습(transfer learning)을 사용하는 경우 목표 지표의 값에 크게 영향을 미치는 데이터 세트 또는 알고리즘의 변경 사항으로 인해 웜 스타트 튜닝 사용의 유용성이 줄어들 수 있습니다.
웜 스타트 튜닝 제약 조건
다음 제한은 모든 웜 스타트 튜닝 작업에 적용됩니다.
-
튜닝 작업에는 상위 작업이 최대 5개까지 있을 수 있으며 새 튜닝 작업을 시작하려면 상위 작업은 모두 터미널 상태(
Completed
,Stopped
또는Failed
)여야 합니다. -
새 튜닝 작업에 사용되는 목표 지표는 상위 작업에 사용된 목표 지표와 동일해야 합니다.
-
정적 하이퍼파라미터와 튜닝 가능 하이퍼파라미터의 합은 상위 작업과 새 튜닝 작업 간에 동일하게 유지되어야 합니다. 따라서 향후 웜 스타트 튜닝 작업에서 하이퍼파라미터를 튜닝 가능한 하이퍼파라미터로 사용하려는 경우에는 튜닝 작업을 생성할 때 하이퍼파라미터를 정적 하이퍼파라미터로 추가해야 합니다.
-
각 하이퍼파라미터의 유형(연속, 정수, 범주형)은 상위 작업과 새 튜닝 작업 간에 변경하면 안 됩니다.
-
정적 하이퍼파라미터 값의 변경 횟수와 상위 작업의 튜닝 가능한 파라미터를 새 튜닝 작업에서 정적 하이퍼파라미터로 변경하는 총 횟수는 10회를 초과할 수 없습니다. 예를 들어, 상위 작업에 가능한 값인
red
및blue
를 갖는 튜닝 가능한 범주형 하이퍼파라미터가 있는 경우 새 튜닝 작업에서 하이퍼파라미터를 정적으로 변경하면 허용 가능한 총 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를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를
이 예제에서는 훈련에 이미지 분류 - 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)