PyTorch를 사용한 ML 모델 학습
이 가이드에서는 PyTorch 머신러닝 프레임워크를 사용하는 학습 작업을 실행하는 방법을 설명합니다. 이 가이드에서는 PyTorch를 사용하도록 작업을 구성하는 방법이 AI Platform Training에서 지원하는 다른 ML 프레임워크를 사용하는 방법과 약간 다른 점을 설명합니다. 그런 다음 Chicago Taxi Trips 데이터 세트의 데이터를 기반으로 모델을 학습시키는 샘플 PyTorch 코드를 사용하여 학습 작업을 실행하는 방법을 보여줍니다.
또한 이 가이드에서는 GPU 및 초매개변수 조정과 함께 PyTorch를 사용하는 방법도 보여줍니다.
PyTorch 컨테이너
AI Platform Training의 런타임 버전에는 PyTorch가 종속 항목으로 포함되지 않습니다. 대신 PyTorch를 사용하는 학습 작업을 실행하려면 AI Platform Training에서 사용할 사전 빌드된 PyTorch 컨테이너를 지정합니다.
학습을 위해 사전 빌드된 컨테이너를 구성하면 커스텀 컨테이너 구성과 동일한 구문이 사용됩니다. 하지만 자체 Docker 컨테이너를 만들 필요가 없습니다. 대신 AI Platform에서 제공하는 컨테이너 이미지의 URI를 지정하고 직접 만든 Python 학습 패키지를 제공합니다.
AI Platform은 다음과 같은 사전 빌드된 PyTorch 컨테이너를 제공합니다.
컨테이너 이미지 URI | PyTorch 버전 | 지원되는 프로세서 |
---|---|---|
gcr.io/cloud-ml-public/training/pytorch-xla.1-11 |
1.11 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-11 |
1.11 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-10 |
1.10 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 |
1.10 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-9 |
1.9 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-9 |
1.9 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-7 |
1.7 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-7 |
1.7 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-6 |
1.6 | CPU, TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-6 |
1.6 | GPU |
gcr.io/cloud-ml-public/training/pytorch-cpu.1-4 |
1.4 | CPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-4 |
1.4 | GPU |
이러한 컨테이너 이미지는 Deep Learning Containers에서 파생되었으며 Deep Learning Containers가 제공하는 종속 항목을 포함합니다.
사전 빌드된 컨테이너 중 하나에서 사용할 수 없는 PyTorch 버전을 사용하려면 커스텀 컨테이너 사용 가이드를 따르세요.
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
- 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.
-
Enable the AI Platform Training & Prediction API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
샘플 코드 다운로드
다음 명령어를 실행하여 샘플 PyTorch 학습 애플리케이션을 다운로드하고 학습 애플리케이션이 있는 디렉터리로 이동합니다.
git clone --depth=1 \
https://github.com/GoogleCloudPlatform/ai-platform-samples.git
cd ai-platform-samples/training/pytorch/structured/python_package
필요에 따라 학습 코드의 구조를 검사합니다.
ls -pR
trainer/
디렉터리는 PyTorch 학습 애플리케이션을 포함하고, setup.py
는 학습 애플리케이션 패키징을 위한 구성 세부정보를 제공합니다.
Cloud Storage 버킷 만들기
Cloud Storage 버킷을 만들어 패키징된 학습 코드와 학습 작업에서 만든 모델 아티팩트를 저장합니다. 다음 명령어를 실행합니다.
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
BUCKET_NAME을 버킷에 대해 선택한 고유한 이름으로 바꿉니다. 버킷 이름 요구사항 알아보기
또는 Google Cloud 프로젝트에서 기존 Cloud Storage 버킷을 사용할 수 있습니다. 이 가이드에서는 us-central1
리전의 버킷을 사용해야 합니다.
PyTorch 모델 학습
이 가이드에서는 AI Platform Training에서 PyTorch 모델을 학습시키는 몇 가지 방법을 보여줍니다.
- CPU 프로세서가 있는 가상 머신(VM) 인스턴스
- GPU 프로세서가 있는 VM
- 초매개변수 조정 사용(CPU 프로세서가 있는 VM)
이제 방법 중 하나를 선택하고 이 가이드의 나머지 부분에 해당하는 탭의 안내를 따르세요. 그런 다음 다른 구성 중 하나로 학습을 시도하려면 이 섹션을 반복할 수 있습니다.
학습 작업 만들기 준비
학습 작업을 만들기 전에 학습 코드가 준비되었는지 확인하고 로컬 환경에서 몇 가지 구성 옵션을 지정합니다.
CPU
학습 작업을 만들 때 사용할 몇 가지 Bash 변수를 설정합니다.
BUCKET_NAME=BUCKET_NAME
JOB_NAME=getting_started_pytorch_cpu
JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
BUCKET_NAME을 이전 섹션에서 만든 Cloud Storage 버킷 이름으로 바꿉니다.
GPU
PyTorch 학습 코드가 학습 작업에서 사용하는 VM의 GPU를 인식하고 PyTorch가 텐서와 모듈을 GPU로 적절하게 이동하도록 합니다.
제공된 샘플 코드를 사용하는 경우에는 샘플 코드에 코드가 실행 중인 머신에 GPU가 있는지 감지하는 논리가 있으므로 아무 작업도 수행할 필요가 없습니다.
학습 코드를 변경하는 경우 CUDA 시맨틱스에 대한 PyTorch 가이드를 읽고 GPU가 사용되는지 확인합니다.
학습 작업을 만들 때 사용할 몇 가지 Bash 변수를 설정합니다.
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_gpu JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
BUCKET_NAME을 이전 섹션에서 만든 Cloud Storage 버킷 이름으로 바꿉니다.
초매개변수 조정
이 가이드의 샘플 코드는 테스트 손실을 최소화하기 위해 학습률과 배치 크기 매개변수를 조정합니다.
AI Platform Training에서 학습 코드가 초매개변수를 조정할 준비가 되었는지 확인합니다.
코드는 AI Platform Training이 전달하는 초매개변수 플래그를 파싱해야 합니다.
샘플 코드는
task.py
에서 이를 처리하므로 코드를 변경하지 않는 한 아무 작업도 수행할 필요가 없습니다.코드는
cloudml-hypertune
라이브러리를 사용하여 AI Platform Training에 하이퍼파라미터 조정 측정항목을 보고해야 합니다.샘플 코드는
experiment.py
에서 이를 처리하므로 코드를 변경하지 않는 한 아무 작업도 수행할 필요가 없습니다.
다음 명령어를 실행하여 초매개변수 조정 옵션을 지정하는
config.yaml
파일을 만듭니다.cat > config.yaml <<END trainingInput: hyperparameters: goal: MINIMIZE hyperparameterMetricTag: test_loss maxTrials: 2 maxParallelTrials: 2 enableTrialEarlyStopping: True params: - parameterName: learning-rate type: DOUBLE minValue: 0.0001 maxValue: 1 scaleType: UNIT_LOG_SCALE - parameterName: batch-size type: INTEGER minValue: 1 maxValue: 256 scaleType: UNIT_LINEAR_SCALE END
이 옵션은 모델 손실을 최소화하기 위해
--learning-rate
및--batch-size
초매개변수를 조정합니다.학습 작업을 만들 때 사용할 몇 가지 Bash 변수를 설정합니다.
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_hptuning JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
BUCKET_NAME을 이전 섹션에서 만든 Cloud Storage 버킷 이름으로 바꿉니다.
이러한 Bash 변수는 다음과 같은 용도로 사용됩니다.
JOB_NAME
은 AI Platform Training 작업의 식별자입니다. Google Cloud 프로젝트의 AI Platform Training 작업 간에 고유해야 합니다.JOB_DIR
은 AI Platform Training에서 학습 애플리케이션을 업로드할 정확한 위치를 결정하는 데 사용됩니다. 또한 학습 애플리케이션은JOB_DIR
을 사용하여 학습이 끝나면 모델 아티팩트를 내보낼 위치를 결정합니다.
학습 작업 만들기
다음 명령어를 실행하여 학습 작업을 만듭니다.
CPU
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
--scale-tier=BASIC \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10 \
--batch-size=100 \
--learning-rate=0.001
GPU
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 \
--scale-tier=CUSTOM \
--master-machine-type=n1-standard-8 \
--master-accelerator=type=nvidia-tesla-p100,count=1 \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10 \
--batch-size=100 \
--learning-rate=0.001
초매개변수 조정
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
--scale-tier=BASIC \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
--config=config.yaml \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10
학습 작업 가이드를 읽고 구성 플래그와 이를 사용하여 학습을 맞춤 설정하는 방법을 알아보세요.
이 명령어는 다음과 비슷한 메시지를 반환합니다.
Job [JOB_NAME] submitted successfully.
Your job is still active. You may view the status of your job with the command
$ gcloud ai-platform jobs describe JOB_NAME
or continue streaming the logs with the command
$ gcloud ai-platform jobs stream-logs JOB_NAME
jobId: JOB_NAME
state: QUEUED
다음 명령어를 사용하여 작업 상태를 모니터링할 수 있습니다.
gcloud ai-platform jobs describe ${JOB_NAME}
다음 명령어를 사용하여 작업의 학습 로그를 스트리밍할 수 있습니다.
gcloud ai-platform jobs stream-logs ${JOB_NAME}
학습 작업이 완료되면 학습된 ML 모델을 지정한 JOB_DIR
Cloud Storage 디렉터리 내의 타임스탬프가 적용된 디렉터리에 있는 model.pth
라는 파일에 저장합니다.
다음 단계
- 멀티 노드 클러스터에서 분산 PyTorch 학습을 수행하는 방법을 알아보세요.
- AI Platform Training에서 PyTorch를 사용한 학습에 TPU를 사용하는 방법을 알아보세요.
- 학습 작업의 구성을 맞춤설정하는 방법을 알아보세요.
- 사전 빌드된 컨테이너에 없는 PyTorch 버전을 사용하려면 커스텀 컨테이너 사용 방법을 알아보세요.
- PyTorch 문서에서 PyTorch를 사용하는 방법을 자세히 알아보세요.