하나 이상의 알고리즘에 대한 하이퍼파라미터 최적화 튜닝 작업 생성(콘솔) - 아마존 SageMaker

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

하나 이상의 알고리즘에 대한 하이퍼파라미터 최적화 튜닝 작업 생성(콘솔)

이 안내서에서 하나 이상의 알고리즘에 대해 새 하이퍼파라미터 최적화(HPO) 튜닝 작업을 생성하는 방법을 알아보겠습니다. HPO 작업을 생성하려면 튜닝 작업 설정을 정의하고 튜닝 중인 각 알고리즘에 대한 훈련 작업 정의를 생성합니다. 다음으로 리소스를 구성하고 튜닝 작업을 생성합니다. 다음 단원에는 각 단계를 완료하는 방법에 대한 세부 정보가 있습니다. 이 가이드의 마지막에는 SageMaker SDK for Python 클라이언트를 사용하여 여러 알고리즘을 조정하는 방법에 대한 예제가 나와 있습니다.

튜닝 작업 구성 요소

HPO 튜닝 작업에는 다음의 세 가지 구성 요소가 포함됩니다.

  • 튜닝 작업 설정

  • 훈련 작업 정의

  • 튜닝 작업 구성

이러한 구성 요소가 HPO 튜닝 작업에 포함되는 방식은 튜닝 작업에 포함된 훈련 알고리즘이 하나인지 아니면 여럿인지에 따라 달라집니다. 다음 안내서에는 각 구성 요소에 대한 설명과 두 가지 유형의 튜닝 작업에 대한 예제가 있습니다.

튜닝 작업 설정은 HPO 튜닝 작업의 모든 알고리즘에 적용됩니다. 웜 스타트 및 조기 정지는 단일 알고리즘을 튜닝하는 경우에만 사용할 수 있습니다. 작업 설정을 정의한 후 튜닝할 각 알고리즘 또는 변형에 대한 개별 훈련 정의를 생성합니다.

웜 스타트

이 작업을 복제한 경우 이전 튜닝 작업의 결과를 사용하여 이 튜닝 작업의 성능을 개선할 수 있습니다. 이것이 웜 스타트 기능이며, 단일 알고리즘을 튜닝할 때만 사용할 수 있습니다. 웜 스타트 옵션을 사용하면 이전 하이퍼파라미터 튜닝 작업을 최대 5개까지 선택하여 사용할 수 있습니다. 또는 전이 학습을 사용하여 상위 튜닝 작업에 데이터를 더 추가할 수 있습니다. 이 옵션을 선택하면 이전 튜닝 작업 하나를 상위로 선택합니다.

참고

웜 스타트는 2018년 10월 1일 이후에 생성된 튜닝 작업과 호환됩니다. 자세한 내용은 웜 시작 작업 실행을 참조하세요.

초기 중지

컴퓨팅 시간을 줄이고 모델 과적합을 피하기 위해 훈련 작업을 조기 중단할 수 있습니다. 하이퍼파라미터 튜닝 작업의 현재 최적 목표 지표를 개선할 가능성이 없는 훈련 작업이 있을 때 도움이 됩니다. 웜 스타트와 마찬가지로 이 기능은 단일 알고리즘을 튜닝할 때만 사용할 수 있습니다. 이 기능은 구성 옵션이 없는 자동 기능이며 기본적으로 비활성화되어 있습니다. 초기 중지의 작동 방식, 지원하는 알고리즘, 자체 알고리즘과 함께 사용하는 방법에 대한 자세한 정보는 훈련 작업 초기 중지에서 확인하세요.

튜닝 전략

튜닝 전략은 임의, 베이지안, 또는 Hyperband일 수 있습니다. 이러한 선택은 자동 튜닝 알고리즘이 이후 단계에서 선택한 지정된 하이퍼파라미터 범위를 검색하는 방법을 지정합니다. 임의 검색에서는 지정된 범위에서 임의의 값 조합을 선택하며 순차적 또는 병렬적으로 실행할 수 있습니다. 베이지안 최적화는 이전 선택의 알려진 기록에 따라 최상의 결과를 얻을 가능성이 있는 값을 기준으로 값을 선택합니다. Hyperband은(는) 활용도가 높은 작업에 리소스를 동적으로 할당하고 실적이 저조한 작업은 자동으로 중지하는 다중 충실도 전략을 사용합니다. 다른 구성을 중지한 후 시작되는 새 구성은 임의로 선택됩니다.

