GKE 또는 자체 관리형 Kubernetes 구성

Google Kubernetes Engine(GKE) 또는 자체 관리형 Kubernetes에서 실행되는 ML 워크로드에 ML 진단 플랫폼을 구성할 수 있습니다.

ML 진단에는 다음과 같은 정식 버전 기능이 포함되어 있습니다.

  • 자동 워크로드 모니터링 및 시스템 측정항목 수집: GKE에서 자동 워크로드 모니터링 및 시스템 측정항목 수집을 위해 코드를 계측하거나 추가 구성을 수행할 필요가 없습니다. 워크로드 모니터링 및 시스템 측정항목 수집은 기본적으로 사용 설정되어 있으며 이 가이드의 단계를 수행할 필요가 없습니다. 워크로드 모니터링은 JobSet 및 Job GKE 작업 유형을 지원하며 GKE 버전 1.36.4-gke.1247000 이상과 호환됩니다.
  • ML Diagnostics SDK 측정항목 및 프로그래매틱 프로파일링: ML Diagnostics SDK를 사용하여 측정항목을 수집하고 프로그래매틱 프로파일링을 실행하려면 injection-webhook Helm 차트를 설치하고 워크로드에 라벨을 지정하고 ML Diagnostics SDK를 사용합니다. GKE에서는 지원되는 GKE 버전을 사용하는 경우 단일 Google Cloud CLI 명령어를 사용하거나 수동 설치를 수행할 수 있습니다. 자체 관리형 Kubernetes에서는 웹훅을 수동으로 설치해야 합니다.
  • 주문형 프로파일링: 주문형 프로파일링을 사용하려면 connection-operator Helm 차트를 설치합니다. GKE에서는 지원되는 GKE 버전을 사용하는 경우 단일 gcloud CLI 명령어를 사용하거나 수동 설치를 수행할 수 있습니다. 자체 관리형 Kubernetes에서는 연산자를 수동으로 설치해야 합니다.

ML 진단에는 다음과 같은 프리뷰 기능도 포함되어 있습니다.

  • Diagon DaemonSet 프로파일링: GKE 워크로드에서 워크로드 모니터링의 주문형 프로파일링, 지속적 프로파일링, 자동 프로필 캡처를 사용하려면 GKE TPU 클러스터에 Diagon DaemonSet를 배포합니다. 이 DaemonSet는 주문형 및 연속 프로파일링만 지원되는 자체 관리형 Kubernetes 클러스터에서도 작동합니다. 자체 관리형 Kubernetes에서는 워크로드 모니터링이 지원되지 않습니다.

Diagon DaemonSet 배포

GKE 또는 자체 관리형 Kubernetes 클러스터에서 컨테이너화된 워크로드를 실행하는 경우 Diagon 데몬을 DaemonSet로 배포할 수 있습니다. 이렇게 하면 데몬의 사본이 클러스터 내의 모든 GPU 및 TPU 노드 또는 선택된 GPU 및 TPU 노드에서 실행됩니다.

컨테이너 이미지 저장소

Diagon 데몬은 Docker 이미지로 게시되며 다음 Artifact Registry 경로에서 사용할 수 있습니다.

us-central1-docker.pkg.dev/hypercomputediagon-release/daemon-docker/mldiagnostics-daemon:latest

배포 단계

