TPU 및 Flex-start VM으로 소규모 일괄 워크로드 실행

이 가이드에서는 Flex-start VM을 사용하여 중소규모 학습 워크로드에 맞게 TPU 프로비저닝을 최적화하는 방법을 보여줍니다. Flex-start VM은 flex-start 소비 옵션을 사용하여 생성됩니다. 이 가이드에서는 Flex-start VM을 사용하여 TPU 슬라이스 노드 풀로 구성된 워크로드를 배포합니다.

이 가이드는 일괄 워크로드를 실행하기 위해 Kubernetes 컨테이너 조정 기능을 사용하는 데 관심이 있는 머신러닝(ML) 엔지니어, 플랫폼 관리자 및 운영자, 데이터 및 AI 전문가를 대상으로 합니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE 사용자 역할 및 태스크를 참조하세요.

flex-start(유연한 시작) 가격 책정

워크로드에 단기 예약으로 최대 7일 동안 필요에 따라 동적으로 프로비저닝된 리소스가 필요하고 복잡한 할당량 관리가 필요하지 않으며 비용 효율적인 액세스가 필요한 경우 flex-start(유연한 시작)를 사용하는 것이 좋습니다. flex-start는 동적 워크로드 스케줄러를 기반으로 하며 동적 워크로드 스케줄러 가격 책정을 사용하여 청구됩니다.

  • vCPU, GPU, TPU에 최대 53% 할인이 적용됩니다.
  • 사용한 만큼만 지불합니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면 gcloud components update 명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
  • 버전 1.33.0-gke.1712000 이상을 실행하는 Autopilot 클러스터 또는 Standard 클러스터가 있는지 확인합니다.
  • flex-start의 제한사항을 숙지합니다.
  • Standard 클러스터를 사용하는 경우 클러스터가 올바르게 작동하려면 flex-start를 사용 설정하지 않은 상태에서 노드 풀을 하나 이상 유지해야 합니다.
  • 노드 위치에 선점형 TPU 할당량이 있는지 확인합니다.

flex-start로 노드 풀 만들기

Autopilot 모드에서 클러스터를 사용하는 경우 이 섹션을 건너뛰고 일괄 워크로드 실행 섹션으로 이동합니다.

기존 Standard 클러스터에 flex-start가 사용 설정된 노드 풀을 만들려면 gcloud CLI를 사용하세요.

단일 호스트 TPU 슬라이스 노드 풀을 만듭니다.

flex-start를 사용하여 단일 호스트 TPU 슬라이스 노드 풀을 만들 수 있습니다.

  1. flex-start를 사용하여 노드 풀을 만듭니다.

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --node-locations=NODE_ZONES \
        --machine-type=MACHINE_TYPE \
        --reservation-affinity=none \
        --enable-autoscaling \
        --flex-start \
        --num-nodes 0 \
        --min-nodes=0 \
        --max-nodes=1 \
        --consolidation-delay=CONSOLIDATION_DELAY
    

    다음을 바꿉니다.

    • NODE_POOL_NAME: 노드 풀에 대해 선택한 이름입니다.
    • CLUSTER_NAME: 클러스터의 이름입니다.
    • CONTROL_PLANE_LOCATION: 클러스터 컨트롤 플레인의 컴퓨팅 리전입니다.
    • NODE_ZONES: GKE가 노드 풀을 만드는 하나 이상의 영역을 쉼표로 구분한 목록
    • CONSOLIDATION_DELAY: 선택사항입니다. 클러스터 자동 확장 처리가 사용률이 낮은 노드를 축소하기 전에 대기하는 시간입니다. 이 설정을 사용하여 축소를 지연하고 다른 포드에서 나중에 재사용할 수 있도록 노드 풀을 유지합니다. 입력하는 번호는 s로 끝나야 합니다. 예를 들어 1시간을 지정하려면 3600s를 입력합니다. GKE 버전 1.34.1-gke.2364000 이상에서 사용할 수 있습니다.
    • MACHINE_TYPE: 노드에 사용할 머신 유형. TPU 호환 머신 유형에 관한 자세한 내용은 TPU 버전 선택의 표를 참고하세요.

      예를 들어 노드 풀 생성 명령어에는 다음 파라미터가 포함될 수 있습니다.

      ...
      --machine-type=ct6e-standard-4t \
      --tpu-topology=4x4 \
      --enable-autoscaling \
      --num-nodes=0 \
      --max-nodes=4 \
      

      4x4 토폴로지는 칩 16개로 구성되고 각 ct6e-standard-4t VM에는 칩 4개가 있으므로 이 명령어는 --max-nodes 필드를 4로 설정합니다.

      클러스터 자동 확장 처리는 워크로드에 필요한 노드 수까지 확장합니다. 워크로드가 완료되면 클러스터 자동 확장 처리가 노드 수를 0으로 축소합니다.

    • --reservation-affinity=none: flex-start는 예약을 사용하거나 필요로 하지 않습니다.

