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

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

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

이 가이드에서는 하나 이상의 알고리즘에 대해 새 하이퍼파라미터 최적화(HPO) 튜닝 작업을 생성하는 방법을 보여줍니다. HPO 작업을 생성하려면 조정 작업에 대한 설정을 정의하고 조정 중인 각 알고리즘에 대한 훈련 작업 정의를 생성합니다. 다음으로 리소스를 구성하고 튜닝 작업을 생성합니다. 다음 단원에는 각 단계를 완료하는 방법에 대한 세부 정보가 있습니다. 를 사용하여 여러 알고리즘을 조정하는 방법의 예를 제공합니다. SageMakerSDK 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

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

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

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

알고리즘 및 파라미터 구성

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

  • 튜닝 작업 이름

  • 서비스 액세스 권한

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

  • 목표 지표

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

명칭

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

권한

Amazon에는 사용자를 대신하여 다른 서비스를 호출할 수 있는 권한이 SageMaker 필요합니다. AWS Identity and Access Management (IAM) 역할을 선택하거나 AmazonSageMakerFullAccess IAM 정책이 연결된 역할을 AWS 생성하도록 합니다.

선택적 보안 설정

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

가상 프라이빗 클라우드()를 사용하도록 선택할 수도 있습니다VPC.

참고

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

알고리즘 옵션

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

  • 내장 알고리즘을 선택하면 Amazon Elastic Container Registry(AmazonECR) 이미지 정보가 미리 채워집니다.

  • 자체 컨테이너를 선택하는 경우 (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 튜닝 작업에 여러 훈련 알고리즘이 포함된 경우 튜닝 함수는 HyperparameterTunercreate 함수를 호출합니다API. create 함수는 에 하나 이상의 추정기가 포함된 사전을 예상API하도록 지시합니다.

다음 섹션에서 코드 예제는 를 사용하여 단일 훈련 알고리즘 또는 여러 알고리즘이 포함된 작업을 조정하는 방법을 보여줍니다. SageMaker Python SDK.

훈련 작업 정의 생성

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

다음 코드 예제는 기본 제공 알고리즘이 포함된 SageMaker 두 컨테이너를 검색하는 방법을 보여줍니다. XGBoostLinear 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 ={})