기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
아마존에서 XGBoost 알고리즘 사용 SageMaker
XGBoost
-
다양한 데이터 유형, 관계, 분포를 강력하게 처리합니다.
-
미세 조정할 수 있는 다양한 하이퍼파라미터.
회귀, 분류(바이너리 및 멀티클래스) 및 순위 결정 관련 문제에 XGBoost를 사용할 수 있습니다.
XGBoost 알고리즘의 새 릴리스를 다음 중 하나로 사용할 수 있습니다.
-
Amazon의 SageMaker 내장 알고리즘.
-
로컬 환경에서 교육 스크립트를 실행하기 위한 프레임워크입니다.
이 구현은 원래 버전보다 메모리 사용량이 적고, 로깅이 향상되고, 하이퍼파라미터 검증이 개선되고, 메트릭 집합이 더 많습니다. 관리형 XGBoost 환경에서 교육 스크립트를 estimator
실행하는 XGBoost를 제공합니다. XGBoost의 현재 릴리스는 오리지널 SageMaker XGBoost 버전 1.0, 1.2, 1.3, 1.5, 1.7을 기반으로 합니다.
지원되는 버전
-
프레임워크(오픈 소스) 모드: 1.0-1, 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1
-
알고리즘 모드: 1.0-1, 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1
주의
필요한 컴퓨팅 파워로 인해 SageMaker XGBoost 버전 1.7-1은 훈련 또는 추론을 위한 P2 인스턴스 제품군의 GPU 인스턴스와 호환되지 않습니다.
중요
SageMaker XGBoost 이미지 URI를 검색할 때 이미지 URI 태그에는 OR를 사용하지 마십시오. :latest
:1
사용하려는 네이티브 XGBoost 패키지 버전이 포함된 SageMaker -managed XGBoost 컨테이너를 선택하려면 다음 중 하나를 지정해야 합니다. 지원되는 버전 SageMakerXGBoost 컨테이너로 마이그레이션된 패키지 버전을 찾으려면 Docker 레지스트리 경로 및 예제 코드를 참조하십시오. 그런 다음 원하는 AWS 리전항목을 선택하고 XGBoost (알고리즘) 섹션으로 이동하십시오.
주의
XGBoost 0.90 버전은 더 이상 사용되지 않습니다. XGBoost 0.90에 대한 보안 업데이트 또는 버그 수정에 대한 지원이 중단되었습니다. XGBoost 버전을 최신 버전 중 하나로 업그레이드하는 것이 좋습니다.
참고
XGBoost v1.1은 지원되지 않습니다. SageMaker XGBoost 1.1은 테스트 입력에 LIBSVM 입력의 훈련 데이터보다 기능이 적은 경우 예측을 실행하는 기능이 손상되었습니다. 이 기능은 XGBoost v1.2에서 복원되었습니다. SageMaker XGBoost 1.2-2 이상 버전을 사용해 보십시오.
XGBoost 사용 방법 SageMaker
를 SageMaker 사용하면 XGBoost를 내장 알고리즘 또는 프레임워크로 사용할 수 있습니다. XGBoost를 프레임워크로 사용하면 자체 교육 스크립트를 사용자 정의할 수 있으므로 더 유연하고 고급 시나리오에 액세스할 수 있습니다. 다음 섹션에서는 SageMaker Python SDK와 함께 XGBoost를 사용하는 방법을 설명합니다. Amazon SageMaker Studio Classic UI에서 XGBoost를 사용하는 방법에 대한 자세한 내용은 을 참조하십시오. 다음을 사용하여 사전 학습된 모델을 학습, 배포 및 평가합니다. SageMaker JumpStart
-
XGBoost를 프레임워크로 사용
XGBoost를 프레임워크로 사용하여 추가 데이터 처리를 훈련 작업에 통합할 수 있는 사용자 지정 훈련 스크립트를 실행합니다. 다음 코드 예제에서 SageMaker Python SDK는 XGBoost API를 프레임워크로 제공합니다. 이는 다른 프레임워크 API (예: MXnet 및) 를 SageMaker 제공하는 방식과 유사하게 작동합니다. TensorFlow PyTorch
import boto3 import sagemaker from sagemaker.xgboost.estimator import XGBoost from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbosity":"1", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-framework' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework') # construct a SageMaker XGBoost estimator # specify the entry_point to your xgboost training script estimator = XGBoost(entry_point = "
your_xgboost_abalone_script.py
", framework_version='1.7-1
', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})XGBoost를 프레임워크로 사용하는 end-to-end 예제는 Amazon SageMaker XGBoost를 사용한 회귀 분석을
참조하십시오. SageMaker -
XGBoost를 내장 알고리즘으로 사용
XGBoost 기본 제공 알고리즘을 사용하여 다음 코드 예제와 같이 XGBoost 훈련 컨테이너를 빌드합니다. API를 사용하여 XGBoost 내장 알고리즘 이미지 URI를 자동으로 찾아낼 수 있습니다. SageMaker
image_uris.retrieve
Amazon SageMaker Python SDK버전 1을 사용하는 경우 get_image_uri
API를 사용하십시오.image_uris.retrieve
API가 올바른 URI를 찾도록 하려면 내장 알고리즘의 일반 파라미터를 참조하십시오. 그런 다음 내장 알고리즘 이미지 URI의 전체 목록과 사용 가능한 지역을 찾아보세요.xgboost
XGBoost 이미지 URI를 지정한 후 XGBoost 컨테이너를 사용하여 Estimator API를 사용하여 추정기를 구성하고 훈련 작업을 시작하십시오 SageMaker . 이 XGBoost 기본 제공 알고리즘 모드는 고유한 XGBoost 훈련 스크립트를 통합하지 않으며 입력 데이터 세트에서 직접 실행됩니다.
중요
SageMaker XGBoost 이미지 URI를 검색할 때 이미지 URI 태그에는 또는 를 사용하지 마십시오.
:latest
:1
사용하려는 네이티브 XGBoost 패키지 버전이 포함된 SageMaker -managed XGBoost 컨테이너를 선택하려면 다음 중 하나를 지정해야 합니다. 지원되는 버전 SageMaker XGBoost 컨테이너로 마이그레이션된 패키지 버전을 찾으려면 Docker 레지스트리 경로 및 예제 코드를 참조하십시오. 그런 다음 원하는 AWS 리전항목을 선택하고 XGBoost (알고리즘) 섹션으로 이동하십시오.import sagemaker import boto3 from sagemaker import image_uris from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-built-in-algo' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo') # this line automatically looks for the XGBoost image URI and builds an XGBoost container. # specify the repo_version depending on your preference. xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "
1.7-1
") # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', volume_size=5, # 5 GB output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})XGBoost를 기본 제공 알고리즘으로 설정하는 방법에 대한 자세한 내용은 다음 노트북 예제를 참조하세요.
XGBoost 알고리즘의 입력/출력 인터페이스
그라디언트 부스팅은 테이블형 데이터에서 작동합니다. 행은 관측치를 나타내고 1개 열은 대상 변수 또는 레이블을 나타내며, 나머지 열은 특징을 나타냅니다.
XGBoost SageMaker 구현은 학습 및 추론을 위해 다음과 같은 데이터 형식을 지원합니다.
-
text/libsvm(기본값)
-
text/csv
-
application/x-parquet
-
애플리케이션/ x-recordio-protobuf
참고
훈련 및 추론 입력과 관련하여 알아두어야 할 몇 가지 고려 사항이 있습니다.
-
성능을 높이려면 Amazon S3의 데이터가 교육 인스턴스 볼륨에 저장되는 파일 모드와 함께 XGBoost를 사용하는 것이 좋습니다.
-
열 형식 입력값을 사용한 훈련의 경우, 알고리즘은 대상 변수(label) 가 첫 번째 열이라고 가정합니다. 추론의 경우 알고리즘은 입력에 레이블 열이 없다고 추정합니다.
CSV 데이터의 경우 입력값에 헤더 레코드가 없어야 합니다.
LIBSVM 훈련의 경우 알고리즘은 레이블 열 뒤의 후속 열에 기능에 대한 0부터 시작하는 인덱스 값 쌍이 포함되어 있다고 가정합니다. 그래서 각 행은 <label> <index0>:<value0> <index1>:<value1> ... 형식을 가집니다.
-
인스턴스 유형 및 분산 훈련에 대한 자세한 내용은 XGBoost 알고리즘에 대한 EC2 인스턴스 권장 사항 섹션을 참조하세요.
CSV 교육 입력 모드의 경우 알고리즘에 사용할 수 있는 총 메모리에 교육 데이터 세트를 저장할 수 있어야 합니다. 사용 가능한 총 메모리는 다음과 같이 계산됩니다. Instance Count
* the memory available in the InstanceType
libsvm 훈련 입력 모드의 경우 요구 사항은 아니지만 권장 사항입니다.
v1.3-1 이상의 경우 XGBoost는 를 사용하여 모델을 SageMaker XGBoost 내부 바이너리 형식으로 저장합니다. Booster.save_model
이전 버전에서는 Python pickle 모듈을 사용하여 모델을 직렬화/역직렬합니다.
참고
오픈 소스 XGBoost에서 XGBoost 모델을 사용할 때는 버전에 유의하세요. SageMaker 버전 1.3-1 이상에서는 XGBoost 내부 바이너리 형식을 사용하는 반면 이전 버전에서는 Python 피클 모듈을 사용합니다.
SageMaker XGBoost v1.3-1 이상으로 학습된 모델을 오픈 소스 XGBoost에서 사용하려면
-
다음 Python 코드를 사용합니다.
import xgboost as xgb xgb_model = xgb.Booster() xgb_model.load_model(
model_file_path
) xgb_model.predict(dtest
)
이전 버전의 XGBoost에서 학습한 모델을 오픈 소스 XGBoost에서 사용하려면 SageMaker
-
다음 Python 코드를 사용합니다.
import pickle as pkl import tarfile t = tarfile.open('model.tar.gz', 'r:gz') t.extractall() model = pkl.load(open(
model_file_path
, 'rb')) # prediction with test data pred = model.predict(dtest
)
인스턴스 가중치 지원을 사용하는 라벨링된 데이터 포인트의 중요도를 구분하려면
-
SageMaker XGBoost를 사용하면 고객이 각 인스턴스에 가중치 값을 할당하여 레이블이 지정된 데이터 포인트의 중요성을 차별화할 수 있습니다. text/libsvm 입력의 경우 고객은 레이블 뒤에 가중치 값을 연결하여 데이터 인스턴스에 가중치 값을 할당할 수 있습니다. 예를 들어
label:weight idx_0:val_0 idx_1:val_1...
입니다. text/csv 입력의 경우 고객은 파라미터에서csv_weights
플래그를 설정하고 레이블 다음 열에 가중치 값을 연결해야 합니다. 예:label,weight,val_0,val_1,...
).
XGBoost 알고리즘에 대한 EC2 인스턴스 권장 사항
SageMaker XGBoost는 CPU 및 GPU 트레이닝 및 추론을 지원합니다. 인스턴스 권장 사항은 훈련 및 추론 요구 사항과 XGBoost 알고리즘 버전에 따라 달라집니다. 자세한 내용은 다음 옵션 중 하나를 참조하세요.
학습
SageMaker XGBoost 알고리즘은 CPU 및 GPU 트레이닝을 지원합니다.
CPU 훈련
SageMaker XGBoost 1.0-1 이전 버전은 CPU를 사용해서만 학습합니다. 메모리 바운드(컴퓨팅 파운드와는 반대) 알고리즘입니다. 따라서 컴퓨팅 최적화 인스턴스(예: C4)보다 범용 컴퓨팅 인스턴스(예: M5)를 선택하는 것이 좋습니다. 또한 훈련 데이터를 보유하기 위해 선택한 인스턴스에 총 메모리가 충분한 것이 좋습니다. 기본 메모리에 맞지 않는 데이터를 처리하기 위한 디스크 공간 사용을 지원합니다. 이는 libsvm 입력 모드에서 사용할 수 있는 out-of-core 기능의 결과입니다. 그렇더라도 캐시 파일을 디스크에 쓰면 알고리즘 처리 시간이 느려집니다.
GPU 훈련
SageMaker XGBoost 버전 1.2-2 이상은 GPU 교육을 지원합니다. 높은 인스턴스당 비용에도 불구하고 GPU는 더욱 빠르게 교육하여 더욱 효율적입니다.
SageMaker XGBoost 버전 1.2-2 이상은 P2, P3, G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다.
SageMaker XGBoost 버전 1.7-1 이상은 P3, G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다. 연산 용량 요구 사항으로 인해 버전 1.7-1 이상은 P2 인스턴스 패밀리를 지원하지 않는다는 점에 유의하세요.
GPU 트레이닝을 활용하려면:
-
인스턴스 유형을 GPU 인스턴스 중 하나로 지정합니다 (예: P3).
-
기존 XGBoost
gpu_hist
스크립트에서tree_method
하이퍼파라미터를 로 설정합니다.
분산 훈련
SageMaker XGBoost는 분산 학습을 위한 CPU 및 GPU 인스턴스를 지원합니다.
분산 CPU 훈련
여러 인스턴스에서 CPU 훈련을 실행하려면 예측기의 instance_count
파라미터를 1보다 큰 값으로 설정하세요. 입력 데이터를 총 인스턴스 수로 나누어야 합니다.
입력 데이터를 여러 인스턴스로 나눕니다.
다음 단계를 사용하여 입력 데이터를 나눕니다.
-
입력 데이터를 작은 파일로 나눕니다. 파일 수는 적어도 분산 훈련에 사용되는 인스턴스 수와 같아야 합니다. 하나의 큰 파일이 아닌 작은 파일을 여러 개 사용하면 훈련 작업의 데이터 다운로드 시간도 줄어듭니다.
-
를 생성할 때 배포 TrainingInput
파라미터를 로 설정하십시오. ShardedByS3Key
이를 통해 훈련 작업에 지정된 인스턴스가 n개 있는 경우 각 인스턴스는 S3에 있는 파일 수의 약 1/n을 얻습니다.
분산 GPU 훈련
단일 GPU 또는 다중 GPU 인스턴스에서 분산 훈련을 사용할 수 있습니다.
단일 GPU 인스턴스를 사용한 분산 훈련
SageMaker XGBoost 버전 1.2-2부터 1.3-1까지는 단일 GPU 인스턴스 교육만 지원합니다. 즉, 다중 GPU 인스턴스를 선택하더라도 인스턴스당 하나의 GPU만 사용된다는 의미입니다.
다음과 같은 경우 입력 데이터를 총 인스턴스 수로 나누어야 합니다.
-
XGBoost 버전 1.2-2에서 1.3-1을 사용합니다.
-
다중 GPU 인스턴스를 사용할 필요는 없습니다.
자세한 정보는 입력 데이터를 여러 인스턴스로 나눕니다.을 참조하세요.
참고
SageMaker XGBoost 버전 1.2-2부터 1.3-1까지는 다중 GPU 인스턴스를 선택하더라도 인스턴스당 하나의 GPU만 사용합니다.
다중 GPU 인스턴스를 사용한 분산 훈련
버전 1.5-1부터 XGBoost는 Dask를 사용한 분산 GPU 교육을 제공합니다. SageMaker
다음 단계를 사용하여 Dask를 훈련시킵니다.
에서
distribution
파라미터를 생략하거나 로 설정하십시오. TrainingInputFullyReplicated
하이퍼파라미터를 정의할 때는
use_dask_gpu_training
을"true"
값으로 설정하세요.
중요
Dask를 사용한 분산 훈련은 CSV 및 Parquet 입력 형식만 지원합니다. LIBSVM 또는 PROTOBUF와 같은 다른 데이터 형식을 사용하는 경우 훈련 작업이 실패합니다.
Parquet 데이터의 경우, 열 이름을 문자열로 저장해야 합니다. 다른 데이터 유형의 이름을 가진 열은 로드되지 않습니다.
중요
Dask를 사용한 분산 훈련은 파이프 모드를 지원하지 않습니다. 파이프 모드를 지정하면 훈련 작업이 실패합니다.
Dask를 사용하여 SageMaker XGBoost를 훈련할 때는 몇 가지 고려해야 할 사항이 있습니다. 데이터를 작은 파일로 분할해야 합니다. Dask는 각 Parquet 파일을 파티션으로 읽습니다. 모든 GPU에는 Dask 워커가 있습니다. 따라서 파일 수는 총 GPU 수 (인스턴스 수* 인스턴스당 GPU 수) 보다 커야 합니다. 파일 수가 너무 많으면 성능이 저하될 수도 있습니다. 자세한 내용은 Dask 모범 사례
출력의 변화
지정된 tree_method
하이퍼파라미터에 따라 XGBoost 훈련에 사용되는 알고리즘이 결정됩니다. 트리 메소드 approx
, hist
및 gpu_hist
는 모두 근사 메소드이며 분위수 계산에는 스케칭을 사용합니다. 자세한 내용은 XGBoost 설명서의 트리 메서드
Inference
SageMaker XGBoost는 추론을 위한 CPU 및 GPU 인스턴스를 지원합니다. 추론을 위한 인스턴스 유형에 대한 자세한 내용은 Amazon SageMaker ML 인스턴스 유형을
XGBoost 샘플 노트북
다음 표에는 Amazon SageMaker XGBoost 알고리즘의 다양한 사용 사례를 다루는 다양한 샘플 노트북이 요약되어 있습니다.
노트북 제목 | 설명 |
---|---|
이 노트북은 Amazon SageMaker Batch Transform을 사용하여 사용자 지정 XGBoost 컨테이너를 구축하는 방법을 보여줍니다. |
|
이 노트북은 Parquet의 Abalone 데이터 세트를 사용하여 XGBoost 모델을 훈련시키는 방법을 보여줍니다. |
|
이 노트북은 MNIST 데이터 세트를 사용하여 멀티클래스 분류 모델을 훈련시키고 호스팅하는 방법을 보여줍니다. |
|
이 노트북은 불만이 있는 고객을 식별하기 위해 모바일 고객 이탈을 예측하도록 모델을 훈련시키는 방법을 보여줍니다. |
|
이 노트북은 XGBoost 컨테이너를 사용한 훈련에 스팟 인스턴스를 사용하는 방법을 보여줍니다. |
|
이 노트북은 Amazon SageMaker Debugger를 사용하여 교육 작업을 모니터링하여 내장된 디버깅 규칙을 사용하여 불일치를 감지하는 방법을 보여줍니다. |
예제를 실행하는 데 사용할 수 있는 Jupyter 노트북 인스턴스를 생성하고 액세스하는 방법에 대한 지침은 을 참조하십시오. SageMaker 아마존 SageMaker 노트북 인스턴스 Notebook 인스턴스를 만들고 연 후 SageMakerExamples 탭을 선택하면 모든 샘플 목록이 표시됩니다. SageMaker 선형 학습 알고리즘을 사용하는 주제 모델링 예제 노트북은 Introduction to Amazon algorithms(Amazon 알고리즘 소개) 섹션에 있습니다. 노트북을 열려면 사용 탭을 선택한 후 사본 생성을 선택합니다.
Amazon SageMaker XGBoost 알고리즘에 대한 자세한 내용은 다음 블로그 게시물을 참조하십시오.