멀티 호스트 TPU 슬라이스 노드 풀 만들기

멀티 호스트 TPU 슬라이스 노드 풀을 만드는 단계는 Ironwood (TPU7x)를 사용하는지 또는 이전 TPU 버전을 사용하는지에 따라 다릅니다.

Ironwood (TPU7x)

Google Cloud CLI 또는 Terraform을 사용하여 Ironwood (TPU7x) 버전에서 멀티 호스트 TPU 슬라이스 노드 풀을 만들 수 있습니다.

gcloud

Ironwood (TPU7x)로 멀티 호스트 TPU 슬라이스 노드 풀을 만들려면 먼저 워크로드 정책을 만들어야 합니다.

  1. 워크로드 정책을 만듭니다.

    gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
        --type=HIGH_THROUGHPUT \
        --accelerator-topology=TPU_TOPOLOGY \
        --project=PROJECT_ID \
        --region=REGION
    

    다음을 바꿉니다.

    • WORKLOAD_POLICY_NAME: 워크로드 정책의 이름입니다.
    • TPU_TOPOLOGY: TPU Ironwood (TPU7x) 토폴로지입니다. 예를 들면 2x2x2입니다. 지원되는 모든 Ironwood (TPU7x) 토폴로지를 확인하려면 토폴로지 섹션을 참고하세요.
    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • REGION: 워크로드 정책의 리전입니다. 워크로드 정책은 리전 리소스이며 동일한 토폴로지를 공유하는 노드 풀에서 재사용할 수 있습니다.
  2. 워크로드 정책을 사용하여 노드 풀을 만듭니다.

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=us-central1 \
        --node-locations=us-central1-c \
        --machine-type=tpu7x-standard-4t \
        --reservation-affinity=none \
        --enable-autoscaling \
        --num-nodes=0 --min-nodes=0 --max-nodes=MAX_NODES \
        --flex-start \
        --placement-policy=WORKLOAD_POLICY \
        --consolidation-delay=CONSOLIDATION_DELAY
    

    다음을 바꿉니다.

    • NODE_POOL_NAME: 새 노드 풀의 이름입니다.
    • WORKLOAD_POLICY: 생성한 워크로드 정책의 이름입니다.
    • MAX_NODES: 노드 풀의 최대 크기입니다. --enable-autoscaling이 제공되는 경우 --max-nodes 플래그가 필요하며 TPU_TOPOLOGY({A}x{B}x{C})에 정의된 값의 곱을 각 VM의 칩 수로 나눈 값과 같아야 합니다. 예를 들어 TPU_TOPOLOGY2x2x2이면 곱은 8입니다. tpu7x-standard-4t의 각 VM에는 4개의 칩이 있으므로 노드 수는 2입니다.
    • CONSOLIDATION_DELAY: 선택사항입니다. 클러스터 자동 확장 처리가 사용률이 낮은 노드를 축소하기 전에 대기하는 시간입니다. 이 설정을 사용하여 축소를 지연하고 다른 포드에서 나중에 재사용할 수 있도록 노드 풀을 유지합니다. 입력하는 번호는 s로 끝나야 합니다. 예를 들어 1시간을 지정하려면 3600s를 입력합니다. GKE 버전 1.34.1-gke.2364000 이상에서 사용할 수 있습니다.

    이 명령어는 다음 특성을 사용하여 NODE_POOL_NAME이라는 노드 풀을 만듭니다.

    • --machine-type=tpu7x-standard-4t은 Ironwood (TPU7x) 머신 유형을 지정합니다.
    • --flex-start는 flex-start를 사용 설정합니다.