Hyperband은(는) XGBoost, Random Cut Forest처럼 반복적으로 단계를 실행하는 알고리즘에만 사용할 수 있습니다. Hyperband은(는) 결정 트리, k-Nearest Neighbors처럼 비반본적인 알고리즘에는 사용할 수 없습니다. 검색 전략에 대한 자세한 내용은 하이퍼파라미터 튜닝 작동 방식을 참조하세요.

참고

Hyperband은(는) 고급 내부 메커니즘을 사용하여 초기 중지를 적용합니다. 따라서 Hyperband 내부 초기 중지 기능을 사용하는 경우, TrainingJobEarlyStoppingType 파라미터(HyperParameterTuningJobConfig API)를 OFF(으)로 설정해야 합니다.

Tags

튜닝 작업 관리 시 도움이 되도록 태그를 키-값 쌍으로 입력하여 튜닝 작업에 메타데이터를 할당할 수 있습니다. 키-값 쌍은 필수 값은 아닙니다. 값 없이 키를 사용할 수 있습니다. 작업과 연관된 키를 보려면 튜닝 작업의 세부 정보 페이지에서 태그 탭을 선택합니다. 튜닝 작업에서의 태그 사용에 대한 자세한 내용은 하이퍼파라미터 튜닝 및 훈련 작업 관리 섹션을 참조하세요.

훈련 작업 정의를 생성하려면 알고리즘과 파라미터를 구성하고, 데이터 입력 및 출력을 정의하고, 리소스를 구성해야 합니다. 최소 하나의 TrainingJobDefinition을(를) 각 HPI 튜닝 작업에 입력합니다. 각 훈련 정의는 알고리즘에 대한 구성을 지정합니다.

훈련 작업에 대한 여러 정의를 생성하기 위해 작업 정의를 복제할 수 있습니다. 작업을 복제하면 데이터 채널과 출력 아티팩트의 Amazon S3 스토리지 위치를 비롯한 모든 작업 설정이 복사되므로 시간을 절약할 수 있습니다. 복제된 작업을 편집하여 사용 사례에 따라 필요한 사항을 변경할 수 있습니다.

알고리즘 및 파라미터 구성

다음 목록에는 각 훈련 작업에 대한 하이퍼파라미터 값 세트 구성 시 필요한 사항에 대한 설명이 있습니다.

  • 튜닝 작업 이름

  • 서비스 액세스 권한

  • 모든 알고리즘 옵션의 파라미터

  • 목표 지표

  • 하이퍼파라미터 값 범위(필요 시)

명칭

훈련 정의에 고유한 이름을 입력합니다.

권한

Amazon은 귀하를 대신하여 다른 서비스를 호출할 수 있는 권한을 SageMaker 요구합니다. AWS Identity and Access Management (IAM) 역할을 선택하거나 AmazonSageMakerFullAccess IAM 정책이 AWS 첨부된 역할을 생성하도록 하십시오.

선택적 보안 설정

네트워크 격리 설정은 컨테이너가 아웃바운드 네트워크 호출을 하지 못하도록 합니다. 이는 AWS Marketplace 기계 학습 제품에 필요합니다.

Virtual Private Cloud(VPC)를 사용하는 방법을 선택할 수도 있습니다.

참고

컨테이너 간 암호화는 API에서 작업 정의를 생성할 때만 사용할 수 있습니다.

알고리즘 옵션

기본 제공 알고리즘, 자체 알고리즘, 알고리즘이 포함된 자체 컨테이너 중에서 하나를 선택하거나 AWS Marketplace에서 알고리즘을 구독할 수 있습니다.

  • 기본 제공 알고리즘을 선택하면 Amazon Elastic Container Registry(Amazon ECR) 이미지 정보가 미리 채워집니다.

  • 자체 컨테이너를 선택하면 (Amazon ECR) 이미지 정보를 지정해야 합니다. 알고리즘의 입력 모드를 파일 또는 파이프로 선택할 수 있습니다.

  • Amazon S3의 CSV 파일을 사용하여 데이터를 제공하려는 경우에는 해당 파일을 선택해야 합니다.