클러스터에 Diagon DaemonSet를 배포하려면 다음 단계를 완료하세요.

  1. DaemonSet 구성 만들기: 다음 YAML 구성을 diagon-daemonset.yaml로 저장합니다. 이 구성은 기본 호스트 GPU 및 TPU 기기에서 진단 및 프로파일링 측정항목을 수집할 수 있도록 Diagon 데몬을 권한 모드로 실행합니다.

    # diagon-daemonset.yaml
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: diagon-daemon
      namespace: diagon
      labels:
        app.kubernetes.io/name: diagon-daemon
        app.kubernetes.io/part-of: diagon
    spec:
      selector:
        matchLabels:
          name: diagon-daemon
      template:
        metadata:
          labels:
            name: diagon-daemon
        spec:
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet
          serviceAccountName: SERVICE_ACCOUNT_NAME
          terminationGracePeriodSeconds: 30
          tolerations:
          - operator: Exists
            effect: NoSchedule
          - operator: Exists
            effect: NoExecute
          containers:
          - name: diagon-daemon
            image: us-central1-docker.pkg.dev/hypercomputediagon-release/daemon-docker/mldiagnostics-daemon:latest
            imagePullPolicy: Always
            command:
            - /mldiagnostics_extension_files/bin/mldiagnostics_extension
            - -standalone=true
            - -channel=hypercomputecluster.googleapis.com/diagnostics
            - -alsologtostderr=true
            securityContext:
              privileged: true
            resources:
              requests:
                cpu: 10m
                memory: 32Mi
              limits:
                memory: 256Mi  # No CPU limit.
    
  2. 클러스터에 DaemonSet 배포: 다음 명령어를 실행하여 활성 Kubernetes 컨텍스트에 데몬을 배포합니다.

    kubectl apply -f diagon-daemonset.yaml
    
  3. 배포 및 데몬 상태 확인: 관리 워크스테이션 또는 Cloud Shell에서 모든 데몬 포드가 워커 노드에 예약되어 있고 Running 상태에 도달했는지 확인합니다.

    kubectl get pods -n diagon -l name=diagon-daemon -o wide
    

    스트리밍 로그를 검사하여 Google Cloud ML 진단 컨트롤 플레인 및 활성 하트비트에 대한 연결을 확인합니다.

    kubectl logs -n diagon -l name=diagon-daemon --tail=50
    

    출력에는 다음과 같은 예상 로그 서명이 포함됩니다.

    Stream established.
    Received successful DaemonRegistrationResponse from backend
    Sending DaemonHeartbeatRequest
    
  4. DaemonSet 이미지 업데이트: 최신 버전의 데몬으로 업데이트하거나 롤백하려면 YAML 파일에서 이미지 태그를 업데이트하거나 다음 명령어를 직접 실행합니다.

    kubectl set image daemonset/diagon-daemon diagon-daemon=us-docker.pkg.dev/hypercomputediagon-release/daemon/diagon-daemon:v2.1.0 --namespace=kube-system
    

    배포 또는 업데이트 진행 상황을 확인하려면 출시 상태를 확인합니다.

    kubectl rollout status daemonset/diagon-daemon --namespace=kube-system
    

연산자 및 웹훅 설정

연산자 및 웹훅 설정에는 다음 옵션이 있습니다.

  • 1.35.0-gke.3065000 이후 버전의 GKE를 사용하는 경우 단일 gcloud CLI 명령어를 사용하거나, Google Cloud 콘솔을 통해, 또는 Terraform을 사용하여 ML 진단을 위한 GKE 클러스터를 설정할 수 있습니다.

  • 1.35.0-gke.3065000 이전의 GKE 버전 및 자체 관리형 Kubernetes의 경우 cert-manager, injection-webhook, connection-operator 아티팩트를 설치하도록 클러스터를 수동으로 구성해야 합니다. 자세한 내용은 수동 설치를 참조하세요.

GKE 클러스터에 Diagon DaemonSet과 함께 연산자와 웹훅을 배포합니다. 연산자와 웹훅을 이미 배포한 경우 삭제할 필요가 없습니다. 대신 연산자는 주문형 프로필 캡처의 대체 경로 역할을 하며, SDK를 사용하려면 여전히 웹훅이 필요합니다.

GKE 대신 자체 관리형 Kubernetes 환경을 사용하는 경우 SDK의 웹훅을 설치하고 Diagon DaemonSet를 배포합니다. 자체 관리형 Kubernetes 환경에서는 워크로드 모니터링이 작동하지 않습니다. SDK 측정항목, 프로그래매틱 프로파일링, 주문형 프로파일링, 지속적 프로파일링만 지원됩니다.

1.35.0-gke.3065000 이후 GKE 버전의 경우 다음 방법 중 하나를 사용하여 필요한 ML Diagnostics 구성요소(connection-operator 및 injection-webhook)를 GKE 클러스터에 배포합니다.