Terraform

  1. google 제공업체 버전 4.84.0 이상을 사용해야 합니다.
  2. 워크로드 정책을 만듭니다.

    resource "google_compute_resource_policy" {
      name   = "WORKLOAD_POLICY_NAME"
      region = CLUSTER_LOCATION
      workload_policy {
        type = "HIGH_THROUGHPUT"
        accelerator_topology = "TPU_TOPOLOGY"
      }
    }
    

    다음을 바꿉니다.

    • WORKLOAD_POLICY_NAME: 워크로드 정책의 이름입니다.
    • CLUSTER_LOCATION: 클러스터의 컴퓨팅 위치. Kubernetes 컨트롤 플레인의 신뢰성 향상을 위해 리전 클러스터를 사용하는 것이 좋습니다. 영역 클러스터를 사용할 수도 있습니다. 자세한 내용은 TPU 버전 및 토폴로지 선택을 참고하세요.
    • TPU_TOPOLOGY: TPU Ironwood (TPU7x) 토폴로지입니다. 예를 들면 2x2x2입니다. 지원되는 모든 Ironwood (TPU7x) 토폴로지를 확인하려면 TPU 계획을 참고하세요.

    google_compute_resource_policy 참조에 대한 자세한 내용은 Terraform 프로바이더를 참고하세요.

  3. Terraform 구성에서 다음 블록을 추가합니다.

    resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" {
      provider           = google
      project            = PROJECT_ID
      cluster            = CLUSTER_NAME
      name               = POOL_NAME
      location           = CLUSTER_LOCATION
      node_locations     = [NODE_ZONES]
      initial_node_count = NUM_NODES
    
      autoscaling {
        max_node_count = MAX_NODES
        location_policy      = "ANY"
      }
      node_config {
        machine_type = MACHINE_TYPE
        reservation_affinity {
          consume_reservation_type = "SPECIFIC_RESERVATION"
          key = "compute.googleapis.com/reservation-name"
          values = [RESERVATION_LABEL_VALUES]
        }
        flex_start = true
      }
    
      placement_policy {
        policy_name = WORKLOAD_POLICY_NAME
      }
    }
    

    다음을 바꿉니다.

    • NODE_POOL_RESOURCE_NAME: Terraform 템플릿의 노드 풀 리소스 이름입니다.
    • PROJECT_ID: 프로젝트 ID입니다.
    • CLUSTER_NAME: 노드 풀을 추가할 기존 클러스터의 이름입니다.
    • POOL_NAME: 만들 노드 풀의 이름입니다.
    • NODE_ZONES: GKE가 노드 풀을 만드는 하나 이상의 영역을 쉼표로 구분한 목록

      선택사항: us-central1-ai1a와 같은 AI 영역을 사용합니다. AI 영역은 Google Cloud 리전 내에서 AI/ML 워크로드에 최적화된 특수 위치입니다.

    • NUM_NODES: 노드 풀의 노드 수입니다. 0이거나 TPU 칩 수의 곱을 4(멀티 호스트 TPU 슬라이스의 TPU 슬라이스 노드마다 칩이 4개 있기 때문)로 나눈 값이어야 합니다. 예를 들어 TPU_TOPOLOGY4x8이면 칩이 32개 있으므로 NUM_NODES는 8이어야 합니다. TPU 토폴로지에 대한 자세한 내용은 TPU 버전 선택의 표를 참조하세요.
    • TPU_TOPOLOGY: TPU 슬라이스에 대해 선택된 물리적 토폴로지를 나타냅니다. 토폴로지 형식은 사용 중인 TPU 버전에 따라 달라집니다. TPU 토폴로지에 대한 자세한 내용은 토폴로지 선택의 표를 참조하세요.

    선택적으로 다음 변수를 사용할 수도 있습니다.

    • RESERVATION_NAME: TPU 예약을 사용하는 경우 노드 풀을 만들 때 사용할 예약 리소스 라벨 목록을 제공합니다. reservation_affinity 필드에 RESERVATION_LABEL_VALUES를 채우는 방법에 대한 자세한 내용은 Terraform 제공업체를 참조하세요.
    • autoscaling: 자동 확장이 사용 설정된 노드 풀을 만듭니다. GKE는 멀티 호스트 TPU 슬라이스 노드 풀을 확장할 때 노드 풀을 0에서 최대 크기로 원자적으로 수직 확장합니다.
      • MAX_NODES: 노드 풀의 최대 크기입니다. 이 값은 TPU_TOPOLOGY에 정의된 값의 곱 ({A}x{B}x{C})을 각 VM의 칩 수로 나눈 값과 같아야 합니다. 예를 들어 TPU_TOPOLOGY2x2x2이면 곱은 8입니다. tpu7x-standard-4t의 각 VM에는 4개의 칩이 있으므로 노드 수는 2입니다.
    • spot: TPU 슬라이스 노드에 스팟 VM을 사용할 노드 풀입니다. 노드 풀을 만든 후에는 이 설정을 변경할 수 없습니다. 자세한 내용은 스팟 VM을 참조하세요.
    • flex_start: flex-start 소비 옵션을 사용할 노드 풀입니다. spot이 사용 설정된 경우 이 설정을 true로 설정할 수 없습니다.