지표

기본 제공 알고리즘을 선택하면 지표가 제공됩니다. 자체 알고리즘을 선택하면 지표를 정의해야 합니다. 훈련 작업에 대해 모니터링할 지표는 최대 20개까지 정의할 수 있습니다. 하나의 지표를 목표 지표로 선택해야 합니다. 튜닝 작업 지표를 정의하는 방법에 대한 자세한 정보는 지표 정의에서 확인하세요.

목표 지표

최고 훈련 작업을 찾으려면 목표 지표를 설정하고 최대화 또는 최소화 여부를 결정해야 합니다. 훈련 작업 완료 후 튜닝 작업 세부 정보 페이지를 볼 수 있습니다. 세부 정보 페이지에는 이 목표 지표를 사용하여 찾은 최고 훈련 작업에 대한 요약 정보가 있습니다.

하이퍼파라미터 구성

기본 제공 알고리즘을 선택하면 튜닝 중인 알고리즘에 최적화된 범위를 사용하여 하이퍼파라미터 기본값이 설정됩니다. 이러한 값을 적합한 형태로 변경할 수 있습니다. 예를 들어, 범위 대신 파라미터의 유형을 정적으로 설정하여 하이퍼파라미터의 고정 값을 설정할 수 있습니다. 각 알고리즘에는 다양한 필수 파라미터와 선택적 파라미터가 있습니다. 자세한 내용은 하이퍼파라미터 튜닝 모범 사례하이퍼파라미터 범위 정의에서 확인하세요.

데이터 입력 및 출력 정의

튜닝 작업에 대한 각 훈련 작업 정의는 데이터 입력 채널, 데이터 출력 위치 및 모든 체크포인트 저장 위치를 구성해야 합니다.

입력 데이터 구성

입력 데이터는 채널별로 정의됩니다. 각 채널에는 자체 소스 위치(Amazon S3 또는 Amazon Elastic File System), 압축 및 형식 옵션이 있습니다. 입력 소스에 대해 최대 20개의 채널을 정의할 수 있습니다. 선택한 알고리즘이 여러 입력 채널을 지원하는 경우 이러한 채널도 지정할 수 있습니다. 예를 들어, XGBoost변동 예측 노트북을 사용할 때 훈련과 검증의 두 가지 채널을 추가할 수 있습니다.

체크포인트 구성

체크포인트는 훈련 중에 주기적으로 생성됩니다. 저장할 체크포인트의 Amazon S3 위치를 선택해야 합니다. 체크포인트는 지표 보고에 사용되며 관리형 스팟 훈련 작업을 재개하는 데에도 사용됩니다. 자세한 정보는 Amazon에서 체크포인트 사용하기 SageMaker을 참조하세요.

입력 데이터 구성

훈련 작업의 아티팩트를 저장할 Amazon S3 위치를 정의합니다. AWS Key Management Service (AWS KMS) 키를 사용하여 출력에 암호화를 추가할 수 있습니다.

훈련 작업 리소스를 구성합니다.

튜닝 작업의 훈련 작업 정의는 인스턴스 유형 및 개수, 관리형 스팟 훈련, 중지 조건 등 배포할 리소스를 구성해야 합니다.

리소스 구성

각 훈련 정의는 서로 다른 리소스 구성을 가질 수 있습니다. 인스턴스 유형과 노드 수를 선택합니다.

관리형 스팟 훈련

예비 용량을 사용하여 작업을 실행할 수 있으므로 SageMaker 시작 및 종료 시간을 유연하게 조정할 수 있으면 작업에 드는 컴퓨터 비용을 절약할 수 있습니다. 자세한 정보는 Amazon에서 관리형 스팟 교육 사용하기 SageMaker을 참조하세요.

중지 조건

중지 조건은 각 훈련 작업에 허용되는 최대 기간을 지정합니다.

훈련 작업 추가 또는 복제

튜닝 작업에 대한 훈련 작업 정의를 생성한 후 훈련 작업 정의 패널로 돌아갑니다. 이 패널에서 추가 훈련 작업 정의를 생성하여 추가 알고리즘을 훈련할 수 있습니다. 훈련 작업 정의 추가를 선택하고 단계를 진행하여 훈련 작업을 다시 정의할 수 있습니다.

