Google Kubernetes Engine을 사용하여 컨테이너에서 학습

이 페이지에서는 Deep Learning Containers 인스턴스에서 학습 작업을 실행하고 Google Kubernetes Engine 클러스터에서 해당 컨테이너 이미지를 실행하는 방법을 보여줍니다.

시작하기 전에

시작하기 전에 다음 단계를 완료했는지 확인하세요.

  1. 로컬 Deep Learning Containers 시작하기 섹션을 시작하기 전의 설정 단계를 완료합니다.

  2. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

    결제 사용 설정 방법 알아보기

  3. Google Kubernetes Engine, Compute Engine, Container Registry API를 사용 설정합니다.

    API 사용 설정

명령줄 도구 열기

이 가이드를 따라 Cloud Shell 또는 명령줄 도구를 로컬에서 사용할 수 있습니다. Cloud Shell에는 이 튜토리얼에서 사용되는 gcloud, docker, kubectl 명령줄 도구가 사전 설치되어 있습니다. Cloud Shell을 사용하는 경우 이러한 명령줄 도구를 워크스테이션에 설치할 필요가 없습니다.

Cloud Shell

Cloud Shell을 사용하려면 다음 단계를 완료하세요.

  1. Google Cloud 콘솔로 이동합니다.

  2. 콘솔 창의 상단에서 Cloud Shell 활성화 버튼을 클릭합니다.

    Google Cloud Platform Console

    콘솔 하단의 새로운 프레임에서 Cloud Shell 세션이 열리고 명령줄 프롬프트가 표시됩니다.

    Cloud Shell 세션

로컬 명령줄

로컬 명령줄을 사용하려면 다음 단계를 완료하세요.

  1. gcloud CLI를 사용하여 Kubernetes 명령줄 도구를 설치합니다. kubectl은 Deep Learning Containers 클러스터의 클러스터 조정 시스템인 Kubernetes와 통신하는 데 사용됩니다.

    gcloud components install kubectl
    

    시작하기 단계를 완료했으면 이미 Google Cloud CLI 및 Docker가 설치되어 있습니다.

GKE 클러스터 만들기

다음 명령어를 실행하여 GKE에서 pytorch-training-cluster라는 2노드 클러스터를 만듭니다.

gcloud container clusters create pytorch-training-cluster \
    --num-nodes=2 \
    --zone=us-west1-b \
    --accelerator="type=nvidia-tesla-p100,count=1" \
    --machine-type="n1-highmem-2" \
    --scopes="gke-default,storage-rw"

이 설정에 대한 자세한 내용은 컨테이너 실행을 위한 클러스터 만들기 문서를 참조하세요.

클러스터가 생성되려면 몇 분 정도 걸릴 수 있습니다.

또는 클러스터를 만드는 대신 Google Cloud 프로젝트에서 기존 클러스터를 사용할 수 있습니다. 이 경우 다음 명령어를 실행하여 kubectl 명령줄 도구에 클러스터에 액세스하는 데 적합한 사용자 인증 정보가 있는지 확인해야 합니다.

gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER

다음으로 NVIDIA GPU 기기 드라이버를 설치합니다.

Dockerfile 만들기

컨테이너 이미지를 빌드하는 방법은 다양합니다. 이 단계에서는 trainer.py라는 Python 스크립트를 실행하기 위해 컨테이너 이미지를 빌드하는 방법을 보여줍니다.

사용할 수 있는 컨테이너 이미지 목록을 보려면 다음을 수행합니다.

gcloud container images list \
  --repository="gcr.io/deeplearning-platform-release"

컨테이너 선택으로 이동하여 원하는 컨테이너를 선택하는 것이 좋습니다.

다음 예시는 trainer.py라는 Python 스크립트를 특정 PyTorch 딥 러닝 컨테이너 유형에 배치하는 방법을 보여줍니다.

Dockerfile을 만들려면 다음 명령어를 Dockerfile 파일에 작성합니다. 이 단계에서는 model-training-code라는 디렉터리에서 머신러닝 모델을 학습시키기 위한 코드가 있고 해당 디렉터리의 기본 Python 모듈 이름이 trainer.py라고 가정합니다. 이 시나리오에서는 작업이 완료되면 컨테이너가 삭제되므로 학습 스크립트를 Cloud Storage에 출력하거나(Cloud Storage에 출력되는 스크립트의 예) 영구 스토리지에 출력하도록 구성해야 합니다.

FROM gcr.io/deeplearning-platform-release/pytorch-gpu
COPY model-training-code /train
CMD ["python", "/train/trainer.py"]

컨테이너 이미지 빌드 및 업로드

컨테이너 이미지를 빌드하여 Container Registry에 업로드하려면 다음 명령어를 사용합니다.

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export IMAGE_REPO_NAME=pytorch_custom_container
export IMAGE_TAG=$(date +%Y%m%d_%H%M%S)
export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG

docker build -f Dockerfile -t $IMAGE_URI ./

docker push $IMAGE_URI

애플리케이션 배포

다음 콘텐츠로 pod.yaml이라는 이름의 파일을 만들고 IMAGE_URI를 이미지의 URI로 바꿉니다.

apiVersion: v1
kind: Pod
metadata:
  name: gke-training-pod
spec:
  containers:
  - name: my-custom-container
    image: IMAGE_URI
    resources:
      limits:
        nvidia.com/gpu: 1

kubectl 명령줄 도구를 사용하여 다음 명령어를 실행하고 애플리케이션을 배포합니다.

kubectl apply -f ./pod.yaml

pod 상태를 추적하려면 다음 명령어를 실행합니다.

kubectl describe pod gke-training-pod