GKE에서 Cloud TPU 애플리케이션 실행

이 가이드에서는 다음을 수행하는 방법을 설명합니다.

자세한 단계별 안내를 원하면 Cloud TPU와 GKE를 사용하여 TensorFlow ResNet-50 모델을 학습시키는 방법을 보여주는 가이드를 참조하세요.

GKE에서 Cloud TPU 애플리케이션을 실행할 때의 이점

Cloud TPU 학습 애플리케이션은 GKE Pod 내의 GKE 컨테이너에서 실행되도록 구성할 수 있습니다. 이 경우 다음과 같은 이점이 있습니다.

  • 손쉬운 설정과 관리: Cloud TPU를 사용하는 경우에는 워크로드를 실행할 Compute Engine VM과 Cloud TPU용 CIDR (Classless Inter-Domain Routing) 블록이 필요합니다. GKE는 VM 및 CIDR 블록을 설정하고 VM을 관리합니다.

  • 최적화된 비용: 작업이 활성 상태인 동안 TPU에 대해서만 비용을 지불합니다. GKE는 작업의 리소스 요구사항에 따라 자동으로 TPU를 생성하고 삭제합니다.

  • 유연한 사용: 다른 하드웨어 가속기(CPU, GPU 또는 TPU)를 요청하려면 포드 사양에서 한 줄만 변경하면 됩니다.

    kind: Pod
    spec:
      containers:
      - name: example-container
        resources:
          limits:
            cloud-tpus.google.com/v2: 8
            # See the line above for TPU, or below for CPU / GPU.
            # cpu: 2
            # nvidia.com/gpu: 1
    
  • 확장성: GKE는 수백 개의 GKE Pod와 Cloud TPU 노드로 쉽게 확장할 수 있는 API(JobDeployment)를 제공합니다.

  • 내결함성: GKE의 Job API는 TensorFlow 체크포인트 메커니즘과 함께 실행 완료(run-to-completion) 시맨틱을 제공합니다. VM 인스턴스나 Cloud TPU 노드에서 오류가 발생하면 체크포인트의 최신 상태 읽기를 사용하여 학습 작업이 자동으로 다시 실행됩니다.

Cloud TPU 및 GKE 구성 요구사항 및 제한사항

GKE 구성 정의 시 다음 사항에 유의하세요.

  • GKE 버전 1.13.4-gke.5 이상을 사용해야 합니다. 아래에 설명된 대로 gcloud container clusters create 명령어에 --cluster-version 매개변수를 추가하여 버전을 지정할 수 있습니다. 버전에 대한 자세한 내용은 SDK 문서를 참조하세요.
  • TensorFlow 1.15.5 이상을 사용해야 합니다. 아래 설명처럼 Kubernetes 포드 사양에서 Cloud TPU가 사용할 TensorFlow 버전을 지정해야 합니다.
  • Cloud TPU를 사용할 수 있는 영역에 GKE 클러스터와 노드 풀을 만들어야 합니다. 또한 GKE 클러스터와 동일한 리전에 학습 데이터와 모델을 저장할 Cloud Storage 버킷을 만들어야 합니다. 사용 가능한 영역은 다음과 같습니다.

    미국

    TPU 유형(v2) TPU v2 코어 총 TPU 메모리 리전/영역
    v2-8 8 64GiB us-central1-b
    us-central1-c
    us-central1-f
    v2-32 32 256GiB us-central1-a
    v2-128 128 1TiB us-central1-a
    v2-256 256 2TiB us-central1-a
    v2-512 512 4TiB us-central1-a
    TPU 유형(v3) TPU v3 코어 총 TPU 메모리 사용 가능한 영역
    v3-8 8 128GiB us-central1-a
    us-central1-b
    us-central1-f

    유럽

    TPU 유형(v2) TPU v2 코어 총 TPU 메모리 리전/영역
    v2-8 8 64GiB europe-west4-a
    v2-32 32 256GiB europe-west4-a
    v2-128 128 1TiB europe-west4-a
    v2-256 256 2TiB europe-west4-a
    v2-512 512 4TiB europe-west4-a
    TPU 유형(v3) TPU v3 코어 총 TPU 메모리 사용 가능한 영역
    v3-8 8 128GiB europe-west4-a
    v3-32 32 512GiB europe-west4-a
    v3-64 64 1TiB europe-west4-a
    v3-128 128 2TiB europe-west4-a
    v3-256 256 4TiB europe-west4-a
    v3-512 512 8TiB europe-west4-a
    v3-1024 1024 16TiB europe-west4-a
    v3-2048 2048 32TiB europe-west4-a

    아시아 태평양

    TPU 유형(v2) TPU v2 코어 총 TPU 메모리 리전/영역
    v2-8 8 64GiB asia-east1-c
  • 각 컨테이너는 최대 클라우드 TPU 한 개를 요청할 수 있지만 한 포드에 있는 여러 컨테이너는 각각 Cloud TPU를 요청할 수 있습니다.
  • Cluster Autoscaler는 GKE 1.13.4-gke.5 이상에서 Cloud TPU를 지원합니다.

