Amazon Web Services 한국 블로그

Amazon SageMaker Autopilot – 완벽한 제어 및 가시성을 바탕으로 고품질 기계 학습 모델 자동 생성 기능 (서울 리전 포함)

Amazon SageMaker Autopilot은 높은 품질의 분류 및 회귀 기계 학습 모델을 자동으로 생성하면서도, 완벽한 제어 및 가시성을 제공하는 AutoML 서비스입니다.

1959년에 Arthur Samuel은 기계 학습을 명시적 프로그래밍 없이 학습할 수 있는 컴퓨터의 기능이라고 정의했습니다. 그러나, 현실적으로 기존 데이터 세트에서 패턴을 추출하고 이러한 패턴을 사용하여 새 데이터에 일반화되는 예측 모델을 구축할 수 있는 알고리즘을 찾는 것을 의미합니다. 그 이후로 많은 기계 학습 알고리즘이 발명되었습니다. 과학자와 엔지니어는 풍부한 선택권을 활용하여 놀라운 애플리케이션을 구축하고 있습니다.

그러나, 알고리즘이 너무 풍부해서 하나를 고르기가 어렵습니다. 특정 비즈니스 문제에서 최적의 결과를 제공할 알고리즘을 찾으려면 어떻게 해야 할까요? 기계 학습 알고리즘에는 일반적으로 학습 파라미터가 아주 많습니다. 모델의 정확성을 조금이라도 더 높이려면 이 많은 파라미터(하이퍼파라미터)를 “딱 맞게” 설정해야 합니다. 더군다나 학습을 최적화하려면 알고리즘에 사용할 데이터를 준비하고 특정 방법(기능 엔지니어링이라고 함)으로 변환해야 합니다. 또한 가장 적합한 인스턴스 유형을 선택해야 합니다.

예상하신 대로, 많은 수의 실험적인 시행착오 작업을 거쳐야 합니다. 기계 학습은 자연 과학이라는 재료를 여러 가지 방법으로 조리하는 것과 같습니다. 따라서 비전문가는 결과를 빠르게 얻기가 어렵습니다.

그러나 이 문제를 대신 해결해주는 완전관리형 서비스가 있습니다. API를 호출하기만 하면 작업이 완료됩니다. 바로 Amazon SageMaker Autopilot입니다.

Amazon SageMaker Autopilot 소개
SageMaker Studio에서 API를 한 번 호출하거나 클릭 몇 번만 하면 SageMaker Autopilot이 데이터 세트를 검사한 다음 다수의 후보를 실행하여 데이터 전처리 단계, 기계 학습 알고리즘 및 하이퍼파라미터의 최적의 조합을 찾아냅니다. 그런 다음 이 조합을 사용하여 추론 파이프라인을 학습합니다. 추론 파이프라인은 실시간 엔드포인트에 배포되거나 배치 처리용으로 배포될 수 있습니다. Amazon SageMaker와 마찬가지로 이 모든 작업은 완전관리형 인프라에서 수행됩니다.

마지막 단계로, SageMaker Autopilot은 데이터의 전처리 방식을 정확히 보여주는 Python 코드를 생성합니다. 이 코드는 SageMaker Autopilot의 작업을 이해하는 데 도움이 될 뿐 아니라 이후의 수동 튜닝에서 코드를 재사용할 수도 있습니다.

Amazon SageMaker Autopilot은 다음 기능을 지원합니다.

  • 테이블 형식의 입력 데이터와 자동 데이터 정리 및 전처리 기능
  • 선형 회귀, 바이너리 분류 및 다중 클래스 분류에 대한 자동 알고리즘 선택
  • 자동 하이퍼파라미터 최적화
  • 분산 학습
  • 자동 인스턴스 및 클러스터 크기 선택

지금부터, 얼마나 간단한지 보여드리겠습니다.

Amazon SageMaker Autopilot에서 AutoML 사용
먼저 샘플 노트북에서 시작합니다. 이 노트북은 마케팅 상품에 대한 고객의 수락 또는 거부 여부를 예측하는 바이너리 분류 모델을 구축합니다. 잠깐 들여다보면 비즈니스 문제 자체가 어렵지 않은 문제이고, 데이터 세트가 크거나 복잡하지 않다는 것을 알 수 있습니다. 그렇다고 해도 직관적이지 않은 전처리 단계가 몇 개 필요하고, 알고리즘과 파라미터를 선택해야 하는 민감한 문제가 있습니다. 이제 SageMaker Autopilot이 나설 차례입니다.

