경로로 GKE 클러스터 만들기

이 페이지에서는 플랫폼 관리자와 머신러닝(ML) 엔지니어가 Pathways 기반 워크로드에 맞게 구성된 Google Kubernetes Engine(GKE) 클러스터를 만드는 방법을 보여줍니다. Cluster Toolkit을 사용하여 사전 구성된 클러스터를 자동으로 프로비저닝하거나 Google Cloud CLI를 사용하여 클러스터를 수동으로 만들 수 있습니다.

시작하기 전에

계속하기 전에 다음 기본 요건을 완료하세요.

로컬 환경 설정

Google Cloud 사용자 인증 정보로 gcloud CLI에 로그인합니다.

gcloud auth login

Cluster Toolkit을 사용하는 경우 Terraform에서 사용하는 애플리케이션 기본 사용자 인증 정보(ADC)도 생성합니다.

gcloud auth application-default login

GKE 클러스터 만들기

다음 예시에서는 TPU v6e 2x4 노드 풀로 클러스터를 만듭니다. Cluster Toolkit 또는 gcloud CLI를 사용하여 클러스터를 만들 수 있습니다.

Cluster Toolkit

  1. GKE TPU v6e 클러스터 배포의 안내에 따라 GKE TPU 클러스터를 배포합니다. 모든 TPU 배포 옵션에 대한 개요는 Cloud TPU 배포 개요를 참조하세요.

    배포 청사진을 구성할 때 다음을 수행합니다.

    • enable_pathways_for_tpus를 true로 설정합니다(Cluster Toolkit TPU 청사진에서 기본적으로 사용 설정됨). 이 설정은 Pathways 컨트롤러에 필요한 cpu-np CPU 노드 풀(n4-standard-64) 및 Kueue 구성을 자동으로 프로비저닝합니다. Cluster Toolkit은 kueue_configuration_path 변수에 커스텀 Kueue 구성 파일을 지정하지 않은 경우에만 기본 Pathways Kueue 구성을 적용합니다.
    • num_slices를 워크로드에 필요한 TPU 슬라이스 노드 풀 수로 설정합니다.
    • tpu_topology를 선택한 TPU 슬라이스 토폴로지(예: 2x4 또는 4x4)로 설정합니다.
    • 소비 옵션을 선택합니다. 기본적으로 TPU v6e 배포 파일은 특정 TPU 예약을 사용하므로 reservation_affinity 변수에 예약 이름을 지정합니다. 다른 소비 옵션을 사용하려면 GKE 소비 옵션을 참조하세요.
  2. 클러스터 노드의 STATUS가 Ready인지 확인합니다.

    kubectl get nodes
    

    클러스터를 만든 후 gcluster job submit 명령어를 --pathways 및 --pathways-gcs-location 플래그와 함께 사용하여 Pathways 워크로드를 제출할 수 있습니다. 자세한 내용은 Pathways로 워크로드 실행을 참조하세요.

gcloud