기타 TPU 버전

Google Cloud CLI, Terraform 또는 Google Cloud 콘솔을 사용하여 v3, v4, v5p, v5e, Trillium (v6e) 버전에서 멀티 호스트 TPU 슬라이스 노드 풀을 만들 수 있습니다.

gcloud

  gcloud container node-pools create NODE_POOL_NAME \
      --cluster=CLUSTER_NAME \
      --location=CONTROL_PLANE_LOCATION \
      --node-locations=NODE_ZONES \
      --machine-type=MACHINE_TYPE \
      --tpu-topology=TPU_TOPOLOGY \
      --reservation-affinity=none \
      --enable-autoscaling \
      --num-nodes=0 --min-nodes=0 --max-nodes=MAX_NODES \
      --flex-start \
      --consolidation-delay=CONSOLIDATION_DELAY
      

다음을 바꿉니다.

  • NODE_POOL_NAME: 새 노드 풀의 이름입니다.
  • CLUSTER_NAME: 클러스터의 이름입니다.
  • CONTROL_PLANE_LOCATION: 사용할 TPU 버전에 따른 영역의 이름입니다. 사용 가능한 위치를 확인하려면 GKE의 TPU 가용성을 참조하세요.
  • NODE_ZONES: GKE가 노드 풀을 만드는 하나 이상의 영역을 쉼표로 구분한 목록

    선택사항: us-central1-ai1a와 같은 AI 영역을 사용합니다. AI 영역은 Google Cloud 리전 내에서 AI/ML 워크로드에 최적화된 특수 위치입니다.

  • MACHINE_TYPE: 노드에 사용할 머신 유형. TPU 호환 머신 유형에 관한 자세한 내용은 TPU 버전 선택의 표를 참고하세요.
  • TPU_TOPOLOGY: TPU 토폴로지입니다. 예를 들면 2x2x2입니다. 지원되는 모든 TPU 토폴로지를 확인하려면 토폴로지 섹션을 참고하세요.
  • MAX_NODES: 노드 풀의 최대 크기입니다. --enable-autoscaling이 제공되는 경우 --max-nodes 플래그가 필요하며 TPU_TOPOLOGY({A}x{B}x{C})에 정의된 값의 곱을 각 VM의 칩 수로 나눈 값과 같아야 합니다.
  • CONSOLIDATION_DELAY: 선택사항입니다. 클러스터 자동 확장 처리가 사용률이 낮은 노드를 축소하기 전에 대기하는 시간입니다. 이 설정을 사용하여 축소를 지연하고 다른 포드에서 나중에 재사용할 수 있도록 노드 풀을 유지합니다. 입력하는 번호는 s로 끝나야 합니다. 예를 들어 1시간을 지정하려면 3600s를 입력합니다. GKE 버전 1.34.1-gke.2364000 이상에서 사용할 수 있습니다.

    이 명령어는 flex-start가 사용 설정된 NODE_POOL_NAME라는 노드 풀을 만듭니다.