시작하기 전에

  1. Google 계정으로 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기 페이지로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. GKE에서 Cloud TPU를 사용하면 프로젝트는 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다. Cloud TPU 가격 책정GKE 가격 책정에서 예상 비용을 확인하고 안내를 따라 사용을 마친 리소스를 삭제합니다.

  5. Cloud Console에서 다음 API를 사용 설정합니다.

서비스 계정 및 Cloud Storage 버킷 만들기

머신러닝 모델의 학습 결과를 저장하려면 Cloud Storage 버킷이 필요합니다.

  1. Cloud Shell 창을 엽니다.

    Cloud Shell 열기

  2. 프로젝트 ID의 변수를 만듭니다.

    export PROJECT_ID=project-id
    
  3. gcloud API를 사용하여 Cloud TPU 프로젝트의 서비스 계정을 만듭니다.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
    

    이 명령어는 다음 형식의 Cloud TPU 서비스 계정을 반환합니다.

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    
  4. 다음 옵션을 지정하여 새 버킷을 만듭니다.

    • 원하는 고유한 이름
    • 위치 유형: region
    • 위치: us-central1
    • 기본 스토리지 클래스: Standard
    • 액세스 제어: fine-grained

    스토리지 버킷을 사용하기 전에 버킷에 대한 Cloud TPU 서비스 계정 액세스를 승인해야 합니다. Cloud TPU 서비스 계정에 세분화된 ACL을 설정합니다.

Cloud TPU가 Cloud Storage 버킷에 액세스하도록 승인

Cloud TPU에 Cloud Storage 객체에 대한 읽기/쓰기 액세스 권한을 부여해야 합니다. 이렇게 하려면 Cloud TPU에서 사용하는 서비스 계정에 필수 액세스 권한을 부여해야 합니다. 가이드에 따라 스토리지 버킷에 대한 액세스 권한을 부여하세요.

Cloud TPU 지원으로 새 클러스터 만들기

Cloud Console 또는 gcloud 도구를 사용하여 Cloud TPU 지원으로 클러스터를 만들 수 있습니다.

아래 옵션을 선택하면 관련 안내를 볼 수 있습니다.

콘솔