먼저, 데이터 세트의 복사본을 가져와서 처음 몇 줄을 빠르게 확인합니다.

그런 다음 전처리 없이 Amazon Simple Storage Service(S3)에 업로드합니다.

sess.upload_data(path="automl-train.csv", key_prefix=prefix + "/input")

's3://sagemaker-us-west-2-123456789012/sagemaker/DEMO-automl-dm/input/automl-train.csv'

이제, AutoML 작업을 구성합니다.

  • 데이터 세트의 위치를 설정합니다.
  • 모델을 통해 예측하려는 대상 속성을 선택합니다. 이 데모에서는 상품에 대한 고객의 수락 또는 거부를 표시하는 ‘y’ 열을 선택합니다.
  • 학습 아티팩트의 위치를 설정합니다.
input_data_config = [{
      'DataSource': {
        'S3DataSource': {
          'S3DataType': 'S3Prefix',
          'S3Uri': 's3://{}/{}/input'.format(bucket,prefix)
        }
      },
      'TargetAttributeName': 'y'
    }
  ]

output_data_config = {
    'S3OutputPath': 's3://{}/{}/output'.format(bucket,prefix)
  }

이게 다입니다! SageMaker Autopilot에는 데이터와 모델 관련 작업을 수행하면서 편리하게 사용할 수 있는 옵션이 많습니다. 여기에는 다음이 포함됩니다.

  • 선형 회귀, 바이너리 분류 또는 다중 클래스 분류 중에서 학습할 문제 유형을 설정할 수 있습니다. 잘 모르는 경우 SageMaker Autopilot에서 대상 속성의 값을 분석하여 자동으로 찾을 수 있습니다.
  • 모델을 평가할 때 특정 지표를 사용할 수 있습니다.
  • 완료 기준(예: 최대 실행 시간 등)을 정의할 수 있습니다.

SageMaker Autopilot은 데이터 크기 및 알고리즘에 따른 휴리스틱을 사용하므로 학습 클러스터의 크기를 조정할 필요가 없습니다. 멋지지 않습니까?

구성을 치워두고 CreateAutoMl API를 사용하여 작업을 실행할 수 있습니다.

auto_ml_job_name = 'automl-dm-' + timestamp_suffix
print('AutoMLJobName: ' + auto_ml_job_name)

sm.create_auto_ml_job(AutoMLJobName=auto_ml_job_name,
                      InputDataConfig=input_data_config,
                      OutputDataConfig=output_data_config,
                      RoleArn=role)

AutoMLJobName: automl-dm-28-10-17-49

작업은 다음과 같은 4개 단계로 실행됩니다(DescribeAutoMlJob API를 사용하여 확인 가능).

  1. 분할 – 데이터 세트를 학습 및 검증 세트로 분할
  2. 분석 – 데이터를 분석하여 데이터 세트에 시행해 볼 수 있는 파이프라인 추천
  3. 기능 엔지니어링 – 데이터 세트와 개별 기능에 변환 적용
  4.  파이프라인 선택 및 하이퍼파라미터 튜닝 – 가장 우수한 파이프라인을 선택하고 학습 알고리즘에 대한 최적의 하이퍼파라미터 선택

최대 수의 후보에 도달하거나 중지 조건 중 하나가 발생하면 작업이 완료됩니다. ListCandidatesForAutoMlJob API를 사용하거나 AWS 콘솔에서 모든 후보에 대한 세부 정보를 볼 수 있습니다.

candidates = sm.list_candidates_for_auto_ml_job(AutoMLJobName=auto_ml_job_name, SortBy='FinalObjectiveMetricValue')['Candidates']
index = 1
for candidate in candidates:
  print (str(index) + "  " + candidate['CandidateName'] + "  " + str(candidate['FinalAutoMLJobObjectiveMetric']['Value']))
  index += 1