Terraform

  1. google 제공업체 버전 4.84.0 이상을 사용해야 합니다.
  2. Terraform 구성에 다음 블록을 추가합니다.

    resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" {
      provider           = google
      project            = PROJECT_ID
      cluster            = CLUSTER_NAME
      name               = POOL_NAME
      location           = CLUSTER_LOCATION
      node_locations     = [NODE_ZONES]
      initial_node_count = NUM_NODES
    
      autoscaling {
        max_node_count = MAX_NODES
        location_policy      = "ANY"
      }
      node_config {
        machine_type = MACHINE_TYPE
        reservation_affinity {
          consume_reservation_type = "SPECIFIC_RESERVATION"
          key = "compute.googleapis.com/reservation-name"
          values = [RESERVATION_LABEL_VALUES]
        }
        flex_start = true
      }
    
      placement_policy {
        type = "COMPACT"
        tpu_topology = TPU_TOPOLOGY
      }
    }
    

    다음을 바꿉니다.

    • NODE_POOL_RESOURCE_NAME: Terraform 템플릿의 노드 풀 리소스 이름입니다.
    • PROJECT_ID: 프로젝트 ID입니다.
    • CLUSTER_NAME: 노드 풀을 추가할 기존 클러스터의 이름입니다.
    • POOL_NAME: 만들 노드 풀의 이름입니다.
    • CLUSTER_LOCATION: 클러스터의 컴퓨팅 위치입니다. Kubernetes 컨트롤 플레인의 신뢰성 향상을 위해 리전 클러스터를 사용하는 것이 좋습니다. 영역 클러스터를 사용할 수도 있습니다. 자세한 내용은 TPU 버전 및 토폴로지 선택을 참조하세요.
    • NODE_ZONES: GKE가 노드 풀을 만드는 하나 이상의 영역을 쉼표로 구분한 목록

      선택사항: us-central1-ai1a와 같은 AI 영역을 사용합니다. AI 영역은 Google Cloud 리전 내에서 AI/ML 워크로드에 최적화된 특수 위치입니다.

    • NUM_NODES: 노드 풀의 노드 수입니다. 0이거나 TPU 칩 수의 곱을 4(멀티 호스트 TPU 슬라이스의 TPU 슬라이스 노드마다 칩이 4개 있기 때문)로 나눈 값이어야 합니다. 예를 들어 TPU_TOPOLOGY4x8이면 칩이 32개 있으므로 NUM_NODES는 8이어야 합니다. TPU 토폴로지에 대한 자세한 내용은 TPU 버전 선택의 표를 참조하세요.
    • TPU_TOPOLOGY: TPU 슬라이스의 물리적 토폴로지를 나타냅니다. 토폴로지 형식은 사용 중인 TPU 버전에 따라 달라집니다. TPU 토폴로지에 대한 자세한 내용은 토폴로지 선택의 표를 참조하세요.

    선택적으로 다음 변수를 사용할 수도 있습니다.

    • RESERVATION_NAME: TPU 예약을 사용하는 경우 노드 풀을 만들 때 사용할 예약 리소스의 라벨 목록입니다. reservation_affinity 필드에 RESERVATION_LABEL_VALUES를 채우는 방법에 대한 자세한 내용은 Terraform 제공업체를 참조하세요.
    • autoscaling: 자동 확장이 사용 설정된 노드 풀을 만듭니다. GKE는 멀티 호스트 TPU 슬라이스 노드 풀을 확장할 때 노드 풀을 0에서 최대 크기로 원자적으로 수직 확장합니다.
      • MAX_NODES: 노드 풀의 최대 크기입니다. TPU_TOPOLOGY에 정의된 값의 곱 ({A}x{B}x{C})을 각 VM의 칩 수로 나눈 값이어야 합니다.
    • spot: 노드 풀에서 TPU 슬라이스 노드에 스팟 VM을 사용할 수 있게 합니다. 노드 풀을 만든 후에는 변경할 수 없습니다. 자세한 내용은 스팟 VM을 참조하세요.
    • flex_start: flex-start 소비 옵션을 사용하도록 노드 풀을 설정합니다. spot이 사용 설정된 경우 true로 설정할 수 없습니다.

콘솔

TPU가 포함된 노드 풀을 만들려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. 노드 탭을 클릭합니다.

  4. 사용자 관리형 노드 풀 만들기를 클릭합니다.

  5. 노드 풀 세부정보 섹션에서 노드 위치 지정 체크박스를 선택합니다.

  6. 사용할 TPU 버전에 따른 영역의 이름. 사용 가능한 위치를 확인하려면 GKE의 TPU 가용성을 참조하세요.

  7. 탐색창에서 노드를 클릭합니다.

  8. 머신 구성 섹션에서 TPU를 선택합니다.

  9. 시리즈 드롭다운 메뉴에서 다음 중 하나를 선택합니다.

    • CT3: TPU v3, 단일 호스트 기기
    • CT3P: TPU v3, 멀티 호스트 포드 슬라이스
    • CT4P: TPU v4
    • CT5LP: TPU v5e
    • CT5P: TPU v5p
    • CT6E: TPU Trillium(v6e)
  10. 머신 유형 드롭다운 메뉴에서 노드에 사용할 머신 이름을 선택합니다. TPU 버전 선택 표를 사용하여 멀티 호스트 TPU 슬라이스 노드 풀을 만드는 머신 유형 및 TPU 토폴로지를 정의하는 방법을 알아봅니다.

  11. TPU 토폴로지 드롭다운 메뉴에서 TPU 슬라이스의 물리적 토폴로지를 선택합니다.

  12. 필요한 변경사항 대화상자에서 변경을 클릭합니다.

  13. 부팅 디스크 유형표준 영구 디스크 또는 SSD 영구 디스크인지 확인합니다.

  14. 선택적으로 노드 풀의 노드에 스팟 VM을 사용하려면 스팟 VM에서 노드 사용 설정 체크박스를 선택합니다.

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