Cloud TPU를 지원하는 GKE 클러스터를 만들려면 다음 안내를 따르세요.

  1. Cloud Console에서 GKE 페이지로 이동합니다.

    GKE 페이지로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. 클러스터의 이름을 지정합니다. 이름은 프로젝트와 영역 내에서 고유해야 합니다.

  4. 위치 유형의 경우 영역을 선택한 후 Cloud TPU 리소스를 사용할 원하는 영역을 선택합니다. 이 예에서는 us-central1-b 영역을 선택합니다.

  5. Cloud TPU에 대한 지원을 허용하려면 마스터 버전1.13.4-gke.5 이상으로 설정되어 있는지 확인합니다.

  6. 탐색창의 구성할 노드 풀에서 보안을 클릭합니다.

  7. 모든 Cloud APIs에 대한 전체 액세스 허용을 선택합니다. 이렇게 하면 클러스터의 모든 노드가 Cloud Storage 버킷에 액세스할 수 있습니다. 이를 위해서는 클러스터와 스토리지 버킷이 같은 프로젝트에 있어야 합니다. 기본적으로 Kubernetes Pod는 배포되는 노드 범위가 상속됩니다. Pod 단위로 액세스를 제한하려면 GKE 가이드의 서비스 계정으로 인증을 참조하세요.

  8. 탐색창의 클러스터에서 네트워킹을 클릭합니다.

  9. VPC 기반 트래픽 라우팅 사용 설정(별칭 IP 사용)을 선택합니다. 현재 프로젝트에 VPC 네트워크가 없으면 VPC 네트워크를 만들어야 합니다.

  10. 탐색창의 클러스터에서 기능을 클릭합니다.

  11. Cloud TPU 사용 설정을 선택합니다.

  12. 원하는 대로 클러스터의 나머지 옵션을 구성합니다. 옵션은 기본값으로 그대로 둡니다.

  13. 만들기를 클릭합니다.

  14. 클러스터에 연결합니다. Console Kubernetes 클러스터 페이지에서 클러스터를 선택하고 연결 버튼을 클릭하면 됩니다. 그러면 연결하려는 Cloud shell에서 실행되는 gcloud 명령어가 표시됩니다.

gcloud

아래의 안내를 따라 환경을 설정하고 gcloud 도구를 사용하여 Cloud TPU 지원으로 GKE 클러스터를 만듭니다.

  1. Cloud TPU와 함께 GKE를 실행하는 데 필요한 gcloud 구성요소를 설치합니다.

    $ gcloud components install kubectl 
  2. Google Cloud 프로젝트 ID를 사용하여 gcloud를 구성합니다.

    $ gcloud config set project project-name
    

    project-name을 Google Cloud 프로젝트의 이름으로 바꿉니다.

    새 Cloud Shell VM에서 이 명령어를 처음 실행하면 Authorize Cloud Shell 페이지가 표시됩니다. 페이지 하단에서 Authorize를 클릭하여 gcloud가 사용자 인증 정보로 GCP API 호출을 수행하도록 허용합니다.

  3. Cloud TPU 리소스를 사용할 영역을 사용하여 gcloud를 구성합니다. 이 가이드에서는 us-central1-b 영역을 사용합니다.

    $ gcloud config set compute/zone us-central1-b
    
  4. gcloud container clusters create 명령어를 사용하여 Cloud TPU를 지원하는 GKE에서 클러스터를 만듭니다. 다음 명령어에서 cluster-name을 원하는 클러스터 이름으로 바꿉니다.

    $ gcloud container clusters create cluster-name \
      --cluster-version=1.16 \
      --scopes=cloud-platform \
      --enable-ip-alias \
      --enable-tpu
    

    명령어 플래그 설명

    cluster-version
    클러스터가 최신 Kubernetes 1.16 버전을 사용할 것임을 나타냅니다. 1.13.4-gke.5 이상 버전을 사용해야 합니다.
    scopes
    클러스터의 모든 노드가 Cloud Storage 버킷에 액세스할 수 있는지 확인합니다. 이를 위해 클러스터와 스토리지 버킷이 같은 프로젝트에 있어야 합니다. 기본적으로 Kubernetes Pod에 배포되는 노드 범위가 상속됩니다. 따라서 scopes=cloud-platform은 클러스터에서 실행 중인 모든 Kubernetes Pod에 cloud-platform 범위를 제공합니다. Pod 단위로 액세스를 제한하려면 GKE 가이드의 서비스 계정으로 인증을 참조하세요.
    enable-ip-alias
    클러스터가 별칭 IP 범위를 사용하고 있음을 나타냅니다. 이는 GKE에서 Cloud TPU를 사용하는 데 필요합니다.
    enable-tpu
    클러스터가 Cloud TPU를 지원해야 함을 나타냅니다.
    tpu-ipv4-cidr(선택사항, 위에서는 지정되지 않음)
    Cloud TPU에 사용할 CIDR 범위를 나타냅니다. IP_RANGEIP/20 양식으로 지정합니다(예: 10.100.0.0/20). 이 플래그를 지정하지 않으면 /20 크기 CIDR 범위가 자동으로 할당되고 지정됩니다.

    클러스터가 생성되면 다음과 유사한 메시지가 표시됩니다.

    NAME             LOCATION       MASTER_VERSION    MASTER_IP     MACHINE_TYPE   NODE_VERSION      NUM_NODES  STATUS
    cluster-resnet  us-central1-b  1.16.15-gke.4901  34.71.245.25  n1-standard-1  1.16.15-gke.4901  3          RUNNING
    

