이 문서에서는 GKE에서 TPU 전체 용량 모드 기능을 사용하여 워크로드를 배포하고 관리하는 방법을 설명합니다. 모든 용량 모드 예약은 TPU 리소스에 대한 향상된 제어 기능을 제공하므로 예약된 용량 내에서 세부적인 제어를 통해 워크로드를 배치할 수 있습니다.
이 문서는 TPU 배포를 세부적으로 제어하여 Kubernetes 컨테이너 조정을 사용하려는 머신러닝 (ML) 엔지니어, 플랫폼 관리자, 운영자를 대상으로 합니다.
이 문서를 읽기 전 다음 내용을 숙지해야 합니다.
TPU 모든 용량 모드란 무엇인가요?
TPU Cluster Director로 사용 설정되는 TPU 모든 용량 모드를 사용하면 예약된 TPU 용량을 완전히 제어할 수 있습니다. TPU Cluster Director는 TPU를 예약 기반으로 제어할 수 있는 관리 서비스입니다.
하드웨어 장애를 처리하기 위해 용량의 일부를 예약하는 이전 관리형 모드와 달리 모든 용량 모드는 예약된 TPU 리소스 전체에 대한 액세스 권한을 부여합니다. Google Cloud 이 모드에서는 하드웨어 상태를 완전히 파악할 수 있지만 노드 장애 및 계획된 유지보수 관리 책임도 사용자에게 있습니다.
모든 용량 모드의 주요 기능에 대한 자세한 내용은 TPU Cluster Director 개요의 모든 용량 모드를 참고하세요.
GKE의 모든 용량 모드 관련 용어
다음 표에는 Ironwood (TPU7x) 버전의 블록, 하위 블록, 큐브 크기로 정의된 용어와 동등성이 포함되어 있습니다. 큐브는 상호 연결된 TPU 칩의 4x4x4 토폴로지이며, 3튜플 ({A}x{B}x{C})의 토폴로지에만 적용됩니다.
| TPU 리소스 | 코어 | 칩 | 호스트 | 큐브 |
|---|---|---|---|---|
| 1개 칩 | 2 | 1 | - | - |
| 호스트 1명 | 8 | 4 | 1 | - |
| 하위 블록 1개 | 128 | 64 | 16 | 1 |
| 블록에는 144개의 하위 블록이 포함됩니다. | 18432 | 9,216 | 2304 | 144 |
블록에서 허용되는 토폴로지에 대한 자세한 내용은 토폴로지 선택을 참고하세요.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면
gcloud components update명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
- 버전 1.34.0-gke.2201000 이상의 기존 Standard 클러스터가 있는지 확인합니다. 새 클러스터를 만들려면 리전 클러스터 만들기를 참고하세요.
- 사용하려는 리전에 TPU 할당량이 충분한지 확인합니다.
- v0.2.3 이상의 JobSet을 설치합니다.
제한사항
GKE의 TPU 모든 용량 모드는 Ironwood (TPU7x) 버전만 지원합니다.
GKE에서 TPU 모든 용량 모드 사용
이 섹션에서는 GKE에서 TPU 전체 용량 모드를 사용하는 워크플로를 설명합니다.
- TPU Cluster Director를 숙지합니다.
- 모든 용량 모드에서 TPU 용량 요청
- 모든 용량 모드 예약의 토폴로지 및 상태 보기
- 이 문서의 단계를 완료합니다.
- 모든 용량 모드의 TPU로 유지보수 이벤트 관리
- 모든 용량 모드에서 TPU를 사용하는 장애가 있는 호스트 신고 및 복구
모든 용량 모드 예약 내에서 노드 풀 만들기
GKE의 모든 용량 모드를 사용하면 다음과 같은 방법으로 노드 풀을 만들 수 있습니다.
- GKE가 TPU 모든 용량 예약에서 블록 또는 하위 블록을 선택하는 노드 풀입니다.
- TPU 모든 용량 모드 예약 내의 특정 블록 또는 하위 블록을 타겟팅하는 노드 풀입니다.
GKE에서 TPU 모든 용량 예약의 블록 또는 하위 블록을 선택합니다.
이 모드에서는 GKE가 TPU 전체 용량 예약 내에서 노드 풀의 배치를 선택합니다. 이 프로세스는 주문형 또는 스팟 VM과 같은 다른 TPU 프로비저닝 옵션으로 노드 풀을 만드는 것과 유사합니다.
노드 풀을 만들려면 --reservation 플래그와 함께 gcloud container node-pools create 명령어를 사용합니다.
TPU 예약의 전체 리소스 이름을 --reservation 플래그의 값으로 지정합니다.
노드 풀 생성 명령어의 예는 노드 풀 수동 생성을 참고하세요.
예약 내 블록 또는 하위 블록 타겟팅
TPU 모든 용량 모드를 사용하면 TPU 예약 내에서 병렬 워크로드에 대해 특정 블록 또는 하위 블록을 타겟팅할 수 있습니다. 이 기능은 지연 시간을 최소화하기 위해 TPU 칩 간의 근접성이 필요한 워크로드에 유용합니다.
사용 가능한 블록, 하위 블록, 호스트 구성을 확인합니다. 모든 용량 모드 예약의 토폴로지 및 상태 보기 문서의 단계를 완료합니다.
워크로드 정책을 만듭니다.
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) 토폴로지를 확인하려면 GKE에서 TPU 계획을 참고하세요.PROJECT_ID: Google Cloud 프로젝트 ID입니다.REGION: 워크로드 정책의 리전입니다. 워크로드 정책은 리전별 리소스이며 동일한 토폴로지를 공유하는 노드 풀에서 재사용할 수 있습니다.
노드 풀을 만들고 예약의 특정 블록 또는 하위 블록을 타겟팅하려면
--reservation플래그를 사용하여 예약 내에서 타겟 블록 또는 하위 블록의 전체 리소스 이름을 지정합니다.예약 내에서 특정 블록을 타겟팅하려면 다음 명령어를 사용합니다.
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --machine-type=tpu7x-standard-4t \ --placement-policy=WORKLOAD_POLICY_NAME \ --zone=ZONE \ --reservation=project/PROJECT/reservation/RESERVATION_NAME/reservationBlocks/BLOCK_NAME블록 내의 특정 하위 블록을 타겟팅하려면 다음 명령어를 사용합니다.
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --machine-type=tpu7x-standard-4t \ --placement-policy=WORKLOAD_POLICY_NAME \ --zone=ZONE \ --reservation=project/PROJECT/reservation/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUB_BLOCK_NAME다음을 바꿉니다.
NODE_POOL_NAME: 새 노드 풀의 이름입니다.CLUSTER_NAME: GKE 클러스터의 이름입니다.WORKLOAD_POLICY_NAME: 생성한 워크로드 정책의 이름입니다.ZONE: 노드 풀의 영역입니다(예:us-central1-a).PROJECT: Google Cloud 프로젝트 ID입니다.RESERVATION_NAME: TPU 예약의 이름입니다.BLOCK_NAME: 예약 내의 특정 블록입니다.SUB_BLOCK_NAME: 예약 내의 특정 하위 블록입니다.
위 명령어에서 다음을 실행합니다.
워크로드 예약
모든 용량 모드에서 TPU VM으로 노드 풀을 만든 후 다른 TPU 노드 풀과 마찬가지로 워크로드를 배포할 수 있습니다. TPU 전체 용량 모드의 경우 표준 SLO 지원 예약을 사용하는 노드 풀과 비교할 때 워크로드 예약에 추가적인 차이점이 없습니다.
TPU를 사용하는 워크로드에 관한 자세한 내용과 예는 TPU 슬라이스 노드에서 워크로드 실행 및 멀티슬라이스 워크로드 실행을 참고하세요.
노드 장애 관리
TPU 모든 용량 모드 예약은 제한 없음 예약입니다. 제한 없음은 관리 용량 모드에서Google Cloud 이 장애 조치를 위해 일반적으로 보유하는 부분을 포함하여 전체 TPU 용량을 수신한다는 의미입니다.
TPU 모든 용량 모드에서 하드웨어 오류와 같은 문제로 인해 VM이 실패하면 Google Cloud 동일한 호스트에서 VM을 복구하려고 시도합니다 (인플레이스 복구). 따라서 인프라 장애 시 워크로드 재예약을 수용할 수 있도록 예비 용량을 유지하는 것이 좋습니다.
노드 장애 및 복구
TPU 모든 용량 모드 예약에서 노드에 장애가 발생하면 다음 이벤트가 발생합니다.
- Google Cloud
실패한 Compute Engine VM 인스턴스의 복구 이벤트를 시작합니다. 이 프로세스는 VM을
RUNNING상태로 복원하고 GKE 노드 상태를READY로 반환하려고 시도합니다. - TPU VM이 복구 상태로 전환되고 해당 노드에서 실행되는 워크로드는 장애 조치 정책에 따라 실패할 수 있습니다. 하나 이상의 VM에 장애가 발생하더라도 노드 풀의 상태는
ERROR로 변경되지 않습니다.
노드의 상태를 모니터링하려면 다음 단계를 따르세요.
노드 풀의 노드를 나열합니다.
kubectl get nodes실패한 노드의 상태는
NotReady입니다.Compute Engine 노드의 상태를 모니터링합니다.
모든 용량 모드의 TPU VM의 경우
gcloud compute instances describe를 사용합니다. 이 명령어를 사용하면 호스트, 하위 블록, 블록 세부정보를 찾기 위해 토폴로지의 실제 상태도 확인할 수 있습니다.gcloud compute instances describe VM_NAME \ --format="table[box,title=VM-Position](resourceStatus.physical_host_topology:label=location)" \ --zone=ZONE다음을 바꿉니다.
VM_NAME: TPU VM 인스턴스의 이름입니다.ZONE: VM의 영역입니다(예:us-central1-a).
모든 용량 모드 용량에 관한 토폴로지 및 상태 정보를 가져오는 방법에 관한 자세한 단계는 모든 용량 모드 예약의 토폴로지 및 상태 보기를 참고하세요.
유지보수 관리
잠재적인 중단을 처리하고 워크로드의 복원력을 유지하려면 GKE 유지보수 정책을 사용하여 개별 노드의 유지보수를 관리하면 됩니다. 자세한 내용은 유지보수 기간 및 유지보수 제외를 참고하세요.
GKE는 모든 용량 모드 예약에서 TPU VM의 그룹 유지보수를 지원하지 않습니다. 하위 블록, 블록 또는 예약 수준에서 그룹 유지보수를 실행하려면 Compute Engine API를 사용합니다. 자세한 내용은 모든 용량 모드의 TPU로 유지보수 이벤트 관리를 참고하세요.
삭제
Google Cloud 계정에 원치 않는 요금이 청구되지 않도록 하려면 더 이상 예약된 워크로드가 없는 TPU 노드 풀을 삭제합니다. 실행 중인 워크로드를 정상적으로 종료해야 하는 경우 노드 풀을 삭제하기 전에 kubectl drain 명령어를 사용하여 워크로드를 정리합니다.
TPU 노드 풀을 삭제하려면 다음 안내를 따르세요.
gcloud container node-pools delete NODE_POOL_NAME \ --location=LOCATION \ --cluster=CLUSTER_NAME다음을 바꿉니다.
NODE_POOL_NAME: 노드 풀의 이름CLUSTER_NAME: 클러스터의 이름입니다.LOCATION: 클러스터의 컴퓨팅 위치입니다.
다음 단계
- GKE의 TPU 자세히 알아보기
- GKE Standard에서 TPU 워크로드 배포 방법을 알아보세요.
- TPU Cluster Director에 대해 자세히 알아보세요.