GKE 클러스터에서 노드 상태 예측 사용 설정

AI에 최적화된 Google Kubernetes Engine (GKE) 클러스터를 만든 후 노드 상태 예측을 사용 설정할 수 있습니다. Topology Aware Scheduling (TAS) 및 Kueue를 사용하여 워크로드를 예약하려는 경우 노드 상태 예측을 사용 설정하면 클러스터의 스케줄러가 다음 작업을 실행할 수 있습니다.

  1. 향후 5시간 이내에 성능이 저하될 가능성이 있는 노드를 식별합니다.

  2. 해당 노드에 새 워크로드를 예약하지 마세요.

이 접근 방식을 사용하면 대규모 학습 워크로드와 같이 중요한 워크로드와 중단에 민감한 워크로드의 중단을 최소화할 수 있습니다.

이 문서에서는 A4X Max, A4X, A4 또는 A3 Ultra 노드를 사용하는 GKE 클러스터에서 노드 상태 예측을 사용 설정하는 방법을 설명합니다. 예를 들어 Slurm 클러스터의 성능 문제를 해결하려는 경우 Cloud Monitoring 대시보드에서 노드 상태 예측 측정항목을 사용하는 방법을 알아보려면 Compute Engine 인스턴스 및 Slurm 클러스터 모니터링을 대신 참고하세요.

제한사항

GKE 클러스터에서 노드 상태 예측을 사용 설정하기 전에 다음 제한사항을 고려하세요.

  • 노드는 A4X Max, A4X, A4 또는 A3 Ultra 머신 유형을 사용해야 합니다.

  • 노드는 예약에 따름 프로비저닝 모델을 사용해야 합니다.

노드 상태 예측 이해하기

GKE 클러스터에서 노드 상태 예측을 사용 설정하면 CronJob이 클러스터의 각 노드에 gke.google.com/recommended-to-run-large-training-workload 라벨을 적용합니다. CronJob은 라벨 값을 노드의 GPU 상태가 저하될 가능성으로 설정하고 10분마다 이러한 값을 업데이트합니다. 라벨 값이 true이면 노드가 정상입니다. 그렇지 않고 라벨 값이 false이면 노드가 향후 5시간 이내에 다운될 가능성이 높습니다. 라벨 값은 노드의 GPU 상태에 따라 시간이 지남에 따라 변경될 수 있습니다.

노드가 다운될 가능성이 있는 경우 다음 중 하나 또는 둘 다를 수행할 수 있습니다.

  • 노드에서 워크로드 예약 방지 이 문서에 설명된 대로 false 값을 표시하는 노드에 워크로드가 예약되지 않도록 Kueue를 구성할 수 있습니다.

  • 노드를 결함이 있는 것으로 신고합니다. 노드에 GPU 온도가 높거나 성능이 느린 것과 같은 문제가 발생하면 노드에 장애가 있는 것으로 신고할 수 있습니다. 이 작업은 노드의 호스트 유지보수 이벤트를 시작하여 유지보수가 완료된 후 워크로드를 다시 실행할 수 있도록 합니다. 자세한 내용은 GKE를 통해 결함이 있는 호스트 신고를 참고하세요.

시작하기 전에

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

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면 gcloud components update 명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
  • 클러스터에 연결하려면 다음 명령어를 실행합니다.

    gcloud container clusters get-credentials CLUSTER_NAME
    

    CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

노드 상태 예측 사용 설정

TAS를 사용하여 GKE 클러스터에서 워크로드를 예약할 준비를 마친 후 다음 단계를 완료하여 노드 상태 예측을 사용 설정할 수 있습니다.

  1. 자동 노드 라벨 지정 배포

  2. 작업 구성 업데이트

  3. 노드 라벨 확인

자동 노드 라벨 지정 배포

GKE 클러스터에서 노드 상태 예측을 위해 자동 노드 라벨링을 배포하려면 다음 단계를 완료하세요.

  1. GKE의 하드웨어 가속기 git 저장소를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/container-engine-accelerators.git
    
  2. topology-scheduler 디렉터리로 이동합니다.

    cd container-engine-accelerators/gpudirect-tcpxo/topology-scheduler
    
  3. 상태 점수를 쿼리하는 Python 스크립트 schedule-daemon.pylabel-nodes-daemon.py이 포함된 Kubernetes ConfigMap을 만듭니다.

    kubectl create configmap predictor-scheduler-scripts \
        --namespace=kube-system \
        --from-file=schedule-daemon.py=schedule-daemon.py \
        --from-file=label-nodes-daemon.py=label-nodes-daemon.py
    
  4. 서비스 계정 구성을 적용하여 CronJob에 필요한 권한(Monitoring 측정항목 읽기 및 노드 객체 패치)을 부여합니다.

    kubectl apply -f service-account.yaml
    
  5. 노드 라벨 지정 작업을 예약하는 DaemonSet를 배포합니다.

    kubectl apply -f label-nodes-daemon.yaml
    

작업 구성 업데이트

Kueue를 사용할 때 노드 상태 예측을 사용 설정하려면 워크로드를 시작하기 전에 상태 예측 값과 토폴로지 요구사항(지원되는 경우)을 확인하도록 Job 구성을 업데이트해야 합니다.

작업 구성을 업데이트하고 노드 상태 예측을 사용 설정하려면 spec 필드에 다음 필드를 추가합니다.

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: gke.google.com/recommended-to-run-large-training-workload
            operator: NotIn
            values:
            - "False"
...

노드 라벨 확인

CronJob이 처음 실행된 후(배포 후 약 10분) 노드에 gke.google.com/recommended-to-run-large-training-workload 라벨이 적용되었는지 확인합니다.

gke.google.com/recommended-to-run-large-training-workload 라벨이 적용된 노드 목록을 확인합니다.

kubectl get nodes -L gke.google.com/recommended-to-run-large-training-workload

라벨 값은 다음 중 하나일 수 있습니다.

  • true: 노드가 향후 5시간 동안 정상일 것으로 예측됩니다.

  • false: 노드가 향후 5시간 이내에 성능이 저하될 수 있습니다. 이 문서에 설명된 대로 작업 구성을 구성한 경우 Kueue는 노드에서 새 워크로드의 예약을 방지합니다.

다음 단계