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 버전을 사용하려면 커스텀 컨테이너 사용 가이드를 따르세요.

시작하기 전에

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the AI Platform Training & Prediction API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. 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

  1. PyTorch 학습 코드가 학습 작업에서 사용하는 VM의 GPU를 인식하고 PyTorch가 텐서와 모듈을 GPU로 적절하게 이동하도록 합니다.

    제공된 샘플 코드를 사용하는 경우에는 샘플 코드에 코드가 실행 중인 머신에 GPU가 있는지 감지하는 논리가 있으므로 아무 작업도 수행할 필요가 없습니다.

    cuda_availability = torch.cuda.is_available()
    if cuda_availability:
      device = torch.device('cuda:{}'.format(torch.cuda.current_device()))
    else:
      device = 'cpu'

    학습 코드를 변경하는 경우 CUDA 시맨틱스에 대한 PyTorch 가이드를 읽고 GPU가 사용되는지 확인합니다.

  2. 학습 작업을 만들 때 사용할 몇 가지 Bash 변수를 설정합니다.

    BUCKET_NAME=BUCKET_NAME
    JOB_NAME=getting_started_pytorch_gpu
    JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
    

    BUCKET_NAME을 이전 섹션에서 만든 Cloud Storage 버킷 이름으로 바꿉니다.

초매개변수 조정

이 가이드의 샘플 코드는 테스트 손실을 최소화하기 위해 학습률과 배치 크기 매개변수를 조정합니다.

  1. AI Platform Training에서 학습 코드가 초매개변수를 조정할 준비가 되었는지 확인합니다.

  2. 다음 명령어를 실행하여 초매개변수 조정 옵션을 지정하는 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 초매개변수를 조정합니다.

  3. 학습 작업을 만들 때 사용할 몇 가지 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라는 파일에 저장합니다.

다음 단계