scikit-learn 및 XGBoost를 사용하여 ML 모델 학습
AI Platform 학습 서비스는 모델 학습을 위해 클라우드의 컴퓨팅 리소스를 관리합니다. 이 페이지에서는 AI Platform Training에서 scikit-learn 및 XGBoost를 사용하여 모델을 학습시키는 과정을 설명합니다.
개요
이 가이드에서는 Iris 데이터세트를 사용하여 꽃의 종류를 예측하는 간단한 모델을 학습시킵니다. Cloud Storage에서 데이터를 다운로드하고 저장된 모델 파일을 Cloud Storage에 업로드하도록 모델 학습 코드를 조정한 후 학습 애플리케이션 패키지를 만들어 AI Platform Training에서 학습을 실행합니다.
AI Platform Training에서 모델을 학습시키는 방법
초기 설정 프로세스를 완료하면 다음 3가지 단계로 AI Platform Training에서 모델을 학습시킬 수 있습니다.
- Python 학습 모듈 만들기
- AI Platform Training이 사용할 수 있도록 Cloud Storage에서 데이터를 다운로드하는 코드 추가
- AI Platform Training에서 모델 학습이 완료된 후 모델을 내보내고 Cloud Storage에 저장하는 코드 추가
- 학습 애플리케이션 패키지 준비
- 학습 작업 제출
초기 설정 프로세스에는 Google Cloud 프로젝트 만들기, 결제 및 API 사용 설정, AI Platform Training에 사용할 Cloud Storage 버킷 설정, scikit-learn 또는 XGBoost 로컬에 설치가 포함됩니다. 이미 모든 항목을 설치했으면 모델 학습 코드 만들기로 건너뜁니다.
시작하기 전에
다음 단계에 따라 GCP 계정을 설정하고 AI Platform Training API를 활성화한 후 Cloud SDK를 설치하여 활성화합니다.
GCP 프로젝트 설정
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
환경 설정
아래 옵션 중 하나를 선택하여 macOS에서 로컬로 또는 Cloud Shell의 원격 환경에서 환경을 설정합니다.
macOS 사용자는 아래의 MACOS 탭을 사용하여 환경을 설정하는 것이 좋습니다. CLOUD SHELL 탭에 표시된 Cloud Shell은 macOS, Linux, Windows에서 사용할 수 있습니다. Cloud Shell을 이용하면 AI Platform Training을 빠르게 사용해 볼 수 있지만 지속적인 개발 작업에는 적합하지 않습니다.
macOS
-
Python 설치 확인
Python이 설치되어 있는지 확인하고 필요하면 설치합니다.python -V
-
pip
설치 확인
pip
는 현재 버전의 Python에 포함되어 있는 Python의 패키지 관리자입니다.pip --version
을 실행하여pip
가 이미 설치되어 있는지 확인합니다. 설치되어 있지 않으면pip
설치 방법을 참조하세요.다음 명령어를 사용하여
pip
를 업그레이드할 수 있습니다.pip install -U pip
자세한 내용은 pip 문서를 참조하세요.
-
virtualenv
설치
virtualenv
는 격리된 Python 환경을 만드는 도구입니다.virtualenv --version
을 실행하여virtualenv
가 이미 설치되어 있는지 확인합니다. 설치되어 있지 않으면virtualenv
를 설치합니다.pip install --user --upgrade virtualenv
이 가이드용으로 격리된 개발 환경을 만들려면
virtualenv
에서 새 가상 환경을 만듭니다. 예를 들어 다음 명령어는aip-env
라는 환경을 활성화합니다.virtualenv aip-env source aip-env/bin/activate
-
이 튜토리얼에서는 나머지 명령어를 가상 환경 내에서 실행합니다.
virtualenv
사용에 대한 자세한 내용을 알아보세요.virtualenv
를 종료하려면deactivate
를 실행합니다.
Cloud Shell
-
Google Cloud 콘솔을 엽니다.
-
콘솔 창의 상단에서 Google Cloud Shell 활성화 버튼을 클릭합니다.
콘솔 하단의 새로운 프레임에 Cloud Shell 세션이 열리고 명령줄 프롬프트가 표시됩니다. 셸 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.
Cloud Shell 세션을 사용할 수 있습니다.
-
선택한 프로젝트를 사용하려면
gcloud
명령줄 도구를 구성합니다.gcloud config set project [selected-project-id]
[selected-project-id]
는 프로젝트 ID입니다. (괄호 생략)
프레임워크 설치
macOS
가상 환경 내에서 다음 명령어를 실행하여 AI Platform Training 런타임 버전 2.11에 사용되는 scikit-learn, XGBoost, pandas의 버전을 설치합니다.
(aip-env)$ pip install scikit-learn==1.0.2 xgboost==1.6.2 pandas==1.3.5
앞의 명령어에 버전 번호를 제공하면 가상 환경의 종속 항목과 런타임 버전의 종속 항목을 일치시킬 수 있습니다. 이렇게 하면 AI Platform Training에서 코드를 실행할 때 예기치 못한 동작을 방지하는 데 도움이 됩니다.
설치 옵션 및 문제 해결 정보에 대한 자세한 내용은 각 프레임워크의 설치 안내를 참조하세요.
Cloud Shell
다음 명령어를 실행하여 scikit-learn, XGBoost, pandas를 설치합니다.
pip install --user scikit-learn xgboost pandas
설치 옵션 및 문제 해결 정보에 대한 자세한 내용은 각 프레임워크의 설치 안내를 참조하세요.
Cloud Storage 버킷 설정
학습 코드 및 종속 항목을 저장하려면 Cloud Storage 버킷이 필요합니다. 이 가이드를 쉽게 따라하려면 AI Platform Training에 사용하는 것과 동일한 프로젝트에서 전용 Cloud Storage 버킷을 사용하는 것이 좋습니다.
다른 프로젝트에서 버킷을 사용 중인 경우 AI Platform Training 서비스 계정이 Cloud Storage에 있는 학습 코드 및 종속 항목에 액세스할 수 있는지 확인해야 합니다. 적절한 권한이 없으면 학습 작업이 실패합니다. 스토리지에 대한 권한을 부여하는 방법을 참조하세요.
학습 작업 실행하는 데 사용 중인 리전의 버킷을 사용하거나 설정해야 합니다. AI Platform Training 서비스에 사용 가능한 리전을 참조하세요.
이 섹션에서는 새 버킷을 만드는 방법을 설명합니다. 기존 버킷을 사용할 수도 있지만 해당 버킷이 AI Platform 작업을 실행하려는 리전과 동일한 리전에 있어야 합니다. 또한 해당 버킷이 AI Platform Training을 실행하는 데 사용 중인 프로젝트에 속하지 않는 경우 명시적으로 AI Platform Training 서비스 계정에 대한 액세스 권한을 부여해야 합니다.
-
새 버킷의 이름을 지정합니다. 이름은 Cloud Storage의 모든 버킷에서 중복되지 않아야 합니다.
BUCKET_NAME="YOUR_BUCKET_NAME"
예를 들어 프로젝트 이름에
-aiplatform
을 추가하여 사용합니다.PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
만든 버킷 이름을 확인합니다.
echo $BUCKET_NAME
-
버킷 리전을 선택하고
REGION
환경 변수를 설정합니다.AI Platform Training 작업을 실행할 리전과 동일한 리전을 사용합니다. AI Platform Training 서비스에 사용 가능한 리전을 참조하세요.
예를 들어 다음 코드는
REGION
을 생성하고us-central1
로 설정합니다.REGION=us-central1
-
새 버킷을 만듭니다.
gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION
Python 학습 모듈 만들기
모델을 학습시키는 코드를 포함하는 iris_training.py
파일을 만듭니다.
이 섹션에서는 각 학습 코드의 역할을 설명합니다.
- 설치 및 가져오기
- Cloud Storage에서 데이터 다운로드
- pandas에 데이터 로드
- 모델 학습 및 저장
- 저장된 모델 파일을 Cloud Storage에 업로드
편의를 위해 iris_training.py
의 전체 코드가 GitHub에서 호스팅되므로 이 가이드에서 사용할 수 있습니다.
설정
Python, scikit-learn 또는 XGBoost에서 다음 라이브러리를 가져옵니다. Cloud Storage 버킷의 이름에 대한 변수를 설정합니다.
scikit-learn
XGBoost
Cloud Storage에서 데이터 다운로드
일반적인 개발 프로세스에서는 데이터를 AI Platform Training이 액세스할 수 있도록 Cloud Storage에 업로드합니다. 이 가이드의 데이터는 공개 Cloud Storage 버킷에서 호스팅됩니다.
gs://cloud-samples-data/ai-platform/iris/
다음 코드는 gsutil
을 사용하여 데이터를 다운로드한 다음 데이터를 gsutil
에서 stdout
으로 전환합니다.
scikit-learn
XGBoost
pandas에 데이터 로드
scikit-learn 또는 XGBoost를 사용한 학습을 위해 pandas를 사용하여 데이터를 NumPy 배열에 로드합니다.
scikit-learn
XGBoost
모델 학습 및 저장
AI Platform 학습을 실행할 학습 모듈을 만듭니다. 이 예시에서 학습 모듈은 Iris 학습 데이터(iris_data
및 iris_target
)에서 모델을 학습시키고 학습된 모델을 파일로 내보내서 저장합니다. 학습 후에 AI Platform Prediction을 사용하여 온라인 예측을 수행하려면 모델 파일 내보내기에 사용할 라이브러리에 따라 모델 파일 이름을 지정해야 합니다. 모델 파일의 이름 지정 요구사항에 대해 자세히 알아보세요.
scikit-learn
모델 지속성에 대한 scikit-learn 예시를 따라 다음과 같이 모델을 학습시키고 내보낼 수 있습니다.
다음과 같이 pickle 라이브러리를 사용하여 모델을 내보낼 수도 있습니다.
import pickle
with open('model.pkl', 'wb') as model_file:
pickle.dump(classifier, model_file)
XGBoost
Booster 객체의 '모델 저장' 메서드를 사용하여 모델을 내보낼 수 있습니다.
다음과 같이 pickle 라이브러리를 사용하여 모델을 내보낼 수도 있습니다.
import pickle
with open('model.pkl', 'wb') as model_file:
pickle.dump(bst, model_file)
모델 파일 이름 지정 요구사항
온라인 예측의 경우 Cloud Storage에 업로드할 저장된 모델 파일의 이름을 사용한 라이브러리에 따라 model.pkl
, model.joblib
, model.bst
중 하나로 지정해야 합니다. 이렇게 하면 AI Platform Prediction은 모델을 가져올 때 내보내기에 사용한 것과 동일한 패턴으로 모델을 재구성합니다.
커스텀 예측 루틴(베타)을 만드는 경우에는 이 요구사항이 적용되지 않습니다.
scikit-learn
모델 내보내기에 사용된 라이브러리 | 올바른 모델 이름 |
---|---|
pickle |
model.pkl |
sklearn.externals.joblib |
model.joblib |
XGBoost
모델 내보내기에 사용된 라이브러리 | 올바른 모델 이름 |
---|---|
pickle |
model.pkl |
joblib |
model.joblib |
xgboost.Booster |
model.bst |
이후의 모델 반복을 대비하여 새 모델에 각각 전용 디렉토리가 있도록 Cloud Storage 버킷을 구성하세요.
저장된 모델을 Cloud Storage에 업로드
AI Platform Training을 실행하는 데 사용하는 Google Cloud 프로젝트 외부에 있는 Cloud Storage 버킷을 사용할 경우 이 버킷에 대한 액세스 권한이 AI Platform Training에 있는지 확인해야 합니다.
scikit-learn
XGBoost
학습 애플리케이션 패키지 만들기
위의 스니펫에서 생성된 iris_training.py
를 사용하여 iris_training.py
를 기본 모듈로 포함하는 학습 애플리케이션 패키지를 만듭니다.
학습 애플리케이션 패키지를 만드는 가장 쉽고 권장되는 방법은 학습 작업을 제출할 때 gcloud
를 사용하여 애플리케이션을 패키징하고 업로드하는 것입니다. 이 방법을 사용하려면 파일 두 개로 구성된 아주 단순한 파일 구조를 만들어야 합니다.
scikit-learn
이 가이드에서는 학습 애플리케이션 패키지의 파일 구조가 다음과 비슷하게 표시됩니다.
iris_sklearn_trainer/
__init__.py
iris_training.py
명령줄에서 디렉터리를 로컬에 만듭니다.
mkdir iris_sklearn_trainer
이름이
__init__.py
인 빈 파일을 만듭니다.touch iris_sklearn_trainer/__init__.py
학습 코드를
iris_training.py
로 저장하고, 그 파일을iris_sklearn_trainer
디렉터리 내에 저장합니다. 또는cURL
을 사용하여 GitHub에서 파일을 다운로드하고 저장합니다.curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/sklearn/iris_training.py > iris_sklearn_trainer/iris_training.py
GitHub에서 전체 소스 코드를 확인합니다.
학습 애플리케이션 패키지가 올바르게 설정되었는지 확인합니다.
ls ./iris_sklearn_trainer __init__.py iris_training.py
XGBoost
이 가이드에서는 학습 애플리케이션 패키지의 파일 구조가 다음과 비슷하게 표시됩니다.
iris_xgboost_trainer/
__init__.py
iris_training.py
명령줄에서 디렉터리를 로컬에 만듭니다.
mkdir iris_xgboost_trainer
이름이
__init__.py
인 빈 파일을 만듭니다.touch iris_xgboost_trainer/__init__.py
학습 코드를
iris_training.py
로 저장하고, 그 파일을iris_xgboost_trainer
디렉터리 내에 저장합니다. 또는cURL
을 사용하여 GitHub에서 파일을 다운로드하고 저장합니다.curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/xgboost/iris_training.py > iris_xgboost_trainer/iris_training.py
GitHub에서 전체 소스 코드를 확인합니다.
학습 애플리케이션 패키지가 올바르게 설정되었는지 확인합니다.
ls ./iris_xgboost_trainer __init__.py iris_training.py
학습 애플리케이션을 패키지화하는 방법에 대해 자세히 알아보세요.
로컬에서 트레이너 실행
gcloud ai-platform local train
명령어를 사용하면 교육 애플리케이션을 로컬에서 테스트할 수 있습니다. 이 단계는 선택사항이지만 디버깅에 유용합니다.
scikit-learn
명령줄에서 [VALUES-IN-BRACKETS]
를 적절한 값으로 바꾸어 다음 환경 변수를 설정합니다.
TRAINING_PACKAGE_PATH="./iris_sklearn_trainer/"
MAIN_TRAINER_MODULE="iris_sklearn_trainer.iris_training"
로컬에서 학습 작업 테스트
gcloud ai-platform local train \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE
XGBoost
명령줄에서 [VALUES-IN-BRACKETS]
를 적절한 값으로 바꾸어 다음 환경 변수를 설정합니다.
TRAINING_PACKAGE_PATH="./iris_xgboost_trainer/"
MAIN_TRAINER_MODULE="iris_xgboost_trainer.iris_training"
로컬에서 학습 작업 테스트
gcloud ai-platform local train \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE
학습 작업 제출
이 섹션에서는 gcloud ai-platform jobs submit training
을 사용하여 학습 작업을 제출합니다.
학습 작업 매개변수 지정
학습 작업 요청의 각 매개변수에 다음과 같은 환경 변수를 설정합니다.
BUCKET_NAME
- Cloud Storage 버킷 이름입니다.JOB_NAME
- 작업에 사용할 이름입니다(대소문자가 혼합된 문자, 숫자, 밑줄만 사용, 문자로 시작). 예를 들면iris_scikit_learn_$(date +"%Y%m%d_%H%M%S")
또는iris_xgboost_$(date +"%Y%m%d_%H%M%S")
입니다.JOB_DIR
- 학습 작업의 출력 파일에 사용할 Cloud Storage 위치의 경로입니다. 예를 들면gs://$BUCKET_NAME/scikit_learn_job_dir
또는gs://$BUCKET_NAME/xgboost_job_dir
입니다.TRAINING_PACKAGE_PATH
- 학습 애플리케이션의 루트 디렉터리에 대한 로컬 경로입니다. 예를 들면./iris_sklearn_trainer/
또는./iris_xgboost_trainer/
입니다.MAIN_TRAINER_MODULE
- AI Platform Training 서비스가 실행할 파일을 지정합니다. 형식은[YOUR_FOLDER_NAME.YOUR_PYTHON_FILE_NAME]
입니다. 예를 들면iris_sklearn_trainer.iris_training
또는iris_xgboost_trainer.iris_training
입니다.REGION
- 학습 작업을 실행하는 데 사용할 리전의 이름입니다. AI Platform Training 서비스에 사용 가능한 리전 중 하나를 사용합니다. Cloud Storage 버킷이 동일한 리전에 있는지 확인합니다.RUNTIME_VERSION
- scikit-learn을 지원하는 AI Platform Training 런타임 버전을 지정해야 합니다. 이 예시에서는2.11
입니다.PYTHON_VERSION
- 작업에 사용할 Python 버전입니다. 이 가이드에서는 Python 3.7을 지정합니다.SCALE_TIER
- 학습 작업을 실행할 머신의 사전 정의된 클러스터 사양입니다. 이 경우는BASIC
입니다. 커스텀 확장 등급을 사용하여 고유한 학습용 클러스터 구성을 정의할 수도 있습니다.
편의를 위해 아래에 이 가이드의 환경 변수가 있습니다.
scikit-learn
[VALUES-IN-BRACKETS]
를 적절한 값으로 바꿉니다.
BUCKET_NAME=[YOUR-BUCKET-NAME]
JOB_NAME="iris_scikit_learn_$(date +"%Y%m%d_%H%M%S")"
JOB_DIR=gs://$BUCKET_NAME/scikit_learn_job_dir
TRAINING_PACKAGE_PATH="./iris_sklearn_trainer/"
MAIN_TRAINER_MODULE="iris_sklearn_trainer.iris_training"
REGION=us-central1
RUNTIME_VERSION=2.11
PYTHON_VERSION=3.7
SCALE_TIER=BASIC
XGBoost
[VALUES-IN-BRACKETS]
를 적절한 값으로 바꿉니다.
BUCKET_NAME=[YOUR-BUCKET-NAME]
JOB_NAME="iris_xgboost_$(date +"%Y%m%d_%H%M%S")"
JOB_DIR=gs://$BUCKET_NAME/xgboost_job_dir
TRAINING_PACKAGE_PATH="./iris_xgboost_trainer/"
MAIN_TRAINER_MODULE="iris_xgboost_trainer.iris_training"
REGION=us-central1
RUNTIME_VERSION=2.11
PYTHON_VERSION=3.7
SCALE_TIER=BASIC
학습 작업 요청을 제출합니다.
gcloud ai-platform jobs submit training $JOB_NAME \
--job-dir $JOB_DIR \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE \
--region $REGION \
--runtime-version=$RUNTIME_VERSION \
--python-version=$PYTHON_VERSION \
--scale-tier $SCALE_TIER
다음과 비슷한 출력이 표시됩니다.
Job [iris_scikit_learn_[DATE]_[TIME]] submitted successfully.
Your job is still active. You may view the status of your job with the command
$ gcloud ai-platform jobs describe iris_scikit_learn_[DATE]_[TIME]
or continue streaming the logs with the command
$ gcloud ai-platform jobs stream-logs iris_scikit_learn_[DATE]_[TIME]
jobId: iris_scikit_learn_[DATE]_[TIME]
state: QUEUED
학습 로그 보기(선택사항)
AI Platform Training은 모든 stdout
및 stderr
스트림과 로깅 구문을 캡처합니다. 이러한 로그는 Logging에 저장되며 실행 중 및 실행 후에 볼 수 있습니다.
학습 작업에 대한 로그를 보려면 다음 단계를 따르세요.
콘솔
AI Platform Training 작업 페이지를 엽니다.
검사할 학습 작업 이름을 선택합니다. 이렇게 하면 선택한 학습 작업의 작업 세부정보 페이지로 이동합니다.
작업 세부정보에서 로그 보기 링크를 선택합니다. 이렇게 하면 선택한 학습 작업의 로그를 검색 및 필터링할 수 있는 로깅 Logging 페이지로 이동합니다.
gcloud
gcloud ai-platform jobs stream-logs
를 사용하여 터미널에서 로그를 확인할 수 있습니다.
gcloud ai-platform jobs stream-logs $JOB_NAME
Cloud Storage에서 모델 파일 확인
대상 모델 폴더의 콘텐츠를 보고 저장된 모델 파일이 Cloud Storage에 업로드되었는지 확인합니다.
gcloud storage ls gs://$BUCKET_NAME/iris_*
출력 예시:
gs://bucket-name/iris_20180518_123815/:
gs://bucket-name/iris_20180518_123815/model.joblib
다음 단계
- AI Platform 학습에서 scikit-learn을 사용하여 온라인 예측 수행
- 커스텀 확장 등급을 사용하여 고유한 학습용 클러스터 구성을 정의하는 방법 알아보기