1 automl-dm-28-tuning-job-1-fabb8-001-f3b6dead 0.9186699986457825
2 automl-dm-28-tuning-job-1-fabb8-004-03a1ff8a 0.918304979801178
3 automl-dm-28-tuning-job-1-fabb8-003-c443509a 0.9181839823722839
4 automl-dm-28-tuning-job-1-ed07c-006-96f31fde 0.9158779978752136
5 automl-dm-28-tuning-job-1-ed07c-004-da2d99af 0.9130859971046448
6 automl-dm-28-tuning-job-1-ed07c-005-1e90fd67 0.9130859971046448
7 automl-dm-28-tuning-job-1-ed07c-008-4350b4fa 0.9119930267333984
8 automl-dm-28-tuning-job-1-ed07c-007-dae75982 0.9119930267333984
9 automl-dm-28-tuning-job-1-ed07c-009-c512379e 0.9119930267333984
10 automl-dm-28-tuning-job-1-ed07c-010-d905669f 0.8873512744903564

이제, 최상의 시행(91.87%의 검증 정확성)에 집중합니다. 모델을 배포할 때와 같은 방법으로 이 시행을 SageMaker 엔드포인트에 배포합니다.

model_arn = sm.create_model(Containers=best_candidate['InferenceContainers'],
                            ModelName=model_name,
                            ExecutionRoleArn=role)

ep_config = sm.create_endpoint_config(EndpointConfigName = epc_name,
                                      ProductionVariants=[{'InstanceType':'ml.m5.2xlarge',
                                                           'InitialInstanceCount':1,
                                                           'ModelName':model_name,
                                                           'VariantName':variant_name}])

create_endpoint_response = sm.create_endpoint(EndpointName=ep_name,
                                              EndpointConfigName=epc_name)

몇 분 후 엔드포인트가 실행되고 이 엔드포인트를 예측에 사용할 수 있습니다. SageMaker는 쉬지 않고 일합니다!

이제, 모델이 어떻게 구축되었고 다른 후보자는 무엇인지 궁금할 것입니다. 직접 확인해 봅시다.

Amazon SageMaker Autopilot이 제공하는 완벽한 가시성 및 제어 기능
SageMaker Autopilot은 자동 생성된 노트북 2개를 포함한 학습 아티팩트를 S3에 저장합니다!

job = sm.describe_auto_ml_job(AutoMLJobName=auto_ml_job_name)
job_data_notebook = job['AutoMLJobArtifacts']['DataExplorationNotebookLocation']
job_candidate_notebook = job['AutoMLJobArtifacts']['CandidateDefinitionNotebookLocation']

print(job_data_notebook)
print(job_candidate_notebook)

s3://<PREFIX_REMOVED>/notebooks/SageMakerAutopilotCandidateDefinitionNotebook.ipynb
s3://<PREFIX_REMOVED>/notebooks/SageMakerAutopilotDataExplorationNotebook.ipynb

첫 번째 항목에는 데이터 세트에 대한 정보가 포함됩니다.

두 번째 항목에는 SageMaker Autopilot 작업에 대한 모든 세부 정보(후보, 데이터 전처리 단계 등)가 포함됩니다. 모든 코드와 함께 향후 실험에서 변경할 수 있는 ‘노브’를 확인할 수 있습니다.

보시다시피 모델의 구축 방식을 완벽하게 제어하고 볼 수 있습니다.

지금 이용 가능!
Amazon SageMaker Autopilot은 더 단순하고 편리하게 기계 학습에 접근할 수 있는 방법을 제공합니다. 기계 학습 입문자든 노련한 실무자든 다음과 같은 경로 중 하나를 사용하여 우수한 모델을 더 빠르게 구축할 수 있습니다.

  • 코드를 사용하지 않는 간편한 Amazon SageMaker Studio 경로
  • 코드를 사용하는 간편한 SageMaker Autopilot SDK 경로
  • 맞춤형 별도 노트북을 사용하는 심화 경로

이제 여러분의 차례입니다. 오늘부터 다음 리전에서 SageMaker Autopilot을 사용할 수 있습니다.

  • 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(캘리포니아 북부), 미국 서부(오레곤),
  • 캐나다(중부), 남아메리카(상파울루),
  • EU(아일랜드), EU(런던), EU(파리), EU(프랑크푸르트),
  • 중동(바레인),
  • 아시아 태평양(뭄바이), 아시아 태평양(서울), 아시아 태평양(싱가포르), 아시아 태평양(시드니), 아시아 태평양(도쿄).

Amazon SageMaker에 대한 AWS 포럼 또는 일반적인 AWS Support 연락처로 피드백을 보내주십시오.

Julien