GKE 클러스터를 만들고 Pathways 워크로드를 실행하도록 설정하려면 다음 단계를 따르세요.

  1. 다음 환경 변수를 설정합니다.

    CLUSTER=GKE_CLUSTER_NAME
    PROJECT=PROJECT_ID
    ZONE=ZONE
    REGION=REGION
    CLUSTER_VERSION=GKE_CLUSTER_VERSION
    PW_CPU_MACHINE_TYPE="n2-standard-64"
    NETWORK=NETWORK
    SUBNETWORK=SUB_NETWORK
    CLUSTER_NODEPOOL_COUNT=3
    TPU_MACHINE_TYPE="ct6e-standard-4t"
    WORKERS_PER_SLICE=2
    TOPOLOGY="2x4"
    NUM_CPU_NODES=1

    다음을 바꿉니다.

    • GKE_CLUSTER_NAME: GKE 클러스터의 이름입니다.
    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • ZONE: 클러스터를 만드는 영역입니다. TPU v6e를 사용할 수 있는 영역을 선택합니다. 자세한 내용은 Cloud TPU 리전 및 영역을 참조하세요.
    • REGION: 선택사항: 리전 클러스터를 사용하는 경우 리소스를 만드는 리전입니다.
    • GKE_CLUSTER_VERSION: (선택사항) GKE 클러스터 버전입니다. 1.32.2-gke.1475000 이상을 사용하고 표준 지원 버전 중 하나를 선택하세요. 자세한 내용은 GKE 출시 일정을 참조하세요. 버전을 지정하지 않으면 다음 gcloud container clusters create 명령어에서 --cluster-version 플래그를 삭제합니다.
    • NETWORK: (선택사항) 가상 프라이빗 클라우드(VPC) 네트워크의 이름입니다. 클러스터를 만들기 전에 네트워크가 있어야 합니다. 네트워크를 지정하지 않으면 다음 gcloud container clusters create 명령어에서 --network 플래그를 삭제합니다.
    • SUB_NETWORK: (선택사항) 서브네트워크의 이름입니다. 클러스터를 만들기 전에 서브네트워크가 있어야 합니다. 서브네트워크를 지정하지 않으면 다음 gcloud container clusters create 명령어에서 --subnetwork 플래그를 삭제합니다.

    이 예시에서는 워크로드에 맞게 수정할 수 있는 나머지 변수의 기본값을 설정합니다.

    • PW_CPU_MACHINE_TYPE: 클러스터의 기본 노드 풀과 Pathways 헤드(Pathways 리소스 관리자 및 프록시)를 실행하는 CPU 노드 풀의 머신 유형입니다.
    • NUM_CPU_NODES: CPU 노드 풀의 노드 수입니다.
    • CLUSTER_NODEPOOL_COUNT: TPU 슬라이스 수입니다. 각 슬라이스는 별도의 노드 풀입니다.
    • TPU_MACHINE_TYPE 및 TOPOLOGY: 각 슬라이스의 TPU 머신 유형 및 TPU 토폴로지입니다.
    • WORKERS_PER_SLICE: 각 슬라이스의 노드 수입니다. 토폴로지의 TPU 칩 수를 노드당 칩 수로 나눈 값입니다. 예를 들어 2x4 토폴로지에는 칩이 8개 있고 ct6e-standard-4t 노드에는 칩이 4개 있으므로 각 슬라이스에는 노드가 2개 있습니다.
  2. gcloud container clusters create 명령어를 사용하여 GKE 클러스터를 만듭니다.

    gcloud container clusters create ${CLUSTER} \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --cluster-version=${CLUSTER_VERSION} \
        --scopes=storage-full,gke-default,cloud-platform \
        --machine-type=${PW_CPU_MACHINE_TYPE} \
        --network=${NETWORK} \
        --subnetwork=${SUBNETWORK}
    
  3. gcloud container node-pools create 명령어를 사용하여 TPU 슬라이스 노드 풀을 만듭니다.

    for i in $(seq 1 ${CLUSTER_NODEPOOL_COUNT}); do
        gcloud container node-pools create "tpu-np-${i}" \
            --project=${PROJECT} \
            --zone=${ZONE} \
            --cluster=${CLUSTER} \
            --machine-type=${TPU_MACHINE_TYPE} \
            --num-nodes=${WORKERS_PER_SLICE} \
            --placement-type=COMPACT \
            --tpu-topology=${TOPOLOGY} \
            --scopes=storage-full,gke-default,cloud-platform \
            --workload-metadata=GCE_METADATA
    done
    

    이러한 명령어는 특정 예약을 타겟팅하지 않습니다. TPU 예약을 사용하려면 --reservation-affinity=specific 및 --reservation=RESERVATION_NAME 플래그를 추가합니다. 여기서 RESERVATION_NAME은 TPU 예약의 이름입니다. 스팟 VM을 사용하려면 --spot 플래그를 추가합니다.

  4. Pathways 리소스 관리자 및 프록시를 실행하는 Pathways 헤드의 CPU 노드 풀을 만듭니다. gcluster job submit --pathways 명령어가 감지할 수 있도록 노드 풀 이름을 cpu-np로 지정합니다.

    gcloud container node-pools create cpu-np \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --cluster=${CLUSTER} \
        --machine-type=${PW_CPU_MACHINE_TYPE} \
        --num-nodes=${NUM_CPU_NODES} \
        --scopes=storage-full,gke-default,cloud-platform \
        --workload-metadata=GCE_METADATA
    
  5. 클러스터의 사용자 인증 정보를 가져오고 kubectl의 기본 네임스페이스를 설정합니다.

    gcloud container clusters get-credentials ${CLUSTER} \
        --zone=${ZONE} \
        --project=${PROJECT} \
        && kubectl config set-context --current --namespace=default
    
  6. GKE 클러스터에서 Pathways 아키텍처를 사용하려면 JobSet API를 설치합니다.

    kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/v0.12.0/manifests.yaml
    
  7. 노드의 STATUS가 Ready이고 jobset-controller-manager 포드의 STATUS가 Running인지 확인합니다.

    kubectl get nodes
    kubectl get pods --namespace=jobset-system
    

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

    NAME                                      STATUS   ROLES    AGE   VERSION
    gke-cluster-cpu-np-12345678-abcd          Ready    <none>   5m    v1.32.2-gke.1475000
    gke-cluster-tpu-np-1-12345678-efgh        Ready    <none>   5m    v1.32.2-gke.1475000
    ...
    NAME                                         READY   STATUS    RESTARTS   AGE
    jobset-controller-manager-6f7b8c9d4-xyz12    1/1     Running   0          2m
    

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 완료 후 클러스터를 삭제합니다.

  • Cluster Toolkit: 다음 명령어를 실행하여 배포를 삭제합니다.

    ./gcluster destroy DEPLOYMENT_FOLDER_NAME

    DEPLOYMENT_FOLDER_NAME을 배포 폴더 이름으로 바꿉니다.

  • gcloud CLI: 다음 명령어를 실행하여 GKE 클러스터와 노드 풀을 삭제합니다.

    gcloud container clusters delete ${CLUSTER} \
        --project=${PROJECT} \
        --zone=${ZONE}
    

다음 단계