또는 기존 훈련 작업 정의를 복제하고 새 알고리즘에 맞게 편집하려면 작업 메뉴에서 복제를 선택합니다. 복제 옵션은 데이터 채널 및 Amazon S3 스토리지 위치를 포함한 모든 작업 설정을 복사하여 시간을 절약할 수 있습니다. 복제에 대한 자세한 정보는 하이퍼파라미터 튜닝 및 훈련 작업 관리에서 확인하세요.

리소스 제한

하이퍼파라미터 튜닝 작업에서 동시 실행 가능한 최대 동시 훈련 작업 수(최대 10개)를 지정할 수 있습니다. 또한 하이퍼파라미터 튜닝 작업에서 실행 가능한 최대 훈련 작업 수(최대 500개)를 지정할 수 있습니다. 병렬 작업 수는 모든 훈련 정의에서 요청한 노드 수를 초과해서는 안 됩니다. 총 작업 수는 정의에서 실행할 것으로 예상되는 작업 수를 초과할 수 없습니다.

작업 설정, 훈련 작업 정의, 리소스 제한을 검토합니다. 그 다음에 하이퍼파라미터 튜닝 작업 생성을 선택합니다.

HPO 조정 작업 예제

하이퍼파라미터 최적화(HPO) 훈련 작업을 실행하려면 먼저 튜닝 중인 각 알고리즘에 대한 훈련 작업 정의를 생성합니다. 다음으로, 튜닝 작업 설정을 정의하고 튜닝 작업 리소스를 구성합니다. 마지막으로 튜닝 작업을 실행합니다.

HPO 조정 작업에 단일 교육 알고리즘이 포함된 경우 SageMaker 조정 함수는 HyperparameterTuner API를 직접 호출하고 매개 변수를 전달합니다. HPO 튜닝 작업에 여러 훈련 알고리즘이 포함된 경우 튜닝 함수는 create 함수(HyperparameterTuner API)를 직접 호출합니다. create 함수는 하나 이상의 예측기가 포함된 사전을 예상하도록 API에 지시합니다.

다음 섹션의 코드 예제는 를 사용하여 단일 교육 알고리즘 또는 다중 알고리즘을 포함하는 작업을 튜닝하는 방법을 보여줍니다. SageMaker Python SDK

훈련 작업 정의 생성

다중 훈련 알고리즘이 포함된 튜닝 작업을 생성하는 경우 튜닝 작업 구성에는 훈련 작업에 필요한 예측기, 지표 및 기타 파라미터가 포함됩니다. 따라서 먼저 훈련 작업 정의를 생성한 다음에 튜닝 작업을 구성해야 합니다.

다음 코드 예제는 내장 알고리즘 XGBoost및 을 포함하는 두 SageMaker 컨테이너를 검색하는 방법을 보여줍니다 Linear Learner. 튜닝 작업에 훈련 알고리즘이 하나만 포함된 경우 컨테이너와 예측기 중 하나를 생략합니다.

import sagemaker from sagemaker import image_uris from sagemaker.estimator import Estimator sess = sagemaker.Session() region = sess.boto_region_name role = sagemaker.get_execution_role() bucket = sess.default_bucket() prefix = "sagemaker/multi-algo-hpo" # Define the training containers and intialize the estimators xgb_container = image_uris.retrieve("xgboost", region, "latest") ll_container = image_uris.retrieve("linear-learner", region, "latest") xgb_estimator = Estimator( xgb_container, role=role, instance_count=1, instance_type="ml.m4.xlarge", output_path='s3://{}/{}/xgb_output".format(bucket, prefix)', sagemaker_session=sess, ) ll_estimator = Estimator( ll_container, role, instance_count=1, instance_type="ml.c4.xlarge", output_path="s3://{}/{}/ll_output".format(bucket, prefix), sagemaker_session=sess, ) # Set static hyperparameters ll_estimator.set_hyperparameters(predictor_type="binary_classifier") xgb_estimator.set_hyperparameters( eval_metric="auc", objective="binary:logistic", num_round=100, rate_drop=0.3, tweedie_variance_power=1.4, )