gcloud

새 GKE 클러스터의 경우:

gcloud beta container clusters create CLUSTER_NAME --enable-managed-mldiagnostics

기존 GKE 클러스터의 경우:

gcloud beta container clusters update CLUSTER_NAME --enable-managed-mldiagnostics

ML 진단을 사용 중지하려면 다음을 사용합니다.

gcloud beta container clusters update CLUSTER_NAME --no-enable-managed-mldiagnostics

ML 진단을 위해 GKE 클러스터를 설정하는 gcloud CLI 명령어에 대한 자세한 내용은 다음 API 참조 페이지의 enable-managed-mldiagnostics 플래그를 참고하세요.

콘솔

  • 새 GKE 클러스터의 경우 기능 관리자 > 관리형 머신러닝 진단으로 이동합니다.

    GKE 관리형 머신러닝 진단으로 이동

  • 기존 GKE 클러스터의 경우 클러스터로 이동하여 클러스터 이름을 선택하고 수정으로 이동한 후 기능에서 관리형 머신러닝 진단을 수정합니다.

Terraform

Terraform을 사용하여 GKE 인프라를 프로비저닝하는 경우 terraform-provider-google-beta 제공업체(버전 v7.28.0 이상) 또는 terraform-google-modules/kubernetes-engine/google 모듈(버전 v45.0.0 이상)을 사용할 수 있습니다.

Google Cloud Terraform 제공업체 사용

google_container_cluster 리소스를 사용하여 새 클러스터에서 관리형 ML 진단을 사용 설정하려면 google-beta 제공업체(버전 v7.28.0 이상)를 사용하여 enabled = true가 있는 managed_machine_learning_diagnostics_config 블록을 추가합니다.

terraform {
  required_providers {
    google-beta = {
      source  = "hashicorp/google-beta"
      version = ">= 7.28.0"
    }
  }
}

resource "google_container_cluster" "primary" {
  provider = google-beta
  name     = "CLUSTER_NAME"
  location = "LOCATION"

  # ... other cluster configuration ...

  managed_machine_learning_diagnostics_config {
    enabled = true
  }
}

Terraform 리소스를 사용하여 클러스터에서 관리형 ML 진단을 사용 중지하려면 managed_machine_learning_diagnostics_config 블록에서 enabled = false를 설정합니다.

resource "google_container_cluster" "primary" {
  provider = google-beta
  name     = "CLUSTER_NAME"
  location = "LOCATION"

  # ... other cluster configuration ...

  managed_machine_learning_diagnostics_config {
    enabled = false
  }
}

GKE Terraform 모듈 사용

terraform-google-modules/kubernetes-engine/google 모듈(예: beta-public-cluster 하위 모듈)을 사용하여 클러스터에서 관리형 ML 진단을 사용 설정하려면 enable_managed_machine_learning_diagnostics = true를 설정합니다.

module "gke" {
  source  = "terraform-google-modules/kubernetes-engine/google//modules/beta-public-cluster"
  version = ">= 45.0"

  project_id = "PROJECT_ID"
  name       = "CLUSTER_NAME"
  region     = "LOCATION"

  # ... other cluster configuration ...

  enable_managed_machine_learning_diagnostics = true
}

Terraform 모듈을 사용하여 클러스터에서 관리형 ML 진단을 사용 중지하려면 enable_managed_machine_learning_diagnostics = false를 설정합니다.

module "gke" {
  source  = "terraform-google-modules/kubernetes-engine/google//modules/beta-public-cluster"
  version = ">= 45.0"

  # ... other cluster configuration ...

  enable_managed_machine_learning_diagnostics = false
}

구성을 업데이트한 후 변경사항을 적용합니다.

terraform apply

GKE에서 Terraform을 사용하는 방법에 대한 자세한 내용은 GKE에 대한 Terraform 지원을 참조하세요.

수동 설치

