유연한 시작 프로비저닝 모드로 소규모 일괄 워크로드 실행


이 가이드에서는 유연한 시작 프로비저닝 모드를 사용하여 중소규모 학습 워크로드에 GPU 프로비저닝을 최적화하는 방법을 보여줍니다. 이 가이드에서는 flex-start 프로비저닝 모드를 사용하여 각각 GPU 1개가 필요한 Kubernetes 작업 2개로 구성된 워크로드를 배포합니다. GKE는 두 작업을 실행하기 위해 A100 GPU 2개가 있는 단일 노드를 자동으로 프로비저닝합니다.

워크로드에 멀티노드 분산 처리가 필요한 경우 대기열에 추가된 프로비저닝이 포함된 flex-start 프로비저닝 모드를 사용하는 것이 좋습니다. 자세한 내용은 대기열에 추가된 프로비저닝으로 유연한 시작을 사용하여 대규모 워크로드 실행을 참고하세요.

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

시작하기 전에

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

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

유연한 시작 프로비저닝 모드로 노드 풀 만들기

기존 표준 클러스터에 유연한 시작 프로비저닝 모드가 사용 설정된 노드 풀을 만들려면 gcloud CLI 또는 Terraform을 사용하면 됩니다.

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

gcloud

  1. 유연한 시작 프로비저닝 모드로 노드 풀을 만듭니다.

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location LOCATION_NAME \
        --project CLUSTER_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: 클러스터 제어 영역의 컴퓨팅 리전입니다.
    • CLUSTER_NAME: 수정하려는 표준 클러스터의 이름입니다.
    • MAX_RUN_DURATION: 선택적으로 노드의 최대 런타임(초 단위). 기본값은 7일까지입니다.

    이 명령어에서 --flex-start 플래그는 gcloud에 유연한 시작 프로비저닝 모드가 사용 설정된 노드 풀을 만들도록 지시합니다.

    GKE는 A100 GPU 2개 (a2-ultragpu-2g)가 포함된 노드로 노드 풀을 만듭니다. 이 노드 풀은 노드를 0개에서 최대 5개로 자동 확장합니다.

  2. 노드 풀에서 유연한 시작 프로비저닝 모드의 상태를 확인합니다.

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

    노드 풀에서 유연한 시작 프로비저닝 모드를 사용 설정하면 flexStart 필드가 True로 설정됩니다.

Terraform

Terraform 모듈을 사용하여 GPU와 함께 flex-start 프로비저닝 모드를 사용할 수 있습니다.

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

    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은 Google Cloud API를 호출하여 GPU를 사용하는 유연한 시작 프로비저닝 모드를 사용하는 노드 풀이 있는 클러스터를 만듭니다. 노드 풀에는 처음에 노드가 0개 있고 자동 확장이 사용 설정되어 있습니다. Terraform에 대해 자세히 알아보려면 terraform.io의 google_container_node_pool 리소스 사양을 참고하세요.

학습 워크로드 실행

이 섹션에서는 GPU가 각각 1개씩 필요한 Kubernetes 작업 2개를 만듭니다. Kubernetes의 작업 컨트롤러는 하나 이상의 포드를 만들고 포드가 특정 태스크를 실행하도록 합니다.

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

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

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gpu-job-1
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-flex-start: "true"
          containers:
          - name: gpu-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: gpu-job-2
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-flex-start: "true"
          containers:
          - name: gpu-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
    
  3. dws-flex-start.yaml 매니페스트를 적용합니다.

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

    kubectl get pods -l "job-name in (gpu-job-1,gpu-job-2)" -o wide
    

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

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

삭제

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

프로젝트 삭제

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

개별 리소스 삭제

  1. 작업을 삭제합니다.

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

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

    gcloud container clusters delete CLUSTER_NAME
    

다음 단계