이 가이드에서는 flex-start 프로비저닝 모드를 사용하여 중소규모 학습 워크로드에 맞게 GPU 프로비저닝을 최적화하는 방법을 보여줍니다. 이 가이드에서는 flex-start를 사용하여 두 개의 Kubernetes 작업으로 구성된 워크로드를 배포합니다. 각 작업에는 GPU 하나가 필요합니다. GKE는 두 작업을 실행하기 위해 A100 GPU가 두 개 있는 단일 노드를 자동으로 프로비저닝합니다.
워크로드에 멀티 노드 분산 처리가 필요한 경우 큐에 추가된 프로비저닝을 통한 flex-start를 사용하는 것이 좋습니다. 자세한 내용은 큐에 추가된 프로비저닝을 통한 flex-start로 대규모 워크로드 실행을 참고하세요.
이 가이드는 일괄 워크로드를 실행하기 위해 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
를 실행하여 최신 버전을 가져옵니다.
- 버전 1.33.0-gke.1712000 이상을 실행하는 Autopilot 클러스터 또는 Standard 클러스터가 있는지 확인합니다.
- flex-start의 제한사항을 숙지합니다.
- Standard 클러스터를 사용하는 경우 클러스터가 올바르게 작동하려면 flex-start를 사용 설정하지 않은 상태에서 노드 풀을 하나 이상 유지해야 합니다.
- 노드 위치에 선점형 GPU 할당량이 있는지 확인합니다.
클러스터가 없거나 클러스터가 요구사항을 충족하지 않는 경우 gcloud CLI를 사용하여 Standard 리전 클러스터를 만들 수 있습니다. flex-start에 대해 알아볼 수 있도록 다음 플래그를 추가합니다.
--location=us-central1 \
--node-locations=us-central1-a,us-central1-b \
--machine-type=g2-standard-8
flex-start 노드 풀을 만들 때는 앞에서 언급한 플래그와 --accelerator type=nvidia-l4,count=1
를 사용합니다.
요구사항을 충족하는 Standard 클러스터가 있는 경우 다음 섹션에서 클러스터의 GPU 가속기 유형 및 머신 유형을 선택하는 방법을 안내합니다.
GPU 가속기 유형 선택
Autopilot 모드에서 클러스터를 사용하는 경우 이 섹션을 건너뛰고 일괄 워크로드 실행 섹션으로 이동합니다.
GPU 가용성은 영역마다 다릅니다. Standard 클러스터가 있는 영역에서 사용할 수 있는 GPU 가속기 유형을 찾아야 합니다. 리전 표준 클러스터가 있는 경우 GPU 가속기 유형을 사용할 수 있는 영역이 클러스터가 있는 리전에 있어야 합니다. 노드 풀을 만들 때 가속기 유형과 노드의 영역을 지정합니다. 클러스터 위치에서 사용할 수 없는 가속기 유형을 지정하면 노드 풀 만들기가 실패합니다.
다음 명령어를 실행하여 클러스터의 위치와 지원되는 GPU 액셀러레이터 유형을 가져옵니다.
클러스터가 있는 위치를 가져옵니다.
gcloud container clusters list
출력은 다음과 비슷합니다.
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS STACK_TYPE example-cluster-1 us-west2 1.33.2-gke.1111000 34.102.3.122 e2-medium 1.33.2-gke.1111000 9 RUNNING IPV4
위치에서 가상 워크스테이션을 제외하고 사용 가능한 GPU 가속기 유형을 나열합니다.
gcloud compute accelerator-types list | grep LOCATION_NAME | grep -v "Workstation"
LOCATION_NAME
을 클러스터의 위치로 바꿉니다.예를 들어
us-west2
리전의 GPU 가속기 유형 목록을 가져오려면 다음 명령어를 실행합니다.gcloud compute accelerator-types list | grep us-west2 | grep -v "Workstation"
출력은 다음과 비슷합니다.
nvidia-b200 us-west2-c NVIDIA B200 180GB nvidia-tesla-p4 us-west2-c NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-c NVIDIA T4 nvidia-tesla-p4 us-west2-b NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-b NVIDIA T4
호환되는 머신 유형 선택
Autopilot 모드에서 클러스터를 사용하는 경우 이 섹션을 건너뛰고 일괄 워크로드 실행 섹션으로 이동합니다.
클러스터 위치에서 사용할 수 있는 GPU를 확인한 후 호환되는 머신 유형을 결정할 수 있습니다.는 GPU를 특정 머신 시리즈로 제한합니다. Google Cloud 머신 유형을 찾으려면 다음 단계를 따르세요.
- 사용 가능한 GPU 모델 표를 참고하세요.
- 선택한 GPU 가속기 유형의 행을 찾습니다.
- 해당 행의 '머신 시리즈' 열을 확인합니다. 이 열에는 사용해야 하는 머신 시리즈가 표시됩니다.
- 지정할 수 있는 머신 유형 이름을 확인하려면 머신 시리즈의 링크를 클릭하세요.
유일한 예외는 선택한 가속기 유형과 함께 사용할 수 있는 N1 머신 유형에 관한 추가 안내를 제공하는 N1 머신 시리즈입니다.
가속기 최적화 머신을 사용하기 전에 머신 유형별 소비 옵션 가용성에 표시된 대로 유연한 시작 프로비저닝 모드가 지원되는지 확인하세요.
액셀러레이터 수 확인
Autopilot 모드에서 클러스터를 사용하는 경우 이 섹션을 건너뛰고 일괄 워크로드 실행 섹션으로 이동합니다.
노드 풀을 만들려면 노드 풀의 각 노드에 연결할 액셀러레이터 수를 결정해야 합니다. 유효한 값은 액셀러레이터 유형 및 머신 유형에 따라 다릅니다. 각 머신 유형에서 지원할 수 있는 GPU 수에는 제한이 있습니다. 1
기본값 외에 사용할 값을 확인하려면 다음 단계를 따르세요.
- GPU 머신 유형을 참고하세요.
- 표에서 머신 시리즈 유형의 가속기 유형을 검색합니다.
- 'GPU 수' 열의 값을 사용합니다.
flex-start로 노드 풀 만들기
Autopilot 모드에서 클러스터를 사용하는 경우 이 섹션을 건너뛰고 일괄 워크로드 실행 섹션으로 이동합니다.
기존 Standard 클러스터에 flex-start가 사용 설정된 노드 풀을 만들려면 gcloud CLI 또는 Terraform을 사용하면 됩니다.
gcloud
flex-start를 사용하여 노드 풀을 만듭니다.
gcloud container node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --project PROJECT_ID \ --accelerator type=ACCELERATOR_TYPE,count=COUNT \ --machine-type MACHINE_TYPE \ --max-run-duration MAX_RUN_DURATION \ --flex-start \ --node-locations NODE_ZONES \ --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
: 노드 풀에 대해 선택한 이름입니다.CLUSTER_NAME
: 수정하려는 Standard 클러스터의 이름입니다.LOCATION_NAME
: 클러스터 컨트롤 플레인의 컴퓨팅 리전PROJECT_ID
: 프로젝트 ID입니다.ACCELERATOR_TYPE
: 인스턴스에 연결할 가속기의 특정 유형입니다 (예: NVIDIA T4의 경우nvidia-tesla-t4
).COUNT
: 인스턴스에 연결할 가속기 수입니다. 기본값은1
입니다.MACHINE_TYPE
: 노드에 사용할 머신 유형.MAX_RUN_DURATION
: 선택사항입니다. 노드의 최대 런타임(초 단위). 기본값은 7일까지입니다. 입력하는 번호는s
로 끝나야 합니다. 예를 들어 하루를 지정하려면86400s
를 입력합니다.NODE_ZONES
: GKE가 노드 풀을 만드는 하나 이상의 영역을 쉼표로 구분한 목록입니다.
이 명령어에서
--flex-start
플래그는gcloud
에 flex-start가 사용 설정된 노드 풀을 만들도록 지시합니다.GKE는 지정된 액셀러레이터 유형의 인스턴스가 두 개 포함된 노드로 노드 풀을 만듭니다. 노드 풀에는 처음에는 노드가 0개이고 자동 확장이 사용 설정되어 있습니다.
노드 풀에서 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 구성에 다음 블록을 추가합니다.
resource "google_container_node_pool" " "gpu_dws_pool" {
name = "gpu-dws-pool"
queued_provisioning {
enabled = false
}
}
node_config {
machine_type = "MACHINE_TYPE"
accelerator_type = "ACCELERATOR_TYPE"
accelerator_count = COUNT
node_locations = ["NODE_ZONES"]
flex_start = true
}
다음을 바꿉니다.
MACHINE_TYPE
: 노드에 사용할 머신 유형입니다.ACCELERATOR_TYPE
: 인스턴스에 연결할 특정 유형의 가속기 (예: NVIDIA T4의 경우nvidia-tesla-t4
)입니다.COUNT
: 인스턴스에 연결할 가속기 수입니다. 기본값은1
입니다.NODE_ZONES
: GKE가 노드 풀을 만드는 하나 이상의 영역을 쉼표로 구분한 목록입니다.
Terraform에서 Google Cloud API를 호출하여 GPU와 함께 flex-start를 사용하는 노드 풀이 있는 클러스터를 만듭니다. 노드 풀에는 처음에는 노드가 0개이고 자동 확장이 사용 설정되어 있습니다. Terraform에 대해 자세히 알아보려면 terraform.io의 google_container_node_pool
리소스 사양을 참조하세요.
일괄 워크로드 실행
이 섹션에서는 각각 GPU 하나가 필요한 Kubernetes 작업 두 개를 만듭니다. Kubernetes의 작업 컨트롤러는 하나 이상의 포드를 만들고 특정 태스크를 성공적으로 실행하는지 확인합니다.Google Cloud 콘솔에서
Cloud Shell 활성화를 클릭하여 Cloud Shell 세션을 시작합니다. Google 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" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE 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" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE 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>
삭제
이 페이지에서 사용한 리소스 비용이 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의 GPU 자세히 알아보기
- 노드 자동 프로비저닝 자세히 알아보기
- GKE에서 일괄 워크로드를 실행하기 위한 권장사항 자세히 알아보기