이 가이드에서는 flex-start 프로비저닝 모드를 사용하여 중소규모 학습 워크로드에 맞게 GPU 프로비저닝을 최적화하는 방법을 보여줍니다. 이 가이드에서는 flex-start를 사용하여 두 개의 Kubernetes 작업으로 구성된 워크로드를 배포합니다. 각 작업에는 GPU 하나가 필요합니다. GKE는 두 작업을 실행하기 위해 A100 GPU가 두 개 있는 단일 노드를 자동으로 프로비저닝합니다.
워크로드에 멀티 노드 분산 처리가 필요한 경우 큐에 추가된 프로비저닝을 통한 flex-start를 사용하는 것이 좋습니다. 자세한 내용은 큐에 추가된 프로비저닝을 통한 flex-start로 대규모 워크로드 실행을 참고하세요.
이 가이드는 일괄 워크로드를 실행하기 위해 Kubernetes 컨테이너 조정 기능을 사용하는 데 관심이 있는 머신러닝(ML) 엔지니어, 플랫폼 관리자 및 운영자, 데이터 및 AI 전문가를 대상으로 합니다. Trusted Cloud by S3NS 콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE 사용자 역할 및 태스크를 참고하세요.
flex-start(유연한 시작) 가격 책정
워크로드에 단기 예약으로 최대 7일 동안 필요에 따라 동적으로 프로비저닝된 리소스가 필요하고, 복잡한 할당량 관리가 필요하지 않으며, 비용 효율적인 액세스가 필요한 경우 Flex-start를 사용하는 것이 좋습니다. 유연한 시작은 동적 워크로드 스케줄러로 구동되며 동적 워크로드 스케줄러 가격 책정을 사용하여 청구됩니다.
- vCPU, GPU, TPU에 최대 53% 할인
- 사용한 만큼만 지불합니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
- 버전 1.33.0-gke.1712000 이상을 실행하는 Autopilot 클러스터 또는 Standard 클러스터가 있는지 확인합니다.
- flex-start의 제한사항을 숙지합니다.
- Standard 클러스터를 사용하는 경우 클러스터가 올바르게 작동하려면 flex-start를 사용 설정하지 않은 상태에서 노드 풀을 하나 이상 유지해야 합니다.
- 노드 위치에 선점형 GPU 할당량이 있는지 확인합니다.
flex-start로 노드 풀 만들기
기존 Standard 클러스터에 flex-start가 사용 설정된 노드 풀을 만들려면 gcloud CLI 또는 Terraform을 사용하면 됩니다.
Autopilot 모드에서 클러스터를 사용하는 경우 이 섹션을 건너뛰고 일괄 워크로드 실행 섹션으로 이동합니다.
gcloud
flex-start를 사용하여 노드 풀을 만듭니다.
gcloud container node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --project PROJECT_ID \ --accelerator type=nvidia-a100-80gb,count=2 \ --machine-type a2-ultragpu-2g \ --max-run-duration MAX_RUN_DURATION \ --flex-start \ --num-nodes 0 \ --enable-autoscaling \ --total-min-nodes 0 \ --total-max-nodes 5 \ --location-policy ANY \ --reservation-affinity none \ --no-enable-autorepair
다음을 바꿉니다.
NODE_POOL_NAME
: 노드 풀에 대해 선택한 이름LOCATION_NAME
: 클러스터 컨트롤 플레인의 컴퓨팅 리전PROJECT_ID
: 프로젝트 IDCLUSTER_NAME
: 수정하려는 Standard 클러스터의 이름MAX_RUN_DURATION
: (선택사항) 노드의 최대 런타임(초 단위). 기본값은 7일까지입니다.
이 명령어에서
--flex-start
플래그는gcloud
에 flex-start가 사용 설정된 노드 풀을 만들도록 지시합니다.GKE는 A100 GPU(
a2-ultragpu-2g
)가 두 개 포함된 노드로 노드 풀을 만듭니다. 이 노드 풀은 노드를 0개에서 최대 5개까지 자동으로 확장합니다.노드 풀에서 flex-start의 상태를 확인합니다.
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --format="get(config.flexStart)"
노드 풀에서 flex-start가 사용 설정되면
flexStart
필드가True
로 설정됩니다.
Terraform
Terraform 모듈을 사용하여 GPU와 함께 flex-start를 사용할 수 있습니다.
- Terraform 구성에 다음 블록을 추가합니다.
```hcl
resource "google_container_node_pool" " "gpu_dws_pool" {
name = "gpu-dws-pool"
queued_provisioning {
enabled = false
}
}
node_config {
machine_type = "a3-highgpu-8g"
flex_start = true
}
```
Terraform에서 Trusted Cloud API를 호출하여 GPU와 함께 flex-start를 사용하는 노드 풀이 있는 클러스터를 만듭니다. 노드 풀에는 처음에는 노드가 0개이고 자동 확장이 사용 설정되어 있습니다. Terraform에 대해 자세히 알아보려면 terraform.io의 google_container_node_pool
리소스 사양을 참조하세요.
일괄 워크로드 실행
이 섹션에서는 각각 GPU 하나가 필요한 Kubernetes 작업 두 개를 만듭니다. Kubernetes의 작업 컨트롤러는 하나 이상의 포드를 만들고 특정 태스크를 성공적으로 실행하는지 확인합니다.Trusted Cloud 콘솔에서
Cloud Shell 활성화를 클릭하여 Cloud Shell 세션을 시작합니다. Trusted Cloud 콘솔 하단 창에서 세션이 열립니다.
dws-flex-start.yaml
이라는 파일을 만듭니다.apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" containers: - name: container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure --- apiVersion: batch/v1 kind: Job metadata: name: job-2 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" containers: - name: container-2 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure
dws-flex-start.yaml
매니페스트를 적용합니다.kubectl apply -f dws-flex-start.yaml
작업이 동일한 노드에서 실행 중인지 확인합니다.
kubectl get pods -l "job-name in (job-1,job-2)" -o wide
출력은 다음과 비슷합니다.
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> job-2 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none>
삭제
이 페이지에서 사용한 리소스 비용이 Trusted Cloud by S3NS 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트는 유지하되 개별 리소스를 삭제하세요.
프로젝트 삭제
- In the Trusted 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의 GPU 자세히 알아보기
- 노드 자동 프로비저닝 자세히 알아보기
- GKE에서 일괄 워크로드를 실행하기 위한 권장사항 자세히 알아보기