다음으로 다음 코드 예제와 같이 훈련, 검증, 테스트 데이터 세트를 지정하여 입력 데이터를 정의합니다. 이 예제에서는 다중 훈련 알고리즘을 튜닝하는 방법을 알아보겠습니다.

training_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/train".format(bucket, prefix), content_type="csv" ) validation_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/validate".format(bucket, prefix), content_type="csv" ) test_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/test".format(bucket, prefix), content_type="csv" ) train_inputs = { "estimator-1": { "train": training_data, "validation": validation_data, "test": test_data, }, "estimator-2": { "train": training_data, "validation": validation_data, "test": test_data, }, }

튜닝 알고리즘에 훈련 알고리즘이 하나만 포함된 경우 train_inputs에 예측기가 하나만 포함되어야 합니다.

훈련, 검증 및 훈련 데이터 세트에 대한 입력을 HPO 튜닝 작업에 사용하기 전에 Amazon S3 버킷에 업로드해야 합니다.

튜닝 작업용 리소스 및 설정 정의

이 섹션에서는 튜너를 초기화하고, 리소스를 정의하고, 튜닝 작업 설정을 지정하는 방법을 알아보겠습니다. 튜닝 작업에 다중 훈련 알고리즘이 포함된 경우 이러한 설정은 튜닝 작업에 포함된 모든 알고리즘에 적용됩니다. 이 섹션에는 튜너를 정의하는 두 가지 코드 예제가 있습니다. 코드 예제에서 단일 훈련 알고리즘을 최적화하는 방법과 다중 훈련 알고리즘을 튜닝하는 방법을 알아보겠습니다.

단일 훈련 알고리즘 튜닝

다음 코드 예제는 튜너를 초기화하고 하나의 SageMaker 내장 알고리즘에 대한 하이퍼파라미터 범위를 설정하는 방법을 보여줍니다. XGBoost

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter hyperparameter_ranges = { "max_depth": IntegerParameter(1, 10), "eta": ContinuousParameter(0.1, 0.3), } objective_metric_name = "validation:accuracy" tuner = HyperparameterTuner( xgb_estimator, objective_metric_name, hyperparameter_ranges, objective_type="Maximize", max_jobs=5, max_parallel_jobs=2, )

다중 훈련 알고리즘 튜닝

훈련 작업마다 다른 구성이 필요하고 이러한 구성은 사전으로 지정됩니다. 다음 코드 예제는 두 개의 SageMaker 내장 알고리즘 및 에 대한 구성을 사용하여 튜너를 초기화하는 방법을 보여줍니다. XGBoost Linear Learner 또한 코드 예제에서 튜닝 전략과 기타 작업 설정(예: 튜닝 작업용 컴퓨팅 리소스) 방법을 알아보겠습니다. 다음 코드 예제에서는 선택 사항인 metric_definitions_dict을(를) 사용합니다.

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter # Initialize your tuner tuner = HyperparameterTuner.create( estimator_dict={ "estimator-1": xgb_estimator, "estimator-2": ll_estimator, }, objective_metric_name_dict={ "estimator-1": "validation:auc", "estimator-2": "test:binary_classification_accuracy", }, hyperparameter_ranges_dict={ "estimator-1": {"eta": ContinuousParameter(0.1, 0.3)}, "estimator-2": {"learning_rate": ContinuousParameter(0.1, 0.3)}, }, metric_definitions_dict={ "estimator-1": [ {"Name": "validation:auc", "Regex": "Overall test accuracy: (.*?);"} ], "estimator-2": [ { "Name": "test:binary_classification_accuracy", "Regex": "Overall test accuracy: (.*?);", } ], }, strategy="Bayesian", max_jobs=10, max_parallel_jobs=3, )

HPO 튜닝 작업 실행

이제 훈련 입력을 HyperparameterTuner 클래스의 fit 함수에 전달하여 튜닝 작업을 실행할 수 있습니다. 다음 코드 예제에서는 이전 코드 예제에 정의된 train_inputs 파라미터를 튜너에 전달하는 방법을 알아보겠습니다.

tuner.fit(inputs=train_inputs, include_cls_metadata ={}, estimator_kwargs ={})