노드 풀에서 flex-start의 상태 확인

다음 명령어를 실행합니다.

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --format="get(config.flexStart)"

노드 풀에서 flex-start가 사용 설정되면 flexStart 필드가 True로 설정됩니다.

일괄 워크로드 실행

이 섹션에서는 Flex-start VM을 사용하여 TPU 노드를 예약하는 작업을 만듭니다. Kubernetes의 작업 컨트롤러는 하나 이상의 포드를 만들고 특정 작업을 성공적으로 실행하도록 지원합니다.

  1. Google Cloud 콘솔에서 Cloud Shell 활성화 아이콘 Cloud Shell 활성화를 클릭하여 Cloud Shell 세션을 시작합니다. Google Cloud 콘솔 하단 창에서 세션이 열립니다.

  2. dws-flex-start.yaml이라는 파일을 만듭니다.

    단일 호스트

    dws-flex-start.yaml 파일에 다음 매니페스트를 사용합니다.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-1
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-flex-start: "true"
            cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE
            cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
          containers:
          - name: container-1
            image: gcr.io/k8s-staging-perf-tests/sleep:latest
            args: ["3600s"] # Sleep for 1 hour
            resources:
              requests:
                  google.com/tpu: NUM_CHIPS
              limits:
                  google.com/tpu: NUM_CHIPS
          restartPolicy: OnFailure
    

    멀티 호스트

    dws-flex-start.yaml 파일에 다음 매니페스트를 사용합니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: headless-svc
    spec:
      clusterIP: None
      selector:
        job-name: job-1
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-1
    spec:
      backoffLimit: 0
      completions: 2
      parallelism: 2
      completionMode: Indexed
      template:
        spec:
          subdomain: headless-svc
          restartPolicy: Never
          nodeSelector:
              cloud.google.com/gke-flex-start: "true"
              cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE
              cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
          containers:
          - name: tpu-job
            image: us-docker.pkg.dev/cloud-tpu-images/jax-ai-image/tpu:latest
            ports:
            - containerPort: 8471 # Default port using which TPU VMs communicate
            - containerPort: 8431 # Port to export TPU runtime metrics, if supported.
            securityContext:
              privileged: true
            command:
            - bash
            - -c
            - |
              python -c 'import jax; print("TPU cores:", jax.device_count())'
            resources:
              requests:
                google.com/tpu: NUM_CHIPS
              limits:
                google.com/tpu: NUM_CHIPS
    

    다음을 바꿉니다.

    • ACCELERATOR_TYPE: 노드 풀을 만들 때 사용한 TPU 가속기의 유형입니다. 예를 들면 tpu-v4-podslice 또는 tpu-v5-lite-podslice입니다.
    • TPU_TOPOLOGY: TPU 슬라이스의 물리적 토폴로지입니다. 예를 들어 TPU 버전에 따라 값이 4x4x4 또는 2x2일 수 있습니다.
    • NUM_CHIPS: 각 VM의 TPU 칩 수는 1개, 4개 또는 8개입니다. 자세한 내용은 TPU 버전을 참고하세요.
  3. dws-flex-start.yaml 매니페스트를 적용합니다.

    kubectl apply -f dws-flex-start.yaml
    
  4. 작업이 동일한 노드에서 실행 중인지 확인합니다.

    kubectl get pods
    

    출력은 다음과 비슷합니다.

    NAME    READY   STATUS      RESTARTS   AGE   IP       NODE               NOMINATED NODE   READINESS GATES
    job-1   0/1     Completed   0          19m   10.(...) gke-flex-zonal-a2  <none>           <none>
    

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트는 유지하되 개별 리소스를 삭제하세요.

프로젝트 삭제

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

개별 리소스 삭제

  1. 작업을 삭제합니다.

    kubectl delete job -l "job-name in (job-1,job-2)"
    
  2. 노드 풀을 삭제합니다.

    gcloud container node-pools delete NODE_POOL_NAME \
          --location CONTROL_PLANE_LOCATION
    
  3. 다음과 같이 클러스터를 삭제합니다.

    gcloud container clusters delete CLUSTER_NAME
    

다음 단계