클러스터 작업 보기

Cloud TPU 지원을 사용 설정하면 업데이트 작업이 시작됩니다. 이 작업은 영역 클러스터의 경우 약 5분이 소요되며, 리전 클러스터의 경우 클러스터의 리전에 따라 약 15분이 소요됩니다.

클러스터에서 실행 중인 작업과 완료된 작업을 모두 나열하려면 다음 명령어를 실행합니다.

   $ gcloud container operations list
   

특정 작업에 대한 자세한 정보를 가져오려면 다음 명령어를 실행합니다.

   $ gcloud container operations describe operation-id
   

operation-id를 특정 작업의 ID로 바꿉니다.

Kubernetes 포드 사양에서 Cloud TPU 요청

Kubernetes pod 사양에서 다음을 수행합니다.

  • 다음 포드 주석을 사용하여 Cloud TPU 노드가 사용하는 TensorFlow 버전을 지정합니다.

    tf-version.cloud-tpus.google.com: "x.y"
    

    여기서 x.y는 Cloud TPU에서 지원하는 TensorFlow 버전입니다. TensorFlow 1.15.5 이상을 사용해야 합니다. Kubernetes Pod용으로 생성된 모든 Cloud TPU 인스턴스가 같은 TensorFlow 버전을 사용해야 합니다. 같은 TensorFlow 버전을 사용하여 컨테이너에 모델을 빌드해야 합니다. 지원되는 버전을 참조하세요.

  • 컨테이너 사양에 있는 resource 필드의 limits 섹션에서 Cloud TPU 리소스를 지정합니다.

    Cloud TPU 리소스의 단위는 Cloud TPU 코어의 수입니다. 아래 표에는 모든 유효한 리소스 요청이 나와 있습니다.

    사용할 리소스가 Cloud TPU Pod인 경우에는 Cloud TPU Pod의 기본 할당량이 0이므로 할당량을 요청하세요.

    리소스 요청 Cloud TPU 유형 필요한 GKE 버전
    cloud-tpus.google.com/v2: 8 Cloud TPU v2 기기(코어 8개) 1.10.4-gke.2 이상
    cloud-tpus.google.com/v2: 32 v2-32 Cloud TPU Pod(코어 32개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v2: 128 v2-128 Cloud TPU Pod(코어 128개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v2: 256 v2-256 Cloud TPU Pod(코어 256개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v2: 512 v2-512 Cloud TPU Pod(코어 512개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v3: 32 v3-32 Cloud TPU Pod(코어 32개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v3: 64 v3-64 Cloud TPU Pod(코어 64개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v3: 128 v3-128 Cloud TPU Pod(코어 128개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v3: 256 v3-256 Cloud TPU Pod(코어 256개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v3: 512 v3-512 Cloud TPU Pod(코어 512개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v3: 1024 v3-1024 Cloud TPU Pod(코어 1024개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/v3: 2048 v3-2048 Cloud TPU Pod(코어 2048개)(베타) 1.10.7-gke.6 이상
    cloud-tpus.google.com/preemptible-v2: 8 선점형 Cloud TPU v2 기기(코어 8개) 1.10.6-gke.1 이상
    cloud-tpus.google.com/v3: 8 Cloud TPU v3 기기(코어 8개) 1.10.7-gke.6 이상
    cloud-tpus.google.com/preemptible-v3: 8 선점형 Cloud TPU v3 기기(코어 8개) 1.10.7-gke.6 이상

    포드 사양에서 리소스 및 제한을 지정하는 방법에 대한 자세한 내용은 Kubernetes 문서를 참조하세요.

아래의 샘플 작업 사양은 TensorFlow 2.3과 함께 선점형 Cloud TPU v2 기기 하나를 요청합니다. 또한 텐서보드 프로세스 프로세스를 시작합니다.

Cloud TPU 노드 수명은 이 노드를 요청한 Kubernetes Pod에 바인딩됩니다. Cloud TPU는 Kubernetes Pod가 예약되면 요청 시 생성되고 Kubernetes Pod가 삭제되면 재활용됩니다.

apiVersion: batch/v1
kind: Job
metadata:
  name: resnet-tpu
spec:
  template:
    metadata:
      annotations:
        # The Cloud TPUs that will be created for this Job will support
        # TensorFlow 2.3. This version MUST match the
        # TensorFlow version that your model is built on.
        tf-version.cloud-tpus.google.com: "2.3"
    spec:
      restartPolicy: Never
      containers:
      - name: resnet-tpu
        # The official TensorFlow 2.3.0 image.
        # https://hub.docker.com/r/tensorflow/tensorflow
        image: tensorflow/tensorflow:2.3.0
        command:
        - bash
        - -c
        - |
          pip install tf-models-official==2.3.0
          python3 -m official.vision.image_classification.resnet.resnet_ctl_imagenet_main \
            --tpu=$(KUBE_GOOGLE_CLOUD_TPU_ENDPOINTS) \
            --distribution_strategy=tpu \
            --steps_per_loop=500 \
            --log_steps=500 \
            --use_synthetic_data=true \
            --dtype=fp32 \
            --enable_tensorboard=true \
            --train_epochs=90 \
            --epochs_between_evals=1 \
            --batch_size=1024 \
            --model_dir=gs://bucket-name/resnet
        resources:
          limits:
            # Request a single Preemptible v2-8 Cloud TPU device to train the
            # model. A single v2-8 Cloud TPU device consists of 4 chips, each of
            # which has 2 cores, so there are 8 cores in total.
            cloud-tpus.google.com/preemptible-v2: 8
      - name: tensorboard
        image: tensorflow/tensorflow:2.2.0
        command:
        - bash
        - -c
        - |
          pip install tensorboard-plugin-profile==2.3.0 cloud-tpu-client
          tensorboard --logdir=gs://bucket-name/resnet --port=6006
        ports:
        - containerPort: 6006

작업 만들기

GKE 클러스터에서 작업을 만들고 kubectl을 설치하려면 다음 단계를 따르세요.

  1. 텍스트 편집기를 사용하여 작업 사양 example-job.yaml을 만들고 복사하여 위에 표시된 작업 사양에 붙여넣습니다. --model_dir 매개변수와 Tensorflow 명령어의 bucket-name 변수를 스토리지 버킷 이름으로 바꿔야 합니다.

  2. 작업을 실행합니다.

    $ kubectl create -f example-job.yaml
    
    job "resnet-tpu" created

    이 명령어는 Pod를 자동으로 예약하는 작업을 만듭니다.

  3. Pod가 예약되었고 Cloud TPU 노드가 프로비저닝되었는지 확인합니다. Cloud TPU 노드를 요청하는 Pod가 실행되기 전에 5분 동안 보류 상태일 수 있습니다. Pod가 예약될 때까지 다음과 비슷한 출력이 표시됩니다.

    $ kubectl get pods -w
    
    NAME               READY     STATUS    RESTARTS   AGE
    resnet-tpu-cmvlf   0/1       Pending   0          1m
    

    5분이 지나면 다음과 같은 내용이 표시됩니다.

    NAME               READY     STATUS    RESTARTS   AGE
    resnet-tpu-cmvlf   1/1       Running   0          6m
    

Cloud TPU 상태 및 로그 보기

다음 단계에 따라 Kubernetes Pod에서 사용하는 Cloud TPU 인스턴스의 상태를 확인하고 로그를 봅니다.

  1. Cloud Console에서 GKE 페이지로 이동합니다.

    GKE 페이지로 이동

  2. 왼쪽 탐색 메뉴에서 워크로드를 클릭합니다.

  3. 작업을 선택합니다. 그러면 관리형 Pod 제목이 있는 페이지로 이동합니다.

  4. 관리형 Pod에서 Kubernetes Pod를 선택합니다. 그러면 컨테이너 제목이 있는 페이지로 이동합니다.

    컨테이너에 컨테이너 목록이 표시됩니다. 이 목록에는 모든 Cloud TPU 인스턴스가 포함됩니다. 컨테이너마다 다음 정보가 표시됩니다.

    • 실행 상태
    • 컨테이너 로그 링크

측정항목 시각화 및 성능 분석을 위해 텐서보드 사용

텐서보드는 TensorFlow 데이터를 시각적으로 표현하도록 설계된 도구 모음입니다. 텐서보드를 사용하면 처리 시 병목현상을 식별할 수 있으며 성능을 향상시킬 수 있습니다.

TPU 프로파일러는 텐서보드에서 시각화할 수 있는 개별 Cloud TPU 또는 Cloud TPU Pod의 프로필을 캡처하는 텐서보드 플러그인입니다. TPU 프로파일러를 사용하여 실행 중인 TensorFlow 모델에서 trace 정보를 수집한 후 텐서보드 메뉴 바의 프로필 탭에서 Cloud TPU 도구 선택기를 사용할 수 있습니다.

GKE 클러스터에서 텐서보드 실행

GKE 클러스터에서 텐서보드를 실행하려면 다음 단계를 따르세요.

  1. 단계에 따라 텐서보드 상태를 확인하여 텐서보드 인스턴스가 컨테이너에서 실행 중인지 확인합니다.

  2. 텐서보드 Kubernetes Pod로 포트를 전달합니다.

    $ kubectl port-forward pod/resnet-tpu-pod-id 6006
    

    여기서 pod-idKubernetes Engine > 워크로드 > 관리형 Pod에서 Console에 표시되는 GKE Pod 이름의 마지막 자릿수 모음입니다. 예를 들면 resnet-tpu-wxskc입니다.

  3. Cloud Shell의 오른쪽 위에 있는 막대에서 웹 미리보기 버튼을 클릭하고 포트 6006을 열어 텐서보드 결과를 봅니다. 브라우저에 텐서보드 UI가 탭으로 표시됩니다.

  4. 텐서보드 페이지의 오른쪽 상단에 있는 드롭다운 메뉴에서 프로필을 선택합니다.

  5. 프로필 페이지에서 프로필 캡처 버튼을 클릭합니다.

  6. 팝업 메뉴에서 TPU 이름 주소 유형을 선택하고 TPU 이름을 입력합니다. TPU 이름은 Cloud ConsoleCompute Engine > TPU 페이지에서 다음과 같은 형식으로 나타납니다.

    gke-cluster-name-cluster-id-tpu-tpu-id
    
    예를 들면 다음과 같습니다.
    gke-demo-cluster-25cee208-tpu-4b90f4c5

  7. 프로파일링을 시작할 수 있으면 팝업 메뉴에서 캡처 버튼을 선택하고 프로필이 완료될 때까지 몇 초 동안 기다립니다.

  8. 브라우저를 새로고쳐 텐서보드의 프로필 탭에서 trace 데이터를 확인합니다.

프로필을 캡처하고 해석하는 방법에 대한 자세한 내용은 TensorFlow 프로파일러 가이드를 참조하세요.

Docker 이미지에서 모델 빌드 및 컨테이너화

Docker 이미지에서 컨테이너화된 공식 TPU 모델을 사용하거나 자체 모델을 빌드해서 컨테이너화할 수 있습니다.

  • 공식 TPU 모델 사용

    최신 공식 TPU 모델Docker 이미지에 컨테이너화됩니다. 이러한 Docker 이미지는 Dockerfile로 빌드됩니다.

  • 자체 모델 빌드

    TensorFlow 문서의 Colab 메모장은 자체 모델을 빌드하는 방법의 예시를 제공합니다.

    자체 모델을 빌드하려면 다음 단계에 따라 Docker 이미지에서 모델을 컨테이너화하고 Google Container Registry로 푸시합니다.

    1. Cloud Console에서 다음 API를 사용 설정합니다.

    2. 다음 줄을 포함하는 Dockerfile을 만듭니다.

      FROM tensorflow/tensorflow:2.3.0
      
      RUN pip install tf-models-official==2.3.0 tensorboard-plugin-profile==2.3.0 cloud-tpu-client
      
    3. Dockerfile과 동일한 디렉터리에서 다음 명령어를 실행하여 Docker 이미지를 빌드하고 태그를 지정합니다. my-project 변수를 프로젝트 이름으로 바꾸고 my-image 변수를 이미지 이름으로 바꿉니다.

      gcloud builds submit . -t gcr.io/my-project/my-image
      

      gcr.io 프리픽스는 이미지가 호스팅되는 Container Registry를 나타냅니다. 이 명령어를 실행해도 이미지는 아직 업로드되지 않습니다.

    4. docker images 명령어를 실행하여 빌드가 성공했는지 확인합니다.

       docker images
      
      결과:
      REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
      gcr.io/my-project/my-image     v1                  25cfadb1bf28        10 seconds ago      54 MB
      
    5. Docker 이미지를 사용하도록 작업 사양을 업데이트합니다. my-projectmy-image 변수를 정의한 프로젝트 이름과 이미지 이름으로 바꿉니다. 또한 bucket-name 변수를 모델의 학습 출력을 저장하는 데 사용할 버킷 이름으로 대체합니다.

        image: gcr.io/my-project/my-image
        command:
          - python3
          - -m
          - official.vision.image_classification.resnet.resnet_ctl_imagenet_main
          -  --tpu=$(KUBE_GOOGLE_CLOUD_TPU_ENDPOINTS)
          -  --distribution_strategy=tpu
          -  --steps_per_loop=500
          -  --log_steps=500
          -  --use_synthetic_data=true
          -  --dtype=fp32
          -  --enable_tensorboard=true
          -  --train_epochs=90
          -  --epochs_between_evals=1
          -  --batch_size=1024
          -  --model_dir=gs://<bucket-name>/resnet-output
      
    6. 공식 TPU 모델에서와 마찬가지로 작업을 만들고 실행합니다.

기존 클러스터에서 Cloud TPU 지원 사용 설정

기존 GKE 클러스터에서 Cloud TPU 지원을 사용 설정하려면 gcloud 명령줄 도구에서 다음 단계를 수행합니다.

  1. Cloud TPU 지원 사용 설정:

    gcloud beta container clusters update cluster-name --enable-tpu
    

    cluster-name을 클러스터 이름으로 바꿉니다.

  2. kubeconfig 항목을 업데이트합니다.

    gcloud container clusters get-credentials cluster-name
    

커스텀 CIDR 범위 설정

기본적으로 GKE는 클러스터가 프로비저닝한 TPU에 /20 크기의 CIDR 블록을 할당합니다. 다음 명령어를 실행하여 Cloud TPU의 커스텀 CIDR 범위를 지정할 수 있습니다.

gcloud beta container clusters update cluster-name \
  --enable-tpu \
  --tpu-ipv4-cidr 10.100.0.0/20

다음을 바꿉니다.

  • cluster-name: 기존 클러스터의 이름입니다.
  • 10.100.0.0/20: 커스텀 CIDR 범위입니다.

클러스터에서 Cloud TPU 사용 중지

기존 GKE 클러스터에서 Cloud TPU 지원을 사용 중지하려면 gcloud 명령줄 도구에서 다음 단계를 수행합니다.

  1. Cloud TPU를 사용 중인 워크로드가 없는지 확인합니다.

    $ kubectl get tpu
    
  2. 클러스터에서 Cloud TPU 지원을 사용 중지합니다.

    $ gcloud beta container clusters update cluster-name --no-enable-tpu
    

    cluster-name을 클러스터 이름으로 바꿉니다.

    이 작업은 영역 클러스터의 경우 약 5분이 소요되며, 리전 클러스터의 경우 클러스터의 리전에 따라 약 15분이 소요됩니다.

  3. 작업이 오류 없이 완료되면 클러스터에서 프로비저닝된 TPU가 제거되었는지 확인할 수 있습니다.

    $ gcloud compute tpus list
    

    Cloud TPU에서 만든 TPU 이름의 형식은 다음과 같습니다.

    $ gke-cluster-name-cluster-id-tpu-tpu-id
    

    다음을 바꿉니다.

    • cluster-name: 기존 클러스터의 이름입니다.
    • cluster-id: 기존 클러스터의 ID입니다.
    • tpu-id: Cloud TPU의 ID입니다.

    TPU가 표시되면 다음을 실행하여 수동으로 삭제할 수 있습니다.

    $ gcloud compute tpus delete gke-cluster-name-cluster-id-tpu-tpu-id
    

정리

GKE에서 Cloud TPU 작업을 마쳤으면 Cloud Billing 계정에 추가 비용이 발생하지 않도록 리소스를 삭제합니다.

콘솔

GKE 클러스터를 삭제합니다.

  1. Cloud Console에서 GKE 페이지로 이동합니다.

    GKE 페이지로 이동

  2. 삭제할 클러스터 옆에 있는 체크박스를 선택합니다.

  3. 삭제를 클릭합니다.

데이터 검토를 마쳤으면 만든 Cloud Storage 버킷을 삭제합니다.

  1. Cloud Console에서 Cloud Storage 페이지로 이동합니다.

    Cloud Storage 페이지로 이동

  2. 삭제할 버킷 옆에 있는 체크박스를 선택합니다.

  3. 삭제를 클릭합니다.

무료 저장소 한도와 기타 가격 정보에 대해서는 Cloud Storage 가격 책정 가이드를 참조하세요.

gcloud

이 세션을 위한 프로젝트와 영역을 설정하지 않았으면 지금 수행합니다. 이 설명서 앞부분의 안내를 참조하세요. 그런 다음 이 삭제 절차를 따릅니다.

  1. GKE 클러스터를 삭제하려면 cluster-name를 클러스터 이름으로 바꾸고 project-name를 Google Cloud 프로젝트 이름으로 바꾸어 다음 명령어를 실행합니다.

    $ gcloud container clusters delete cluster-name --project=project-name
    
  2. 데이터 검토를 마쳤으면 gsutil 명령어를 사용하여 생성된 Cloud Storage 버킷을 삭제합니다. bucket-name을 Cloud Storage 버킷 이름으로 바꿉니다.

    $ gsutil rm -r gs://bucket-name
    

    무료 스토리지 한도와 기타 가격 정보는 Cloud Storage 가격 책정 가이드를 참조하세요.

다음 단계

  • 가이드를 따라 Cloud TPU와 GKE에서 TensorFlow ResNet-50 모델을 학습시키세요.
  • 다음 작업 사양 중 하나를 사용하여 더 많은 모델 및 데이터세트 검색 작업을 실행하세요.
  • GKE에 COCO 데이터세트를 다운로드하고 사전 처리합니다.
  • GKE에 ImageNet을 다운로드하고 사전 처리합니다.
  • Cloud TPU와 GKE를 사용하여 AmoebaNet-D을 학습시킵니다.
  • Cloud TPU와 GKE를 사용하여 Inception v3을 학습시킵니다.
  • Cloud TPU와 GKE를 사용하여 RetinaNet을 학습시킵니다.