이 가이드는 일괄 워크로드를 실행하기 위해 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를 사용하세요.
flex-start를 사용하여 단일 또는 멀티 호스트 TPU 슬라이스 노드 풀을 만들 수 있습니다.
- flex-start를 사용하여 노드 풀을 만듭니다. - 단일 호스트- gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION_NAME \ --node-locations=NODE_ZONES \ --machine-type=MACHINE_TYPE \ --reservation-affinity=none \ --enable-autoscaling \ --flex-start \ --num-nodes 0 \ --min-nodes=0 \ --max-nodes=1- 다음을 바꿉니다. - 멀티 호스트- gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION_NAME \ --node-locations=NODE_ZONES \ --machine-type=MACHINE_TYPE \ --tpu-topology=TPU_TOPOLOGY \ --flex-start \ --enable-autoscaling \ --num-nodes=0 \ --max-nodes=2 \ --reservation-affinity=none \ --no-enable-autorepair- 다음을 바꿉니다. - NODE_POOL_NAME: 노드 풀에 대해 선택한 이름입니다.
- CLUSTER_NAME: 클러스터의 이름입니다.
- LOCATION_NAME: 클러스터 컨트롤 플레인의 컴퓨팅 리전입니다.
- NODE_ZONES: GKE가 노드 풀을 만드는 하나 이상의 영역을 쉼표로 구분한 목록입니다.
- MACHINE_TYPE: 노드에 사용할 머신 유형입니다. 예를 들어 TPU Trillium의 경우- ct6e-standard-4t를 사용할 수 있습니다. 사용 가능한 머신 유형에 대해 자세히 알아보려면 TPU 버전 선택을 참고하세요.
- TPU_TOPOLOGY: TPU 슬라이스의 물리적 토폴로지입니다. 토폴로지 형식은 TPU 버전에 따라 달라집니다. TPU 토폴로지에 대한 자세한 내용은 토폴로지 선택의 표를 참고하세요.
 - 위 명령어는 Flex-start VM으로 노드 풀을 만들 때 다음과 같은 필수 플래그를 사용합니다. - --enable-autoscaling: flex-start는 워크로드가 실행될 때 필요한 컴퓨팅 리소스만 프로비저닝합니다. 다음 파라미터를 설정해야 합니다.- --num-nodes=0
- --min-nodes=0
- TPU 슬라이스에 필요한 가상 머신 수로 설정된 - --max-nodes- 예를 들어 노드 풀 생성 명령어에는 다음 파라미터가 포함될 수 있습니다. - ... --machine-type=ct6e-standard-4t \ --tpu-topology=4x4 \ --enable-autoscaling \ --num-nodes=0 \ --max-nodes=4 \- 4x4토폴로지는 칩 16개로 구성되고 각- ct6e-standard-4tVM에는 칩 4개가 있으므로 이 명령어는- --max-nodes필드를- 4로 설정합니다.
 - 클러스터 자동 확장 처리는 워크로드에 필요한 노드 수까지 확장합니다. 워크로드가 완료되면 클러스터 자동 확장 처리가 노드 수를 0으로 축소합니다. 
- --reservation-affinity=none: flex-start는 예약을 사용하거나 필요로 하지 않습니다.
 
- 노드 풀에서 flex-start의 상태를 확인합니다. - gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --format="get(config.flexStart)"- 노드 풀에서 flex-start가 사용 설정되면 - flexStart필드가- True로 설정됩니다.
일괄 워크로드 실행
이 섹션에서는 Flex-start VM을 사용하여 TPU 노드를 예약하는 작업을 만듭니다. Kubernetes의 작업 컨트롤러는 하나 이상의 포드를 만들고 특정 태스크를 성공적으로 실행하는지 확인합니다.- Google Cloud 콘솔에서 - Cloud Shell 활성화를 클릭하여 Cloud Shell 세션을 시작합니다. Google Cloud 콘솔 하단 창에서 세션이 열립니다. 
- 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- 다음을 바꿉니다. 
- dws-flex-start.yaml매니페스트를 적용합니다.- kubectl apply -f dws-flex-start.yaml
- 작업이 동일한 노드에서 실행 중인지 확인합니다. - 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 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트는 유지하되 개별 리소스를 삭제하세요.
프로젝트 삭제
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
개별 리소스 삭제
- 작업을 삭제합니다. - kubectl delete job -l "job-name in (job-1,job-2)"
- 노드 풀을 삭제합니다. - gcloud container node-pools delete NODE_POOL_NAME \ --location LOCATION_NAME
- 다음과 같이 클러스터를 삭제합니다. - gcloud container clusters delete CLUSTER_NAME
다음 단계
- GKE의 TPU 자세히 알아보기
- 노드 자동 프로비저닝 자세히 알아보기
- GKE에서 일괄 워크로드를 실행하기 위한 권장사항 자세히 알아보기