1.35.0-gke.3065000 이전 GKE 버전의 경우 다음을 설치하도록 GKE 클러스터를 수동으로 구성해야 합니다.

  • cert-manager: injection-webhook의 기본 요건입니다.
  • injection-webhook: SDK에 필요한 메타데이터를 제공합니다. JobSet, RayJob, LeaderWorkerSet와 같은 일반적인 ML Kubernetes 워크로드를 지원합니다.
  • connection-operator: GKE의 주문형 프로파일링에 사용됩니다. connection-operator를 injection-webhook와 함께 GKE 클러스터에 배포하면 주문형 캡처를 트리거할 때 프로파일링 서버가 실행 중인 대상 포드에 대한 프로파일링 요청이 초기화됩니다.

GKE 클러스터 설정에 대한 자세한 내용은 GKE 클러스터 구성을 참조하세요.

Cert-manager

cert-manager 부가기능은 클러스터의 인증서 컨트롤러 역할을 하여 애플리케이션이 안전하고 인증서가 의도치 않게 만료되지 않도록 합니다.

Helm을 사용하여 다음을 설치합니다.

helm repo add jetstack https://charts.jetstack.io
helm repo update

helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.13.0 \
  --set installCRDs=true \
  --set global.leaderElection.namespace=cert-manager \
  --timeout 10m

Injection-webhook

injection-webhook Helm 차트는 메타데이터를 SDK에 전달합니다. helm upgrade --install를 사용하여 처음 설치하거나 기존 설치를 업그레이드합니다.

helm upgrade --install mldiagnostics-injection-webhook \
  --namespace=gke-mldiagnostics \
  --create-namespace \
  --version 0.25.0 \
  oci://us-docker.pkg.dev/ai-on-gke/mldiagnostics-webhook-and-operator-helm/mldiagnostics-injection-webhook

연결 연산자

connection-operator Helm 차트는 GKE에서 주문형 프로파일링을 사용 설정합니다. 다음 표를 사용하여 올바른 mldiagnostics-connection-operator 버전을 찾습니다.

JAX 버전 Helm 차트 버전
0.8.x 0.24.0
0.9.x+ 0.24.0+

Helm을 사용하여 필수 버전을 설치합니다.

JAX 0.8.x:

helm upgrade --install mldiagnostics-connection-operator \
  --namespace=gke-mldiagnostics \
  --create-namespace \
  --version 0.24.0 \
  oci://us-docker.pkg.dev/ai-on-gke/mldiagnostics-webhook-and-operator-helm/mldiagnostics-connection-operator \
  --set 'mldiagnosticsConnectionOperator.controller.args={--metrics-bind-address=:8443,--health-probe-bind-address=:8081,--sidecar-timeout=65m,--disable-hostname-override}'

JAX 0.9.x 이상:

helm upgrade --install mldiagnostics-connection-operator \
  --namespace=gke-mldiagnostics \
  --create-namespace \
  --version 0.24.0 \
  oci://us-docker.pkg.dev/ai-on-gke/mldiagnostics-webhook-and-operator-helm/mldiagnostics-connection-operator

워크로드 라벨 지정

프로그래매틱 프로파일링의 경우 injection-webhook를 트리거하여 메타데이터를 포드에 삽입해야 합니다. 워크로드를 배포하기 전에 워크로드 또는 네임스페이스에 managed-mldiagnostics-gke=true 라벨을 지정합니다.

  • 워크로드 라벨 지정: JobSet, LeaderWorkerSet 또는 RayJob 워크로드에 라벨을 지정하여 해당 워크로드에 대한 웹훅을 사용 설정합니다. 다음은 JobSet 워크로드의 예시입니다.

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: single-host-tpu-v3-jobset2
      namespace: default
      labels:
        managed-mldiagnostics-gke: "true"
    
  • 네임스페이스 라벨 지정: 해당 네임스페이스 내의 모든 JobSet, LeaderWorkerSet, RayJob 워크로드에 대해 웹훅을 사용 설정합니다.

    kubectl create namespace ai-workloads
    kubectl label namespace ai-workloads managed-mldiagnostics-gke=true